diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index a45d336f86..1736e8d78d 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -24,6 +24,9 @@ on: - '**/CMakeLists.txt' - 'version.inc' - ".github/workflows/build_*.yml" + - 'BuildLinux.sh' + - 'build_release_vs2022.bat' + - 'build_release_macos.sh' workflow_dispatch: # allows for manual dispatch inputs: @@ -55,4 +58,21 @@ jobs: os: ${{ matrix.os }} arch: ${{ matrix.arch }} build-deps-only: ${{ inputs.build-deps-only || false }} - secrets: inherit \ No newline at end of file + secrets: inherit + # flatpak: + # name: "Flatpak" + # runs-on: ubuntu-latest + # container: + # image: bilelmoussaoui/flatpak-github-actions:gnome-45 + # options: --privileged + # steps: + # # maybe i'm too dumb and fucked up to do CI. OH WELL :D -ppd + # - name: "Remove unneeded stuff to free disk space" + # run: + # sudo rm -rf /usr/share/dotnet /opt/ghc "/usr/local/share/boost" "$AGENT_TOOLSDIRECTORY" + # - uses: actions/checkout@v4 + # - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + # with: + # bundle: orcaslicer.flatpak + # manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml + # cache-key: flatpak-builder-${{ github.sha }} diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index b3f845a053..bd6d7f215b 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -28,13 +28,13 @@ jobs: env: date: steps: - + # Setup the environment - name: Checkout uses: actions/checkout@v4 with: lfs: 'true' - + - name: load cached deps uses: actions/cache@v4 with: @@ -49,13 +49,13 @@ jobs: if: inputs.os != 'windows-latest' run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV shell: bash - + - name: Get the date on Windows if: inputs.os == 'windows-latest' run: echo "date=$(Get-Date -Format 'yyyyMMdd')" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 shell: pwsh - + # Build Dependencies - name: Build on Windows if: inputs.os == 'windows-latest' @@ -98,8 +98,8 @@ jobs: ./BuildLinux.sh -dr cd deps/build tar -czvf OrcaSlicer_dep_ubuntu_$(date +"%Y%m%d").tar.gz destdir - - + + # Upload Artifacts - name: Upload Mac ${{ inputs.arch }} artifacts if: inputs.os == 'macos-12' @@ -116,12 +116,12 @@ jobs: path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip - name: Upload Ubuntu artifacts - if: inputs.os == 'ubuntu-20.04' + if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' }} uses: actions/upload-artifact@v4 with: name: OrcaSlicer_dep_ubuntu_${{ env.date }} path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz - + build_orca: name: Build OrcaSlicer needs: [build_deps] @@ -133,4 +133,3 @@ jobs: os: ${{ inputs.os }} arch: ${{ inputs.arch }} secrets: inherit - diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 2ab116a6bc..835db630f1 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -57,7 +57,7 @@ jobs: $ref = "${{ github.ref }}" $eventName = "${{ github.event_name }}" $prNumber = "${{ github.event.number }}" - + if ($eventName -eq 'pull_request') { $ver = "PR" + $prNumber } else { @@ -67,12 +67,12 @@ jobs: } $ver = "V$ver" } - + echo "ver=$ver" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date=$date" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date: ${{ env.date }} version: ${{ env.ver }}" shell: pwsh - + # Mac - name: Install tools mac if: inputs.os == 'macos-12' @@ -134,11 +134,11 @@ jobs: if: github.ref == 'refs/heads/main' && inputs.os == 'macos-12' uses: WebFreak001/deploy-nightly@v3.1.0 with: - upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 + upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 asset_path: ${{ github.workspace }}/OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg asset_name: OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg - asset_content_type: application/octet-stream + asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted # Windows @@ -174,7 +174,7 @@ jobs: working-directory: ${{ github.workspace }}/build/src/Release shell: cmd run: '"C:/Program Files/7-Zip/7z.exe" a -m0=lzma2 -mx9 Debug_PDB_${{ env.ver }}_for_developers_only.7z *.pdb' - + - name: Upload artifacts Win zip if: inputs.os == 'windows-latest' uses: actions/upload-artifact@v4 @@ -200,23 +200,23 @@ jobs: if: github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' uses: WebFreak001/deploy-nightly@v3.1.0 with: - upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 + upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 asset_path: ${{ github.workspace }}/build/OrcaSlicer_Windows_${{ env.ver }}_portable.zip asset_name: OrcaSlicer_Windows_${{ env.ver }}_portable.zip - asset_content_type: application/x-zip-compressed - max_releases: 1 + asset_content_type: application/x-zip-compressed + max_releases: 1 - name: Deploy Windows release installer if: github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' uses: WebFreak001/deploy-nightly@v3.1.0 with: - upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 + upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 asset_path: ${{ github.workspace }}/build/OrcaSlicer_Windows_Installer_${{ env.ver }}.exe asset_name: OrcaSlicer_Windows_Installer_${{ env.ver }}.exe asset_content_type: application/x-msdownload - max_releases: 1 + max_releases: 1 # Ubuntu - name: Install dependencies @@ -257,30 +257,30 @@ jobs: zip -r orca_custom_preset_tests.zip user/ - name: Upload artifacts Ubuntu - if: inputs.os == 'ubuntu-20.04' + if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' }} uses: actions/upload-artifact@v4 with: name: OrcaSlicer_Linux_${{ env.ver }} path: './build/OrcaSlicer_Linux_${{ env.ver }}.AppImage' - name: Deploy Ubuntu release - if: github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' + if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' }} uses: WebFreak001/deploy-nightly@v3.1.0 with: - upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 + upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 asset_path: ./build/OrcaSlicer_Linux_${{ env.ver }}.AppImage asset_name: OrcaSlicer_Linux_${{ env.ver }}.AppImage asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - name: Deploy orca_custom_preset_tests - if: github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' + if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' }} uses: WebFreak001/deploy-nightly@v3.1.0 with: - upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} - release_id: 137995723 + upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 asset_path: ${{ github.workspace }}/resources/profiles/orca_custom_preset_tests.zip asset_name: orca_custom_preset_tests.zip asset_content_type: application/octet-stream - max_releases: 1 + max_releases: 1 diff --git a/.github/workflows/publish_docs_to_wiki.yml b/.github/workflows/publish_docs_to_wiki.yml index 4c78bbb4e2..6c2ee266ce 100644 --- a/.github/workflows/publish_docs_to_wiki.yml +++ b/.github/workflows/publish_docs_to_wiki.yml @@ -16,6 +16,7 @@ env: jobs: publish_docs_to_wiki: + if: ${{ !env.ACT }} # Skip if using `act` name: Publish docs to Wiki runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index 4ec8a2075e..df5239095e 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,5 @@ src/OrcaSlicer-doc/ **/filament_full/ /deps/DL_CACHE/ /deps/DL_CACHE -resources/profiles/user/default \ No newline at end of file +**/.flatpak-builder/ +resources/profiles/user/default diff --git a/BuildLinux.sh b/BuildLinux.sh index 772617aaf3..f60e5c5f34 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -1,15 +1,11 @@ #!/bin/bash -export ROOT=`pwd` -export NCORES=`nproc --all` -export CMAKE_BUILD_PARALLEL_LEVEL=${NCORES} -FOUND_GTK2=$(dpkg -l libgtk* | grep gtk2) -FOUND_GTK3=$(dpkg -l libgtk* | grep gtk-3) +export ROOT=$(dirname $(readlink -f ${0})) set -e # exit on first error function check_available_memory_and_disk() { - FREE_MEM_GB=$(free -g -t | grep 'Mem:' | rev | cut -d" " -f1 | rev) + FREE_MEM_GB=$(free -g -t | grep 'Mem' | rev | cut -d" " -f1 | rev) MIN_MEM_GB=10 FREE_DISK_KB=$(df -k . | tail -1 | awk '{print $4}') @@ -21,238 +17,172 @@ function check_available_memory_and_disk() { exit 2 fi - if [[ ${FREE_DISK_KB} -le ${MIN_DISK_KB} ]]; then - echo -e "\nERROR: Orca Slicer Builder requires at least $(echo $MIN_DISK_KB |awk '{ printf "%.1fG\n", $1/1024/1024; }') (systen has only $(echo ${FREE_DISK_KB} | awk '{ printf "%.1fG\n", $1/1024/1024; }') disk free)" + if [[ ${FREE_DISK_KB} -le ${MIN_DISK_KB} ]]; then + echo -e "\nERROR: Orca Slicer Builder requires at least $(echo ${MIN_DISK_KB} |awk '{ printf "%.1fG\n", $1/1024/1024; }') (systen has only $(echo ${FREE_DISK_KB} | awk '{ printf "%.1fG\n", $1/1024/1024; }') disk free)" echo && df -h . && echo exit 1 fi } function usage() { - echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" - echo " -i: Generate appimage (optional)" - echo " -g: force gtk2 build" + echo "Usage: ./BuildLinux.sh [-1][-b][-c][-d][-i][-r][-s][-u]" + echo " -1: limit builds to 1 core (where possible)" echo " -b: build in debug mode" + echo " -c: force a clean build" echo " -d: build deps (optional)" + echo " -h: this help output" + echo " -i: Generate appimage (optional)" + echo " -r: skip ram and disk checks (low ram compiling)" echo " -s: build orca-slicer (optional)" - echo " -u: only update clock & dependency packets (optional and need sudo)" - echo " -r: skip free ram check (low ram compiling)" + echo " -u: update and build dependencies (optional and need sudo)" echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'" echo " and then './BuildLinux.sh -dsi'" } unset name -while getopts ":dsiuhgbr" opt; do +while getopts ":1bcdghirsu" opt; do case ${opt} in - u ) - UPDATE_LIB="1" - ;; - i ) - BUILD_IMAGE="1" - ;; - d ) - BUILD_DEPS="1" - ;; - s ) - BUILD_ORCA="1" + 1 ) + export CMAKE_BUILD_PARALLEL_LEVEL=1 ;; b ) BUILD_DEBUG="1" ;; - g ) - FOUND_GTK3="" + c ) + CLEAN_BUILD=1 + ;; + d ) + BUILD_DEPS="1" ;; - r ) - SKIP_RAM_CHECK="1" - ;; h ) usage exit 0 ;; + i ) + BUILD_IMAGE="1" + ;; + r ) + SKIP_RAM_CHECK="1" + ;; + s ) + BUILD_ORCA="1" + ;; + u ) + UPDATE_LIB="1" + ;; esac done -if [ $OPTIND -eq 1 ] +if [ ${OPTIND} -eq 1 ] then usage exit 0 fi -# Addtional Dev packages for OrcaSlicer -export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules texinfo" -# libwebkit2gtk-4.1-dev ?? -export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w) -if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then - sudo apt install -y ${REQUIRED_DEV_PACKAGES} git cmake wget file gettext -fi - -#FIXME: require root for -u option -if [[ -n "$UPDATE_LIB" ]] +DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release) +# treat ubuntu as debian +if [ "${DISTRIBUTION}" == "ubuntu" ] then - echo -n -e "Updating linux ...\n" - # hwclock -s # DeftDawg: Why does SuperSlicer want to do this? - apt update - if [[ -z "$FOUND_GTK3" ]] - then - echo -e "\nInstalling: libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n" - apt install -y libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git - else - echo -e "\nFind libgtk-3, installing: libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n" - apt install -y libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git - fi - # for ubuntu 22+ and 23+: - ubu_major_version="$(grep VERSION_ID /etc/os-release | cut -d "=" -f 2 | cut -d "." -f 1 | tr -d /\"/)" - if [ $ubu_major_version == "22" ] || [ $ubu_major_version == "23" ] - then - apt install -y curl libfuse-dev libssl-dev libcurl4-openssl-dev m4 - fi - if [[ -n "$BUILD_DEBUG" ]] - then - echo -e "\nInstalling: libssl-dev libcurl4-openssl-dev\n" - apt install -y libssl-dev libcurl4-openssl-dev - fi - echo -e "done\n" - exit 0 + DISTRIBUTION="debian" fi - -FOUND_GTK2_DEV=$(dpkg -l libgtk* | grep gtk2.0-dev || echo '') -FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '') -echo "FOUND_GTK2=$FOUND_GTK2)" -if [[ -z "$FOUND_GTK2_DEV" ]] +if [ ! -f ./linux.d/${DISTRIBUTION} ] then -if [[ -z "$FOUND_GTK3_DEV" ]] + echo "Your distribution does not appear to be currently supported by these build scripts" + exit 1 +fi +source ./linux.d/${DISTRIBUTION} + +echo "FOUND_GTK3=${FOUND_GTK3}" +if [[ -z "${FOUND_GTK3_DEV}" ]] then echo "Error, you must install the dependencies before." echo "Use option -u with sudo" - exit 0 -fi + exit 1 fi -echo "[1/9] Updating submodules..." -{ - # update submodule profiles - pushd resources/profiles - git submodule update --init - popd -} - -echo "[2/9] Changing date in version..." +echo "Changing date in version..." { # change date in version sed -i "s/+UNKNOWN/_$(date '+%F')/" version.inc } echo "done" -# mkdir in deps -if [ ! -d "deps/build" ] + +if ! [[ -n "${SKIP_RAM_CHECK}" ]] then - mkdir deps/build + check_available_memory_and_disk fi -if ! [[ -n "$SKIP_RAM_CHECK" ]] +if [[ -n "${BUILD_DEPS}" ]] then -check_available_memory_and_disk -fi - -if [[ -n "$BUILD_DEPS" ]] -then - echo "[3/9] Configuring dependencies..." - BUILD_ARGS="" - if [[ -n "$FOUND_GTK3_DEV" ]] + echo "Configuring dependencies..." + BUILD_ARGS="-DDEP_WX_GTK3=ON" + if [[ -n "${CLEAN_BUILD}" ]] then - BUILD_ARGS="-DDEP_WX_GTK3=ON" + rm -fr deps/build fi - if [[ -n "$BUILD_DEBUG" ]] + if [ ! -d "deps/build" ] + then + mkdir deps/build + fi + if [[ -n "${BUILD_DEBUG}" ]] then # have to build deps with debug & release or the cmake won't find everything it needs mkdir deps/build/release - pushd deps/build/release - echo -e "cmake ../.. -DDESTDIR=\"../destdir\" $BUILD_ARGS" - cmake ../.. -DDESTDIR="../destdir" $BUILD_ARGS - make -j$NCORES - popd + cmake -S deps -B deps/build/release -G Ninja -DDESTDIR="../destdir" ${BUILD_ARGS} + cmake --build deps/build/release BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" fi - - # cmake deps - pushd deps/build - echo "cmake .. $BUILD_ARGS" - cmake .. $BUILD_ARGS - echo "done" - - # make deps - echo "[4/9] Building dependencies..." - make deps -j$NCORES - echo "done" - # rename wxscintilla # TODO: DeftDawg: Does OrcaSlicer need this? - # echo "[5/9] Renaming wxscintilla library..." - # pushd destdir/usr/local/lib - # if [[ -z "$FOUND_GTK3_DEV" ]] - # then - # cp libwxscintilla-3.1.a libwx_gtk2u_scintilla-3.1.a - # else - # cp libwxscintilla-3.1.a libwx_gtk3u_scintilla-3.1.a - # fi - # popd - # echo "done" - - # FIXME: only clean deps if compiling succeeds; otherwise reruns waste tonnes of time! - # clean deps - # echo "[6/9] Cleaning dependencies..." - # rm -rf dep_* - popd - echo "done" + echo "cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS}" + cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS} + cmake --build deps/build fi -# Create main "build" directory -if [ ! -d "build" ] -then - mkdir build -fi -if [[ -n "$BUILD_ORCA" ]] +if [[ -n "${BUILD_ORCA}" ]] then - echo "[7/9] Configuring Slic3r..." + echo "Configuring OrcaSlicer..." + if [[ -n "${CLEAN_BUILD}" ]] + then + rm -fr build + fi BUILD_ARGS="" - if [[ -n "$FOUND_GTK3_DEV" ]] + if [[ -n "${FOUND_GTK3_DEV}" ]] then BUILD_ARGS="-DSLIC3R_GTK=3" fi - if [[ -n "$BUILD_DEBUG" ]] + if [[ -n "${BUILD_DEBUG}" ]] then BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug -DBBL_INTERNAL_TESTING=1" else BUILD_ARGS="${BUILD_ARGS} -DBBL_RELEASE_TO_PUBLIC=1 -DBBL_INTERNAL_TESTING=0" fi - - # cmake - pushd build - echo -e "cmake .. -DCMAKE_PREFIX_PATH=\"$PWD/../deps/build/destdir/usr/local\" -DSLIC3R_STATIC=1 -DORCA_TOOLS=ON ${BUILD_ARGS}" - cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS} -DORCA_TOOLS=ON - echo "done" - - # make Slic3r - echo "[8/9] Building Slic3r..." - make -j$NCORES OrcaSlicer # Slic3r - - # make OrcaSlicer_profile_validator - make -j$NCORES OrcaSlicer_profile_validator - popd + echo -e "cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH="${PWD}/deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS}" + cmake -S . -B build -G Ninja \ + -DCMAKE_PREFIX_PATH="${PWD}/deps/build/destdir/usr/local" \ + -DSLIC3R_STATIC=1 \ + -DORCA_TOOLS=ON \ + ${BUILD_ARGS} + echo "done" + echo "Building OrcaSlicer ..." + cmake --build build --target OrcaSlicer + echo "Building OrcaSlicer_profile_validator .." + cmake --build build --target OrcaSlicer_profile_validator ./run_gettext.sh echo "done" fi -if [[ -e $ROOT/build/src/BuildLinuxImage.sh ]]; then +if [[ -e ${ROOT}/build/src/BuildLinuxImage.sh ]]; then # Give proper permissions to script -chmod 755 $ROOT/build/src/BuildLinuxImage.sh +chmod 755 ${ROOT}/build/src/BuildLinuxImage.sh echo "[9/9] Generating Linux app..." pushd build - if [[ -n "$BUILD_IMAGE" ]] + if [[ -n "${BUILD_IMAGE}" ]] then - $ROOT/build/src/BuildLinuxImage.sh -i + ${ROOT}/build/src/BuildLinuxImage.sh -i else - $ROOT/build/src/BuildLinuxImage.sh + ${ROOT}/build/src/BuildLinuxImage.sh fi popd echo "done" diff --git a/CMakeLists.txt b/CMakeLists.txt index d0cec2845e..8854ab903d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -271,9 +271,18 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 # We will turn the warning of for GCC for now: if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 + # We will turn the warning of for GCC for now: add_compile_options(-Wno-unknown-pragmas) endif() + # Bit of a hack for flatpak building: compress the debug info with zstd to save space in CI + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 13.0) + add_compile_options(-gz=zstd) + endif() + endif() if (SLIC3R_ASAN) @@ -382,9 +391,7 @@ endif() # set(Boost_COMPILER "-mgw81") # boost::process was introduced first in version 1.64.0, # boost::beast::detail::base64 was introduced first in version 1.66.0 -set(MINIMUM_BOOST_VERSION "1.66.0") -set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time;iostreams;program_options") -find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS ${_boost_components}) +find_package(Boost 1.66 REQUIRED COMPONENTS system filesystem thread log locale regex chrono atomic date_time iostreams program_options) add_library(boost_libs INTERFACE) add_library(boost_headeronly INTERFACE) @@ -410,28 +417,8 @@ function(slic3r_remap_configs targets from_Cfg to_Cfg) endif() endfunction() -if(TARGET Boost::system) - message(STATUS "Boost::boost exists") - target_link_libraries(boost_headeronly INTERFACE Boost::boost) - - # Only from cmake 3.12 - # list(TRANSFORM _boost_components PREPEND Boost:: OUTPUT_VARIABLE _boost_targets) - set(_boost_targets "") - foreach(comp ${_boost_components}) - list(APPEND _boost_targets "Boost::${comp}") - endforeach() - - target_link_libraries(boost_libs INTERFACE - boost_headeronly # includes the custom compile definitions as well - ${_boost_targets} - ) - slic3r_remap_configs("${_boost_targets}" RelWithDebInfo Release) -else() - target_include_directories(boost_headeronly INTERFACE ${Boost_INCLUDE_DIRS}) - target_link_libraries(boost_libs INTERFACE boost_headeronly ${Boost_LIBRARIES}) -endif() - - +target_include_directories(boost_headeronly INTERFACE ${Boost_INCLUDE_DIRS}) +target_link_libraries(boost_libs INTERFACE boost_headeronly ${Boost_LIBRARIES}) # Find and configure intel-tbb if(SLIC3R_STATIC) diff --git a/DockerRun.sh b/DockerRun.sh index da49bd3e61..c06628e6be 100755 --- a/DockerRun.sh +++ b/DockerRun.sh @@ -20,6 +20,8 @@ docker run \ --privileged=true \ `# Attach tty for running orca slicer with command line things` \ -ti \ + `# Clean up after yourself` \ + --rm \ `# Pass all parameters from this script to the orca slicer ENTRYPOINT binary` \ orcaslicer $* diff --git a/Dockerfile b/Dockerfile index befcc33de4..868779b0af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,7 @@ RUN apt-get update && apt-get install -y \ libsoup2.4-dev \ libssl3 \ libssl-dev \ + libtool \ libudev-dev \ libwayland-dev \ libwebkit2gtk-4.0-dev \ @@ -67,9 +68,8 @@ WORKDIR OrcaSlicer RUN ./BuildLinux.sh -u # Build dependencies in ./deps -RUN ./BuildLinux.sh -d; exit 0 +RUN ./BuildLinux.sh -d -RUN apt-get install -y libcgal-dev # Build slic3r RUN ./BuildLinux.sh -s diff --git a/README.md b/README.md index 88bae970bf..855503c1ef 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ Support me [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G5IP3CP) ## Some background -OrcaSlicer is originaly forked from Bambu Studio, it was previously known as BambuStudio-SoftFever. +OrcaSlicer is originally forked from 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 diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in index f453a8a844..2f010c8a82 100644 --- a/cmake/modules/MacOSXBundleInfo.plist.in +++ b/cmake/modules/MacOSXBundleInfo.plist.in @@ -26,17 +26,19 @@ ???? CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} + ATSApplicationFontsPath + fonts/ CFBundleURLTypes - - - CFBundleURLName - orcasliceropen url - CFBundleURLSchemes - - orcasliceropen - - - + + + CFBundleURLName + OrcaSlicer Downloads + CFBundleURLSchemes + + orcaslicer + + + CFBundleDocumentTypes diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 02a07ffd3b..4bd3470d44 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -42,6 +42,10 @@ endif () set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory") set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/../DL_CACHE CACHE PATH "Path for downloaded source packages.") +set(FLATPAK FALSE CACHE BOOL "Toggles various build settings for flatpak, like /usr/local in DESTDIR or not building wxwidgets") +if (NOT FLATPAK) + set(DESTDIR "${DESTDIR}/usr/local/") +endif() get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -120,13 +124,13 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE) ExternalProject_Add( dep_${projectname} EXCLUDE_FROM_ALL ON - INSTALL_DIR ${DESTDIR}/usr/local + INSTALL_DIR ${DESTDIR} DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname} ${_gen} CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local + -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR} -DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules - -DCMAKE_PREFIX_PATH:STRING=${DESTDIR}/usr/local + -DCMAKE_PREFIX_PATH:STRING=${DESTDIR} -DCMAKE_DEBUG_POSTFIX:STRING=d -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} @@ -140,16 +144,26 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE) BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j} INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release ) -else() +elseif(FLATPAK) + # the only reason this is here is because of the HACK at the bottom for ci + # + # note for future devs: shared libs may actually create a size reduction + # but orcaslicer_deps tends to get really funny regarding linking after that (notably boost) + # so, as much as I would like to use that, it's not happening ExternalProject_Add( dep_${projectname} EXCLUDE_FROM_ALL ON - INSTALL_DIR ${DESTDIR}/usr/local + INSTALL_DIR ${DESTDIR} DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname} ${_gen} CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local - -DCMAKE_PREFIX_PATH:STRING=${DESTDIR}/usr/local + -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR} + -DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules + -DCMAKE_PREFIX_PATH:STRING=${DESTDIR} + -DCMAKE_DEBUG_POSTFIX:STRING=d + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} + -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} -DBUILD_SHARED_LIBS:BOOL=OFF ${_cmake_osx_arch} "${_configs_line}" @@ -158,6 +172,29 @@ else() ${P_ARGS_UNPARSED_ARGUMENTS} BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j} INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release + # HACK: save space after each compile job, because CI + # reasoning: cmake changes directory after this command, so just keep only the folders + # so that it can navigate out + COMMAND find "${CMAKE_BINARY_DIR}/dep_${projectname}-prefix/" -type f -delete + ) +else() + ExternalProject_Add( + dep_${projectname} + EXCLUDE_FROM_ALL ON + INSTALL_DIR ${DESTDIR} + DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname} + ${_gen} + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR} + -DCMAKE_PREFIX_PATH:STRING=${DESTDIR} + -DBUILD_SHARED_LIBS:BOOL=OFF + ${_cmake_osx_arch} + "${_configs_line}" + ${DEP_CMAKE_OPTS} + ${P_ARGS_CMAKE_ARGS} + ${P_ARGS_UNPARSED_ARGUMENTS} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j} + INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release ) endif() @@ -203,6 +240,20 @@ else() include("deps-linux.cmake") endif() +if(FLATPAK) + # flatpak bundles some deps with the layer, so attempt to find them first + # also, yes, this reduces CI by not needing to vendor certain deps + find_package(ZLIB) + find_package(PNG) + find_package(EXPAT) + find_package(CURL) + find_package(JPEG) + find_package(TIFF) + find_package(Freetype) + find_package(OpenSSL 1.1...<3.2) + find_package(CURL) +endif() + set(ZLIB_PKG "") if (NOT ZLIB_FOUND) include(ZLIB/ZLIB.cmake) @@ -214,6 +265,7 @@ if (NOT PNG_FOUND) set(PNG_PKG dep_PNG) endif () set(EXPAT_PKG "") +find_package(EXPAT) if (NOT EXPAT_FOUND) include(EXPAT/EXPAT.cmake) set(EXPAT_PKG dep_EXPAT) @@ -226,6 +278,7 @@ include(Boost/Boost.cmake) include(Cereal/Cereal.cmake) include(Qhull/Qhull.cmake) include(GLEW/GLEW.cmake) + include(GLFW/GLFW.cmake) include(OpenCSG/OpenCSG.cmake) @@ -241,32 +294,69 @@ include(CGAL/CGAL.cmake) include(NLopt/NLopt.cmake) -include(OpenSSL/OpenSSL.cmake) +# I *think* 1.1 is used for *just* md5 hashing? +# 3.1 has everything in the right place, but the md5 funcs used are deprecated +# a grep across the repo shows it is used for other things +# TODO: update openssl and everything that uses +set(OPENSSL_PKG "") +if(NOT OPENSSL_FOUND) + include(OpenSSL/OpenSSL.cmake) + set(OPENSSL_PKG dep_OpenSSL) +endif() + +# we don't want to load a "wrong" openssl when loading curl +# so, just don't even bother +# ...i think this is how it works? change if wrong set(CURL_PKG "") -if (NOT CURL_FOUND) +if (NOT OPENSSL_FOUND OR NOT CURL_FOUND) include(CURL/CURL.cmake) set(CURL_PKG dep_CURL) endif () -include(JPEG/JPEG.cmake) -include(TIFF/TIFF.cmake) -include(wxWidgets/wxWidgets.cmake) +set(JPEG_PKG "") +if (NOT JPEG_FOUND) + include(JPEG/JPEG.cmake) + set(JPEG_PKG dep_JPEG) +endif() + +set(TIFF_PKG "") +if (NOT TIFF_FOUND) + include(TIFF/TIFF.cmake) + set(TIFF_PKG "dep_TIFF") +endif() + +# flatpak builds wxwidgets separately +set(WXWIDGETS_PKG "") +if (NOT FLATPAK) + include(wxWidgets/wxWidgets.cmake) + set(WXWIDGETS_PKG "dep_wxWidgets") +endif() + +set(FREETYPE_PKG "") +if(NOT FREETYPE_FOUND) + include(FREETYPE/FREETYPE.cmake) + set(FREETYPE_PKG "dep_FREETYPE") +endif() + include(OCCT/OCCT.cmake) -include(FREETYPE/FREETYPE.cmake) +include(OpenCV/OpenCV.cmake) set(_dep_list dep_Boost dep_TBB + ${OPENSSL_PKG} ${CURL_PKG} - dep_wxWidgets + ${WXWIDGETS_PKG} dep_Cereal dep_NLopt dep_OpenVDB dep_OpenCSG + dep_OpenCV dep_CGAL - dep_OpenSSL dep_GLFW + dep_OCCT + ${FREETYPE_PKG} ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} @@ -281,9 +371,6 @@ else() #list(APPEND _dep_list "dep_libigl") endif() -list(APPEND _dep_list "dep_OCCT") -list(APPEND _dep_list "dep_FREETYPE") - add_custom_target(deps ALL DEPENDS ${_dep_list}) # Note: I'm not using any of the LOG_xxx options in ExternalProject_Add() commands diff --git a/deps/CURL/CURL.cmake b/deps/CURL/CURL.cmake index 9846c7c9c6..a5ae1b9d00 100644 --- a/deps/CURL/CURL.cmake +++ b/deps/CURL/CURL.cmake @@ -72,9 +72,10 @@ orcaslicer_add_cmake_project(CURL ${_curl_platform_flags} ) -# if (APPLE OR (CMAKE_SYSTEM_NAME STREQUAL "Linux")) - add_dependencies(dep_CURL dep_OpenSSL) -# endif () +if(NOT OPENSSL_FOUND) + # (openssl may or may not be built) + add_dependencies(dep_CURL ${OPENSSL_PKG}) +endif() if (MSVC) add_debug_dep(dep_CURL) diff --git a/deps/GMP/GMP.cmake b/deps/GMP/GMP.cmake index 8629f834fa..4f79a65731 100644 --- a/deps/GMP/GMP.cmake +++ b/deps/GMP/GMP.cmake @@ -1,17 +1,16 @@ set(_srcdir ${CMAKE_CURRENT_LIST_DIR}/gmp) -set(_dstdir ${DESTDIR}/usr/local) if (MSVC) - set(_output ${_dstdir}/include/gmp.h - ${_dstdir}/lib/libgmp-10.lib - ${_dstdir}/bin/libgmp-10.dll) + set(_output ${DESTDIR}/include/gmp.h + ${DESTDIR}/lib/libgmp-10.lib + ${DESTDIR}/bin/libgmp-10.dll) add_custom_command( OUTPUT ${_output} - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/include/gmp.h ${_dstdir}/include/ - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libgmp-10.lib ${_dstdir}/lib/ - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libgmp-10.dll ${_dstdir}/bin/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/include/gmp.h ${DESTDIR}/include/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libgmp-10.lib ${DESTDIR}/lib/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libgmp-10.dll ${DESTDIR}/bin/ ) add_custom_target(dep_GMP SOURCES ${_output}) @@ -61,8 +60,8 @@ else () URL_HASH SHA256=eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c 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} + CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}" ${_gmp_build_tgt} BUILD_COMMAND make -j INSTALL_COMMAND make install ) -endif () \ No newline at end of file +endif () diff --git a/deps/MPFR/MPFR.cmake b/deps/MPFR/MPFR.cmake index 30ceca90b3..1161a1ca6e 100644 --- a/deps/MPFR/MPFR.cmake +++ b/deps/MPFR/MPFR.cmake @@ -1,18 +1,17 @@ set(_srcdir ${CMAKE_CURRENT_LIST_DIR}/mpfr) -set(_dstdir ${DESTDIR}/usr/local) if (MSVC) - set(_output ${_dstdir}/include/mpfr.h - ${_dstdir}/include/mpf2mpfr.h - ${_dstdir}/lib/libmpfr-4.lib - ${_dstdir}/bin/libmpfr-4.dll) + set(_output ${DESTDIR}/include/mpfr.h + ${DESTDIR}/include/mpf2mpfr.h + ${DESTDIR}/lib/libmpfr-4.lib + ${DESTDIR}/bin/libmpfr-4.dll) add_custom_command( OUTPUT ${_output} - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/include/mpfr.h ${_dstdir}/include/ - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/include/mpf2mpfr.h ${_dstdir}/include/ - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libmpfr-4.lib ${_dstdir}/lib/ - COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libmpfr-4.dll ${_dstdir}/bin/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/include/mpfr.h ${DESTDIR}/include/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/include/mpf2mpfr.h ${DESTDIR}/include/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libmpfr-4.lib ${DESTDIR}/lib/ + COMMAND ${CMAKE_COMMAND} -E copy ${_srcdir}/lib/win${DEPS_BITS}/libmpfr-4.dll ${DESTDIR}/bin/ ) add_custom_target(dep_MPFR SOURCES ${_output}) @@ -31,7 +30,7 @@ else () DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/MPFR BUILD_IN_SOURCE ON CONFIGURE_COMMAND autoreconf -f -i && - env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --prefix=${DESTDIR}/usr/local --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR}/usr/local ${_gmp_build_tgt} + env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --prefix=${DESTDIR} --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR} ${_gmp_build_tgt} BUILD_COMMAND make -j INSTALL_COMMAND make install DEPENDS dep_GMP diff --git a/deps/OCCT/OCCT.cmake b/deps/OCCT/OCCT.cmake index 541412b1ca..651e40ec83 100644 --- a/deps/OCCT/OCCT.cmake +++ b/deps/OCCT/OCCT.cmake @@ -14,7 +14,7 @@ orcaslicer_add_cmake_project(OCCT #PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch PATCH_COMMAND git apply --directory ${BINARY_DIR_REL}/dep_OCCT-prefix/src/dep_OCCT --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch #DEPENDS dep_Boost - #DEPENDS dep_FREETYPE + DEPENDS ${FREETYPE_PKG} CMAKE_ARGS -DBUILD_LIBRARY_TYPE=${library_build_type} -DUSE_TK=OFF @@ -31,4 +31,4 @@ orcaslicer_add_cmake_project(OCCT -DBUILD_MODULE_Visualization=OFF ) -add_dependencies(dep_OCCT dep_FREETYPE) +# add_dependencies(dep_OCCT ${FREETYPE_PKG}) diff --git a/deps/OpenCV/0001-vs2022.patch b/deps/OpenCV/0001-vs2022.patch new file mode 100644 index 0000000000..6e5aba84e8 --- /dev/null +++ b/deps/OpenCV/0001-vs2022.patch @@ -0,0 +1,52 @@ +From 6fb3f6333150a777e835fc7c48e49750591bf7fe Mon Sep 17 00:00:00 2001 +From: Benjamin Buch +Date: Thu, 23 May 2024 16:05:19 +0200 +Subject: [PATCH] Support VS 2022 17.1x.y + +With 17.10.0 the MSVC toolset was set to 19.40.x which breaks the compatibility test in the OpenCV's CMake Config files. +--- + cmake/templates/OpenCVConfig.root-WIN32.cmake.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/templates/OpenCVConfig.root-WIN32.cmake.in b/cmake/templates/OpenCVConfig.root-WIN32.cmake.in +index b0f254ebe8..62e36272f3 100644 +--- a/cmake/templates/OpenCVConfig.root-WIN32.cmake.in ++++ b/cmake/templates/OpenCVConfig.root-WIN32.cmake.in +@@ -137,7 +137,7 @@ elseif(MSVC) + set(OpenCV_RUNTIME vc14) # selecting previous compatible runtime version + endif() + endif() +- elseif(MSVC_VERSION MATCHES "^193[0-9]$") ++ elseif(MSVC_VERSION MATCHES "^19[34][0-9]$") + set(OpenCV_RUNTIME vc17) + check_one_config(has_VS2022) + if(NOT has_VS2022) +-- +2.45.2.windows.1 + +From f85818ba6f9031c450475a7453dee0acce31a881 Mon Sep 17 00:00:00 2001 +From: Benjamin Buch +Date: Fri, 24 May 2024 11:10:09 +0200 +Subject: [PATCH] Support VS 2022 17.1x.y in OpenCVDetectCXXCompiler.cmake + +With 17.10.0 the MSVC toolset was set to 19.40.x which breaks the compatibility test in the OpenCV's CMake Config files. +--- + cmake/OpenCVDetectCXXCompiler.cmake | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cmake/OpenCVDetectCXXCompiler.cmake b/cmake/OpenCVDetectCXXCompiler.cmake +index 1743aca11f..448afd46ea 100644 +--- a/cmake/OpenCVDetectCXXCompiler.cmake ++++ b/cmake/OpenCVDetectCXXCompiler.cmake +@@ -176,7 +176,7 @@ elseif(MSVC) + set(OpenCV_RUNTIME vc15) + elseif(MSVC_VERSION MATCHES "^192[0-9]$") + set(OpenCV_RUNTIME vc16) +- elseif(MSVC_VERSION MATCHES "^193[0-9]$") ++ elseif(MSVC_VERSION MATCHES "^19[34][0-9]$") + set(OpenCV_RUNTIME vc17) + else() + message(WARNING "OpenCV does not recognize MSVC_VERSION \"${MSVC_VERSION}\". Cannot set OpenCV_RUNTIME") +-- +2.45.2.windows.1 + diff --git a/deps/OpenCV/OpenCV.cmake b/deps/OpenCV/OpenCV.cmake new file mode 100644 index 0000000000..6d62b018af --- /dev/null +++ b/deps/OpenCV/OpenCV.cmake @@ -0,0 +1,73 @@ +if (MSVC) + set(_use_IPP "-DWITH_IPP=ON") +else () + set(_use_IPP "-DWITH_IPP=OFF") +endif () + +orcaslicer_add_cmake_project(OpenCV + URL https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz + URL_HASH SHA256=1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277 + PATCH_COMMAND git apply --directory ${BINARY_DIR_REL}/dep_OpenCV-prefix/src/dep_OpenCV --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-vs2022.patch + CMAKE_ARGS + -DBUILD_SHARED_LIBS=0 + -DBUILD_PERE_TESTS=OFF + -DBUILD_TESTS=OFF + -DBUILD_opencv_python_tests=OFF + -DBUILD_EXAMPLES=OFF + -DBUILD_JASPER=OFF + -DBUILD_JAVA=OFF + -DBUILD_JPEG=ON + -DBUILD_APPS_LIST=version + -DBUILD_opencv_apps=OFF + -DBUILD_opencv_java=OFF + -DBUILD_OPENEXR=OFF + -DBUILD_PNG=ON + -DBUILD_TBB=OFF + -DBUILD_WEBP=OFF + -DBUILD_ZLIB=OFF + -DWITH_1394=OFF + -DWITH_CUDA=OFF + -DWITH_EIGEN=OFF + ${_use_IPP} + -DWITH_ITT=OFF + -DWITH_FFMPEG=OFF + -DWITH_GPHOTO2=OFF + -DWITH_GSTREAMER=OFF + -DOPENCV_GAPI_GSTREAMER=OFF + -DWITH_GTK_2_X=OFF + -DWITH_JASPER=OFF + -DWITH_LAPACK=OFF + -DWITH_MATLAB=OFF + -DWITH_MFX=OFF + -DWITH_DIRECTX=OFF + -DWITH_DIRECTML=OFF + -DWITH_OPENCL=OFF + -DWITH_OPENCL_D3D11_NV=OFF + -DWITH_OPENCLAMDBLAS=OFF + -DWITH_OPENCLAMDFFT=OFF + -DWITH_OPENEXR=OFF + -DWITH_OPENJPEG=OFF + -DWITH_QUIRC=OFF + -DWITH_VTK=OFF + -DWITH_WEBP=OFF + -DENABLE_PRECOMPILED_HEADERS=OFF + -DINSTALL_TESTS=OFF + -DINSTALL_C_EXAMPLES=OFF + -DINSTALL_PYTHON_EXAMPLES=OFF + -DOPENCV_GENERATE_SETUPVARS=OFF + -DOPENCV_INSTALL_FFMPEG_DOWNLOAD_SCRIPT=OFF + -DBUILD_opencv_python2=OFF + -DBUILD_opencv_python3=OFF + -DWITH_OPENVINO=OFF + -DWITH_INF_ENGINE=OFF + -DWITH_NGRAPH=OFF + -DBUILD_WITH_STATIC_CRT=OFF#set /MDd /MD + -DBUILD_LIST=core,imgcodecs,imgproc,world + -DBUILD_opencv_highgui=OFF + -DWITH_ADE=OFF + -DBUILD_opencv_world=ON + -DWITH_PROTOBUF=OFF + -DWITH_WIN32UI=OFF + -DHAVE_WIN32UI=FALSE +) + diff --git a/deps/OpenEXR/OpenEXR.cmake b/deps/OpenEXR/OpenEXR.cmake index 6aea12b1f2..dd754d3a38 100644 --- a/deps/OpenEXR/OpenEXR.cmake +++ b/deps/OpenEXR/OpenEXR.cmake @@ -15,11 +15,11 @@ if (APPLE AND IS_CROSS_COMPILE) 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 + INSTALL_DIR ${DESTDIR} DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/OpenEXR ${_openxr_list_sep} CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local + -DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_TESTING=OFF @@ -54,4 +54,4 @@ endif() if (MSVC) add_debug_dep(dep_OpenEXR) -endif () \ No newline at end of file +endif () diff --git a/deps/OpenSSL/OpenSSL.cmake b/deps/OpenSSL/OpenSSL.cmake index 0adbaab43e..45f82ec589 100644 --- a/deps/OpenSSL/OpenSSL.cmake +++ b/deps/OpenSSL/OpenSSL.cmake @@ -46,8 +46,8 @@ ExternalProject_Add(dep_OpenSSL # URL_HASH SHA256=8c776993154652d0bb393f506d850b811517c8bd8d24b1008aef57fbe55d3f31 DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/OpenSSL CONFIGURE_COMMAND ${_conf_cmd} ${_cross_arch} - "--openssldir=${DESTDIR}/usr/local" - "--prefix=${DESTDIR}/usr/local" + "--openssldir=${DESTDIR}" + "--prefix=${DESTDIR}" ${_cross_comp_prefix_line} no-shared no-asm @@ -61,6 +61,6 @@ ExternalProject_Add(dep_OpenSSL ExternalProject_Add_Step(dep_OpenSSL install_cmake_files DEPENDEES install - COMMAND ${CMAKE_COMMAND} -E copy_directory openssl "${DESTDIR}/usr/local/${CMAKE_INSTALL_LIBDIR}/cmake/openssl" + COMMAND ${CMAKE_COMMAND} -E copy_directory openssl "${DESTDIR}${CMAKE_INSTALL_LIBDIR}/cmake/openssl" WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" ) diff --git a/deps/TBB/GNU.cmake b/deps/TBB/GNU.cmake new file mode 100644 index 0000000000..a0ba4e5df7 --- /dev/null +++ b/deps/TBB/GNU.cmake @@ -0,0 +1,79 @@ +# Copyright (c) 2020-2021 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if (MINGW) + set(TBB_LINK_DEF_FILE_FLAG "") + set(TBB_DEF_FILE_PREFIX "") +elseif (APPLE) + set(TBB_LINK_DEF_FILE_FLAG -Wl,-exported_symbols_list,) + set(TBB_DEF_FILE_PREFIX mac${TBB_ARCH}) + + # For correct ucontext.h structures layout + set(TBB_COMMON_COMPILE_FLAGS ${TBB_COMMON_COMPILE_FLAGS} -D_XOPEN_SOURCE) +else() + set(TBB_LINK_DEF_FILE_FLAG -Wl,--version-script=) + set(TBB_DEF_FILE_PREFIX lin${TBB_ARCH}) +endif() + +# Add -Wno-error=stringop-overflow to fix GCC 12+ build as suggested on https://github.com/oneapi-src/oneTBB/issues/843#issuecomment-1152646035 +set(TBB_WARNING_LEVEL -Wall -Wextra $<$:-Werror> -Wfatal-errors -Wno-error=stringop-overflow) +set(TBB_TEST_WARNING_FLAGS -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor) + +# Depfile options (e.g. -MD) are inserted automatically in some cases. +# Don't add -MMD to avoid conflicts in such cases. +if (NOT CMAKE_GENERATOR MATCHES "Ninja" AND NOT CMAKE_CXX_DEPENDS_USE_COMPILER) + set(TBB_MMD_FLAG -MMD) +endif() + +# Enable Intel(R) Transactional Synchronization Extensions (-mrtm) and WAITPKG instructions support (-mwaitpkg) on relevant processors +if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86|AMD64)") + set(TBB_COMMON_COMPILE_FLAGS ${TBB_COMMON_COMPILE_FLAGS} -mrtm $<$>,$>>:-mwaitpkg>) +endif() + +if (NOT MINGW) + set(TBB_COMMON_LINK_LIBS dl) +endif() + +# Ignore -Werror set through add_compile_options() or added to CMAKE_CXX_FLAGS if TBB_STRICT is disabled. +if (NOT TBB_STRICT AND COMMAND tbb_remove_compile_flag) + tbb_remove_compile_flag(-Werror) +endif() + +if (NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL Intel) + # gcc 6.0 and later have -flifetime-dse option that controls elimination of stores done outside the object lifetime + set(TBB_DSE_FLAG $<$>:-flifetime-dse=1>) +endif() + +# Workaround for heavy tests and too many symbols in debug (rellocation truncated to fit: R_MIPS_CALL16) +if ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "mips") + set(TBB_TEST_COMPILE_FLAGS ${TBB_TEST_COMPILE_FLAGS} -DTBB_TEST_LOW_WORKLOAD $<$:-mxgot>) +endif() + +if (MINGW) + list(APPEND TBB_COMMON_COMPILE_FLAGS -U__STRICT_ANSI__) +endif() + +# For some reason GCC does not instrument code with Thread Sanitizer when lto is enabled and C linker is used. +if (NOT TBB_SANITIZE MATCHES "thread") + set(TBB_IPO_COMPILE_FLAGS $<$>:-flto>) + set(TBB_IPO_LINK_FLAGS $<$>:-flto>) +endif() + +# Disable lto flag +set(TBB_IPO_COMPILE_FLAGS "") +set(TBB_IPO_LINK_FLAGS "") + +# TBB malloc settings +set(TBBMALLOC_LIB_COMPILE_FLAGS -fno-rtti -fno-exceptions) +set(TBB_OPENMP_FLAG -fopenmp) diff --git a/deps/TBB/TBB.cmake b/deps/TBB/TBB.cmake index 6bf28ca2ec..13d40c0573 100644 --- a/deps/TBB/TBB.cmake +++ b/deps/TBB/TBB.cmake @@ -1,8 +1,14 @@ +if (FLATPAK) + set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/GNU.cmake ./cmake/compilers/GNU.cmake) +else() + set(_patch_command "") +endif() + orcaslicer_add_cmake_project( TBB URL "https://github.com/oneapi-src/oneTBB/archive/refs/tags/v2021.5.0.zip" URL_HASH SHA256=83ea786c964a384dd72534f9854b419716f412f9d43c0be88d41874763e7bb47 - #PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-TBB-GCC13.patch + PATCH_COMMAND ${_patch_command} CMAKE_ARGS -DTBB_BUILD_SHARED=OFF -DTBB_BUILD_TESTS=OFF diff --git a/deps/deps-windows.cmake b/deps/deps-windows.cmake index aba6fcab49..87268a5585 100644 --- a/deps/deps-windows.cmake +++ b/deps/deps-windows.cmake @@ -15,8 +15,8 @@ elseif (MSVC_VERSION LESS 1930) # 1920-1929 = VS 16.0 (v142 toolset) set(DEP_VS_VER "16") set(DEP_BOOST_TOOLSET "msvc-14.2") -elseif (MSVC_VERSION LESS 1940) -# 1930-1939 = VS 17.0 (v143 toolset) +elseif (MSVC_VERSION LESS 1950) +# 1930-1949 = VS 17.0 (v143 toolset) set(DEP_VS_VER "17") set(DEP_BOOST_TOOLSET "msvc-14.3") else () diff --git a/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch b/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch deleted file mode 100644 index e96c1f4d52..0000000000 --- a/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch +++ /dev/null @@ -1,683 +0,0 @@ -From f4fef135f0a58ca2916c45cd539923ab096935b6 Mon Sep 17 00:00:00 2001 -From: Ocraftyone -Date: Thu, 30 Nov 2023 03:25:54 -0500 -Subject: [PATCH] patch v3.2.1 for OrcaSlicer - ---- - build/cmake/lib/webview/CMakeLists.txt | 4 +- - include/wx/fontutil.h | 15 +++++++- - include/wx/gdicmn.h | 3 ++ - include/wx/generic/grid.h | 4 +- - include/wx/msw/font.h | 2 +- - include/wx/msw/tooltip.h | 4 +- - include/wx/osx/app.h | 2 +- - src/common/combocmn.cpp | 11 +++++- - src/common/datavcmn.cpp | 6 ++- - src/common/dcbufcmn.cpp | 6 +++ - src/common/gdicmn.cpp | 14 +++++++ - src/common/image.cpp | 6 +-- - src/generic/grid.cpp | 50 ++++++++++++++++++++----- - src/msw/bmpcbox.cpp | 9 ++++- - src/msw/font.cpp | 14 +++---- - src/msw/menuitem.cpp | 2 + - src/msw/window.cpp | 52 +++++++++++++++++--------- - src/osx/cocoa/dataview.mm | 26 +++++++++++-- - src/osx/cocoa/settings.mm | 6 +-- - src/osx/cocoa/window.mm | 4 ++ - 20 files changed, 184 insertions(+), 56 deletions(-) - -diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt -index 085381d785..62146abc04 100644 ---- a/build/cmake/lib/webview/CMakeLists.txt -+++ b/build/cmake/lib/webview/CMakeLists.txt -@@ -46,9 +46,9 @@ if(APPLE) - elseif(WXMSW) - if(wxUSE_WEBVIEW_EDGE) - # Update the following variables if updating WebView2 SDK -- set(WEBVIEW2_VERSION "1.0.705.50") -+ set(WEBVIEW2_VERSION "1.0.1418.22") - set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") -- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") -+ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") - - set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") - -diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h -index 30529db8ce..e6a12366d5 100644 ---- a/include/wx/fontutil.h -+++ b/include/wx/fontutil.h -@@ -294,7 +294,11 @@ public: - wxFontEncoding GetEncoding() const; - - void SetPointSize(int pointsize); -- void SetFractionalPointSize(double pointsize); -+ void SetFractionalPointSize(double pointsize -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ); - void SetPixelSize(const wxSize& pixelSize); - void SetStyle(wxFontStyle style); - void SetNumericWeight(int weight); -@@ -307,12 +311,19 @@ public: - - // Helper used in many ports: use the normal font size if the input is - // negative, as we handle -1 as meaning this for compatibility. -- void SetSizeOrDefault(double size) -+ void SetSizeOrDefault(double size -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ) - { - SetFractionalPointSize - ( - size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() - : size -+#if defined(__WXMSW__) -+ ,window -+#endif - ); - } - -diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h -index 2f5f8ee99f..39e9317d40 100644 ---- a/include/wx/gdicmn.h -+++ b/include/wx/gdicmn.h -@@ -38,6 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxRegion; - class WXDLLIMPEXP_FWD_BASE wxString; - class WXDLLIMPEXP_FWD_CORE wxIconBundle; - class WXDLLIMPEXP_FWD_CORE wxPoint; -+class WXDLLIMPEXP_FWD_CORE wxWindow; - - // --------------------------------------------------------------------------- - // constants -@@ -1106,7 +1107,9 @@ extern int WXDLLIMPEXP_CORE wxDisplayDepth(); - - // get the display size - extern void WXDLLIMPEXP_CORE wxDisplaySize(int *width, int *height); -+extern void WXDLLIMPEXP_CORE wxDisplaySize(const wxWindow *window, int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(); -+extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(const wxWindow *window); - extern void WXDLLIMPEXP_CORE wxDisplaySizeMM(int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySizeMM(); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplayPPI(); -diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h -index 1bd58bbf04..903cb81319 100644 ---- a/include/wx/generic/grid.h -+++ b/include/wx/generic/grid.h -@@ -3029,9 +3029,11 @@ private: - // Update the width/height of the column/row being drag-resized. - // Should be only called when m_dragRowOrCol != -1, i.e. dragging is - // actually in progress. -+ //BBS: add cursor mode for DoGridDragResize's paremeters - void DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow); -+ wxGridWindow* gridWindow, -+ CursorMode mode); - - // process different clicks on grid cells - void DoGridCellLeftDown(wxMouseEvent& event, -diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h -index 0f9768b44e..094d774918 100644 ---- a/include/wx/msw/font.h -+++ b/include/wx/msw/font.h -@@ -23,7 +23,7 @@ public: - // ctors and such - wxFont() { } - -- wxFont(const wxFontInfo& info); -+ wxFont(const wxFontInfo& info, const wxWindow *window = nullptr); - - wxFont(int size, - wxFontFamily family, -diff --git a/include/wx/msw/tooltip.h b/include/wx/msw/tooltip.h -index 4c3be08cec..96fb378d01 100644 ---- a/include/wx/msw/tooltip.h -+++ b/include/wx/msw/tooltip.h -@@ -91,10 +91,10 @@ private: - // the one and only one tooltip control we use - never access it directly - // but use GetToolTipCtrl() which will create it when needed - static WXHWND ms_hwndTT; -- -+public: - // create the tooltip ctrl if it doesn't exist yet and return its HWND - static WXHWND GetToolTipCtrl(); -- -+private: - // to be used in wxModule for deleting tooltip ctrl window when exiting mainloop - static void DeleteToolTipCtrl(); - -diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h -index 317a0ca96f..58014ec1d4 100644 ---- a/include/wx/osx/app.h -+++ b/include/wx/osx/app.h -@@ -161,7 +161,7 @@ private: - - public: - bool OSXInitWasCalled() { return m_inited; } -- void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } -+ virtual void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } - void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; } - void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; } - #endif -diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp -index 80408c6677..aa07caebdc 100644 ---- a/src/common/combocmn.cpp -+++ b/src/common/combocmn.cpp -@@ -2061,6 +2061,9 @@ void wxComboCtrlBase::ShowPopup() - - SetFocus(); - -+ //int displayIdx = wxDisplay::GetFromWindow(this); -+ //wxRect displayRect = wxDisplay(displayIdx != wxNOT_FOUND ? displayIdx : 0u).GetGeometry(); -+ - // Space above and below - int screenHeight; - wxPoint scrPos; -@@ -2183,9 +2186,13 @@ void wxComboCtrlBase::ShowPopup() - - int showFlags = CanDeferShow; - -- if ( spaceBelow < szp.y ) -+ int anchorSideVertical = m_anchorSide & (wxUP | wxDOWN); -+ if (// Pop up as asked for by the library user. -+ (anchorSideVertical & wxUP) || -+ // Automatic: Pop up if it does not fit down. -+ (anchorSideVertical == 0 && spaceBelow < szp.y )) - { -- popupY = scrPos.y - szp.y; -+ popupY = scrPos.y - szp.y + displayRect.GetTop(); - showFlags |= ShowAbove; - } - -diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp -index 0a1e43ad51..6c492aedab 100644 ---- a/src/common/datavcmn.cpp -+++ b/src/common/datavcmn.cpp -@@ -1334,7 +1334,11 @@ wxDataViewItem wxDataViewCtrlBase::GetSelection() const - - wxDataViewItemArray selections; - GetSelections(selections); -- return selections[0]; -+ // BBS -+ if (!selections.empty()) -+ return selections[0]; -+ else -+ return wxDataViewItem(0); - } - - namespace -diff --git a/src/common/dcbufcmn.cpp b/src/common/dcbufcmn.cpp -index 9b1c1f3159..ef5865ed4b 100644 ---- a/src/common/dcbufcmn.cpp -+++ b/src/common/dcbufcmn.cpp -@@ -83,9 +83,15 @@ private: - const double scale = dc ? dc->GetContentScaleFactor() : 1.0; - wxBitmap* const buffer = new wxBitmap; - -+#if __WXMSW__ -+ // we must always return a valid bitmap but creating a bitmap of -+ // size 0 would fail, so create a 1*1 bitmap in this case -+ buffer->Create(wxMax(w, 1), wxMax(h, 1), 24); -+#else - // we must always return a valid bitmap but creating a bitmap of - // size 0 would fail, so create a 1*1 bitmap in this case - buffer->CreateWithDIPSize(wxMax(w, 1), wxMax(h, 1), scale); -+#endif - - return buffer; - } -diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp -index db8a01f961..162c1ce2dc 100644 ---- a/src/common/gdicmn.cpp -+++ b/src/common/gdicmn.cpp -@@ -863,11 +863,25 @@ void wxDisplaySize(int *width, int *height) - *height = size.y; - } - -+void wxDisplaySize(const wxWindow *window, int *width, int *height) -+{ -+ const wxSize size = wxGetDisplaySize(window); -+ if ( width ) -+ *width = size.x; -+ if ( height ) -+ *height = size.y; -+} -+ - wxSize wxGetDisplaySize() - { - return wxDisplay().GetGeometry().GetSize(); - } - -+wxSize wxGetDisplaySize(const wxWindow *window) -+{ -+ return window ? wxDisplay(window).GetGeometry().GetSize() : wxDisplay().GetGeometry().GetSize(); -+} -+ - void wxClientDisplayRect(int *x, int *y, int *width, int *height) - { - const wxRect rect = wxGetClientDisplayRect(); -diff --git a/src/common/image.cpp b/src/common/image.cpp -index 19fe34ec91..a449b60930 100644 ---- a/src/common/image.cpp -+++ b/src/common/image.cpp -@@ -390,11 +390,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const - unsigned char red = pixel[0] ; - unsigned char green = pixel[1] ; - unsigned char blue = pixel[2] ; -- unsigned char alpha = 255 ; -- if ( source_alpha ) -- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) - { -+ unsigned char alpha = 255 ; -+ if ( source_alpha ) -+ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( alpha > 0 ) - { - avgRed += red ; -diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp -index ed3d988994..d71cda122d 100644 ---- a/src/generic/grid.cpp -+++ b/src/generic/grid.cpp -@@ -4068,7 +4068,8 @@ void wxGrid::ProcessRowColLabelMouseEvent( const wxGridOperations &oper, wxMouse - { - if ( m_cursorMode == oper.GetCursorModeResize() ) - { -- DoGridDragResize(event.GetPosition(), oper, gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), oper, gridWindow, m_cursorMode); - } - else if ( m_cursorMode == oper.GetCursorModeSelect() && line >=0 ) - { -@@ -4691,12 +4692,14 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event, - - case WXGRID_CURSOR_RESIZE_ROW: - if ( m_dragRowOrCol != -1 ) -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - break; - - case WXGRID_CURSOR_RESIZE_COL: - if ( m_dragRowOrCol != -1 ) -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - default: -@@ -4791,6 +4794,8 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event, - case wxGridSelectCells: - case wxGridSelectRowsOrColumns: - // nothing to do in these cases -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(coords.GetRow(), coords.GetCol(), coords.GetRow(), coords.GetCol(), event); - break; - - case wxGridSelectRows: -@@ -5049,9 +5054,11 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG - } - } - -+//BBS: add cursor mode for DoGridDragResize's paremeters - void wxGrid::DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow) -+ wxGridWindow* gridWindow, -+ CursorMode mode) - { - wxCHECK_RET( m_dragRowOrCol != -1, - "shouldn't be called when not drag resizing" ); -@@ -5064,10 +5071,28 @@ void wxGrid::DoGridDragResize(const wxPoint& position, - // orthogonal direction. - const int linePos = oper.Dual().Select(logicalPos); - -- const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -- oper.SetLineSize(this, m_dragRowOrCol, -+ //BBS: add logic for resize multiplexed cols -+ if (mode == WXGRID_CURSOR_RESIZE_COL) { -+ int col_to_resize = m_dragRowOrCol; -+ int num_rows, num_cols; -+ this->GetCellSize(0, m_dragRowOrCol, &num_rows, &num_cols); -+ if (num_cols < 1) -+ col_to_resize = m_dragRowOrCol - 1; -+ -+ const int lineEnd = oper.GetLineEndPos(this, m_dragRowOrCol); -+ const int lineSize = oper.GetLineSize(this, col_to_resize); -+ int size = linePos - lineEnd + lineSize; -+ oper.SetLineSize(this, col_to_resize, -+ wxMax(size, -+ oper.GetMinimalLineSize(this, col_to_resize))); -+ } -+ else { -+ const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -+ -+ oper.SetLineSize(this, m_dragRowOrCol, - wxMax(linePos - lineStart, - oper.GetMinimalLineSize(this, m_dragRowOrCol))); -+ } - - // TODO: generate RESIZING event, see #10754, if the size has changed. - } -@@ -5090,7 +5115,8 @@ wxPoint wxGrid::GetPositionForResizeEvent(int width) const - - void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - - SendGridSizeEvent(wxEVT_GRID_ROW_SIZE, m_dragRowOrCol, event); - -@@ -5099,7 +5125,8 @@ void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWin - - void wxGrid::DoEndDragResizeCol(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - - SendGridSizeEvent(wxEVT_GRID_COL_SIZE, m_dragRowOrCol, event); - -@@ -5113,9 +5140,10 @@ void wxGrid::DoHeaderStartDragResizeCol(int col) - - void wxGrid::DoHeaderDragResizeCol(int width) - { -+ //BBS: add cursor mode for DoGridDragResize's paremeters - DoGridDragResize(GetPositionForResizeEvent(width), - wxGridColumnOperations(), -- m_gridWin); -+ m_gridWin, WXGRID_CURSOR_RESIZE_COL); - } - - void wxGrid::DoHeaderEndDragResizeCol(int width) -@@ -6013,6 +6041,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) - DisableCellEditControl(); - - MoveCursorDown( event.ShiftDown() ); -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ event); - } - break; - -diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp -index 011bd4f534..17e7f18740 100644 ---- a/src/msw/bmpcbox.cpp -+++ b/src/msw/bmpcbox.cpp -@@ -156,13 +156,20 @@ void wxBitmapComboBox::RecreateControl() - - wxComboBox::DoClear(); - -- HWND hwnd = GetHwnd(); -+ WNDPROC wndproc_edit = nullptr; -+ WinStruct combobox_info; -+ HWND hwnd = GetHwnd(); -+if (::GetComboBoxInfo(hwnd, &combobox_info)) -+ wndproc_edit = (WNDPROC)wxGetWindowProc(combobox_info.hwndItem); - DissociateHandle(); - ::DestroyWindow(hwnd); - - if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) ) - return; - -+if (::GetComboBoxInfo(GetHwnd(), &combobox_info)) -+ wxSetWindowProc(combobox_info.hwndItem, wndproc_edit); -+ - // initialize the controls contents - for ( i = 0; i < numItems; i++ ) - { -diff --git a/src/msw/font.cpp b/src/msw/font.cpp -index 434876939c..91d4603018 100644 ---- a/src/msw/font.cpp -+++ b/src/msw/font.cpp -@@ -54,7 +54,7 @@ static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH; - class WXDLLEXPORT wxFontRefData: public wxGDIRefData - { - public: -- wxFontRefData(const wxFontInfo& info = wxFontInfo()); -+ wxFontRefData(const wxFontInfo& info = wxFontInfo(), const wxWindow* window = nullptr); - - wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0) - { -@@ -324,7 +324,7 @@ protected: - // wxFontRefData - // ---------------------------------------------------------------------------- - --wxFontRefData::wxFontRefData(const wxFontInfo& info) -+wxFontRefData::wxFontRefData(const wxFontInfo& info, const wxWindow *window) - { - m_hFont = NULL; - -@@ -335,7 +335,7 @@ wxFontRefData::wxFontRefData(const wxFontInfo& info) - } - else - { -- m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize()); -+ m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize(), window); - } - - SetStyle(info.GetStyle()); -@@ -518,12 +518,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const - return wxGetFontEncFromCharSet(lf.lfCharSet); - } - --void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew) -+void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew, const wxWindow *window) - { - // We don't have the correct DPI to use here, so use that of the - // primary screen and rely on WXAdjustToPPI() changing it later if - // necessary. -- const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); -+ const int ppi = window ? window->GetDPI().GetY() : ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); - lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi); - - pointSize = pointSizeNew; -@@ -812,9 +812,9 @@ wxFont::wxFont(const wxString& fontdesc) - (void)Create(info); - } - --wxFont::wxFont(const wxFontInfo& info) -+wxFont::wxFont(const wxFontInfo& info, const wxWindow *window) - { -- m_refData = new wxFontRefData(info); -+ m_refData = new wxFontRefData(info, window); - } - - bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont) -diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp -index 0bd017a36a..3b98bf1678 100644 ---- a/src/msw/menuitem.cpp -+++ b/src/msw/menuitem.cpp -@@ -368,6 +368,8 @@ void MenuDrawData::Init(wxWindow const* window) - // native menu uses small top margin for separator - if ( SeparatorMargin.cyTopHeight >= 2 ) - SeparatorMargin.cyTopHeight -= 2; -+ -+ SeparatorSize.cy = 0; - } - else - #endif // wxUSE_UXTHEME -diff --git a/src/msw/window.cpp b/src/msw/window.cpp -index c529a4fa3b..7e547c64df 100644 ---- a/src/msw/window.cpp -+++ b/src/msw/window.cpp -@@ -4809,33 +4809,49 @@ static wxSize GetWindowDPI(HWND hwnd) - } - - /*extern*/ --int wxGetSystemMetrics(int nIndex, const wxWindow* window) -+int wxGetSystemMetrics(int nIndex, const wxWindow* win) - { - #if wxUSE_DYNLIB_CLASS -- if ( !window ) -- window = wxApp::GetMainTopWindow(); -+ const wxWindow* window = (!win && wxTheApp) ? wxTheApp->GetTopWindow() : win; - -- if ( window ) -+ if (window) - { -- typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -- static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -- static bool s_initDone = false; -- -- if ( !s_initDone ) -- { -- wxLoadedDLL dllUser32("user32.dll"); -- wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -- s_initDone = true; -+#if 1 -+ if (window->GetHWND() && (nIndex == SM_CXSCREEN || nIndex == SM_CYSCREEN)) { -+ HDC hdc = GetDC(window->GetHWND()); -+#if 0 -+ double dim = GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES); -+ ReleaseDC(window->GetHWND(), hdc); -+ wxSize dpi = window->GetDPI(); -+ dim *= 96.0 / (nIndex == SM_CXSCREEN ? dpi.x : dpi.y); -+ return int(dim + 0.5); -+#else -+ return int(GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES)); -+#endif - } -- -- if ( s_pfnGetSystemMetricsForDpi ) -+ else -+#endif - { -- const int dpi = window->GetDPI().y; -- return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -+ static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -+ static bool s_initDone = false; -+ -+ if ( !s_initDone ) -+ { -+ wxLoadedDLL dllUser32("user32.dll"); -+ wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -+ s_initDone = true; -+ } -+ -+ if ( s_pfnGetSystemMetricsForDpi ) -+ { -+ const int dpi = window->GetDPI().y; -+ return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ } - } - } - #else -- wxUnusedVar(window); -+ wxUnusedVar(win); - #endif // wxUSE_DYNLIB_CLASS - - return ::GetSystemMetrics(nIndex); -diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm -index f188e61089..7b867002d1 100644 ---- a/src/osx/cocoa/dataview.mm -+++ b/src/osx/cocoa/dataview.mm -@@ -1604,6 +1604,15 @@ outlineView:(NSOutlineView*)outlineView - } - } - -+//FIXME Vojtech: This is a workaround to get at least the "mouse move" events at the wxDataViewControl, -+// so we can show the tooltips. The "mouse move" events are being send only if the wxDataViewControl -+// has focus, which is a limitation of wxWidgets. We may grab focus on "mouse entry" though. -+- (void)mouseMoved:(NSEvent *)event -+{ -+if (! implementation->DoHandleMouseEvent(event)) -+ [super mouseMoved:event]; -+} -+ - // - // contextual menus - // -@@ -2006,7 +2015,8 @@ void wxCocoaDataViewControl::keyEvent(WX_NSEvent event, WXWidget slf, void *_cmd - if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) - wxWidgetCocoaImpl::keyEvent(event, slf, _cmd); - } -- else -+ //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working. -+ else if (! DoHandleKeyEvent(event)) - { - wxWidgetCocoaImpl::keyEvent(event, slf, _cmd); // all other keys - } -@@ -2540,12 +2550,22 @@ void wxCocoaDataViewControl::DoSetIndent(int indent) - - void wxCocoaDataViewControl::HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const - { -- NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),point); -+ NSTableHeaderView *headerView = [m_OutlineView headerView]; -+ if (headerView && point.y < headerView.visibleRect.size.height) { -+ // The point is inside the header area. -+ columnPtr = NULL; -+ item = wxDataViewItem(); -+ return; -+ } -+ // Convert from the window coordinates to the virtual scrolled view coordinates. -+ NSScrollView *scrollView = [m_OutlineView enclosingScrollView]; -+ const NSRect &visibleRect = scrollView.contentView.visibleRect; -+ NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(), -+ wxPoint(point.x + visibleRect.origin.x, point.y + visibleRect.origin.y)); - - int indexColumn; - int indexRow; - -- - indexColumn = [m_OutlineView columnAtPoint:nativePoint]; - indexRow = [m_OutlineView rowAtPoint: nativePoint]; - if ((indexColumn >= 0) && (indexRow >= 0)) -diff --git a/src/osx/cocoa/settings.mm b/src/osx/cocoa/settings.mm -index c819deeb0c..dc3c3b0b53 100644 ---- a/src/osx/cocoa/settings.mm -+++ b/src/osx/cocoa/settings.mm -@@ -222,7 +222,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) - // ---------------------------------------------------------------------------- - - // Get a system metric, e.g. scrollbar size --int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUNUSED(win)) -+int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* win) - { - int value; - -@@ -257,11 +257,11 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUN - // TODO case wxSYS_WINDOWMIN_Y: - - case wxSYS_SCREEN_X: -- wxDisplaySize(&value, NULL); -+ wxDisplaySize(win, &value, NULL); - return value; - - case wxSYS_SCREEN_Y: -- wxDisplaySize(NULL, &value); -+ wxDisplaySize(win, NULL, &value); - return value; - - // TODO case wxSYS_FRAMESIZE_X: -diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm -index 635ea286d4..42ae67e27a 100644 ---- a/src/osx/cocoa/window.mm -+++ b/src/osx/cocoa/window.mm -@@ -191,6 +191,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - - (BOOL)isEnabled; - - (void)setEnabled:(BOOL)flag; - -+- (BOOL)clipsToBounds; -+- (void)setClipsToBounds:(BOOL)clipsToBounds; -+ - - (void)setImage:(NSImage *)image; - - (void)setControlSize:(NSControlSize)size; - -@@ -2559,6 +2562,7 @@ wxWidgetImpl( peer, flags ) - if ( m_osxView ) - CFRetain(m_osxView); - [m_osxView release]; -+ m_osxView.clipsToBounds = YES; - } - - --- -2.42.0.windows.2 - diff --git a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch b/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch deleted file mode 100644 index 325b933f66..0000000000 --- a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch +++ /dev/null @@ -1,743 +0,0 @@ -From 5e82980ed1762338794d06b3f9f22fa10e050622 Mon Sep 17 00:00:00 2001 -From: SoftFever -Date: Sat, 23 Dec 2023 20:08:41 +0800 -Subject: [PATCH] wx 3.1.5 patch for Orca - ---- - build/cmake/init.cmake | 4 ++ - build/cmake/lib/webview/CMakeLists.txt | 4 +- - include/wx/fontutil.h | 15 +++++++- - include/wx/gdicmn.h | 3 ++ - include/wx/generic/grid.h | 4 +- - include/wx/msw/font.h | 2 +- - include/wx/msw/tooltip.h | 4 +- - include/wx/osx/app.h | 2 +- - src/common/combocmn.cpp | 13 +++++-- - src/common/datavcmn.cpp | 6 ++- - src/common/dcbufcmn.cpp | 8 +++- - src/common/gdicmn.cpp | 14 +++++++ - src/common/image.cpp | 6 +-- - src/common/intl.cpp | 7 ++++ - src/generic/grid.cpp | 53 +++++++++++++++++++++----- - src/msw/bmpcbox.cpp | 9 ++++- - src/msw/font.cpp | 14 +++---- - src/msw/menuitem.cpp | 2 + - src/msw/window.cpp | 52 ++++++++++++++++--------- - src/osx/cocoa/dataview.mm | 26 +++++++++++-- - src/osx/cocoa/settings.mm | 6 +-- - src/osx/cocoa/window.mm | 4 ++ - 22 files changed, 199 insertions(+), 59 deletions(-) - -diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake -index 0bc4f934b9..479431a69c 100644 ---- a/build/cmake/init.cmake -+++ b/build/cmake/init.cmake -@@ -413,7 +413,11 @@ if(wxUSE_GUI) - else() - find_package(OpenGL) - if(WXGTK3 AND OpenGL_EGL_FOUND AND wxUSE_GLCANVAS_EGL) -+ if(UNIX AND NOT APPLE) -+ set(OPENGL_LIBRARIES OpenGL EGL) -+ else() - set(OPENGL_LIBRARIES OpenGL::OpenGL OpenGL::EGL) -+ endif() - find_package(WAYLANDEGL) - if(WAYLANDEGL_FOUND AND wxHAVE_GDK_WAYLAND) - list(APPEND OPENGL_LIBRARIES ${WAYLANDEGL_LIBRARIES}) -diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt -index cc3298ff33..aa103ae474 100644 ---- a/build/cmake/lib/webview/CMakeLists.txt -+++ b/build/cmake/lib/webview/CMakeLists.txt -@@ -56,9 +56,9 @@ if(APPLE) - elseif(WXMSW) - if(wxUSE_WEBVIEW_EDGE) - # Update the following variables if updating WebView2 SDK -- set(WEBVIEW2_VERSION "1.0.705.50") -+ set(WEBVIEW2_VERSION "1.0.1418.22") - set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") -- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") -+ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") - - set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") - -diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h -index 09ad8c8ef3..c228e167d7 100644 ---- a/include/wx/fontutil.h -+++ b/include/wx/fontutil.h -@@ -294,7 +294,11 @@ public: - wxFontEncoding GetEncoding() const; - - void SetPointSize(int pointsize); -- void SetFractionalPointSize(double pointsize); -+ void SetFractionalPointSize(double pointsize -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ); - void SetPixelSize(const wxSize& pixelSize); - void SetStyle(wxFontStyle style); - void SetNumericWeight(int weight); -@@ -307,12 +311,19 @@ public: - - // Helper used in many ports: use the normal font size if the input is - // negative, as we handle -1 as meaning this for compatibility. -- void SetSizeOrDefault(double size) -+ void SetSizeOrDefault(double size -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ) - { - SetFractionalPointSize - ( - size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() - : size -+#if defined(__WXMSW__) -+ ,window -+#endif - ); - } - -diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h -index e29a77627c..dc48cf9451 100644 ---- a/include/wx/gdicmn.h -+++ b/include/wx/gdicmn.h -@@ -38,6 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxRegion; - class WXDLLIMPEXP_FWD_BASE wxString; - class WXDLLIMPEXP_FWD_CORE wxIconBundle; - class WXDLLIMPEXP_FWD_CORE wxPoint; -+class WXDLLIMPEXP_FWD_CORE wxWindow; - - // --------------------------------------------------------------------------- - // constants -@@ -1092,7 +1093,9 @@ extern int WXDLLIMPEXP_CORE wxDisplayDepth(); - - // get the display size - extern void WXDLLIMPEXP_CORE wxDisplaySize(int *width, int *height); -+extern void WXDLLIMPEXP_CORE wxDisplaySize(const wxWindow *window, int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(); -+extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(const wxWindow *window); - extern void WXDLLIMPEXP_CORE wxDisplaySizeMM(int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySizeMM(); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplayPPI(); -diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h -index d7a3890764..e4dee51d5a 100644 ---- a/include/wx/generic/grid.h -+++ b/include/wx/generic/grid.h -@@ -2951,9 +2951,11 @@ private: - wxGridWindow* gridWindow); - - // Update the width/height of the column/row being drag-resized. -+ //BBS: add cursor mode for DoGridDragResize's paremeters - void DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow); -+ wxGridWindow* gridWindow, -+ CursorMode mode); - - // process different clicks on grid cells - void DoGridCellLeftDown(wxMouseEvent& event, -diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h -index 0f9768b44e..094d774918 100644 ---- a/include/wx/msw/font.h -+++ b/include/wx/msw/font.h -@@ -23,7 +23,7 @@ public: - // ctors and such - wxFont() { } - -- wxFont(const wxFontInfo& info); -+ wxFont(const wxFontInfo& info, const wxWindow *window = nullptr); - - wxFont(int size, - wxFontFamily family, -diff --git a/include/wx/msw/tooltip.h b/include/wx/msw/tooltip.h -index 4c3be08cec..96fb378d01 100644 ---- a/include/wx/msw/tooltip.h -+++ b/include/wx/msw/tooltip.h -@@ -91,10 +91,10 @@ private: - // the one and only one tooltip control we use - never access it directly - // but use GetToolTipCtrl() which will create it when needed - static WXHWND ms_hwndTT; -- -+public: - // create the tooltip ctrl if it doesn't exist yet and return its HWND - static WXHWND GetToolTipCtrl(); -- -+private: - // to be used in wxModule for deleting tooltip ctrl window when exiting mainloop - static void DeleteToolTipCtrl(); - -diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h -index 317a0ca96f..58014ec1d4 100644 ---- a/include/wx/osx/app.h -+++ b/include/wx/osx/app.h -@@ -161,7 +161,7 @@ private: - - public: - bool OSXInitWasCalled() { return m_inited; } -- void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } -+ virtual void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } - void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; } - void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; } - #endif -diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp -index b61aac35bf..7cfc97d2f8 100644 ---- a/src/common/combocmn.cpp -+++ b/src/common/combocmn.cpp -@@ -2141,7 +2141,7 @@ void wxComboCtrlBase::CreatePopup() - #if !USES_GENERICTLW - m_winPopup = new wxComboPopupWindowBase2( this, wxNO_BORDER ); - #else -- int tlwFlags = wxNO_BORDER; -+ int tlwFlags = wxNO_BORDER | wxSTAY_ON_TOP; - #ifdef wxCC_GENERIC_TLW_IS_FRAME - tlwFlags |= wxFRAME_NO_TASKBAR; - #endif -@@ -2285,6 +2285,9 @@ void wxComboCtrlBase::ShowPopup() - - SetFocus(); - -+ //int displayIdx = wxDisplay::GetFromWindow(this); -+ //wxRect displayRect = wxDisplay(displayIdx != wxNOT_FOUND ? displayIdx : 0u).GetGeometry(); -+ - // Space above and below - int screenHeight; - wxPoint scrPos; -@@ -2407,9 +2410,13 @@ void wxComboCtrlBase::ShowPopup() - - int showFlags = CanDeferShow; - -- if ( spaceBelow < szp.y ) -+ int anchorSideVertical = m_anchorSide & (wxUP | wxDOWN); -+ if (// Pop up as asked for by the library user. -+ (anchorSideVertical & wxUP) || -+ // Automatic: Pop up if it does not fit down. -+ (anchorSideVertical == 0 && spaceBelow < szp.y )) - { -- popupY = scrPos.y - szp.y; -+ popupY = scrPos.y - szp.y + displayRect.GetTop(); - showFlags |= ShowAbove; - } - -diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp -index 1f5fd4d66b..14ea2f8ef1 100644 ---- a/src/common/datavcmn.cpp -+++ b/src/common/datavcmn.cpp -@@ -1322,7 +1322,11 @@ wxDataViewItem wxDataViewCtrlBase::GetSelection() const - - wxDataViewItemArray selections; - GetSelections(selections); -- return selections[0]; -+ // BBS -+ if (!selections.empty()) -+ return selections[0]; -+ else -+ return wxDataViewItem(0); - } - - namespace -diff --git a/src/common/dcbufcmn.cpp b/src/common/dcbufcmn.cpp -index 74958fce10..59844f4526 100644 ---- a/src/common/dcbufcmn.cpp -+++ b/src/common/dcbufcmn.cpp -@@ -82,9 +82,15 @@ private: - const double scale = dc ? dc->GetContentScaleFactor() : 1.0; - wxBitmap* const buffer = new wxBitmap; - -+#if __WXMSW__ - // we must always return a valid bitmap but creating a bitmap of - // size 0 would fail, so create a 1*1 bitmap in this case -- buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale); -+ buffer->Create(wxMax(w, 1), wxMax(h, 1), 24); -+#else -+ // we must always return a valid bitmap but creating a bitmap of -+ // size 0 would fail, so create a 1*1 bitmap in this case -+ buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale); -+#endif - - return buffer; - } -diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp -index 20442bbc73..bc2c35bee6 100644 ---- a/src/common/gdicmn.cpp -+++ b/src/common/gdicmn.cpp -@@ -863,11 +863,25 @@ void wxDisplaySize(int *width, int *height) - *height = size.y; - } - -+void wxDisplaySize(const wxWindow *window, int *width, int *height) -+{ -+ const wxSize size = wxGetDisplaySize(window); -+ if ( width ) -+ *width = size.x; -+ if ( height ) -+ *height = size.y; -+} -+ - wxSize wxGetDisplaySize() - { - return wxDisplay().GetGeometry().GetSize(); - } - -+wxSize wxGetDisplaySize(const wxWindow *window) -+{ -+ return window ? wxDisplay(window).GetGeometry().GetSize() : wxDisplay().GetGeometry().GetSize(); -+} -+ - void wxClientDisplayRect(int *x, int *y, int *width, int *height) - { - const wxRect rect = wxGetClientDisplayRect(); -diff --git a/src/common/image.cpp b/src/common/image.cpp -index 78fe5b82a3..46db8722ce 100644 ---- a/src/common/image.cpp -+++ b/src/common/image.cpp -@@ -383,11 +383,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const - unsigned char red = pixel[0] ; - unsigned char green = pixel[1] ; - unsigned char blue = pixel[2] ; -- unsigned char alpha = 255 ; -- if ( source_alpha ) -- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) - { -+ unsigned char alpha = 255 ; -+ if ( source_alpha ) -+ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( alpha > 0 ) - { - avgRed += red ; -diff --git a/src/common/intl.cpp b/src/common/intl.cpp -index 0b0d8798f4..294f542b1f 100644 ---- a/src/common/intl.cpp -+++ b/src/common/intl.cpp -@@ -1628,6 +1628,12 @@ GetInfoFromLCID(LCID lcid, - { - str = buf; - -+//FIXME Vojtech: We forcefully set the locales for a decimal point to "C", but this -+// is not possible for the Win32 locales, therefore there is a discrepancy. -+// It looks like we live with the discrepancy for at least half a year, so we will -+// suppress the assert until we fix Slic3r to properly switch to "C" locales just -+// for file import / export. -+#if 0 - // As we get our decimal point separator from Win32 and not the - // CRT there is a possibility of mismatch between them and this - // can easily happen if the user code called setlocale() -@@ -1641,6 +1647,7 @@ GetInfoFromLCID(LCID lcid, - "Decimal separator mismatch -- did you use setlocale()?" - "If so, use wxLocale to change the locale instead." - ); -+#endif - } - break; - -diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp -index 41fd4524cf..f4a15cb839 100644 ---- a/src/generic/grid.cpp -+++ b/src/generic/grid.cpp -@@ -3824,7 +3824,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo - { - case WXGRID_CURSOR_RESIZE_ROW: - { -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - } - break; - -@@ -4166,7 +4167,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo - switch ( m_cursorMode ) - { - case WXGRID_CURSOR_RESIZE_COL: -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - case WXGRID_CURSOR_SELECT_COL: -@@ -4708,11 +4710,13 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event, - return DoGridCellDrag(event, coords, isFirstDrag); - - case WXGRID_CURSOR_RESIZE_ROW: -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - break; - - case WXGRID_CURSOR_RESIZE_COL: -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - default: -@@ -4803,6 +4807,8 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event, - case wxGridSelectCells: - case wxGridSelectRowsOrColumns: - // nothing to do in these cases -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(coords.GetRow(), coords.GetCol(), coords.GetRow(), coords.GetCol(), event); - break; - - case wxGridSelectRows: -@@ -5044,9 +5050,11 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG - } - } - -+//BBS: add cursor mode for DoGridDragResize's paremeters - void wxGrid::DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow) -+ wxGridWindow* gridWindow, -+ CursorMode mode) - { - // Get the logical position from the physical one we're passed. - const wxPoint -@@ -5056,10 +5064,28 @@ void wxGrid::DoGridDragResize(const wxPoint& position, - // orthogonal direction. - const int linePos = oper.Dual().Select(logicalPos); - -- const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -- oper.SetLineSize(this, m_dragRowOrCol, -+ //BBS: add logic for resize multiplexed cols -+ if (mode == WXGRID_CURSOR_RESIZE_COL) { -+ int col_to_resize = m_dragRowOrCol; -+ int num_rows, num_cols; -+ this->GetCellSize(0, m_dragRowOrCol, &num_rows, &num_cols); -+ if (num_cols < 1) -+ col_to_resize = m_dragRowOrCol - 1; -+ -+ const int lineEnd = oper.GetLineEndPos(this, m_dragRowOrCol); -+ const int lineSize = oper.GetLineSize(this, col_to_resize); -+ int size = linePos - lineEnd + lineSize; -+ oper.SetLineSize(this, col_to_resize, -+ wxMax(size, -+ oper.GetMinimalLineSize(this, col_to_resize))); -+ } -+ else { -+ const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -+ -+ oper.SetLineSize(this, m_dragRowOrCol, - wxMax(linePos - lineStart, - oper.GetMinimalLineSize(this, m_dragRowOrCol))); -+ } - - // TODO: generate RESIZING event, see #10754, if the size has changed. - } -@@ -5082,7 +5108,8 @@ wxPoint wxGrid::GetPositionForResizeEvent(int width) const - - void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - - SendGridSizeEvent(wxEVT_GRID_ROW_SIZE, m_dragRowOrCol, -1, event); - -@@ -5091,7 +5118,8 @@ void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWin - - void wxGrid::DoEndDragResizeCol(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - - SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, m_dragRowOrCol, event); - -@@ -5105,9 +5133,10 @@ void wxGrid::DoHeaderStartDragResizeCol(int col) - - void wxGrid::DoHeaderDragResizeCol(int width) - { -+ //BBS: add cursor mode for DoGridDragResize's paremeters - DoGridDragResize(GetPositionForResizeEvent(width), - wxGridColumnOperations(), -- m_gridWin); -+ m_gridWin, WXGRID_CURSOR_RESIZE_COL); - } - - void wxGrid::DoHeaderEndDragResizeCol(int width) -@@ -5891,6 +5920,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) - DisableCellEditControl(); - - MoveCursorDown( event.ShiftDown() ); -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ event); - } - break; - -diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp -index 0a2d167ad7..0aeba45ea9 100644 ---- a/src/msw/bmpcbox.cpp -+++ b/src/msw/bmpcbox.cpp -@@ -156,13 +156,20 @@ void wxBitmapComboBox::RecreateControl() - - wxComboBox::DoClear(); - -- HWND hwnd = GetHwnd(); -+ WNDPROC wndproc_edit = nullptr; -+ WinStruct combobox_info; -+ HWND hwnd = GetHwnd(); -+if (::GetComboBoxInfo(hwnd, &combobox_info)) -+ wndproc_edit = (WNDPROC)wxGetWindowProc(combobox_info.hwndItem); - DissociateHandle(); - ::DestroyWindow(hwnd); - - if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) ) - return; - -+if (::GetComboBoxInfo(GetHwnd(), &combobox_info)) -+ wxSetWindowProc(combobox_info.hwndItem, wndproc_edit); -+ - // initialize the controls contents - for ( i = 0; i < numItems; i++ ) - { -diff --git a/src/msw/font.cpp b/src/msw/font.cpp -index 0bd240d79f..d38b1b00f5 100644 ---- a/src/msw/font.cpp -+++ b/src/msw/font.cpp -@@ -54,7 +54,7 @@ static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH; - class WXDLLEXPORT wxFontRefData: public wxGDIRefData - { - public: -- wxFontRefData(const wxFontInfo& info = wxFontInfo()); -+ wxFontRefData(const wxFontInfo& info = wxFontInfo(), const wxWindow* window = nullptr); - - wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0) - { -@@ -324,7 +324,7 @@ protected: - // wxFontRefData - // ---------------------------------------------------------------------------- - --wxFontRefData::wxFontRefData(const wxFontInfo& info) -+wxFontRefData::wxFontRefData(const wxFontInfo& info, const wxWindow *window) - { - m_hFont = NULL; - -@@ -335,7 +335,7 @@ wxFontRefData::wxFontRefData(const wxFontInfo& info) - } - else - { -- m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize()); -+ m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize(), window); - } - - SetStyle(info.GetStyle()); -@@ -518,12 +518,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const - return wxGetFontEncFromCharSet(lf.lfCharSet); - } - --void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew) -+void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew, const wxWindow *window) - { - // We don't have the correct DPI to use here, so use that of the - // primary screen and rely on WXAdjustToPPI() changing it later if - // necessary. -- const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); -+ const int ppi = window ? window->GetDPI().GetY() : ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); - lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi); - - pointSize = pointSizeNew; -@@ -812,9 +812,9 @@ wxFont::wxFont(const wxString& fontdesc) - (void)Create(info); - } - --wxFont::wxFont(const wxFontInfo& info) -+wxFont::wxFont(const wxFontInfo& info, const wxWindow *window) - { -- m_refData = new wxFontRefData(info); -+ m_refData = new wxFontRefData(info, window); - } - - bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont) -diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp -index 9bb397d472..30af7154a7 100644 ---- a/src/msw/menuitem.cpp -+++ b/src/msw/menuitem.cpp -@@ -368,6 +368,8 @@ void MenuDrawData::Init(wxWindow const* window) - // native menu uses small top margin for separator - if ( SeparatorMargin.cyTopHeight >= 2 ) - SeparatorMargin.cyTopHeight -= 2; -+ -+ SeparatorSize.cy = 0; - } - else - #endif // wxUSE_UXTHEME -diff --git a/src/msw/window.cpp b/src/msw/window.cpp -index eadc2f5700..f64fea4446 100644 ---- a/src/msw/window.cpp -+++ b/src/msw/window.cpp -@@ -4773,33 +4773,49 @@ static wxSize GetWindowDPI(HWND hwnd) - } - - /*extern*/ --int wxGetSystemMetrics(int nIndex, const wxWindow* window) -+int wxGetSystemMetrics(int nIndex, const wxWindow* win) - { - #if wxUSE_DYNLIB_CLASS -- if ( !window ) -- window = wxApp::GetMainTopWindow(); -+ const wxWindow* window = (!win && wxTheApp) ? wxTheApp->GetTopWindow() : win; - -- if ( window ) -+ if (window) - { -- typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -- static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -- static bool s_initDone = false; -- -- if ( !s_initDone ) -- { -- wxLoadedDLL dllUser32("user32.dll"); -- wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -- s_initDone = true; -+#if 1 -+ if (window->GetHWND() && (nIndex == SM_CXSCREEN || nIndex == SM_CYSCREEN)) { -+ HDC hdc = GetDC(window->GetHWND()); -+#if 0 -+ double dim = GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES); -+ ReleaseDC(window->GetHWND(), hdc); -+ wxSize dpi = window->GetDPI(); -+ dim *= 96.0 / (nIndex == SM_CXSCREEN ? dpi.x : dpi.y); -+ return int(dim + 0.5); -+#else -+ return int(GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES)); -+#endif - } -- -- if ( s_pfnGetSystemMetricsForDpi ) -+ else -+#endif - { -- const int dpi = window->GetDPI().y; -- return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -+ static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -+ static bool s_initDone = false; -+ -+ if ( !s_initDone ) -+ { -+ wxLoadedDLL dllUser32("user32.dll"); -+ wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -+ s_initDone = true; -+ } -+ -+ if ( s_pfnGetSystemMetricsForDpi ) -+ { -+ const int dpi = window->GetDPI().y; -+ return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ } - } - } - #else -- wxUnusedVar(window); -+ wxUnusedVar(win); - #endif // wxUSE_DYNLIB_CLASS - - return ::GetSystemMetrics(nIndex); -diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm -index 6ff0cc3088..4943f3ea38 100644 ---- a/src/osx/cocoa/dataview.mm -+++ b/src/osx/cocoa/dataview.mm -@@ -1734,12 +1734,22 @@ outlineView:(NSOutlineView*)outlineView - if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) - [super keyDown:event]; - } -- else -+ //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working. -+ else if (! implementation->DoHandleKeyEvent(event)) - { - [super keyDown:event]; // all other keys - } - } - -+//FIXME Vojtech: This is a workaround to get at least the "mouse move" events at the wxDataViewControl, -+// so we can show the tooltips. The "mouse move" events are being send only if the wxDataViewControl -+// has focus, which is a limitation of wxWidgets. We may grab focus on "mouse entry" though. -+- (void)mouseMoved:(NSEvent *)event -+{ -+if (! implementation->DoHandleMouseEvent(event)) -+ [super mouseMoved:event]; -+} -+ - // - // contextual menus - // -@@ -2672,12 +2682,22 @@ void wxCocoaDataViewControl::DoSetIndent(int indent) - - void wxCocoaDataViewControl::HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const - { -- NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),point); -+ NSTableHeaderView *headerView = [m_OutlineView headerView]; -+ if (headerView && point.y < headerView.visibleRect.size.height) { -+ // The point is inside the header area. -+ columnPtr = NULL; -+ item = wxDataViewItem(); -+ return; -+ } -+ // Convert from the window coordinates to the virtual scrolled view coordinates. -+ NSScrollView *scrollView = [m_OutlineView enclosingScrollView]; -+ const NSRect &visibleRect = scrollView.contentView.visibleRect; -+ NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(), -+ wxPoint(point.x + visibleRect.origin.x, point.y + visibleRect.origin.y)); - - int indexColumn; - int indexRow; - -- - indexColumn = [m_OutlineView columnAtPoint:nativePoint]; - indexRow = [m_OutlineView rowAtPoint: nativePoint]; - if ((indexColumn >= 0) && (indexRow >= 0)) -diff --git a/src/osx/cocoa/settings.mm b/src/osx/cocoa/settings.mm -index de5f52860c..a9581174a4 100644 ---- a/src/osx/cocoa/settings.mm -+++ b/src/osx/cocoa/settings.mm -@@ -224,7 +224,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) - // ---------------------------------------------------------------------------- - - // Get a system metric, e.g. scrollbar size --int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUNUSED(win)) -+int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* win) - { - int value; - -@@ -259,11 +259,11 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUN - // TODO case wxSYS_WINDOWMIN_Y: - - case wxSYS_SCREEN_X: -- wxDisplaySize(&value, NULL); -+ wxDisplaySize(win, &value, NULL); - return value; - - case wxSYS_SCREEN_Y: -- wxDisplaySize(NULL, &value); -+ wxDisplaySize(win, NULL, &value); - return value; - - // TODO case wxSYS_FRAMESIZE_X: -diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm -index b322e582c5..79de567333 100644 ---- a/src/osx/cocoa/window.mm -+++ b/src/osx/cocoa/window.mm -@@ -190,6 +190,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - - (BOOL)isEnabled; - - (void)setEnabled:(BOOL)flag; - -+- (BOOL)clipsToBounds; -+- (void)setClipsToBounds:(BOOL)clipsToBounds; -+ - - (void)setImage:(NSImage *)image; - - (void)setControlSize:(NSControlSize)size; - -@@ -2505,6 +2508,7 @@ wxWidgetImpl( peer, flags ) - if ( m_osxView ) - CFRetain(m_osxView); - [m_osxView release]; -+ m_osxView.clipsToBounds = YES; - } - - --- -2.41.0.windows.2 - diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index f84f9a070f..1097e6cfc0 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -1,6 +1,3 @@ -set(_wx_version 3.1.5) -set(_wx_git_tag v${_wx_version}) - set(_wx_toolkit "") set(_wx_private_font "-DwxUSE_PRIVATE_FONTS=1") @@ -20,37 +17,16 @@ else () set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF") endif () -set(_wx_orcaslicer_patch "${CMAKE_CURRENT_LIST_DIR}/0001-wx-3.1.5-patch-for-Orca.patch") -if (MSVC) - set(_patch_cmd if not exist WXWIDGETS_PATCHED ( "${GIT_EXECUTABLE}" apply --verbose --ignore-space-change --whitespace=fix ${_wx_orcaslicer_patch} && type nul > WXWIDGETS_PATCHED ) ) -else () - set(_patch_cmd test -f WXWIDGETS_PATCHED || ${PATCH_CMD} ${_wx_orcaslicer_patch} && touch WXWIDGETS_PATCHED) -endif () - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(_patch_cmd ${PATCH_CMD} ${_wx_orcaslicer_patch}) -endif () - -# Note: for anybody wanting to switch to tarball fetching - this won't just work as -# git apply expects a git repo. Either git init empty repo, or change patching method. -# if (WIN32) -# # Windows requires a different tarball because of configured line endings as stated in docs. -# set(_wx_tarball_url https://github.com/wxWidgets/wxWidgets/releases/download/${_wx_git_tag}/wxWidgets-${_wx_version}.7z) -# set(_wx_tarball_hash 99f5382312e4a4aea444ada07341a72c5d4a69b58d8e76586d4b94ede7f5ef4d) -# else() -# set(_wx_tarball_url https://github.com/wxWidgets/wxWidgets/releases/download/${_wx_git_tag}/wxWidgets-${_wx_version}.tar.bz2) -# set(_wx_tarball_hash d7b3666de33aa5c10ea41bb9405c40326e1aeb74ee725bb88f90f1d50270a224) -# endif() +# Note: The flatpak build builds wxwidgets separately due to CI size constraints. +# ANY CHANGES MADE IN HERE MUST ALSO BE REFLECTED IN `flatpak/io.github.SoftFever.OrcaSlicer.yml`. +# ** THIS INCLUDES BUILD ARGS. ** +# ...if you can find a way around this size limitation, be my guest. orcaslicer_add_cmake_project( wxWidgets - GIT_REPOSITORY "https://github.com/wxWidgets/wxWidgets" - GIT_TAG ${_wx_git_tag} + GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets" GIT_SHALLOW ON - # URL ${_wx_tarball_url} - # URL_HASH SHA256=${_wx_tarball_hash} - PATCH_COMMAND ${_patch_cmd} - DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG + DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${TIFF_PKG} ${JPEG_PKG} CMAKE_ARGS -DwxBUILD_PRECOMP=ON ${_wx_toolkit} @@ -63,6 +39,7 @@ orcaslicer_add_cmake_project( -DwxUSE_UNICODE=ON ${_wx_private_font} -DwxUSE_OPENGL=ON + -DwxUSE_WEBREQUEST=ON -DwxUSE_WEBVIEW=ON ${_wx_edge} -DwxUSE_WEBVIEW_IE=OFF @@ -76,9 +53,10 @@ orcaslicer_add_cmake_project( -DwxUSE_ZLIB=sys -DwxUSE_LIBJPEG=sys -DwxUSE_LIBTIFF=sys + -DwxUSE_NANOSVG=OFF -DwxUSE_EXPAT=sys ) if (MSVC) add_debug_dep(dep_wxWidgets) -endif () \ No newline at end of file +endif () diff --git a/doc/Calibration.md b/doc/Calibration.md index 9a5975ce29..bb4b8422b8 100644 --- a/doc/Calibration.md +++ b/doc/Calibration.md @@ -79,7 +79,7 @@ The PA value for this test will be increased by 0.002 for every 1 mm increase in Steps: 1. Select the printer, filament, and process you would like to use for the test. 2. Examine each corner of the print and mark the height that yields the best overall result. - 3. I selected a height of 8 mm for this case, so the pressure advance value should be calculated as `0.002x8 = 0.016`. + 3. I selected a height of 8 mm for this case, so the pressure advance value should be calculated as `PressureAdvanceStart+(PressureAdvanceStep x measured)` example: `0+(0.002 x 8) = 0.016`. ![tower](https://user-images.githubusercontent.com/103989404/210140231-e886b98d-280a-4464-9781-c74ed9b7d44e.jpg) ![tower_measure](https://user-images.githubusercontent.com/103989404/210140232-885b549b-e3b8-46b9-a24c-5229c9182408.jpg) diff --git a/doc/adaptive-bed-mesh.md b/doc/adaptive-bed-mesh.md index 01e346b135..a711eaff0c 100644 --- a/doc/adaptive-bed-mesh.md +++ b/doc/adaptive-bed-mesh.md @@ -34,7 +34,8 @@ G29 L{adaptive_bed_mesh_min[0]} R{adaptive_bed_mesh_max[0]} F{adaptive_bed_mesh_ ### Klipper: ``` ; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally -BED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=1 ADAPTIVE_MARGIN=0 +; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic +BED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 ``` ### RRF: ``` diff --git a/flatpak/.gitignore b/flatpak/.gitignore new file mode 100644 index 0000000000..49269ac6b0 --- /dev/null +++ b/flatpak/.gitignore @@ -0,0 +1,2 @@ +builddir +.flatpak-builder diff --git a/flatpak/README.md b/flatpak/README.md new file mode 100644 index 0000000000..4445f1e869 --- /dev/null +++ b/flatpak/README.md @@ -0,0 +1,3 @@ +# OrcaSlicer + +This is basically a copy of [com.bambulab.BambuStudio](https://github.com/flathub/com.bambulab.BambuStudio). As such, same rules apply here as does over there. diff --git a/flatpak/entrypoint b/flatpak/entrypoint new file mode 100644 index 0000000000..958d1cd130 --- /dev/null +++ b/flatpak/entrypoint @@ -0,0 +1,15 @@ +#!/usr/bin/env sh + +# Work-around https://gitlab.gnome.org/GNOME/gnome-build-meta/-/issues/754 +grep -q org.freedesktop.Platform.GL.nvidia /.flatpak-info && export WEBKIT_DISABLE_DMABUF_RENDERER=1 + +# Work-around https://github.com/bambulab/BambuStudio/issues/3440 +export LC_ALL=C.UTF-8 + +if [ $BAMBU_STUDIO_DARK_THEME == true ]; then + export GTK_THEME='Adwaita:dark' + # echo "Message: $(date +%T): INFO: using dark theme variant" +fi + +exec /app/bin/orca-slicer "$@" & +$(/app/bin/set-dark-theme-variant.py) & diff --git a/flatpak/images/1.png b/flatpak/images/1.png new file mode 100644 index 0000000000..bf69169a02 Binary files /dev/null and b/flatpak/images/1.png differ diff --git a/flatpak/images/2.png b/flatpak/images/2.png new file mode 100644 index 0000000000..510b7564fb Binary files /dev/null and b/flatpak/images/2.png differ diff --git a/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml b/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml new file mode 100755 index 0000000000..1b2a60d743 --- /dev/null +++ b/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml @@ -0,0 +1,48 @@ + + + io.github.softfever.OrcaSlicer + io.github.softfever.OrcaSlicer.desktop + + io.github.softfever.OrcaSlicer.desktop + + OrcaSlicer + + Get even more perfect prints! + SoftFever + https://github.com/SoftFever/OrcaSlicer + https://github.com/SoftFever/OrcaSlicer/wiki + https://github.com/SoftFever/OrcaSlicer/issues/ + https://ko-fi.com/SoftFever + 0BSD + AGPL-3.0-only + + + 768 + + + keyboard + pointing + + + + https://raw.githubusercontent.com/powpingdone/com.github.softfever.orcaslicer/master/images/1.png + A model ready to be sliced on a buildplate. + + + https://raw.githubusercontent.com/powpingdone/com.github.softfever.orcaslicer/master/images/2.png + + A calibration test ready to be printed out. + + + +

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

+
+ + #009688 + + + https://github.com/SoftFever/OrcaSlicer/commit/951fc8e98a0d5ca0ccb254315646ce7889a44836 + + +
diff --git a/flatpak/io.github.softfever.OrcaSlicer.yml b/flatpak/io.github.softfever.OrcaSlicer.yml new file mode 100755 index 0000000000..f5a148cda0 --- /dev/null +++ b/flatpak/io.github.softfever.OrcaSlicer.yml @@ -0,0 +1,344 @@ +app-id: io.github.softfever.OrcaSlicer +runtime: org.gnome.Platform +runtime-version: "45" +sdk: org.gnome.Sdk +command: entrypoint +separate-locales: true +rename-icon: OrcaSlicer +finish-args: + - --share=ipc + - --socket=x11 + - --share=network + - --device=all + - --filesystem=home + - --filesystem=xdg-run/gvfs + - --filesystem=/run/media + - --filesystem=/media + # Allow OrcaSlicer to talk to other instances + - --talk-name=io.github.softfever.OrcaSlicer.InstanceCheck.* + - --system-talk-name=org.freedesktop.UDisks2 + # set dark theme + - --env=BAMBU_STUDIO_DARK_THEME=false + +modules: + + # JPEG codec for the liveview + - name: gst-plugins-good + buildsystem: meson + config-opts: + - -Dauto_features=disabled + - -Djpeg=enabled + - -Ddoc=disabled + - -Dexamples=disabled + - -Dtests=disabled + sources: + - type: archive + url: https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.22.8.tar.xz + sha256: e305b9f07f52743ca481da0a4e0c76c35efd60adaf1b0694eb3bb021e2137e39 + + # xprop, xlib is needed to manipulate the X11 window and set _GTK_THEME_VARIANT dark on X11 + # and paint the window dark when PRUSA_SLICER_DARK_THEME is true + # see: entrypoint & set-dark-theme-variant.py (originated from spotify client flatpak) + - name: xprop + sources: + - type: archive + url: http://mirrors.ircam.fr/pub/x.org/individual/app/xprop-1.2.5.tar.gz + sha256: b7bf6b6be6cf23e7966a153fc84d5901c14f01ee952fbd9d930aa48e2385d670 + - name: python-setuptools_scm + buildsystem: simple + build-commands: + - pip3 install --no-deps --no-build-isolation --verbose --prefix=${FLATPAK_DEST} . + sources: + - type: archive + url: https://files.pythonhosted.org/packages/57/38/930b1241372a9f266a7df2b184fb9d4f497c2cef2e016b014f82f541fe7c/setuptools_scm-6.0.1.tar.gz + sha256: d1925a69cb07e9b29416a275b9fadb009a23c148ace905b2fb220649a6c18e92 + - name: python-xlib + buildsystem: simple + build-commands: + - pip3 install --no-deps --no-build-isolation --verbose --prefix=${FLATPAK_DEST} . + sources: + - type: archive + url: https://files.pythonhosted.org/packages/86/f5/8c0653e5bb54e0cbdfe27bf32d41f27bc4e12faa8742778c17f2a71be2c0/python-xlib-0.33.tar.gz + sha256: 55af7906a2c75ce6cb280a584776080602444f75815a7aff4d287bb2d7018b32 + + # For libOSMesa + - name: mesa + buildsystem: meson + config-opts: + - -Dosmesa=classic + - -Ddri-drivers=[] + - -Dgallium-drivers=[] + - -Dvulkan-drivers=[] + - -Dplatforms=[] + build-options: + arch: + aarch64: + config-opts: + - -Dlibunwind=disabled + cleanup: + - /share/drirc.d + - /include + - "*.a" + sources: + - type: archive + url: https://archive.mesa3d.org/mesa-20.2.6.tar.xz + sha256: f12ca3c6c622f11cd79ad66b4220f04514fa96f795062fe92a37339ab19885db + + - name: glu + config-opts: + - --disable-static + sources: + - type: archive + url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.2.tar.xz + sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 + cleanup: + - /include + - /lib/*.a + - /lib/*.la + - /lib/pkgconfig + + - name: kde-extra-cmake-modules + buildsystem: cmake-ninja + sources: + - type: git + url: https://github.com/KDE/extra-cmake-modules + tag: v5.249.0 + cleanup: + - / + + - name: orca_wxwidgets + buildsystem: simple + build-commands: + - | + mkdir builddir && cd builddir + cmake ../ -GNinja \ + -DwxBUILD_PRECOMP=ON \ + -DwxBUILD_TOOLKIT=gtk3 \ + -DwxBUILD_DEBUG_LEVEL=0 \ + -DwxBUILD_SAMPLES=OFF \ + -DwxBUILD_SHARED=ON \ + -DwxUSE_MEDIACTRL=ON \ + -DwxUSE_DETECT_SM=OFF \ + -DwxUSE_UNICODE=ON \ + -DwxUSE_PRIVATE_FONTS=ON \ + -DwxUSE_OPENGL=ON \ + -DwxUSE_WEBREQUEST=ON \ + -DwxUSE_WEBVIEW=ON \ + -DwxUSE_WEBVIEW_EDGE=OFF \ + -DwxUSE_WEBVIEW_IE=OFF \ + -DwxUSE_REGEX=builtin \ + -DwxUSE_LIBSDL=OFF \ + -DwxUSE_XTEST=OFF \ + -DwxUSE_STC=OFF \ + -DwxUSE_AUI=ON \ + -DwxUSE_LIBPNG=sys \ + -DwxUSE_ZLIB=sys \ + -DwxUSE_LIBJPEG=sys \ + -DwxUSE_LIBTIFF=sys \ + -DwxUSE_EXPAT=sys \ + -DBUILD_SHARED_LIBS:BOOL=ON \ + -DCMAKE_INSTALL_PREFIX:STRING=/app \ + -DCMAKE_PREFIX_PATH=/app \ + -DCMAKE_BUILD_TYPE=Release + cmake --build . --target install -j$FLATPAK_BUILDER_N_JOBS + sources: + - type: git + url: https://github.com/SoftFever/Orca-deps-wxWidgets + branch: master + path: ../ + cleanup: + - "*.la" + - "*.a" + - "*.cmake" + - /include + - /app/bin/* + + - name: orca_deps + buildsystem: simple + build-commands: + # start build + - | + mkdir deps/build && cd deps/build + cmake ../ \ + -DDEP_WX_GTK3=ON \ + -DDEP_DOWNLOAD_DIR=/run/build/orca_deps/external-packages \ + -DCMAKE_PREFIX_PATH=/app \ + -DDESTDIR=/app \ + -DCMAKE_INSTALL_LIBDIR=/app/lib \ + -DFLATPAK=ON \ + -DCMAKE_INSTALL_PREFIX=/app + cmake --build . + rm -r /run/build/orca_deps/external-packages + + cleanup: + - /app/include + - "*.a" + - "*.la" + - /app/lib/cmake + + sources: + # - + # Section bellow fetches all OrcaSlicer dependencies before the build process and stores them in external-packages/*/* . + # -DDEP_DOWNLOAD_DIR is set in the build process which has to match with dest. + # + # NOTE: The url, dest folder name and sha256 must match from OrcaSlicer's cmake scripts and folder names in OrcaSlicer/deps/ + # - + + # OrcaSlicer Source Archive + - type: dir + path: ../ + + # Blosc + - type: file + url: https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip + dest: external-packages/Blosc + sha256: dcb48bf43a672fa3de6a4b1de2c4c238709dad5893d1e097b8374ad84b1fc3b3 + + # Cereal + - type: file + url: https://github.com/USCiLab/cereal/archive/refs/tags/v1.3.0.zip + dest: external-packages/Cereal + sha256: 71642cb54658e98c8f07a0f0d08bf9766f1c3771496936f6014169d3726d9657 + + # CGAL + - type: file + url: https://github.com/CGAL/cgal/archive/refs/tags/v5.4.zip + dest: external-packages/CGAL + sha256: d7605e0a5a5ca17da7547592f6f6e4a59430a0bc861948974254d0de43eab4c0 + + # GMP + - type: file + url: https://github.com/SoftFever/OrcaSlicer_deps/releases/download/gmp-6.2.1/gmp-6.2.1.tar.bz2 + dest: external-packages/GMP + sha256: eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c + + # MPFR + - type: file + url: https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.bz2 + dest: external-packages/MPFR + sha256: b9df93635b20e4089c29623b19420c4ac848a1b29df1cfd59f26cab0d2666aa0 + + # NLopt + - type: file + url: https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz + dest: external-packages/NLopt + sha256: c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae + + # OCCT + - type: file + url: https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip + dest: external-packages/OCCT + sha256: 28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc + + # OpenCSG + - type: file + url: https://github.com/floriankirsch/OpenCSG/archive/refs/tags/opencsg-1-4-2-release.zip + dest: external-packages/OpenCSG + sha256: 51afe0db79af8386e2027d56d685177135581e0ee82ade9d7f2caff8deab5ec5 + + # OpenCV + - type: file + url: https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz + dest: external-packages/OpenCV + sha256: 1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277 + + # OpenEXR + - type: file + url: https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip + dest: external-packages/OpenEXR + sha256: 0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de + + # OpenVDB + - type: file + url: https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip + dest: external-packages/OpenVDB + sha256: f353e7b99bd0cbfc27ac9082de51acf32a8bc0b3e21ff9661ecca6f205ec1d81 + + # Qhull + - type: file + url: https://github.com/qhull/qhull/archive/v8.0.1.zip + dest: external-packages/Qhull + sha256: 5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b + + # TBB + - type: file + url: https://github.com/oneapi-src/oneTBB/archive/refs/tags/v2021.5.0.zip + dest: external-packages/TBB + sha256: 83ea786c964a384dd72534f9854b419716f412f9d43c0be88d41874763e7bb47 + + # Boost + - type: file + url: https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz + dest: external-packages/Boost + sha256: 4d27e9efed0f6f152dc28db6430b9d3dfb40c0345da7342eaa5a987dde57bd95 + + # GLFW + - type: file + url: https://github.com/glfw/glfw/archive/refs/tags/3.3.7.zip + dest: external-packages/GLFW + sha256: e02d956935e5b9fb4abf90e2c2e07c9a0526d7eacae8ee5353484c69a2a76cd0 + + - name: OrcaSlicer + buildsystem: simple + build-commands: + - | + mkdir -p build && cd build + CXXFLAGS=-std=gnu++20 cmake ../ \ + -DSLIC3R_PCH=OFF \ + -DSLIC3R_FHS=ON \ + -DSLIC3R_GTK=3 \ + -DSLIC3R_STATIC=ON \ + -DSLIC3R_BUILD_TESTS=OFF \ + -DSLIC3R_DESKTOP_INTEGRATION=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DFLATPAK=ON \ + -DBBL_RELEASE_TO_PUBLIC=1 \ + -DCMAKE_PREFIX_PATH=/app \ + -DCMAKE_INSTALL_PREFIX=/app + CXXFLAGS=-std=gnu++20 cmake --build . --target install -j$FLATPAK_BUILDER_N_JOBS + + cleanup: + - /include + + post-install: + + - | # Desktop Integration files + install -Dm644 -t /app/share/icons/hicolor/scalable/apps/ resources/images/OrcaSlicer.svg + install -Dm644 ${FLATPAK_ID}.metainfo.xml /app/share/metainfo/${FLATPAK_ID}.metainfo.xml + mv /app/share/applications/OrcaSlicer.desktop /app/share/applications/${FLATPAK_ID}.desktop + desktop-file-edit --set-key=Exec --set-value="entrypoint %U" /app/share/applications/${FLATPAK_ID}.desktop + install -Dm755 set-dark-theme-variant.py /app/bin + install -Dm755 entrypoint /app/bin + install -Dm755 umount /app/bin + + sources: + # - + # Section bellow fetches all OrcaSlicer dependencies before the build process and stores them in external-packages/*/* . + # -DDEP_DOWNLOAD_DIR is set in the build process which has to match with dest. + # + # NOTE: The url, dest folder name and sha256 must match from OrcaSlicer's cmake scripts and folder names in OrcaSlicer/deps/ + # - + + # OrcaSlicer Source Archive + - type: dir + path: ../ + + # AppData metainfo for Gnome Software & Co. + - type: file + path: io.github.softfever.OrcaSlicer.metainfo.xml + + # script to set dark theme variant + - type: file + path: set-dark-theme-variant.py + + # start-up script + # README: workaround for the following issues, also enables dark theme variant: + # SEE: https://github.com/flathub/com.bambulab.BambuStudio/issues/27 + # SEE: https://github.com/flathub/com.bambulab.BambuStudio/issues/3 + # SEE: https://github.com/prusa3d/PrusaSlicer/issues/2365 + - type: file + path: entrypoint + + # umount wrapper used to redirect umount calls to udisk2 + - type: file + path: umount diff --git a/flatpak/set-dark-theme-variant.py b/flatpak/set-dark-theme-variant.py new file mode 100644 index 0000000000..78bbf5d690 --- /dev/null +++ b/flatpak/set-dark-theme-variant.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +import Xlib +import Xlib.display +import time +import subprocess +import os +import sys + + +disp = Xlib.display.Display() +root = disp.screen().root + +NET_CLIENT_LIST = disp.intern_atom('_NET_CLIENT_LIST') + + +def set_theme_variant_by_window_id(id, variant): + # Use subprocess to call + # xprop and set the variant from id. + try: + s = subprocess.call(['xprop', '-f', '_GTK_THEME_VARIANT', '8u', '-set', '_GTK_THEME_VARIANT', variant, '-id', str(id)], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + if s == 0: + return True + return False + except Exception as ex: + return False + + +def set_theme_variant_from_win_id_collection(win_id_collection, variant): + # Loop though all of the collected + # window ids and set theme variant + for win_id in win_id_collection: + set_theme_variant_by_window_id(win_id, variant) + + +def collection_win_id_from_wm_class_name(win_class_name): + + collect = [] + + # Loop though all of the windows + # and collect id's those that match + # win_class: prusa-slicer + for win_id in root.get_full_property(NET_CLIENT_LIST, Xlib.X.AnyPropertyType).value: + try: + win = disp.create_resource_object('window', win_id) + if not win.get_wm_transient_for(): + win_class = win.get_wm_class() + if win_id and win_class_name in win_class: + collect.append( + win_id) if win_id not in collect else collect + except Xlib.error.BadWindow: + pass + + return collect + + +if __name__ == '__main__': + + if os.environ.get('PRUSA_SLICER_DARK_THEME', 'false') != 'true': + sys.exit(0) + + # Listen for X Property Change events. + root.change_attributes(event_mask=Xlib.X.PropertyChangeMask) + # the class name of the slicer window + win_class_name = 'prusa-slicer' + # the variant to set + variant = 'dark' + + start = time.time() + + while True: + # collect all of the window ids + collect = collection_win_id_from_wm_class_name(win_class_name) + # give PrusaSlicer window 2 secs to + # collect the wanted window ids + # set the theme variant and exit + if time.time() - start <= 2: + # disp.next_event() blocks if no events are + # queued. In combination with while True + # it creates a very simple event loop. + disp.next_event() + set_theme_variant_from_win_id_collection(collect, variant) + else: + break diff --git a/flatpak/umount b/flatpak/umount new file mode 100755 index 0000000000..5cbf32e6b8 --- /dev/null +++ b/flatpak/umount @@ -0,0 +1,10 @@ +#!/usr/bin/env sh +if [ $# -eq 0 ]; then + echo "No arguments supplied" + exit 1 +fi + +DEVICE=$(basename $(findmnt -oSOURCE -n "$@") ) + +exec /usr/bin/gdbus call -y -d org.freedesktop.UDisks2 -o /org/freedesktop/UDisks2/block_devices/$DEVICE -m org.freedesktop.UDisks2.Filesystem.Unmount "{'b': <'false'>}" 1> /dev/null + diff --git a/linux.d/README.md b/linux.d/README.md new file mode 100644 index 0000000000..7f05a77cd4 --- /dev/null +++ b/linux.d/README.md @@ -0,0 +1,3 @@ +Files in this directory are named for the **exact** output of `awk -F= '/^ID=/ {print $2}' /etc/os-release` for their respective distribution. + +When `BuildLinux.sh` is executed, the respective file for the distribution will be sourced so the distribution specific instructions/logic are used. diff --git a/linux.d/arch b/linux.d/arch new file mode 100644 index 0000000000..bae4c06e99 --- /dev/null +++ b/linux.d/arch @@ -0,0 +1,44 @@ +# these are the Arch Linux specific build functions +FOUND_GTK3=$(pacman -Q gtk3) + +# Addtional Dev packages for OrcaSlicer +export REQUIRED_DEV_PACKAGES=( + cmake + curl + dbus + eglexternalplatform + extra-cmake-modules + file + gettext + git + glew + gstreamer + gstreamermm + gtk3 + libmspack + libsecret + mesa + ninja + openssl + texinfo + wayland-protocols + webkit2gtk + wget +) + +if [[ -n "$UPDATE_LIB" ]] +then + echo -n -e "Updating linux ...\n" + NEEDED_PKGS="" + for PKG in ${REQUIRED_DEV_PACKAGES[@]}; do + pacman -Q ${PKG} > /dev/null || NEEDED_PKGS+=" ${PKG}" + done + + if [ -n "${NEEDED_PKGS}" ]; then + sudo pacman -Syy --noconfirm ${NEEDED_PKGS} + fi + echo -e "done\n" + exit 0 +fi + +FOUND_GTK3_DEV=${FOUND_GTK3} diff --git a/linux.d/debian b/linux.d/debian new file mode 100644 index 0000000000..fd13c706c1 --- /dev/null +++ b/linux.d/debian @@ -0,0 +1,51 @@ +FOUND_GTK3=$(dpkg -l libgtk* | grep gtk-3) + +REQUIRED_DEV_PACKAGES=( + autoconf + build-essential + cmake + eglexternalplatform-dev + extra-cmake-modules + file + gettext + git + libcurl4-openssl-dev + libdbus-1-dev + libglew-dev + libgstreamerd-3-dev + libgtk-3-dev + libmspack-dev + libosmesa6-dev + libsecret-1-dev + libssl-dev + libtool + libudev-dev + libwebkit2gtk-4.0-dev + ninja-build + texinfo + wget +) + +if [[ -n "$UPDATE_LIB" ]] +then + # for ubuntu 22+ and 23+: + ubu_major_version="$(grep VERSION_ID /etc/os-release | cut -d "=" -f 2 | cut -d "." -f 1 | tr -d /\"/)" + if [ $ubu_major_version == "22" ] || [ $ubu_major_version == "23" ] + then + REQUIRED_DEV_PACKAGES+=(curl libfuse-dev libssl-dev libcurl4-openssl-dev m4) + fi + if [[ -n "$BUILD_DEBUG" ]] + then + REQUIRED_DEV_PACKAGES+=(libssl-dev libcurl4-openssl-dev) + fi + # TODO: optimize this by checking which, if any, packages are already installed + + # install them all at once + sudo apt update + sudo apt install -y ${REQUIRED_DEV_PACKAGES[@]} + + echo -e "done\n" + exit 0 +fi + +FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '') diff --git a/linux.d/fedora b/linux.d/fedora new file mode 100644 index 0000000000..3a34072891 --- /dev/null +++ b/linux.d/fedora @@ -0,0 +1,48 @@ +FOUND_GTK3=$(rpm -qa | grep -P '^gtk3' || true) + +REQUIRED_DEV_PACKAGES=( + autoconf + automake + cmake + dbus-devel + eglexternalplatform-devel + extra-cmake-modules + file + gcc + gcc-c++ + gettext + git + gstreamer1-devel + gstreamermm-devel + gtk3-devel + libmspack-devel + libsecret-devel + libtool + m4 + mesa-libGLU-devel + mesa-libOSMesa-devel + ninja-build + openssl-devel + perl-FindBin + texinfo + wayland-protocols-devel + webkit2gtk4.0-devel + wget + libcurl-devel +) + +if [[ -n "$UPDATE_LIB" ]] +then + NEEDED_PKGS="" + for PKG in ${REQUIRED_DEV_PACKAGES[@]}; do + rpm -q ${PKG} > /dev/null || NEEDED_PKGS+=" ${PKG}" + done + + if [ -n "${NEEDED_PKGS}" ]; then + sudo dnf install -y ${NEEDED_PKGS} + fi + echo -e "done\n" + exit 0 +fi + +FOUND_GTK3_DEV=$(rpm -qa | grep -P '^gtk3-devel' || true) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index d091dd350b..69d4c8023d 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -257,6 +257,9 @@ msgstr "" msgid "World coordinates" msgstr "" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "" @@ -1351,9 +1354,6 @@ msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "" -msgid "V" -msgstr "" - 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." @@ -1449,6 +1449,9 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "" +msgid "Choose ZIP file" +msgstr "" + msgid "Choose one file (gcode/3mf):" msgstr "" @@ -1512,6 +1515,11 @@ msgstr "" msgid "Select a G-code file:" msgstr "" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" + msgid "Import File" msgstr "" @@ -1738,7 +1746,7 @@ msgstr "" msgid "Filament %d" msgstr "" -msgid "active" +msgid "current" msgstr "" msgid "Scale to build volume" @@ -1831,6 +1839,9 @@ msgstr "" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "" + msgid "Show Labels" msgstr "" @@ -1882,6 +1893,12 @@ msgstr "" msgid "arrange current plate" msgstr "" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "" @@ -1915,9 +1932,6 @@ msgstr "" msgid "Set Filament for selected items" msgstr "" -msgid "current" -msgstr "" - msgid "Unlock" msgstr "" @@ -2234,9 +2248,6 @@ msgstr "" msgid "Jump to Layer" msgstr "" -msgid "Jump to layer" -msgstr "" - msgid "Please enter the layer number" msgstr "" @@ -2306,7 +2317,7 @@ msgstr "" msgid "Connection to printer failed" msgstr "" -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "" msgid "Connecting..." @@ -2330,10 +2341,10 @@ msgstr "" msgid "AMS not connected" msgstr "" -msgid "Load Filament" +msgid "Load" msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "" msgid "Ext Spool" @@ -2351,7 +2362,7 @@ msgstr "" msgid "Calibrating AMS..." msgstr "" -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" msgid "Calibrate again" @@ -2392,7 +2403,7 @@ msgstr "" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" msgid "Edit" @@ -2630,10 +2641,7 @@ 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2722,10 +2730,12 @@ msgstr "" msgid "You need to select the material type and color first." msgstr "" -msgid "Please input a valid value (K in 0~0.3)" +#, possible-c-format, possible-boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, possible-c-format, possible-boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2824,27 +2834,14 @@ msgstr "" msgid "Print with the filament mounted on the back of chassis" msgstr "" -msgid "Cabin humidity" +msgid "Current 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 "" - -msgid "Desiccant status" -msgstr "" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" msgid "" @@ -2894,6 +2891,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "" @@ -2906,7 +2909,7 @@ msgid "" msgstr "" msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" @@ -2947,6 +2950,14 @@ msgid "" "automatically when current filament runs out" msgstr "" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "" @@ -3012,6 +3023,51 @@ msgstr "" msgid "Stack overflow" msgstr "" +msgid "Running post-processing scripts" +msgstr "" + +msgid "Successfully executed post-processing script" +msgstr "" + +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, possible-boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, possible-boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "" @@ -3022,13 +3078,6 @@ msgid "" "Source file %2%." msgstr "" -#, possible-boost-format -msgid "Succeed to export G-code to %1%" -msgstr "" - -msgid "Running post-processing scripts" -msgstr "" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" @@ -3036,6 +3085,222 @@ msgstr "" msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" +msgid "Device" +msgstr "" + +msgid "Task Sending" +msgstr "" + +msgid "Task Sent" +msgstr "" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "" + +msgid "No task" +msgstr "" + +msgid "View" +msgstr "" + +msgid "N/A" +msgstr "" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "" + +msgid "Task Name" +msgstr "" + +msgid "Device Status" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Idle" +msgstr "" + +msgid "Printing" +msgstr "" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "" + +msgid "Slicing" +msgstr "" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Task Status" +msgstr "" + +msgid "Sent Time" +msgstr "" + +msgid "There are no tasks to be sent!" +msgstr "" + +msgid "No historical tasks!" +msgstr "" + +msgid "Loading..." +msgstr "" + +msgid "No AMS" +msgstr "" + +msgid "Send to Multi-device" +msgstr "" + +msgid "Preparing print job" +msgstr "" + +msgid "Abnormal print file data. Please slice again" +msgstr "" + +msgid "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "" + +msgid "Use AMS" +msgstr "" + +msgid "Select Printers" +msgstr "" + +msgid "Ams Status" +msgstr "" + +msgid "Printing Options" +msgstr "" + +msgid "Bed Leveling" +msgstr "" + +msgid "Timelapse" +msgstr "" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" + +msgid "Wait" +msgstr "" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" + +msgid "Send" +msgstr "" + +msgid "Name is invalid;" +msgstr "" + +msgid "illegal characters:" +msgstr "" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "" + msgid "Origin" msgstr "" @@ -3101,6 +3366,19 @@ msgstr "" msgid "Bed Shape" msgstr "" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" + +msgid "Please check.\n" +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" @@ -3158,20 +3436,6 @@ msgid "" "The value will be reset to 0." msgstr "" -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 "" - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3216,6 +3480,20 @@ msgid "" "Reset to 0." msgstr "" +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 "" + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr "" + +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 "" + msgid "Auto bed leveling" msgstr "" @@ -3321,18 +3599,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "" @@ -3478,9 +3744,6 @@ msgstr "" msgid "parameter name" msgstr "" -msgid "N/A" -msgstr "" - #, possible-c-format, possible-boost-format msgid "%s can't be percentage" msgstr "" @@ -3492,6 +3755,10 @@ msgstr "" msgid "Parameter validation" msgstr "" +#, possible-c-format, possible-boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" + msgid "Value is out of range." msgstr "" @@ -3502,6 +3769,18 @@ msgid "" "NO for %s %s." msgstr "" +#, possible-boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" + +msgid "Input value is out of range" +msgstr "" + +msgid "Some extension in the input is invalid" +msgstr "" + #, possible-boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" @@ -3569,10 +3848,10 @@ msgstr "" msgid "Flushed" msgstr "" -msgid "Total" +msgid "Tower" msgstr "" -msgid "Tower" +msgid "Total" msgstr "" msgid "Total Estimation" @@ -3677,6 +3956,12 @@ msgstr "" msgid "Normal mode" msgstr "" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "" @@ -3770,6 +4055,9 @@ msgstr "" msgid "Spacing" msgstr "" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "" @@ -3782,9 +4070,6 @@ msgstr "" msgid "Align to Y axis" msgstr "" -msgid "Add" -msgstr "" - msgid "Add plate" msgstr "" @@ -3908,6 +4193,9 @@ msgstr "" msgid "Go Live" msgstr "" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "" @@ -3958,13 +4246,10 @@ msgstr "" msgid "Logging" msgstr "" -msgid "Prepare" -msgstr "" - msgid "Preview" msgstr "" -msgid "Device" +msgid "Multi-device" msgstr "" msgid "Project" @@ -3991,9 +4276,6 @@ msgstr "" msgid "Export G-code file" msgstr "" -msgid "Send" -msgstr "" - msgid "Export plate sliced file" msgstr "" @@ -4114,6 +4396,12 @@ msgstr "" msgid "Load a model" msgstr "" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "" @@ -4147,7 +4435,7 @@ msgstr "" msgid "Export current plate as G-code" msgstr "" -msgid "Export &Configs" +msgid "Export Preset Bundle" msgstr "" msgid "Export current configuration to files" @@ -4249,9 +4537,6 @@ msgstr "" msgid "Preferences" msgstr "" -msgid "View" -msgstr "" - msgid "Help" msgstr "" @@ -4318,10 +4603,10 @@ msgstr "" msgid "Export toolpaths as OBJ" msgstr "" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "" -msgid "Open Studio" +msgid "Open Slicer" msgstr "" msgid "&Quit" @@ -4408,39 +4693,48 @@ msgstr "" msgid "Synchronization" msgstr "" -msgid "Initialize failed (No Device)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -msgid "Initialize failed (No Camera Device)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Please confirm if the printer is connected." msgstr "" -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" +msgid "Printer camera is malfunctioning." msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." msgstr "" msgid "Initializing..." msgstr "" -#, possible-c-format, possible-boost-format -msgid "Initialize failed (%s)!" +msgid "Connection Failed. Please check the network and try again" msgstr "" -msgid "Network unreachable" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." msgstr "" -#, possible-c-format, possible-boost-format -msgid "Stopped [%d]!" +msgid "The printer has been logged out and cannot connect." msgstr "" msgid "Stopped." @@ -4467,19 +4761,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "" +msgid "Network unreachable" +msgstr "" + msgid "Information" msgstr "" msgid "Playing..." msgstr "" -#, possible-c-format, possible-boost-format -msgid "Load failed [%d]!" -msgstr "" - -msgid "Loading..." -msgstr "" - msgid "Year" msgstr "" @@ -4498,9 +4788,6 @@ msgstr "" msgid "Show all files, recent first." msgstr "" -msgid "Timelapse" -msgstr "" - msgid "Switch to timelapse files." msgstr "" @@ -4528,6 +4815,12 @@ msgstr "" msgid "Batch manage files." msgstr "" +msgid "Refresh" +msgstr "" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "" @@ -4538,12 +4831,31 @@ msgstr "" msgid "Loading file list..." msgstr "" -#, possible-c-format, possible-boost-format -msgid "No files [%d]" +msgid "No files" +msgstr "" + +msgid "Load failed" +msgstr "" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." msgstr "" #, possible-c-format, possible-boost-format -msgid "Load failed [%d]" +msgid "Initialize failed (%s)!" msgstr "" #, possible-c-format, possible-boost-format @@ -4566,10 +4878,10 @@ msgstr "" msgid "Fetching model infomations ..." msgstr "" -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "" -msgid "Failed to parse model infomations." +msgid "Failed to parse model information." msgstr "" msgid "" @@ -4581,6 +4893,12 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "" +#, possible-c-format, possible-boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" + msgid "Download waiting..." msgstr "" @@ -4597,13 +4915,12 @@ msgstr "" msgid "Downloading %d%%..." msgstr "" -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4661,12 +4978,6 @@ msgstr "" msgid "Printing Progress" msgstr "" -msgid "Resume" -msgstr "" - -msgid "Stop" -msgstr "" - msgid "0" msgstr "" @@ -4707,6 +5018,9 @@ msgstr "" msgid "Control" msgstr "" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "" @@ -4725,9 +5039,6 @@ msgstr "" msgid "Bed" msgstr "" -msgid "Unload" -msgstr "" - msgid "Debug Info" msgstr "" @@ -4895,9 +5206,6 @@ msgstr "" msgid "Update" msgstr "" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "" @@ -4928,6 +5236,35 @@ msgstr "" msgid "Skip" msgstr "" +msgid "Newer 3mf version" +msgstr "" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "" + +msgid "Latest Version: " +msgstr "" + +msgid "Not for now" +msgstr "" + msgid "3D Mouse disconnected." msgstr "" @@ -4997,10 +5334,10 @@ msgstr[1] "" msgid "ERROR" msgstr "" -msgid "CANCELED" +msgid "COMPLETED" msgstr "" -msgid "COMPLETED" +msgid "CANCELED" msgstr "" msgid "Cancel upload" @@ -5108,6 +5445,25 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "" + +msgid "Hardened Steel" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "" @@ -5293,9 +5649,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "" -msgid "Newer 3mf version" -msgstr "" - #, possible-c-format, possible-boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5336,6 +5689,9 @@ msgstr "" msgid "The name may show garbage characters!" msgstr "" +msgid "Remember my choice." +msgstr "" + #, possible-boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5450,9 +5806,6 @@ msgstr "" msgid "Error during reload" msgstr "" -msgid "Slicing" -msgstr "" - msgid "There are warnings after slicing models:" msgstr "" @@ -5505,9 +5858,15 @@ msgstr "" msgid "prepare 3mf file..." msgstr "" +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "" +msgid "Download failed, File size exception." +msgstr "" + #, possible-c-format, possible-boost-format msgid "Project downloaded %d%%" msgstr "" @@ -5529,6 +5888,20 @@ msgstr "" msgid "Error occurs while loading G-code file" msgstr "" +#. TRN %1% is archive path +#, possible-boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "" + +#. TRN: First argument = path to file, second argument = error description +#, possible-boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "" + +#, possible-boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" + msgid "Drop project file" msgstr "" @@ -5553,18 +5926,12 @@ msgstr "" 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 "" @@ -5594,7 +5961,23 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." +msgstr "" + +#, possible-boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "" + +#, possible-boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "" + +#, possible-boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "" + +#, possible-boost-format +msgid "Reason: \"%1%\" and another part have no intersection." msgstr "" msgid "" @@ -5740,6 +6123,11 @@ msgstr "" msgid "Stealth Mode" msgstr "" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -5755,6 +6143,21 @@ msgstr "" msgid "Units" msgstr "" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -5764,6 +6167,18 @@ msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "" @@ -5778,6 +6193,12 @@ msgstr "" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "" @@ -5796,6 +6217,29 @@ msgstr "" msgid "If enabled, auto-calculate everytime the color changed." msgstr "" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "" + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -5835,6 +6279,42 @@ msgstr "" msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "" @@ -6004,10 +6484,19 @@ msgstr "" msgid "Create printer" msgstr "" -msgid "Incompatible" +msgid "The selected preset is null!" msgstr "" -msgid "The selected preset is null!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." msgstr "" msgid "Plate name" @@ -6019,7 +6508,13 @@ msgstr "" msgid "Print sequence" msgstr "" -msgid "Customize" +msgid "Same as Global" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" msgstr "" msgid "First layer filament sequence" @@ -6083,15 +6578,6 @@ msgstr "" msgid "Preset Inside Project" msgstr "" -msgid "Name is invalid;" -msgstr "" - -msgid "illegal characters:" -msgstr "" - -msgid "illegal suffix:" -msgstr "" - msgid "Name is unavailable." msgstr "" @@ -6109,15 +6595,6 @@ msgstr "" 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 "" @@ -6175,9 +6652,6 @@ msgstr "" msgid "Log out successful." msgstr "" -msgid "Offline" -msgstr "" - msgid "Busy" msgstr "" @@ -6202,12 +6676,6 @@ msgstr "" msgid "Send print job to" msgstr "" -msgid "Refresh" -msgstr "" - -msgid "Bed Leveling" -msgstr "" - msgid "Flow Dynamics Calibration" msgstr "" @@ -6220,9 +6688,6 @@ msgstr "" msgid "Error code" msgstr "" -msgid "Printer local connection failed, please try again." -msgstr "" - msgid "No login account, only printers in LAN mode are displayed" msgstr "" @@ -6285,7 +6750,10 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "" -msgid "The selected printer is incompatible with the chosen printer presets." +#, possible-c-format, possible-boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" msgid "An SD card needs to be inserted to record timelapse." @@ -6334,41 +6802,32 @@ msgid "nozzle in preset: %s %s" msgstr "" #, possible-c-format, possible-boost-format -msgid "nozzle memorized: %.1f %s" +msgid "nozzle memorized: %.2f %s" msgstr "" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" #, possible-c-format, possible-boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" + +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -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." @@ -6380,12 +6839,18 @@ msgstr "" msgid "Modifying the device name" msgstr "" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" @@ -6428,6 +6893,26 @@ msgstr "" msgid "Unknown Failure" msgstr "" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "" @@ -6579,6 +7064,20 @@ msgstr "" msgid "Ignore" msgstr "" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -6652,6 +7151,9 @@ msgstr "" msgid "Tree supports" msgstr "" +msgid "Skirt" +msgstr "" + msgid "Prime tower" msgstr "" @@ -6811,6 +7313,14 @@ msgstr "" msgid "Printable space" msgstr "" +#. TRN: First argument is parameter name, the second one is the value. +#, possible-boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "" @@ -7024,16 +7534,27 @@ msgid "" msgstr "" #, possible-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?" +msgid "You have changed some settings of preset \"%1%\". " msgstr "" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "" + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7065,7 +7586,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7144,6 +7665,56 @@ msgstr "" msgid "The configuration is up to date." msgstr "" +msgid "Obj file Import color" +msgstr "" + +msgid "Specify number of colors:" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "" + +msgid "Recommended " +msgstr "" + +msgid "Current filament colors:" +msgstr "" + +msgid "Quick set:" +msgstr "" + +msgid "Color match" +msgstr "" + +msgid "Approximate color matching." +msgstr "" + +msgid "Append" +msgstr "" + +msgid "Add consumable extruder after existing extruders." +msgstr "" + +msgid "Reset mapped extruders." +msgstr "" + +msgid "Cluster colors" +msgstr "" + +msgid "Map Filament" +msgstr "" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" + msgid "Ramming customization" msgstr "" @@ -7217,6 +7788,32 @@ msgstr "" msgid "To" msgstr "" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "" @@ -7484,6 +8081,12 @@ msgstr "" msgid "Shift+Mouse wheel" msgstr "" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "" @@ -7511,6 +8114,42 @@ msgstr "" msgid "Done" msgstr "" +msgid "resume" +msgstr "" + +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -7564,12 +8203,6 @@ msgstr "" msgid "Update firmware" msgstr "" -msgid "Printing" -msgstr "" - -msgid "Idle" -msgstr "" - msgid "Beta version" msgstr "" @@ -7599,7 +8232,7 @@ 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." +"update next time starting Orca." msgstr "" msgid "Extension Board" @@ -7729,9 +8362,6 @@ msgstr "" msgid "Gap infill" msgstr "" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "" @@ -8269,6 +8899,15 @@ msgstr "" msgid "First layer print sequence" msgstr "" +msgid "Other layers print sequence" +msgstr "" + +msgid "The number of other layers print sequence" +msgstr "" + +msgid "Other layers filament sequence" +msgstr "" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "" @@ -8906,7 +9545,7 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -8954,6 +9593,12 @@ msgid "" "printing." msgstr "" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9042,6 +9687,22 @@ msgid "" "at least at minimum speed to reduce the frequency of starting and stoping" msgstr "" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "" @@ -9271,7 +9932,7 @@ msgstr "" msgid "(Undefined)" msgstr "" -msgid "Infill direction" +msgid "Sparse infill direction" msgstr "" msgid "" @@ -9279,6 +9940,20 @@ msgid "" "of line" msgstr "" +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "" @@ -9324,6 +9999,9 @@ msgstr "" msgid "Lightning" msgstr "" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -9491,6 +10169,9 @@ msgid "" "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "" @@ -9551,12 +10232,27 @@ msgid "" "printed more slowly" msgstr "" +msgid "Precise Z height" +msgstr "" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" + 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" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" msgid "Add line number" @@ -9746,9 +10442,24 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" msgid "Speed of internal sparse infill" @@ -10296,6 +11007,24 @@ msgid "" "travel. Set zero to disable retraction" msgstr "" +msgid "Long retraction when cut(experimental)" +msgstr "" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" + +msgid "Retraction distance when cut" +msgstr "" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" + msgid "Z hop when retract" msgstr "" @@ -10593,6 +11322,29 @@ msgstr "" msgid "How many layers of skirt. Usually only one layer" msgstr "" +msgid "Draft shield" +msgstr "" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "" + +msgid "Enabled" +msgstr "" + msgid "Skirt loops" msgstr "" @@ -10605,6 +11357,17 @@ msgstr "" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -10626,9 +11389,6 @@ 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 " @@ -11224,6 +11984,31 @@ msgstr "" msgid "Spacing of purge lines on the wipe tower." msgstr "" +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "" @@ -11844,6 +12629,9 @@ msgstr "" msgid "load_obj: failed to parse" msgstr "" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "" @@ -11919,12 +12707,6 @@ 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 "" - #, possible-c-format, possible-boost-format msgid "" "Please input valid values:\n" @@ -11966,6 +12748,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -11975,6 +12765,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, possible-c-format, possible-boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -12014,10 +12817,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12104,22 +12907,21 @@ 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?" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." msgstr "" -#, possible-c-format, possible-boost-format msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to overrides the historical result?" +"Only one of the results with the same name will be saved. Are you sure you " +"want to override the other results?" msgstr "" msgid "Please find the best line on your plate" msgstr "" -msgid "Please find the cornor with perfect degree of extrusion" +msgid "Please find the corner with perfect degree of extrusion" msgstr "" msgid "Input Value" @@ -12194,12 +12996,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -12243,12 +13039,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -12261,6 +13051,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12273,9 +13066,22 @@ msgstr "" msgid "Action" msgstr "" +#, possible-c-format, possible-boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "" + msgid "Network lookup" msgstr "" @@ -12358,6 +13164,9 @@ msgstr "" msgid "PETG" msgstr "" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "" @@ -12442,6 +13251,9 @@ msgstr "" msgid "Upload to storage" msgstr "" +msgid "Switch to Device tab after upload." +msgstr "" + #, possible-c-format, possible-boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" @@ -12640,6 +13452,13 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +#, possible-c-format, possible-boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" @@ -12696,12 +13515,6 @@ msgstr "" msgid "Printable Space" msgstr "" -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" - msgid "Hot Bed STL" msgstr "" @@ -12831,14 +13644,20 @@ msgstr "" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -msgid "Printer Setting" +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." msgstr "" -msgid "Export Configs" +msgid "Printer Setting" msgstr "" msgid "Printer config bundle(.orca_printer)" @@ -12923,6 +13742,9 @@ msgstr "" msgid "Please select a type you want to export" msgstr "" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" + msgid "Edit Filament" msgstr "" @@ -12993,6 +13815,19 @@ msgstr "" msgid "Daily Tips" msgstr "" +#, possible-c-format, possible-boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "" + msgid "Need select printer" msgstr "" @@ -13022,6 +13857,12 @@ msgstr "" msgid "Refresh Printers" msgstr "" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -13172,6 +14013,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -13184,17 +14194,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 08595eec2f..96bb9ded26 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2024-03-17 22:08+0100\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"PO-Revision-Date: 2024-06-15 11:02+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: ca\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "Pintar suports" @@ -252,14 +252,17 @@ msgid "Set Scale" msgstr "Establir Escala" msgid "Reset Position" -msgstr "Restableix la posició" +msgstr "Restableix la Posició" msgid "Reset Rotation" -msgstr "Reinicialitza la Rotació" +msgstr "Restableix la Rotació" msgid "World coordinates" msgstr "Coordenades cartesianes" +msgid "Object coordinates" +msgstr "Coordenades de l'objecte" + msgid "°" msgstr "°" @@ -277,7 +280,7 @@ msgid "Planar" msgstr "Planar" msgid "Dovetail" -msgstr "Encadellat" +msgstr "Matxembrat" msgid "Auto" msgstr "Automàtic" @@ -1395,9 +1398,6 @@ msgstr "" "Ha estat carregat el fitxer de configuració \"%1%\", però alguns valors no " "s'han pogut reconèixer." -msgid "V" -msgstr "V" - 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." @@ -1493,7 +1493,7 @@ msgstr "" "perfils d'impressora no es veuran afectats." msgid "Rebuild" -msgstr "Recomposició" +msgstr "Reconstruint" msgid "Loading current presets" msgstr "Carregant els valors perfils actuals" @@ -1510,6 +1510,9 @@ msgstr "Trieu un o més fitxers ( 3mf/step/stl/svg/obj/amf/usd*/abc/ply ):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Trieu un o més fitxers ( 3mf/step/stl/svg/obj/amf ):" +msgid "Choose ZIP file" +msgstr "Trieu el fitxer ZIP" + msgid "Choose one file (gcode/3mf):" msgstr "Trieu un fitxer ( gcode/3mf ):" @@ -1582,6 +1585,13 @@ msgstr "Càrregues en curs" msgid "Select a G-code file:" msgstr "Seleccioneu un fitxer de Codi-G:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"No s'ha pogut iniciar la descàrrega d'URL. La carpeta de destinació no està " +"definida. Trieu la carpeta de destinació a l'Auxiliar de configuració." + msgid "Import File" msgstr "Importar arxiu" @@ -1815,8 +1825,8 @@ msgstr "Per defecte" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "actiu" +msgid "current" +msgstr "actual" msgid "Scale to build volume" msgstr "Escalar per a la impressió del volum" @@ -1908,6 +1918,9 @@ msgstr "Afegir primitiva" msgid "Add Handy models" msgstr "Afegir models Handy" +msgid "Add Models" +msgstr "Afegir models" + msgid "Show Labels" msgstr "Mostrar etiquetes" @@ -1961,6 +1974,12 @@ msgstr "Ordenar" msgid "arrange current plate" msgstr "organitza la placa actual" +msgid "Reload All" +msgstr "Torna-ho a carregar Tot" + +msgid "reload all from disk" +msgstr "torna a carregar-ho tot des del disc" + msgid "Auto Rotate" msgstr "Rota automàticament" @@ -1994,9 +2013,6 @@ msgstr "Canviar el filament" msgid "Set Filament for selected items" msgstr "Definir el filament per als elements seleccionats" -msgid "current" -msgstr "actual" - msgid "Unlock" msgstr "Desbloquejar" @@ -2331,9 +2347,6 @@ msgstr "Introdueix el Codi-G personalitzat utilitzat a la capa actual:" msgid "Jump to Layer" msgstr "Saltar a la Capa" -msgid "Jump to layer" -msgstr "Saltar a la capa" - msgid "Please enter the layer number" msgstr "Si us plau, introdueix el número de capa" @@ -2405,8 +2418,8 @@ msgstr "No s'ha pogut connectar a la impressora" msgid "Connection to printer failed" msgstr "S'ha produït un error de connexió amb la impressora" -msgid "Please check the network connection of the printer and Studio." -msgstr "Comproveu la connexió de xarxa de la impressora i l'Studio." +msgid "Please check the network connection of the printer and Orca." +msgstr "Comproveu la connexió de xarxa de la impressora i l'Orca." msgid "Connecting..." msgstr "Connectant..." @@ -2429,11 +2442,11 @@ msgstr "Recàrrega automàtica" msgid "AMS not connected" msgstr "AMS no connectat" -msgid "Load Filament" -msgstr "Carregar Filament" +msgid "Load" +msgstr "Carregar" -msgid "Unload Filament" -msgstr "Descarregar Filament" +msgid "Unload" +msgstr "Descarregar" msgid "Ext Spool" msgstr "Bobina Ext" @@ -2450,7 +2463,7 @@ msgstr "Reintentar" msgid "Calibrating AMS..." msgstr "Calibrant AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "S'ha produït un problema durant el calibratge. Feu clic per veure la solució." @@ -2492,10 +2505,10 @@ msgstr "Agafar filament nou" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" "Trieu una ranura AMS i premeu el botó \"Carregar\" o \"Descarregar\" per " -"carregar o descarregar el filament automàticament." +"carregar o descarregar els filaments automàticament." msgid "Edit" msgstr "Editar" @@ -2763,14 +2776,8 @@ msgstr "Orca Slicer té llicència sota " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, versió 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" -msgstr "" -"Orca Slicer es basa en BambuStudio de Bambulab, que és de PrusaSlicer de " -"Prusa Research. PrusaSlicer és de Slic3r d'Alessandro Ranellucci i la " -"comunitat RepRap" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer està basat en PrusaSlicer i BambuStudio" msgid "Libraries" msgstr "Llibreries" @@ -2866,11 +2873,13 @@ msgstr "Estàs segur que vols esborrar la informació del filament?" msgid "You need to select the material type and color first." msgstr "Primer heu de seleccionar el tipus de material i el color." -msgid "Please input a valid value (K in 0~0.3)" -msgstr "Introduïu un valor vàlid ( K en 0 ~ 0.3 )" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "Introduïu un valor vàlid ( K a 0 ~ 0.3, N a 0.6 ~ 2.0 )" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "" msgid "Other Color" msgstr "Un altre color" @@ -2977,38 +2986,19 @@ msgstr "Desactiva AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Imprimeix amb el filament muntat a la part posterior del xassís" -msgid "Cabin humidity" +msgid "Current Cabin humidity" msgstr "Humitat de la cabina" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"El verd significa que la humitat AMS és normal, el taronja representa que la " -"humitat és alta, el vermell representa que la humitat és excessiva. " -"( Higròmetre: com més baix millor. )" - -msgid "Desiccant status" -msgstr "Estat del dessecant" - -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 estat del dessecant inferior a dues barres indica que el dessecant pot " -"estar inactiu. Si us plau, canvieu el dessecant. ( Les barres: com més altes " -"millor. )" - -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 "" -"Nota: Quan la tapa està oberta o es canvia el paquet dessecant, pot trigar " -"hores o una nit a absorbir la humitat. Les baixes temperatures també " -"alenteixen el procés. Durant aquest temps, és possible que l'indicador no " -"representi la cambra amb precisió." +"Si us plau, canvieu el dessecant quan estigui massa humit. És possible que " +"l'indicador no representi amb precisió en els casos següents: quan la tapa " +"està oberta o es canvia el paquet dessecant. Es necessiten hores per " +"absorbir la humitat, les baixes temperatures també alenteixen el procés." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3067,6 +3057,12 @@ msgstr "" "( Actualment només admet el subministrament automàtic de consumibles amb la " "mateixa marca, tipus de material i color )" +msgid "DRY" +msgstr "SEC" + +msgid "WET" +msgstr "HUMIT" + msgid "AMS Settings" msgstr "Configuració AMS" @@ -3081,7 +3077,7 @@ msgstr "" "filament de Bambu Lab. Això triga uns 20 segons." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" "Nota: si s'insereix un filament nou durant la impressió, l'AMS no llegirà " @@ -3137,6 +3133,16 @@ msgstr "" "AMS continuarà a una altra bobina amb les mateixes propietats del filament " "automàticament quan s'esgoti el filament actual" +msgid "Air Printing Detection" +msgstr "Detecció d'Impressió Aèria" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detecta obstrucció i abrasió de filaments, aturant la impressió " +"immediatament per estalviar temps i filament." + msgid "File" msgstr "Fitxer" @@ -3210,6 +3216,65 @@ msgstr "Operand reservat flotant" msgid "Stack overflow" msgstr "Desbordament de pila( Stack overflow )" +msgid "Running post-processing scripts" +msgstr "Executant scripts de postprocessament" + +msgid "Successfully executed post-processing script" +msgstr "Executats scripts de post-processament satisfactòriament" + +msgid "Unknown error occured during exporting G-code." +msgstr "S'ha produït un error desconegut durant l'exportació del codi-G." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Error en copiar el codi-G temporal al codi-G de sortida. Potser la targeta " +"SD està bloquejada contra escriptura?\n" +"Missatge d'error: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Error en copiar el codi-G temporal al codi-G de sortida. Hi pot haver un " +"problema amb el dispositiu de destinació, intenteu exportar novament o " +"utilitzeu un dispositiu diferent. El codi-G de sortida malmès és a %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"El canvi de nom del codi-G després de copiar a la carpeta de destinació " +"seleccionada ha fallat. La ruta actual és %1%.tmp. Intenta exportar de nou." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"La còpia del codi-G temporal ha finalitzat, però el codi original en %1% no " +"s'ha pogut obrir durant la verificació de còpia. El codi-G de sortida és a " +"%2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"La còpia del codi-G temporal ha finalitzat, però el codi exportat no s'ha " +"pogut obrir durant la verificació de la còpia. El codi-G de sortida és a %1%." +"tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Fitxer de codi-G exportat a %1%" + msgid "Unknown error when export G-code." msgstr "Error desconegut en exportar el Codi-G." @@ -3223,13 +3288,6 @@ msgstr "" "Missatge d'error: %1%.\n" "Fitxer origen %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Aconseguida l'exportació del Codi-G a %1%" - -msgid "Running post-processing scripts" -msgstr "Executant scripts de postprocessament" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Error en copiar el Codi-G temporal al Codi-G de sortida" @@ -3239,6 +3297,226 @@ msgstr "" "Pujada planificada a `%1%`. Mira Finestra -> Puja a la cua del gestor " "d'impressió" +msgid "Device" +msgstr "Dispositiu" + +msgid "Task Sending" +msgstr "Enviant Tasca" + +msgid "Task Sent" +msgstr "Tasca enviada" + +msgid "Edit multiple printers" +msgstr "Editar diverses impressores" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "El nombre màxim d'impressores que es poden seleccionar és de %d" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "Sense tasca" + +msgid "View" +msgstr "Vista" + +msgid "N/A" +msgstr "N/D" + +msgid "Edit Printers" +msgstr "Editar Impressores" + +msgid "Device Name" +msgstr "Nom del dispositiu" + +msgid "Task Name" +msgstr "Nom de la tasca" + +msgid "Device Status" +msgstr "Estat del dispositiu" + +msgid "Actions" +msgstr "Accions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Seleccioneu aquí els dispositius que voleu gestionar (fins a 6 dispositius)" + +msgid "Add" +msgstr "Afegir" + +msgid "Idle" +msgstr "Inactiu" + +msgid "Printing" +msgstr "Imprimint" + +msgid "Upgrading" +msgstr "Actualitzant" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "sincronitzant" + +msgid "Printing Finish" +msgstr "Finalitzar Impressió" + +msgid "Printing Failed" +msgstr "Impressió Fallida" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Preparació" + +msgid "Slicing" +msgstr "Laminant" + +msgid "Pending" +msgstr "Pendent" + +msgid "Sending" +msgstr "Enviant" + +msgid "Sending Finish" +msgstr "Finalitzar Enviament" + +msgid "Sending Cancel" +msgstr "Cancel·lar Enviament" + +msgid "Sending Failed" +msgstr "Enviament Fallit" + +msgid "Print Success" +msgstr "Impressió Exitosa" + +msgid "Print Failed" +msgstr "Impressió Fallida" + +msgid "Removed" +msgstr "Eliminat" + +msgid "Resume" +msgstr "Reprendre" + +msgid "Stop" +msgstr "Aturar" + +msgid "Task Status" +msgstr "Estat de la tasca" + +msgid "Sent Time" +msgstr "Temps d'Enviament" + +msgid "There are no tasks to be sent!" +msgstr "No hi ha tasques per enviar!" + +msgid "No historical tasks!" +msgstr "Sense tasques històriques!" + +msgid "Loading..." +msgstr "Carregant…" + +msgid "No AMS" +msgstr "Sense AMS" + +msgid "Send to Multi-device" +msgstr "Enviar a multidispositiu" + +msgid "Preparing print job" +msgstr "Preparant el treball d'impressió" + +msgid "Abnormal print file data. Please slice again" +msgstr "Dades anormals del fitxer d'impressió. Si us plau, torneu a laminar" + +msgid "There is no device available to send printing." +msgstr "No hi ha cap dispositiu disponible per enviar la impressió." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "El nombre d'impressores en ús simultàniament no pot ser igual a 0." + +msgid "Use External Spool" +msgstr "Utilitzar la Bobina Externa" + +msgid "Use AMS" +msgstr "Utilitzar AMS" + +msgid "Select Printers" +msgstr "Seleccionar Impressores" + +msgid "Ams Status" +msgstr "Estat AMS" + +msgid "Printing Options" +msgstr "Opcions d'Impressió" + +msgid "Bed Leveling" +msgstr "Anivellament del llit" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "Calibratge de Dinàmiques de Flux" + +msgid "Send Options" +msgstr "Opcions d'Enviament" + +msgid "Send to" +msgstr "Enviar a" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"impressores al mateix temps. (Depèn de quants dispositius es puguin escalfar " +"alhora.)" + +msgid "Wait" +msgstr "Espereu" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minut cada lot. (Depèn del temps que es trigui a completar la calefacció.)" + +msgid "Send" +msgstr "Enviar" + +msgid "Name is invalid;" +msgstr "El nom no és vàlid;" + +msgid "illegal characters:" +msgstr "caràcters no permesos:" + +msgid "illegal suffix:" +msgstr "sufix no permès:" + +msgid "The name is not allowed to be empty." +msgstr "No es permet que el nom estigui buit." + +msgid "The name is not allowed to start with space character." +msgstr "No es permet que el nom comenci amb caràcter d'espai." + +msgid "The name is not allowed to end with space character." +msgstr "No es permet que el nom acabi amb caràcter d'espai." + +msgid "The name length exceeds the limit." +msgstr "La longitud del nom supera el límit." + msgid "Origin" msgstr "Origen" @@ -3311,6 +3589,23 @@ msgstr "Escolliu un fitxer STL per importar el model de la placa d'impressió:" msgid "Bed Shape" msgstr "Forma de la placa d'impressió" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"La temperatura mínima recomanada és inferior a 190 graus o la màxima " +"recomanada és superior a 300 graus.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"La temperatura mínima recomanada no pot ser superior a la temperatura màxima " +"recomanada.\n" + +msgid "Please check.\n" +msgstr "Comproveu-ho.\n" + 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" @@ -3399,30 +3694,12 @@ msgstr "" "\n" "El valor es restablirà a 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 "" -"El mode espiral només funciona quan els bucles de perímetre és 1, el suport " -"està desactivat, les capes superiors de l'intèrpret d'ordres són 0, la " -"densitat de farciment escassa és 0 i el tipus timelapse és tradicional." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Però les màquines amb estructura I3 no generaran vídeos timelapse." - -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 "" -"Canviar aquesta configuració automàticament? \n" -"Sí: canviar aquesta configuració i activar el mode d'espiral automàticament\n" -"No - Renunciar a utilitzar el mode espiral aquesta vegada" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " msgstr "" +"El perímetre addicional alternat no funciona correctament amb 'Assegurar el " +"gruix de la carcassa vertical' establert a Tots. " msgid "" "Change these settings automatically? \n" @@ -3430,6 +3707,10 @@ msgid "" "alternate extra wall\n" "No - Dont use alternate extra wall" msgstr "" +"Canviar aquesta configuració automàticament? \n" +"Sí - Cambiar 'Assegurar el gruix de la carcassa vertical' a 'Moderat' " +"activar 'perímetre addicional alternat'\n" +"No - No utilitzar perímetre addicional alternat" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -3480,6 +3761,28 @@ msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" +"seam_slope_start_height ha de ser més petit que layer_height.\n" +"Restablert a 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 "" +"El mode espiral només funciona quan els bucles de perímetre és 1, el suport " +"està desactivat, les capes superiors de l'intèrpret d'ordres són 0, la " +"densitat de farciment escassa és 0 i el tipus timelapse és tradicional." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Però les màquines amb estructura I3 no generaran vídeos timelapse." + +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 "" +"Canviar aquesta configuració automàticament? \n" +"Sí: canviar aquesta configuració i activar el mode d'espiral automàticament\n" +"No - Renunciar a utilitzar el mode espiral aquesta vegada" msgid "Auto bed leveling" msgstr "Anivellament de llit automàtic" @@ -3589,18 +3892,6 @@ msgstr "Pausa d'error de la primera capa" msgid "Nozzle clog pause" msgstr "Pausa d'obstrucció del broquet" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Placa Base" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Desconegut" @@ -3761,9 +4052,6 @@ msgstr "Configuració de la Impressora" msgid "parameter name" msgstr "nom del paràmetre" -msgid "N/A" -msgstr "N/D" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s no pot ser un percentatge" @@ -3775,6 +4063,10 @@ msgstr "Valor %s està fora de rang, continuar?" msgid "Parameter validation" msgstr "Validació de paràmetres" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "El valor %s està fora de rang. El rang vàlid és de %d a %d." + msgid "Value is out of range." msgstr "El valor introduït és fora de rang." @@ -3788,6 +4080,20 @@ msgstr "" "SÍ per %s%%. \n" "NO per %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Format d'entrada invàlid. Esperat vector de dimensions en el format següent: " +"\"%1%\"" + +msgid "Input value is out of range" +msgstr "El valor introduït és fora de rang" + +msgid "Some extension in the input is invalid" +msgstr "Alguna extensió de l'entrada no és vàlida" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format no vàlid. Format vectorial esperat: \"%1%\"" @@ -3855,12 +4161,12 @@ msgstr "Pantalla" msgid "Flushed" msgstr "Descarregat" -msgid "Total" -msgstr "Total" - msgid "Tower" msgstr "Torre" +msgid "Total" +msgstr "Total" + msgid "Total Estimation" msgstr "Estimació total" @@ -3963,6 +4269,12 @@ msgstr "Estimació temporal" msgid "Normal mode" msgstr "Mode Normal" +msgid "Total Filament" +msgstr "Filament Total" + +msgid "Model Filament" +msgstr "Filament del Model" + msgid "Prepare time" msgstr "Planificar el temps" @@ -4056,6 +4368,9 @@ msgstr "Opcions d'ordenació" msgid "Spacing" msgstr "Espaiat" +msgid "0 means auto spacing." +msgstr "0 significa espaiat automàtic." + msgid "Auto rotate for arrangement" msgstr "Gir automàtic per a l'arranjament" @@ -4068,9 +4383,6 @@ msgstr "Evitar la regió de calibratge d'extrusió" msgid "Align to Y axis" msgstr "Alinear a l'eix Y" -msgid "Add" -msgstr "Afegir" - msgid "Add plate" msgstr "Afegir placa" @@ -4203,6 +4515,9 @@ msgstr "Monitorització de gravació automàtica" msgid "Go Live" msgstr "Entra en directe" +msgid "Liveview Retry" +msgstr "Reintentar Lifeview" + msgid "Resolution" msgstr "Resolució" @@ -4255,14 +4570,11 @@ msgstr "Tancant l'aplicació mentre s'han modificat alguns perfils." msgid "Logging" msgstr "Registrant" -msgid "Prepare" -msgstr "Preparació" - msgid "Preview" msgstr "Previsualització" -msgid "Device" -msgstr "Dispositiu" +msgid "Multi-device" +msgstr "Multidispositiu" msgid "Project" msgstr "Projecte" @@ -4288,9 +4600,6 @@ msgstr "Laminar-ho tot" msgid "Export G-code file" msgstr "Exportar el fitxer del Codi-G" -msgid "Send" -msgstr "Enviar" - msgid "Export plate sliced file" msgstr "Exportar fitxer de la placa laminada" @@ -4411,6 +4720,12 @@ msgstr "Importar 3MF STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carregar un model" +msgid "Import Zip Archive" +msgstr "Importar fitxer ZIP" + +msgid "Load models contained within a zip archive" +msgstr "Carregar models continguts dins d'un arxiu zip" + msgid "Import Configs" msgstr "Importar Configuracions" @@ -4444,8 +4759,8 @@ msgstr "Exportar el Codi-G" msgid "Export current plate as G-code" msgstr "Exportar placa actual com a Codi-G" -msgid "Export &Configs" -msgstr "Exportar &Configuracions" +msgid "Export Preset Bundle" +msgstr "Exportar el Paquet de Perfil" msgid "Export current configuration to files" msgstr "Exportar la configuració actual a fitxers" @@ -4546,9 +4861,6 @@ msgstr "Mostra el ressaltat del voladís de l'objecte a l'escena 3D" msgid "Preferences" msgstr "Preferències" -msgid "View" -msgstr "Vista" - msgid "Help" msgstr "Ajuda" @@ -4615,11 +4927,11 @@ msgstr "Exportar &Trajectòries d'eina com OBJ" msgid "Export toolpaths as OBJ" msgstr "Exportar trajectòries d'eines com a OBJ" -msgid "Open &Studio" -msgstr "Obrir &Studio" +msgid "Open &Slicer" +msgstr "Obrir &Slicer" -msgid "Open Studio" -msgstr "Obrir Studio" +msgid "Open Slicer" +msgstr "Obrir Slicer" msgid "&Quit" msgstr "&Sortir" @@ -4721,44 +5033,61 @@ msgstr "" msgid "Synchronization" msgstr "Sincronització" -msgid "Initialize failed (No Device)!" -msgstr "Inicialització fallida ( No hi ha dispositiu )!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "El dispositiu no pot gestionar més dades. Torneu-ho a provar més tard." -msgid "Initialize failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Inicialització fallida ( la connexió del Dispositiu no està preparada )!" +"El reproductor funciona malament. Torneu a instal·lar el reproductor del " +"sistema." -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicialització fallida ( Sense Dispositiu de Càmera )!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"El reproductor no està carregat, feu clic al botó \"reproduir\" per tornar-" +"ho a provar." -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Please confirm if the printer is connected." +msgstr "Confirmeu si la impressora està connectada." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" "La impressora està ocupada descarregant, espereu que finalitzi la descàrrega." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Printer camera is malfunctioning." +msgstr "La càmera de la impressora funciona malament." + +msgid "Problem occured. Please update the printer firmware and try again." msgstr "" -"Inicialització fallida ( No és compatible amb la versió actual de la " -"impressora )!" +"Ha ocorregut un problema. Actualitzeu el firmware de la impressora i torneu-" +"ho a provar." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicialització fallida ( no accessible en mode només LAN )!" +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Liveview Només per LAN està desactivat. Activeu la pantalla de Lifeview a la " +"impressora." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialització fallida ( Manca la IP LAN de la impressora )!" +msgid "Please enter the IP of printer to connect." +msgstr "Introduïu la IP de la impressora amb la que connectar." msgid "Initializing..." msgstr "Inicialitzant..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Inicialització fallida ( %s )!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"S'ha produït un error de connexió. Comproveu la xarxa i torneu-ho a provar" -msgid "Network unreachable" -msgstr "Xarxa inaccessible" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Comproveu la xarxa i torneu-ho a provar. Podeu reiniciar o actualitzar la " +"impressora si el problema persisteix." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Aturat [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "La impressora ha tancat la sessió i no es pot connectar." msgid "Stopped." msgstr "Aturat." @@ -4791,19 +5120,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Inicialització fallida de la Càmera Virtual ( %s )!" +msgid "Network unreachable" +msgstr "Xarxa inaccessible" + msgid "Information" msgstr "Informació" msgid "Playing..." msgstr "Reproduint..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "La càrrega ha fallat [%d]!" - -msgid "Loading..." -msgstr "Carregant…" - msgid "Year" msgstr "Any" @@ -4822,9 +5147,6 @@ msgstr "Agrupar els fitxers per mes, primer els recents." msgid "Show all files, recent first." msgstr "Mostrar tots els fitxers, primers els recents." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Canvieu als fitxers timelapse." @@ -4852,6 +5174,12 @@ msgstr "Seleccionar" msgid "Batch manage files." msgstr "Gestió per lots de fitxers." +msgid "Refresh" +msgstr "Actualitzar" + +msgid "Reload file list from printer." +msgstr "Tornar a carregar la llista de fitxers des de la impressora." + msgid "No printers." msgstr "No hi ha cap Impressora." @@ -4862,13 +5190,39 @@ msgstr "Connexió fallida [%d]!" msgid "Loading file list..." msgstr "Carregant llista de fitxers..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Sense fitxers [%d]" +msgid "No files" +msgstr "No hi ha fitxers" + +msgid "Load failed" +msgstr "Càrrega fallida" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"Inicialització fallida ( la connexió del Dispositiu no està preparada )!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"L'exploració de fitxers a la targeta SD no és compatible amb el firmware " +"actual. Actualitzeu el firmware de la impressora." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"Inicialització fallida (emmagatzematge no disponible, inseriu la targeta " +"SD.)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "Ha fallat la connexió LAN (no s'ha pogut visualitzar sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "" +"L'exploració de fitxers a la targeta SD no és compatible amb el mode només " +"LAN." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Càrrega fallida [%d]" +msgid "Initialize failed (%s)!" +msgstr "Inicialització fallida ( %s )!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4894,11 +5248,11 @@ msgstr "Suprimir el fitxer" msgid "Fetching model infomations ..." msgstr "Obtenint infomacions del model ..." -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "No s'ha pogut obtenir la informació del model de la impressora." -msgid "Failed to parse model infomations." -msgstr "No s'han pogut analitzar les informacions del model." +msgid "Failed to parse model information." +msgstr "No s'ha pogut analitzar la informació del model." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4911,6 +5265,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "L'arxiu '%s' s'ha perdut! Si us plau, descarregueu-lo de nou." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Arxiu: %s\n" +"Títol: %s\n" + msgid "Download waiting..." msgstr "Descàrrega en espera..." @@ -4927,13 +5289,14 @@ msgstr "Descàrrega finalitzada" msgid "Downloading %d%%..." msgstr "Descarregant %d%%..." -msgid "Connection lost. Please retry." -msgstr "S'ha perdut la connexió. Si us plau, torna-ho a intentar." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Tornant a connectar la impressora. L'operació no es pot completar " +"immediatament. Torneu-ho a provar més tard." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "El dispositiu no pot gestionar més dades. Torneu-ho a provar més tard." - -msgid "File not exists." +msgid "File does not exist." msgstr "El fitxer no existeix." msgid "File checksum error. Please retry." @@ -4991,12 +5354,6 @@ msgstr "Invertir eix de Balanceig" msgid "Printing Progress" msgstr "Progrés de la impressió" -msgid "Resume" -msgstr "Reprendre" - -msgid "Stop" -msgstr "Aturar" - msgid "0" msgstr "0" @@ -5041,6 +5398,9 @@ msgstr "Canviar Vista de Càmera" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "Peces d'Impressora" + msgid "Print Options" msgstr "Opcions d'impressió" @@ -5059,9 +5419,6 @@ msgstr "Cambra" msgid "Bed" msgstr "Llit" -msgid "Unload" -msgstr "Descarregar" - msgid "Debug Info" msgstr "Informació de depuració" @@ -5248,9 +5605,6 @@ msgstr "Estat" msgid "Update" msgstr "Actualitzar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "No tornis a mostrar" @@ -5281,6 +5635,40 @@ msgstr "%s informació" msgid "Skip" msgstr "Omet" +msgid "Newer 3mf version" +msgstr "Nova versió 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"La versió d'arxiu 3mf està en Beta i és més recent que la versió actual " +"d'OrcaSlicer." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Si voleu provar Orca Slicer Beta, podeu fer clic a" + +msgid "Download Beta Version" +msgstr "Descarregar Versió Beta" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" +"La versió del fitxer 3mf és més nova que la versió actual de l'Orca Slicer." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Actualitzar el vostre Orca Slicer podria habilitar totes les funcionalitats " +"al fitxer 3mf." + +msgid "Current Version: " +msgstr "Versió actual: " + +msgid "Latest Version: " +msgstr "Última Versió: " + +msgid "Not for now" +msgstr "No per ara" + msgid "3D Mouse disconnected." msgstr "S'ha desconnectat el ratolí 3D." @@ -5350,12 +5738,12 @@ msgstr[1] "%1$d Els objectes s'han carregat com a parts de l'objecte de tall" msgid "ERROR" msgstr "ERROR" -msgid "CANCELED" -msgstr "CANCEL·LAT" - msgid "COMPLETED" msgstr "COMPLETAT" +msgid "CANCELED" +msgstr "CANCEL·LAT" + msgid "Cancel upload" msgstr "Cancel·lar càrrega" @@ -5468,6 +5856,27 @@ msgstr "Permet senyals acústics" msgid "Filament Tangle Detect" msgstr "Detecció de filament enredat" +msgid "Nozzle Clumping Detection" +msgstr "Detecció d'Obstrucció de Broquet" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Comproveu si el broquet està obstruit per filament o altres objectes " +"estranys." + +msgid "Nozzle Type" +msgstr "Tipus de broquet" + +msgid "Stainless Steel" +msgstr "Acer Inoxidable" + +msgid "Hardened Steel" +msgstr "Acer Endurit" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Global" @@ -5675,9 +6084,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "És millor que actualitzeu el vostre programari.\n" -msgid "Newer 3mf version" -msgstr "Nova versió 3mf" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5728,6 +6134,9 @@ msgstr "El nom dels components dins del fitxer de passos no té format UTF8!" msgid "The name may show garbage characters!" msgstr "El nom pot mostrar caràcters no vàlids!" +msgid "Remember my choice." +msgstr "Recordar la meva elecció." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5855,9 +6264,6 @@ msgstr "No es pot tornar a carregar:" msgid "Error during reload" msgstr "S'ha produït un error durant la recàrrega" -msgid "Slicing" -msgstr "Laminant" - msgid "There are warnings after slicing models:" msgstr "Hi ha advertències després de laminar els models:" @@ -5918,9 +6324,15 @@ msgstr "Important Model" msgid "prepare 3mf file..." msgstr "preparar el fitxer 3MF..." +msgid "Download failed, unknown file format." +msgstr "S'ha produït un error en la baixada, format de fitxer desconegut." + msgid "downloading project ..." msgstr "descarregant projecte ..." +msgid "Download failed, File size exception." +msgstr "S'ha produït un error en la baixada, excepció mida del Fitxer." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projecte descarregat %d%%" @@ -5944,6 +6356,22 @@ msgstr "no conté Codi-G vàlid." msgid "Error occurs while loading G-code file" msgstr "Es produeix un error en carregar el fitxer de Codi-G" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "La càrrega d'un arxiu ZIP a la ruta %1% ha fallat." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "No s'ha pogut descomprimir el fitxer al %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"No s'ha pogut trobar el fitxer descomprimit a %1%. La descompressió de " +"l'arxiu ha fallat." + msgid "Drop project file" msgstr "Deixar anar el fitxer del projecte" @@ -5968,9 +6396,6 @@ msgstr "Els fitxers de Codi-G no es poden carregar amb els models junts!" msgid "Can not add models when in preview mode!" msgstr "No es poden afegir models en mode de previsualització!" -msgid "Add Models" -msgstr "Afegir models" - msgid "All objects will be removed, continue?" msgstr "Tots els objectes seran eliminats, vols continuar?" @@ -5978,9 +6403,6 @@ msgid "The current project has unsaved changes, save it before continue?" msgstr "" "El projecte actual té canvis no guardats, guardar-los abans de continuar?" -msgid "Remember my choice." -msgstr "Recordar la meva elecció." - msgid "Number of copies:" msgstr "Nombre de còpies:" @@ -6012,10 +6434,27 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" "No s'ha pogut realitzar l'operació booleana a les malles del model. Només " -"s'exportaran les parts positives." +"s'exportaran les parts positives. Proveu d'arreglar les malles i tornar-ho a " +"provar." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Motiu: la part \"%1%\" està buida." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Motiu: la part \"%1%\" no conté cap volum." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Motiu: la part \"%1%\" té autointersecció." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Motiu: \"%1%\" i una altra peça no tenen intersecció." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6174,8 +6613,16 @@ msgstr "Regió d'inici de sessió" msgid "Stealth Mode" msgstr "Mode Silenciós" -msgid "Enable network plugin" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +"Això atura la transmissió de dades als serveis en el núvol de Bambu. Els " +"usuaris que no utilitzen màquines BBL o només utilitzen el mode LAN poden " +"activar aquesta funció de manera segura." + +msgid "Enable network plugin" +msgstr "Habilita el plugin de xarxa" msgid "Check for stable updates only" msgstr "Comprovar només si hi ha actualitzacions estables" @@ -6189,6 +6636,28 @@ msgstr "Imperial" msgid "Units" msgstr "Unitats" +msgid "Allow only one OrcaSlicer instance" +msgstr "Permet només una instància OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"A OSX, sempre hi ha una sola instància d'aplicació que s'executa per " +"defecte. Tanmateix, es permet executar diverses instàncies de la mateixa " +"aplicació des de la línia de comandes. En aquest cas, aquesta configuració " +"permetrà només una instància." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Si això està habilitat, i en iniciar OrcaSlicer i una altra instància del " +"mateix OrcaSlicer que ja s'està executant, aquesta instància es tornarà a " +"activar." + msgid "Home" msgstr "Inici" @@ -6198,6 +6667,22 @@ msgstr "Pàgina predeterminada" msgid "Set the page opened on startup." msgstr "Definiu la pàgina a obrir a l'inici." +msgid "Touchpad" +msgstr "Ratolí tàctil" + +msgid "Camera style" +msgstr "Estil de càmera" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Seleccioneu l'estil de navegació de la càmera.\n" +"Per defecte: Botó Esquerre del Ratolí + moure per rotar, Botó Dret del " +"Ratolí/Botó Mig del Ratolí + moure per a panoràmica.\n" +"Ratolí tàctil: Alt+moure per rotar, Majúscules+moure per a panoràmica." + msgid "Zoom to mouse position" msgstr "Fer zoom a la posició del ratolí" @@ -6216,6 +6701,13 @@ msgstr "" "Si està activat, fa servir la càmera lliure. Si no està activat, fa servir " "la càmera restringida." +msgid "Reverse mouse zoom" +msgstr "Zoom invers del ratolí" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" +"Si està habilitat, inverteix la direcció del zoom amb la roda del ratolí." + msgid "Show splash screen" msgstr "Mostrar pantalla de presentació" @@ -6237,8 +6729,38 @@ msgstr "" "Si està activat, fa els clculs automàticament cada vegada que canviï el " "color." -msgid "Network" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" +"Volums de purga: calcular automàticament cada vegada que canvia el filament." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" +"Si està activat, fa els càlculs automàticament cada vegada que canvia el " +"filament" + +msgid "Remember printer configuration" +msgstr "Recordar la configuració de la impressora" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Si està habilitada, l'Orca recordarà i canviarà automàticament la " +"configuració del filament/procés per a cada impressora." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "Gestió multidispositiu(Entra en vigor després de reiniciar Studio)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Amb aquesta opció habilitada, podeu enviar una tasca a diversos dispositius " +"alhora i gestionar múltiples dispositius." + +msgid "Network" +msgstr "Xarxa" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -6284,6 +6806,48 @@ msgstr "" "Si està habilitada, defineix OrcaSlicer com a l'aplicació predeterminada per " "obrir fitxers .step" +msgid "Associate web links to OrcaSlicer" +msgstr "Associar enllaços web a OrcaSlicer" + +msgid "Associate URLs to OrcaSlicer" +msgstr "Associeu URLs a OrcaSlicer" + +msgid "Current association: " +msgstr "Associació actual: " + +msgid "Associate prusaslicer://" +msgstr "Associar prusaslicer://" + +msgid "Not associated to any application" +msgstr "No associar a cap aplicació" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Associar OrcaSlicer amb els enllaços prusaslicer:// perquè Orca pugui obrir " +"models des de Printable.com" + +msgid "Associate bambustudio://" +msgstr "Associar bambustudio://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Associar OrcaSlicer amb els enllaços bambustudio:// perquè Orca pugui obrir " +"models des de makerworld.com" + +msgid "Associate cura://" +msgstr "Associar cura://" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Associar OrcaSlicer amb els enllaços cura:// perquè Orca pugui obrir models " +"des de thingiverse.com" + msgid "Maximum recent projects" msgstr "Màxim projectes recents" @@ -6455,12 +7019,21 @@ msgstr "Seleccionar/eliminar impressores ( perfils del sistema )" msgid "Create printer" msgstr "Crear impressora" -msgid "Incompatible" -msgstr "Incompatible" - msgid "The selected preset is null!" msgstr "El perfil seleccionat és nul!" +msgid "End" +msgstr "Final" + +msgid "Customize" +msgstr "Personalitzar" + +msgid "Other layer filament sequence" +msgstr "Seqüència d'impressió de l'altra capa" + +msgid "Please input layer value (>= 2)." +msgstr "Introduïu el valor de capa (>= 2)." + msgid "Plate name" msgstr "Nom de la placa" @@ -6470,8 +7043,14 @@ msgstr "El mateix que la Seqüència General d'Impressió" msgid "Print sequence" msgstr "Seqüència d'impressió" -msgid "Customize" -msgstr "Personalitzar" +msgid "Same as Global" +msgstr "El mateix que Global" + +msgid "Disable" +msgstr "Deshabilitar" + +msgid "Spiral vase" +msgstr "Gerro en Espiral" msgid "First layer filament sequence" msgstr "Seqüència d'impressió de la primera capa" @@ -6535,15 +7114,6 @@ msgstr "Perfil d'usuari" msgid "Preset Inside Project" msgstr "Perfil intern del Projecte" -msgid "Name is invalid;" -msgstr "El nom no és vàlid;" - -msgid "illegal characters:" -msgstr "caràcters no permesos:" - -msgid "illegal suffix:" -msgstr "sufix no permès:" - msgid "Name is unavailable." msgstr "El nom no està disponible." @@ -6562,15 +7132,6 @@ msgstr "" msgid "Please note that saving action will replace this preset" msgstr "Tingueu en compte que l'acció de desar substituirà aquest perfil" -msgid "The name is not allowed to be empty." -msgstr "No es permet que el nom estigui buit." - -msgid "The name is not allowed to start with space character." -msgstr "No es permet que el nom comenci amb caràcter d'espai." - -msgid "The name is not allowed to end with space character." -msgstr "No es permet que el nom acabi amb caràcter d'espai." - msgid "The name cannot be the same as a preset alias name." msgstr "El nom no pot ser el mateix que un àlies preestablert." @@ -6628,9 +7189,6 @@ msgstr "No puc trobar els meus dispositius?" msgid "Log out successful." msgstr "Tancament de sessió correcte." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Ocupat" @@ -6655,12 +7213,6 @@ msgstr "Base PEI amb Textura Bambu" msgid "Send print job to" msgstr "Enviar treball d'impressió a" -msgid "Refresh" -msgstr "Actualitzar" - -msgid "Bed Leveling" -msgstr "Anivellament del llit" - msgid "Flow Dynamics Calibration" msgstr "Calibratge de Dinàmiques de Flux" @@ -6673,9 +7225,6 @@ msgstr "enviament completat" msgid "Error code" msgstr "Codi d'error" -msgid "Printer local connection failed, please try again." -msgstr "La connexió local de la impressora ha fallat, torneu-ho a provar." - msgid "No login account, only printers in LAN mode are displayed" msgstr "" "No hi ha compte d'inici de sessió, només es mostren impressores en mode LAN" @@ -6759,10 +7308,13 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Cal inserir una targeta SD abans d'imprimir." -msgid "The selected printer is incompatible with the chosen printer presets." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" -"La impressora seleccionada és incompatible amb els perfils de la impressora " -"escollits." +"La impressora seleccionada (%s) és incompatible amb el perfil d'impressora " +"escollit al laminador (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "Cal inserir una targeta SD per gravar el timelapse." @@ -6822,46 +7374,41 @@ msgid "nozzle in preset: %s %s" msgstr "broquet del perfil: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "broquet memoritzat: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "broquet memoritzat: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" "El diàmetre del broquet del perfil no és coherent amb el diàmetre del " -"broquet memoritzat. Has canviat el broquet recentment?" +"broquet memoritzat. Si heu canviat el broquet darrerament, aneu a Dispositiu " +"> Parts de la impressora per canviar la configuració." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*El material d'impressió %s amb %s podria causar danys al broquet" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"La impressió de material a alta temperatura (material %s) amb %s pot causar " +"danys al broquet" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Corregiu l'error de dalt, en cas contrari, la impressió no pot continuar." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Feu clic al botó de confirmació si encara voleu continuar amb la impressió." -msgid "Hardened Steel" -msgstr "Acer Endurit" - -msgid "Stainless Steel" -msgstr "Acer Inoxidable" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" "Connectant amb la impressora. No es pot cancel·lar durant el procés de " "connexió." -msgid "Preparing print job" -msgstr "Preparant el treball d'impressió" - -msgid "Abnormal print file data. Please slice again" -msgstr "Dades anormals del fitxer d'impressió. Si us plau, torneu a laminar" - -msgid "The name length exceeds the limit." -msgstr "La longitud del nom supera el límit." - msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." @@ -6875,6 +7422,9 @@ msgstr "Calibratge automàtic de flux mitjançant Micro Lidar" msgid "Modifying the device name" msgstr "Modificant el nom del dispositiu" +msgid "Bind with Pin Code" +msgstr "Enllaçar amb codi PIN" + msgid "Send to Printer SD card" msgstr "Enviar a la targeta SD de la impressora" @@ -6882,6 +7432,11 @@ msgid "Cannot send the print task when the upgrade is in progress" msgstr "" "No es pot enviar la tasca d'impressió quan l'actualització està en curs" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"La impressora seleccionada és incompatible amb els perfils de la impressora " +"escollits." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Cal inserir una targeta SD abans d'enviar-lo a la impressora." @@ -6925,6 +7480,28 @@ msgstr "Excedit el temps d'espera de l'informe d'inici de sessió" msgid "Unknown Failure" msgstr "Falla desconeguda" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Trobeu el codi PIN a la pàgina del compte a la pantalla de la impressora,\n" +" i escriviu el codi PIN de sota." + +msgid "Can't find Pin Code?" +msgstr "No trobes el codi PIN?" + +msgid "Pin Code" +msgstr "Codi PIN" + +msgid "Binding..." +msgstr "Enllaçant..." + +msgid "Please confirm on the printer screen" +msgstr "Si us plau, confirmeu-ho a la pantalla de la impressora" + +msgid "Log in failed. Please check the Pin Code." +msgstr "S'ha produït un error en l'inici de sessió. Comproveu el codi PIN." + msgid "Log in printer" msgstr "Iniciar sessió a la impressora" @@ -7124,6 +7701,29 @@ msgstr "Ajustar" msgid "Ignore" msgstr "Ignorar" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Característica experimental: Retreure i tallar el filament a major distància " +"durant els canvis de filaments per minimitzar el flux. Tot i que pot reduir " +"notablement el flux, també pot elevar el risc d'esclops de broquets o altres " +"complicacions d'impressió." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Característica experimental: Retreure i tallar el filament a major distància " +"durant els canvis de filaments per minimitzar el rentat. Tot i que pot " +"reduir notablement el rentat, també pot elevar el risc d'obstruccions del " +"broquet o altres complicacions d'impressió. Utilitzeu amb el firmware de la " +"impressora més recent." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -7205,6 +7805,9 @@ msgstr "Filament de suport" msgid "Tree supports" msgstr "Suports d'arbre" +msgid "Skirt" +msgstr "Faldilla" + msgid "Prime tower" msgstr "Torre de Purga" @@ -7388,6 +7991,14 @@ msgstr "Paràmetres del canvi d'eina per a impressores multi-extrusor MM" msgid "Printable space" msgstr "Espai imprimible" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Valor no vàlid proporcionat per al paràmetre %1%: %2%" + +msgid "G-code flavor is switched" +msgstr "El tipus de codi-G s'ha canviat" + msgid "Cooling Fan" msgstr "Ventilador de refrigeració" @@ -7616,21 +8227,38 @@ msgstr "" "següents canvis no desats:" #, 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?" +msgid "You have changed some settings of preset \"%1%\". " msgstr "" -"Heu canviat alguns paràmetres del perfil \"%1%\". \n" -"Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" +"Heu canviat alguns paràmetres de la configuració predeterminada \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"Heu canviat algunes opcions de configuració del perfil. \n" -"Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" +"\n" +"Podeu desar o descartar els valors predefinits que heu modificat." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Podeu desar o descartar els valors predefinits que heu modificat o bé " +"transferir els valors que heu modificat a la nova configuració " +"predeterminada." + +msgid "You have previously modified your settings." +msgstr "Has modificat prèviament la configuració." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Podeu descartar els valors predefinits que heu modificat o transferir els " +"valors modificats al nou projecte" msgid "Extruders count" msgstr "Nombre d'extrusors" @@ -7665,7 +8293,7 @@ msgid "Transfer values from left to right" msgstr "Transfereix valors d'esquerra a dreta" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Si està habilitat, aquest diàleg es pot utilitzar per transferir els valors " @@ -7749,6 +8377,56 @@ msgstr "No hi ha actualitzacions disponibles." msgid "The configuration is up to date." msgstr "La configuració està actualitzada." +msgid "Obj file Import color" +msgstr "" + +msgid "Specify number of colors:" +msgstr "" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "" + +msgid "Recommended " +msgstr "" + +msgid "Current filament colors:" +msgstr "" + +msgid "Quick set:" +msgstr "" + +msgid "Color match" +msgstr "" + +msgid "Approximate color matching." +msgstr "" + +msgid "Append" +msgstr "" + +msgid "Add consumable extruder after existing extruders." +msgstr "" + +msgid "Reset mapped extruders." +msgstr "" + +msgid "Cluster colors" +msgstr "" + +msgid "Map Filament" +msgstr "" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" + msgid "Ramming customization" msgstr "Configuració de Moldejat de punta( Ramming )" @@ -7836,6 +8514,43 @@ msgstr "Des de" msgid "To" msgstr "A" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" +"El Windows Media Player és necessari per a aquesta tasca. Voleu habilitar el " +"\"Windows Media Player\" per al vostre sistema operatiu?" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" +"BambuSource no s'ha registrat correctament per a la reproducció multimèdia! " +"Premeu Sí per tornar-lo a registrar. Seràs promocionat dues vegades" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" +"Falta el component BambuSource registrat per a la reproducció multimèdia! " +"Torneu a instal·lar BambuStutio o busqueu ajuda postvenda." + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" +"Utilitzar un BambuSource des d'una instal·lació diferent, la reproducció de " +"vídeo pot no funcionar correctament! Premeu Sí per solucionar-ho." + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" +"Al vostre sistema li falten còdecs H.264 per al GStreamer, necessaris per " +"reproduir vídeo. (Proveu d'instal·lar els paquets gstreamer1.0-plugins-bad " +"o gstreamer1.0-libav i, a continuació, reinicieu Orca Slicer?)" + msgid "Bambu Network plug-in not detected." msgstr "No s'ha detectat el Plug-In de Xarxa Bambu." @@ -8115,6 +8830,12 @@ msgstr "Moure la barra de desplaçament 5 vegades més ràpid" msgid "Shift+Mouse wheel" msgstr "Maj+Roda del ratolí" +msgid "Horizontal slider - Move to start position" +msgstr "Control lliscant horitzontal - Mou fins a la posició inicial" + +msgid "Horizontal slider - Move to last position" +msgstr "Control lliscant horitzontal - Mou a l'última posició" + msgid "Release Note" msgstr "Notes de la versió" @@ -8144,6 +8865,42 @@ msgstr "Omet aquesta versió" msgid "Done" msgstr "Fet" +msgid "resume" +msgstr "reprendre" + +msgid "Resume Printing" +msgstr "Reprendre Impressió" + +msgid "Resume Printing(defects acceptable)" +msgstr "Reprendre la impressió (defectes acceptables)" + +msgid "Resume Printing(problem solved)" +msgstr "Reprendre la impressió (problema resolt)" + +msgid "Stop Printing" +msgstr "Deixar d'imprimir" + +msgid "Check Assistant" +msgstr "Assistent de comprovació" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruït, Continuar" + +msgid "Not Extruded Yet, Retry" +msgstr "Encara no s'ha Extruït, Tornar a Intentar-ho" + +msgid "Finished, Continue" +msgstr "Finalitzat, Continuar" + +msgid "Load Filament" +msgstr "Carregar Filament" + +msgid "Filament Loaded, Resume" +msgstr "Filament carregat, reprendre" + +msgid "View Liveview" +msgstr "Veure Liveview" + msgid "Confirm and Update Nozzle" msgstr "Confirmar i Actualitzar el broquet" @@ -8206,12 +8963,6 @@ msgstr "Versió:" msgid "Update firmware" msgstr "Actualitzar el firmware" -msgid "Printing" -msgstr "Imprimint" - -msgid "Idle" -msgstr "Inactiu" - msgid "Beta version" msgstr "Versió beta" @@ -8246,11 +8997,11 @@ 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." +"update next time starting Orca." msgstr "" -"La versió del firmware és anormal. Cal reparar i actualitzar abans " -"d'imprimir. Vols actualitzar ara? També pots actualitzar més endavant a la " -"impressora o actualitzar la propera vegada que iniciïs." +"La versió del firmware és anormal. Cal reparar i actualitzar-lo abans " +"d'imprimir. Vols actualitzar-lo ara? També podeu actualitzar-lo més endavant " +"a la impressora o actualitzar-lo la propera vegada que s'iniciï l'Orca." msgid "Extension Board" msgstr "Targeta d'Ampliació" @@ -8362,7 +9113,7 @@ msgstr "" #, boost-format msgid "Generating G-code: layer %1%" -msgstr "Generan Codi-G: capa %1%" +msgstr "Generant Codi-G: capa %1%" msgid "Inner wall" msgstr "Perímetre interior" @@ -8391,9 +9142,6 @@ msgstr "Pont Interior" msgid "Gap infill" msgstr "Ompliment de buits" -msgid "Skirt" -msgstr "Faldilla" - msgid "Support interface" msgstr "Interfície de suport" @@ -8777,6 +9525,12 @@ msgid "" "You can adjust the machine_max_acceleration_travel value in your printer's " "configuration to get higher speeds." msgstr "" +"La configuració de l'acceleració de deplaçament supera l'acceleració màxima " +"de desplaçament (machine_max_acceleration_travel) de la impressora.\n" +"L'Orca limitarà automàticament la velocitat d'acceleració de viatge per " +"assegurar-se que no superi les capacitats de la impressora.\n" +"Podeu ajustar el valor machine_max_acceleration_travel a la configuració de " +"la impressora per obtenir velocitats més altes." msgid "Generating skirt & brim" msgstr "Generant Faldilla i Vora d'Adherència" @@ -8863,10 +9617,12 @@ msgid "Printer preset names" msgstr "Noms de perfils de la impressora" msgid "Use 3rd-party print host" -msgstr "" +msgstr "Utilitzeu l'amfitrió d'impressió de 3a part" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" msgstr "" +"Permetre controlar la impressora de BambuLab a través d'amfitrions " +"d'impressió de 3 ª part" msgid "Hostname, IP or URL" msgstr "Nom d'equip, IP o URL" @@ -9054,6 +9810,15 @@ msgstr "Base d'Enginyeria" msgid "First layer print sequence" msgstr "Seqüència d'impressió de primera capa" +msgid "Other layers print sequence" +msgstr "Seqüència d'impressió d'altres capes" + +msgid "The number of other layers print sequence" +msgstr "El nombre d'altres capes de la seqüència d'impressió" + +msgid "Other layers filament sequence" +msgstr "Seqüència de filaments d'altres capes" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "Aquest Codi-G s'insereix en cada canvi de capa abans d'aixecar z" @@ -9341,7 +10106,7 @@ msgstr "" "direccions alternes en capes senars, independentment del seu grau de voladís." msgid "Bridge counterbore holes" -msgstr "" +msgstr "Pont pels forats esbocats( contraforats )" msgid "" "This option creates bridges for counterbore holes, allowing them to be " @@ -9911,21 +10676,21 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Ordre de Perímetre/Farciment. Quan es desmarca la casella, primer " +"Ordre de perímetre/farciment. Quan es desmarca la casella, primer " "s'imprimeixen els perímetres, cosa que funciona millor en la majoria dels " "casos.\n" "\n" -"Imprimir primer els perímetres pot ajudar amb voladissos extrems, ja que els " -"perímetres tenen el farciment veí al qual adherir-se. Tanmateix, el " -"farciment empenyerà lleugerament els perímetres impresos als que s'adhereix, " -"cosa que provocarà un pitjor acabat superficial extern. També pot fer que el " -"farciment brilli a les superfícies externes de la peça." +"Imprimir el farciment primer pot ajudar amb voladissos extrems, ja que els " +"perímetres tenen el farciment veí per adherir-s'hi. Tanmateix, el farciment " +"empenyerà lleugerament les parets impreses on s'uneix, cosa que provocarà un " +"pitjor acabat superficial extern. També pot fer que el farciment ressalti a " +"través de les superfícies externes de la peça." msgid "Wall loop direction" msgstr "Direcció del bucle de perímetre" @@ -9983,6 +10748,12 @@ msgstr "" "Radi d'espai lliure al voltant de l'extrusora. S'utilitza per evitar " "col·lisions en impressió per objecte." +msgid "Nozzle height" +msgstr "Alçada del broquet" + +msgid "The height of nozzle tip." +msgstr "L'alçada de la punta del broquet." + msgid "Bed mesh min" msgstr "Malla de llit mínim" @@ -10106,6 +10877,22 @@ msgstr "" "s'aturarà mai i funcionarà almenys a una velocitat mínima per reduir la " "freqüència d'arrencada i aturada" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Temps de capa" @@ -10402,8 +11189,8 @@ msgstr "Fabricant del filament. Només per a mostrar" msgid "(Undefined)" msgstr "( Indefinit )" -msgid "Infill direction" -msgstr "Angle de farciment" +msgid "Sparse infill direction" +msgstr "Direcció de farciment poc dens" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10412,6 +11199,22 @@ msgstr "" "Angle per a un patró de farciment poc dens, que controla l'inici o la " "direcció principal de la línia" +msgid "Solid infill direction" +msgstr "Direcció de farciment sòlid" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Angle per al patró de farciment sòlid, que controla l'inici o la direcció " +"principal de la línia" + +msgid "Rotate solid infill direction" +msgstr "Rotar la direcció de farciment sòlid" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Rotar la direcció de farciment sòlid 90° per a cada capa." + msgid "Sparse infill density" msgstr "Densitat de farciment poc dens" @@ -10459,6 +11262,9 @@ msgstr "Suport Cúbic" msgid "Lightning" msgstr "Llampec" +msgid "Cross Hatch" +msgstr "Quadrícula" + msgid "Sparse infill anchor length" msgstr "Longitud d'ancoratge de farciment poc dens" @@ -10621,7 +11427,7 @@ msgid "" "can improve build plate adhension" msgstr "" "Alçada de la capa inicial. Fer que l'alçada inicial de la capa sigui " -"gruixuda lleugerament pot millorar l'adherència de la placa d'impressió" +"lleugerament més gruixuda pot millorar l'adherència de la placa d'impressió" msgid "Speed of initial layer except the solid infill part" msgstr "Velocitat de la capa inicial excepte la part de farciment sòlid" @@ -10672,6 +11478,9 @@ msgstr "" "\"close_fan_the_first_x_layers\", en aquest cas el ventilador funcionarà a " "la velocitat màxima permesa a la capa \"close_fan_the_first_x_layers\" + 1." +msgid "layer" +msgstr "capa" + msgid "Support interface fan speed" msgstr "Velocitat del ventilador a la interfície de suport" @@ -10746,15 +11555,41 @@ msgstr "" "Velocitat de farciment de buits. El buit sol tenir una amplada de línia " "irregular i s'ha d'imprimir més lentament" +msgid "Precise Z height" +msgstr "Alçada Z precisa" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Habiliteu-lo per obtenir una alçada z precisa de l'objecte després de " +"laminar-lo. Obtindrà l'alçada precisa de l'objecte ajustant finament les " +"altures de capa de les últimes capes. Tingueu en compte que es tracta d'un " +"paràmetre experimental." + msgid "Arc fitting" msgstr "Ajustament en Arc( Arc fitting )" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Habiliteu-lo per obtenir un fitxer de Codi-G que tingui moviments G2 i G3. I " -"la tolerància de curvatura és la mateixa que la resolució" +"Habiliteu-lo per obtenir un fitxer de codi-G que tingui moviments G2 i G3. " +"La tolerància d'ajust és la mateixa que la resolució. \n" +"\n" +"Nota: Per a les màquines de sabatilles, es recomana desactivar aquesta " +"opció. Klipper no es beneficia de les ordres arc, ja que aquestes es " +"divideixen de nou en segments de línia pel firmware. Això resulta en una " +"reducció de la qualitat de la superfície, ja que els segments de línia es " +"converteixen en arcs per la talladora i després tornen als segments de línia " +"pel firmware." msgid "Add line number" msgstr "Afegir número de línia" @@ -10990,13 +11825,35 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Superposició de farciment/perímetre" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"L'àrea de farciment s'amplia lleugerament per superposar-se amb el perímetre " -"per a una millor unió. El valor percentual és relatiu a l'amplada de línia " -"del farciment poc dens" +"L'àrea de farciment s'amplia lleugerament per superposar-se amb la paret per " +"a una millor unió. El valor percentual és relatiu a l'amplada de línia de " +"farciment poc dens. Establiu aquest valor a ~ 10-15% per minimitzar la " +"potencial sobreextrusió i acumulació de material que resulti en superfícies " +"superiors rugoses." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Farciment superposat a paret superior/inferior\"" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"L'àrea superior de farciment sòlid s'amplia lleugerament per superposar-se " +"amb la paret per a una millor unió i minimitzar l'aparició de forats on el " +"farciment superior es troba amb les parets. Un valor de 25-30% és un bon " +"punt de partida, minimitzant l'aparició de forats. El valor percentual és " +"relatiu a l'amplada de línia del farciment poc dens" msgid "Speed of internal sparse infill" msgstr "Velocitat de farciment poc dens intern" @@ -11688,6 +12545,30 @@ msgstr "" "l'Ooze( goteig ) durant el llarg desplaçament. Definiu zero per desactivar " "la retracció" +msgid "Long retraction when cut(experimental)" +msgstr "Retracció llarga en tallar(experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Característica experimental. Retreure i tallar el filament a més distància " +"durant els canvis per minimitzar la purga. Tot i que això redueix " +"significativament el flux, també pot augmentar el risc d'obstruccions del " +"broquet o altres problemes d'impressió." + +msgid "Retraction distance when cut" +msgstr "Distància de retracció quan es talla" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Característica experimental. Longitud de retracció abans de tallar durant el " +"canvi de filament" + msgid "Z hop when retract" msgstr "Salt en Z quan hi ha retracció" @@ -11827,12 +12708,14 @@ msgstr "Desactivar el temps d'impressió restant" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" +"Desactivar la generació del M73: establir el temps d'impressió restant al " +"gcode final" msgid "Seam position" msgstr "Posició de la costura" msgid "The start position to print each part of outer wall" -msgstr "La posició inicial per imprimir cada part del perímetre exterior" +msgstr "La posició inicial per imprimir cada capa del perímetre exterior" msgid "Nearest" msgstr "Més proper" @@ -11906,7 +12789,7 @@ msgstr "" "valor per defecte és de 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Llindar d'angle condicional" #, no-c-format, no-boost-format msgid "" @@ -11916,6 +12799,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"Aquesta opció determina el llindar de voladís per a l'aplicació de costures " +"d'Unió en Bisell. Si la porció no suportada del perímetre és inferior a " +"aquest llindar, s'aplicaran costures de juntes d'Unió en Bisell. El llindar " +"per defecte s'estableix en 40% de l'amplada del perímetre extern. A causa de " +"consideracions de rendiment, s'estima el grau de voladís." msgid "Scarf joint speed" msgstr "Velocitat d'Unió en Bisell" @@ -12030,7 +12918,7 @@ msgstr "" "perímetre extern en imprimir amb ordre d'impressió de perímetre Exterior/" "Interior o Interior/Exterior/Interior, la deretracció es realitza " "lleugerament a l'interior des de l'inici del perímetre exterior. D'aquesta " -"manera, qualsevol potencial sobreextrusió queda amagat de la superfície " +"manera, qualsevol potencial sobreextrusió queda amagada de la superfície " "exterior. \n" "\n" "Això és útil quan s'imprimeix amb ordre d'impressió de perfil Exterior/" @@ -12065,11 +12953,48 @@ msgstr "Alçada de la faldilla" msgid "How many layers of skirt. Usually only one layer" msgstr "Quantes capes de faldilla. Normalment només una capa" +msgid "Draft shield" +msgstr "Escut contra corrents d'aire" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Un escut contra corrents d'aire és útil per protegir una impressió ABS o ASA " +"de la deformació i el despreniment del llit d'impressió a causa del corrent " +"d'aire. Normalment només es necessita amb impressores de marc obert, és a " +"dir, sense tancament. \n" +"\n" +"Opcions:\n" +"Habilitat = la faldilla és tan alta com l'objecte imprès més alt.\n" +"Limitat = la faldilla és tan alta com especifica l'alçada de la faldilla.\n" +"\n" +"Nota: Amb l'escut contra corrents d'aire actiu, la faldilla s'imprimirà a " +"distància de faldilla de l'objecte. Per tant, si les vores d'adherència " +"estan actives pot creuar-se amb elles. Per evitar-ho, augmenteu el valor de " +"distància de la faldilla.\n" + +msgid "Limited" +msgstr "Limitat" + +msgid "Enabled" +msgstr "Habilitat" + msgid "Skirt loops" msgstr "Voltes de la faldilla" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "Nombre devoltes per a la faldilla. Zero significa faldilla desactivada" +msgstr "" +"Nombre de voltes per a la faldilla. Zero significa faldilla desactivada" msgid "Skirt speed" msgstr "Velocitat de la faldilla" @@ -12079,6 +13004,22 @@ msgstr "" "Velocitat de la faldilla, en mm/s. Zero significa utilitzar la velocitat " "predeterminada d'extrusió de capa." +msgid "Skirt minimum extrusion length" +msgstr "Longitud mínima d'extrusió de la faldilla" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Longitud mínima d'extrusió del filament en mm en imprimir la faldilla. Zero " +"significa que aquesta funció està desactivada.\n" +"\n" +"L'ús d'un valor diferent de zero és útil si la impressora està configurada " +"per imprimir sense una línia principal." + 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" @@ -12108,9 +13049,6 @@ msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" "Velocitat de farciment sòlid intern, no de la superfície superior i inferior" -msgid "Spiral vase" -msgstr "Gerro en Espiral" - 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 " @@ -12231,7 +13169,7 @@ msgstr "" "frontal del llit d'impressió al començament de la impressió." msgid "Slice gap closing radius" -msgstr "Radi de tancament des buits en laminar" +msgstr "Radi de tancament dels buits en laminar" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " @@ -12861,6 +13799,51 @@ msgstr "Espaiat de les línies de la Torre de Purga" msgid "Spacing of purge lines on the wipe tower." msgstr "Espaiat de les línies de purga de la Torre de Purga." +msgid "Maximum wipe tower print speed" +msgstr "Velocitat màxima d'impressió de la torre de purga" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"La velocitat màxima d'impressió en purgar a la torre de purga i imprimir a " +"la torre de purga capes poc denses. En la purga, si la velocitat de " +"farciment poc dens o la velocitat calculada de la màxima velocitat " +"volumètrica del filament és menor, s'utilitzarà la més baixa.\n" +"\n" +"En imprimir les capes poc denses, si la velocitat perimetral interna o la " +"velocitat calculada de la màxima velocitat volumètrica del filament és " +"menor, s'utilitzarà la més baixa.\n" +"\n" +"L'augment d'aquesta velocitat pot afectar l'estabilitat de la torre, així " +"com augmentar la força amb què el broquet xoca amb els grumolls que s'hagin " +"pogut formar a la torre de purga.\n" +"\n" +"Abans d'augmentar aquest paràmetre més enllà del valor per defecte de 90 mm/" +"segon, assegureu-vos que la impressora pugui fer un pont de manera fiable a " +"les velocitats augmentades i que el degoteig quan es produeixi el canvi " +"d'eina estigui ben controlat.\n" +"\n" +"Per als perímetres externs de la torre de purga, s'utilitza la velocitat " +"perimetral interna independentment d'aquesta configuració." + msgid "Wipe tower extruder" msgstr "Extrusor de la Torre de Purga" @@ -13632,6 +14615,9 @@ msgstr "Cancel·lat" msgid "load_obj: failed to parse" msgstr "load_obj: no s'ha pogut analitzar" +msgid "load mtl in obj: failed to parse" +msgstr "carrega mtl a obj: no s'ha pogut analitzar" + msgid "The file contains polygons with more than 4 vertices." msgstr "El fitxer conté polígons amb més de 4 vèrtexs." @@ -13711,12 +14697,6 @@ msgstr "Ratio de Flux" msgid "Max Volumetric Speed" msgstr "Velocitat Volumètrica Màxima" -msgid "Please enter the name you want to save to printer." -msgstr "Introduïu el nom que voleu assignar a la impressora." - -msgid "The name cannot exceed 40 characters." -msgstr "El nom no pot superar els 40 caràcters." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13764,6 +14744,19 @@ msgstr "Seleccioneu el filament per calibrar." msgid "The input value size must be 3." msgstr "El valor de mida d'entrada ha de ser 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Aquest tipus de màquina només pot contenir 16 resultats històrics per " +"broquet. Podeu suprimir els resultats de l'historial existents i, a " +"continuació, iniciar el calibratge. O podeu continuar el calibratge, però no " +"podeu crear nous resultats històrics de calibratge. \n" +"Encara vols continuar amb el calibratge?" + msgid "Connecting to printer..." msgstr "Connectant amb la impressora..." @@ -13775,6 +14768,24 @@ msgstr "" "El resultat del Calibratge de les Dinàmiques de Flux s'ha desat a la " "impressora" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Ja hi ha un resultat històric de calibratge amb el mateix nom: %s. Només es " +"guarda un dels resultats amb el mateix nom. Estàs segur que vols " +"sobreescriure el resultat històric?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Aquest tipus de màquina només pot contenir %d resultats de l'historial per " +"broquet. Aquest resultat no es guardarà." + msgid "Internal Error" msgstr "Error intern" @@ -13824,36 +14835,15 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Consulteu els detalls del Calibratge de les Dinàmiques de Flux al nostre " -"wiki.\n" -"\n" -"Normalment el calibratge és innecessari. Quan inicieu una impressió d'un sol " -"color/material, amb l'opció \"Calibratge de les Dinàmiques de Flux\" marcada " -"al menú d'inici d'impressió, la impressora seguirà la forma antiga, " -"calibrarà el filament abans de la impressió; Quan s'inicia una impressió " -"multicolor/multimaterial, la impressora utilitzarà el paràmetre de " -"compensació predeterminat per al filament durant cada canvi de filament, el " -"qual tindrà un bon resultat en la majoria dels casos.\n" -"\n" -"Tingueu en compte que hi ha alguns casos que faran que el resultat del " -"calibratge no sigui fiable: utilitzar una placa de textura per fer el " -"calibratge; si la placa d'impressió no té una bona adherència ( renteu la " -"placa d'impressió o apliqueu adhesiu! ) ... Podeu trobar més informació a la " -"nostra wiki.\n" -"\n" -"Els resultats del calibratge tenen al voltant d'un 10 per cent de fluctuació " -"en la nostra prova, la qual cosa pot fer que el resultat no sigui exactament " -"el mateix en cada calibratge. Encara estem investigant la causa arrel per " -"fer millores amb noves actualitzacions." msgid "When to use Flow Rate Calibration" msgstr "Quan s'ha d'utilitzar el Calibratge del Ratio de Flux" @@ -13978,28 +14968,22 @@ msgstr "" msgid "Failed" msgstr "Ha fallat" +msgid "Please enter the name you want to save to printer." +msgstr "Introduïu el nom que voleu assignar a la impressora." + +msgid "The name cannot exceed 40 characters." +msgstr "El nom no pot superar els 40 caràcters." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" -"Només es desarà un dels resultats amb el mateix nom. Estàs segur que vols " -"sobreescriure els altres resultats?" - -#, 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 "" -"Ja hi ha un resultat històric de calibratge amb el mateix nom: %s. Només es " -"pot guardar un dels resultats amb el mateix nom. Estàs segur que vols " -"sobreescriure el resultat històric?" msgid "Please find the best line on your plate" msgstr "Busqueu la millor línia a la placa" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "Busqueu la cantonada amb un grau d'extrusió perfecte" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "" msgid "Input Value" msgstr "Valor d'entrada" @@ -14077,12 +15061,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Paràmetres d'impressió" -msgid "- ℃" -msgstr "- °C" - -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Tipus de placa" @@ -14131,12 +15109,6 @@ msgstr "Al valor k" msgid "Step value" msgstr "Valor del pas" -msgid "0.5" -msgstr "0,5" - -msgid "0.005" -msgstr "0,005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "El diàmetre del broquet s'ha sincronitzat des de la configuració d'impressora" @@ -14150,6 +15122,9 @@ msgstr "A la Velocitat Volumètrica" msgid "Flow Dynamics Calibration Result" msgstr "Resultat del Calibratge de Dinàmiques de Flux" +msgid "New" +msgstr "Nou" + msgid "No History Result" msgstr "Sense Resultats Històrics" @@ -14163,9 +15138,24 @@ msgstr "" msgid "Action" msgstr "Acció" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"Aquest tipus de màquina només pot contenir %d resultats de l'historial per " +"broquet." + msgid "Edit Flow Dynamics Calibration" msgstr "Editeu el Calibratge de Dinàmiques de Flux" +msgid "New Flow Dynamic Calibration" +msgstr "Calibratge de Dinàmiques de Flux" + +msgid "Ok" +msgstr "D’acord" + +msgid "The filament must be selected." +msgstr "S'ha de seleccionar el filament." + msgid "Network lookup" msgstr "Cerca de xarxa" @@ -14254,6 +15244,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14351,6 +15344,9 @@ msgstr "" msgid "Upload to storage" msgstr "Pujar a l'emmagatzematge" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "El nom del fitxer que vol pujar no acaba amb \"%s\". Voleu continuar?" @@ -14447,7 +15443,7 @@ msgid "Export Log" msgstr "Exportar Registre( Log )" msgid "OrcaSlicer Version:" -msgstr "" +msgstr "Versió d'Orca Slicer:" msgid "System Version:" msgstr "Versió del Sistema:" @@ -14456,10 +15452,10 @@ msgid "DNS Server:" msgstr "Servidor DNS:" msgid "Test OrcaSlicer(GitHub)" -msgstr "" +msgstr "Prova OrcaSlicer (GitHub)" msgid "Test OrcaSlicer(GitHub):" -msgstr "" +msgstr "Prova OrcaSlicer (GitHub):" msgid "Test Bing.com" msgstr "Prova Bing.com" @@ -14563,6 +15559,16 @@ msgstr "" "Encara no heu seleccionat una impressora o un perfil. Si us plau, " "seleccioneu-ne almenys un." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"El nom de Filament %s que heu creat ja existeix. \n" +"Si continueu creant-lo, el perfil creat es mostrarà amb el seu nom complet. " +"Vols continuar?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" "Alguns perfils existents no s'han pogut crear, com s'indica tot seguit:\n" @@ -14625,12 +15631,6 @@ msgstr "Rectangle" msgid "Printable Space" msgstr "Espai Imprimible" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "STL del Llit" @@ -14786,7 +15786,7 @@ msgstr "Filament Creat" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "Aneu a la configuració del filament per editar els perfils si ho " @@ -14795,12 +15795,25 @@ msgstr "" "la velocitat volumètrica màxima tenen un impacte significatiu en la qualitat " "d'impressió. Si us plau, configureu-los amb cura." +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"L'Orca ha detectat que la funció de sincronització de perfils no està " +"habilitada, cosa que pot provocar una configuració de filament incorrecta a " +"la pàgina Dispositiu. \n" +"Feu clic a \"Sincronitzar els perfils d'usuari\" per habilitar la funció de " +"sincronització." + msgid "Printer Setting" msgstr "Configuració de la Impressora" -msgid "Export Configs" -msgstr "Exportar Configuracions" - msgid "Printer config bundle(.orca_printer)" msgstr "Paquet de configuració d'impressores( .orca_printer )" @@ -14905,6 +15918,11 @@ msgstr "Seleccioneu com a mínim una impressora o filament." msgid "Please select a type you want to export" msgstr "Seleccioneu el tipus que voleu exportar" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"No s'ha pogut crear una carpeta temporal, torneu a provar Exportar " +"Configuracions." + msgid "Edit Filament" msgstr "Edita el Filament" @@ -14981,6 +15999,21 @@ msgstr "Replegar" msgid "Daily Tips" msgstr "Consells diaris" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "broquet memoritzat: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"El diàmetre del broquet del perfil no és coherent amb el diàmetre del " +"broquet memoritzat. Has canviat el broquet recentment?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*El material d'impressió %s amb %s podria causar danys al broquet" + msgid "Need select printer" msgstr "És necessari que seleccioneu una impressora" @@ -15009,11 +16042,17 @@ msgid "Success!" msgstr "Èxit!" msgid "Are you sure to log out?" -msgstr "" +msgstr "Estàs segur de tancar sessió?" msgid "Refresh Printers" msgstr "Refrescar Impressores" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15044,7 +16083,7 @@ msgstr "" "Magatzem de Certificats / Clauer." msgid "Login/Test" -msgstr "" +msgstr "Iniciar Sessió/Provar" msgid "Connection to printers connected via the print host failed." msgstr "" @@ -15184,46 +16223,318 @@ msgstr "" "Cos del missatge: \"%1%\"\n" "Error: \"%2%\"" -msgid "Connected to Obico successfully!" -msgstr "" - -msgid "Could not connect to Obico" -msgstr "" - -msgid "Connected to SimplyPrint successfully!" -msgstr "" - -msgid "Could not connect to SimplyPrint" -msgstr "" - -msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." msgstr "" +"Té una alçada de capa petita i produeix línies de capa gairebé " +"insignificants i una alta qualitat d'impressió. És adequat per a la majoria " +"dels casos d'impressió generals." msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té " +"velocitats i acceleracions més baixes, i el patró de farciment poc dens és " +"Giroide. Això es tradueix en una qualitat d'impressió molt més alta, però un " +"temps d'impressió molt més llarg." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té una " +"alçada de capa lleugerament més gran i resulta en línies de capa gairebé " +"insignificants i un temps d'impressió lleugerament més curt." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té una " +"alçada de capa més gran i resulta en línies de capa lleugerament visibles, " +"però un temps d'impressió més curt." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té una " +"alçada de capa més petita i resulta en línies de capes gairebé invisibles i " +"una qualitat d'impressió més alta, però un temps d'impressió més curt." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té línies " +"de capa més petites, velocitats i acceleracions més baixes, i el patró de " +"farciment poc dens és Giroide. Això es tradueix en línies de capa gairebé " +"invisibles i una qualitat d'impressió molt més gran, però un temps " +"d'impressió molt més llarg." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té una " +"alçada de capa més petita i produeix línies de capa mínimes i una qualitat " +"d'impressió més alta, però un temps d'impressió més curt." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,2 mm, té línies " +"de capa més petites, velocitats i acceleracions més baixes, i el patró de " +"farciment poc dens és Giroide. Això es tradueix en línies de capa mínimes i " +"una qualitat d'impressió molt més alta, però un temps d'impressió molt més " +"llarg." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Té una alçada general de capa, i produeix línies de capa i qualitat " +"d'impressió generals. És adequat per a la majoria dels casos d'impressió " +"generals." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té més " +"bucles de paret i una densitat de farciment més gran. Això es tradueix en " +"una major resistència de les impressions, però més consum de filaments i un " +"temps d'impressió més llarg." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més gran i produeix línies de capa més aparents i una " +"qualitat d'impressió més baixa, però un temps d'impressió lleugerament més " +"curt." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més gran i produeix línies de capa més aparents i una " +"qualitat d'impressió més baixa, però un temps d'impressió més curt." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més petita i produeix línies de capa menys aparents i una " +"qualitat d'impressió més alta, però un temps d'impressió més llarg." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més petita, velocitats i acceleració més baixes, i el patró " +"de farciment poc dens és Giroide. Això es tradueix en línies de capa menys " +"aparents i una qualitat d'impressió molt més gran, però un temps d'impressió " +"molt més llarg." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més petita i produeix línies de capa gairebé insignificants i " +"una qualitat d'impressió més alta, però un temps d'impressió més llarg." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més petita, velocitats i acceleració més baixes, i el patró " +"de farciment poc dens és Giroide. Això produeix línies de capa gairebé " +"insignificants i una qualitat d'impressió molt més gran, però un temps " +"d'impressió molt més llarg." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,4 mm, té una " +"alçada de capa més petita i produeix línies de capa gairebé insignificants i " +"un temps d'impressió més llarg." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Té una gran alçada de capa i produeix línies de capa aparents i qualitat " +"d'impressió i temps d'impressió ordinaris." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,6 mm, té més " +"bucles de paret i una densitat de farciment més gran. Per tant, es tradueix " +"en una major resistència de les impressions, però més consum de filaments i " +"un temps d'impressió més llarg." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,6 mm, té una " +"alçada de capa més gran i produeix línies de capa més aparents i una " +"qualitat d'impressió més baixa, però un temps d'impressió més curt en alguns " +"casos d'impressió." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,6 mm, té una " +"alçada de capa més gran i produeix línies de capa molt més aparents i una " +"qualitat d'impressió molt menor, però un temps d'impressió més curt en " +"alguns casos d'impressió." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,6 mm, té una " +"alçada de capa més petita i produeix línies de capa menys aparents i una " +"lleugera qualitat d'impressió més alta, però un temps d'impressió més llarg." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,6 mm, té una " +"alçada de capa més petita i produeix línies de capa menys aparents i una " +"qualitat d'impressió més alta, però un temps d'impressió més llarg." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Té una alçada de capa molt gran i produeix línies de capa molt aparents, " +"baixa qualitat d'impressió i temps d'impressió general." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,8 mm, té una " +"alçada de capa més gran i produeix línies de capa molt aparents i una " +"qualitat d'impressió molt menor, però un temps d'impressió més curt en " +"alguns casos d'impressió." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,8 mm, té una " +"alçada de capa molt més gran, i produeix línies de capa extremadament " +"aparents i una qualitat d'impressió molt menor, però un temps d'impressió " +"molt més curt en alguns casos d'impressió." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,8 mm, té una " +"alçada de capa lleugerament més petita i produeix línies de capa " +"lleugerament inferiors però encara aparents i una qualitat d'impressió " +"lleugerament superior, però un temps d'impressió més llarg en alguns casos " +"d'impressió." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"En comparació amb el perfil predeterminat del broquet de 0,8 mm, té una " +"alçada de capa més petita i produeix línies de capa menys però encara " +"aparents i una qualitat d'impressió lleugerament superior, però un temps " +"d'impressió més llarg en alguns casos d'impressió." + +msgid "Connected to Obico successfully!" +msgstr "Connectat amb Obico amb èxit!" + +msgid "Could not connect to Obico" +msgstr "No s'ha pogut connectar a Obico" + +msgid "Connected to SimplyPrint successfully!" +msgstr "Connectat a SimplyPrint amb èxit!" + +msgid "Could not connect to SimplyPrint" +msgstr "No s'ha pogut connectar a SimplyPrint" + +msgid "Internel error" msgstr "" msgid "Unknown error" +msgstr "Error desconegut" + +msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" +"No s'ha enllaçat el compte de SimplyPrint. Aneu a Opcions de Connexió per " +"configurar-lo." msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "La connexió amb Flashforge funciona correctament." msgid "Could not connect to Flashforge" -msgstr "" +msgstr "No s'ha pogut connectar a Flashforge" msgid "The provided state is not correct." -msgstr "" +msgstr "L'estat proporcionat no és correcte." msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "Doneu els permisos necessaris quan autoritzeu aquesta aplicació." msgid "Something unexpected happened when trying to log in, please try again." msgstr "" +"Alguna cosa inesperada ha passat en intentar iniciar sessió, torneu-ho a " +"provar." msgid "User cancelled." -msgstr "" +msgstr "Usuari cancel·lat." #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -15615,22 +16926,227 @@ msgstr "" "deformació." #~ msgid "" -#~ "Alternate extra wall only works with ensure vertical shell thickness " -#~ "disabled. " +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." #~ msgstr "" -#~ "El perímetre addicional alternat només funciona amb el gruix vertical de " -#~ "la carcassa desactivat. " +#~ "La mida del fitxer supera el límit de pujada de 100 MB. Si us plau, " +#~ "carregueu el vostre fitxer a través del panell." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Introduïu un valor vàlid ( K en 0 ~ 0.3 )" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Introduïu un valor vàlid ( K a 0 ~ 0.3, N a 0.6 ~ 2.0 )" + +#~ msgid "V" +#~ msgstr "V" + +#, fuzzy +#~ msgid "Maximum print speed when purging" +#~ msgstr "Màxima velocitat d'impressió en purgar" #~ msgid "" -#~ "Change these settings automatically? \n" -#~ "Yes - Disable ensure vertical shell thickness and enable alternate extra " -#~ "wall\n" -#~ "No - Dont use alternate extra wall" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" #~ msgstr "" -#~ "Canviar aquesta configuració automàticament? \n" -#~ "Sí - Desactivar assegurar el gruix vertical de la carcassa i activar un " -#~ "perímetre addicional alternat\n" -#~ "No - No utilitzar perímetre addicional alternat" +#~ "Orca Slicer es basa en BambuStudio de Bambulab, que és de PrusaSlicer de " +#~ "Prusa Research. PrusaSlicer és de Slic3r d'Alessandro Ranellucci i la " +#~ "comunitat RepRap" + +#~ msgid "Export &Configs" +#~ msgstr "Exportar &Configuracions" + +#~ msgid "Open &Studio" +#~ msgstr "Obrir &Studio" + +#~ msgid "Open Studio" +#~ msgstr "Obrir Studio" + +#, fuzzy +#~ msgid "" +#~ "Over 4 systems/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "Hi ha més de 4 sistemes / pràctics que utilitzen accés remot, podeu " +#~ "tancar-ne alguns i tornar-ho a provar." + +#~ msgid "Infill direction" +#~ msgstr "Angle de farciment" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Habiliteu-lo per obtenir un fitxer de Codi-G que tingui moviments G2 i " +#~ "G3. I la tolerància de curvatura és la mateixa que la resolució" + +#~ msgid "Export Configs" +#~ msgstr "Exportar Configuracions" + +#~ msgid "Unload Filament" +#~ msgstr "Descarregar Filament" + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa Base" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#, fuzzy +#~| msgid "Unsaved Changes" +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Canvis no desats" + +#, fuzzy +#~| msgid "Reset scale" +#~ msgid "Preset Value" +#~ msgstr "Valor predefinit esquerre" + +#, fuzzy +#~| msgid "Modified G-codes" +#~ msgid "Modified Value" +#~ msgstr "Valor modificat" + +#, fuzzy +#~| msgid "User Preset" +#~ msgid "Use Preset Value" +#~ msgstr "Perfil d'usuari" + +#, fuzzy +#~| msgid "Save file as:" +#~ msgid "Save Modified Value" +#~ msgstr "Desa el fitxer com a:" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Voleu desar aquests paràmetres canviats (valor modificat)?" + +#, fuzzy +#~| msgid "" +#~| "You have changed some preset settings. \n" +#~| "Would you like to keep these changed settings (new value) after " +#~| "switching preset?" +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "Heu canviat algunes opcions de configuració del perfil. \n" +#~ "Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Voleu mantenir la configuració modificada actual o utilitzar la " +#~ "configuració predeterminada?" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Voleu desar la configuració modificada actual?" + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0,5" + +#~ msgid "0.005" +#~ msgstr "0,005" + +#~ msgid "active" +#~ msgstr "actiu" + +#~ msgid "Jump to layer" +#~ msgstr "Saltar a la capa" + +#~ 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 verd significa que la humitat AMS és normal, el taronja representa que " +#~ "la humitat és alta, el vermell representa que la humitat és excessiva. " +#~ "( Higròmetre: com més baix millor. )" + +#~ 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 estat del dessecant inferior a dues barres indica que el dessecant pot " +#~ "estar inactiu. Si us plau, canvieu el dessecant. ( Les barres: com més " +#~ "altes millor. )" + +#~ 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 "" +#~ "Nota: Quan la tapa està oberta o es canvia el paquet dessecant, pot " +#~ "trigar hores o una nit a absorbir la humitat. Les baixes temperatures " +#~ "també alenteixen el procés. Durant aquest temps, és possible que " +#~ "l'indicador no representi la cambra amb precisió." + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Inicialització fallida ( No hi ha dispositiu )!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Inicialització fallida ( Sense Dispositiu de Càmera )!" + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Inicialització fallida ( No és compatible amb la versió actual de la " +#~ "impressora )!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Inicialització fallida ( no accessible en mode només LAN )!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "Inicialització fallida ( Manca la IP LAN de la impressora )!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Aturat [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "La càrrega ha fallat [%d]!" + +#~ msgid "Connection lost. Please retry." +#~ msgstr "S'ha perdut la connexió. Si us plau, torna-ho a intentar." + +#, 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 "" +#~ "Heu canviat alguns paràmetres del perfil \"%1%\". \n" +#~ "Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" + +#~ msgid " ℃" +#~ msgstr " °C" #~ msgid "" #~ "The speed setting exceeds the printer's maximum speed " @@ -15647,9 +17163,6 @@ msgstr "" #~ "Podeu ajustar la configuració de velocitat màxima a la configuració de la " #~ "impressora per obtenir velocitats més altes." -#~ msgid "Bridge counterbole holes" -#~ msgstr "Pont pels forats esbocats( contraforats )" - #~ msgid "Studio Version:" #~ msgstr "Versió d'Studio:" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 242262cf63..22cd302d8a 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: 2023-09-30 15:15+0200\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -107,7 +107,7 @@ msgid "Support Generated" msgstr "Vygenerovat podpěry" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "Gizmo-Umístit plochou na podložku" msgid "Lay on face" msgstr "Plochou na podložku" @@ -189,13 +189,13 @@ msgid "Move" msgstr "Přesunout" msgid "Gizmo-Move" -msgstr "" +msgstr "Gizmo-Posuv" msgid "Rotate" msgstr "Otočit" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Gizmo-Otáčení" msgid "Optimize orientation" msgstr "Optimalizovat orientaci" @@ -207,7 +207,7 @@ msgid "Scale" msgstr "Měřítko" msgid "Gizmo-Scale" -msgstr "" +msgstr "Gizmo-Měřítko" msgid "Error: Please close all toolbar menus first" msgstr "Chyba: Nejprve prosím zavřete všechny nabídky panelu nástrojů" @@ -260,6 +260,9 @@ msgstr "Výchozí Natočení" msgid "World coordinates" msgstr "Světové souřadnice" +msgid "Object coordinates" +msgstr "Souřadnice objektu" + msgid "°" msgstr "°" @@ -274,16 +277,16 @@ msgid "uniform scale" msgstr "jednotné měřítko" msgid "Planar" -msgstr "" +msgstr "Rovinný" msgid "Dovetail" -msgstr "" +msgstr "Rybinový spoj" msgid "Auto" msgstr "Automaticky" msgid "Manual" -msgstr "" +msgstr "Ručně" msgid "Plug" msgstr "Čep" @@ -292,10 +295,10 @@ msgid "Dowel" msgstr "Kolík" msgid "Snap" -msgstr "" +msgstr "Zaklapávací" msgid "Prism" -msgstr "" +msgstr "Hranol" msgid "Frustum" msgstr "Středový jehlan" @@ -307,13 +310,13 @@ msgid "Hexagon" msgstr "Šestiúhelník" msgid "Keep orientation" -msgstr "" +msgstr "Zachovat orientaci" msgid "Place on cut" msgstr "Umístit řezem na podložku" msgid "Flip upside down" -msgstr "" +msgstr "Obrácení vzhůru nohama" msgid "Connectors" msgstr "Spojky" @@ -331,19 +334,19 @@ msgstr "Tvar" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Hloubka" msgid "Groove" -msgstr "" +msgstr "Drážka" msgid "Width" msgstr "Šířka" msgid "Flap Angle" -msgstr "" +msgstr "Úhel patky" msgid "Groove Angle" -msgstr "" +msgstr "Úhel drážky" msgid "Part" msgstr "Dílů" @@ -355,21 +358,26 @@ msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane" msgstr "" +"Kliknutím překlopíte rovinu řezu\n" +"Tažením myši posunete rovinu řezu" msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane\n" "Right-click a part to assign it to the other side" msgstr "" +"Kliknutím otočíte rovinu řezu\n" +"Přesunete rovinu řezu tažením myši\n" +"Kliknutím pravým tlačítkem myši na díl jej přiřadíte na druhou stranu" msgid "Move cut plane" -msgstr "" +msgstr "Přesun roviny řezu" msgid "Mode" -msgstr "" +msgstr "Režim" msgid "Change cut mode" -msgstr "" +msgstr "Změna režimu řezání" msgid "Tolerance" msgstr "Tolerance" @@ -408,22 +416,22 @@ msgid "Cut" msgstr "Řezat" msgid "Rotate cut plane" -msgstr "" +msgstr "Otáčení roviny řezu" msgid "Remove connectors" msgstr "Odstranit spojky" msgid "Bulge" -msgstr "" +msgstr "Vyboulení" msgid "Bulge proportion related to radius" -msgstr "" +msgstr "Poměr vyboulení v závislosti na poloměru" msgid "Space" msgstr "Mezerník" msgid "Space proportion related to radius" -msgstr "" +msgstr "Velikost mezery vůči poloměru" msgid "Confirm connectors" msgstr "Potvrzení spojek" @@ -432,26 +440,26 @@ msgid "Cancel" msgstr "Zrušit" msgid "Build Volume" -msgstr "" +msgstr "Maximální rozměry tisku" msgid "Flip cut plane" -msgstr "" +msgstr "Otočit řezovou rovinu" msgid "Groove change" -msgstr "" +msgstr "Změna drážky" msgid "Reset" msgstr "Výchozí" #. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. msgid "Edited" -msgstr "" +msgstr "Upraveno" msgid "Cut position" -msgstr "" +msgstr "Pozice řezu" msgid "Reset cutting plane" -msgstr "" +msgstr "Obnovit řezovou rovinu" msgid "Edit connectors" msgstr "Upravit spojky" @@ -460,10 +468,10 @@ msgid "Add connectors" msgstr "Přidat spojky" msgid "Reset cut" -msgstr "" +msgstr "Resetovat řez" msgid "Reset cutting plane and remove connectors" -msgstr "" +msgstr "Reset řezné roviny a odstranění konektorů" msgid "Upper part" msgstr "Horní část" @@ -510,19 +518,19 @@ msgid "Some connectors are overlapped" msgstr "Některé spojky se překrývají" msgid "Select at least one object to keep after cutting." -msgstr "" +msgstr "Vyberte alespoň jeden objekt, který bude po řezu zachován." msgid "Cut plane is placed out of object" -msgstr "" +msgstr "Rovina řezu je umístěna mimo objekt" msgid "Cut plane with groove is invalid" -msgstr "" +msgstr "Řezová rovina s drážkou je neplatná" msgid "Connector" msgstr "Spojka" msgid "Cut by Plane" -msgstr "" +msgstr "Řez Rovinou" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" @@ -531,10 +539,10 @@ msgid "Repairing model object" msgstr "Oprava objektu modelu" msgid "Cut by line" -msgstr "" +msgstr "Řez podle přímky" msgid "Delete connector" -msgstr "" +msgstr "Smazat konektor" msgid "Mesh name" msgstr "Název sítě" @@ -623,13 +631,13 @@ msgid "Remove selection" msgstr "Odebrat výběr" msgid "Entering Seam painting" -msgstr "" +msgstr "Vstup do módu Malování pozice švu" msgid "Leaving Seam painting" -msgstr "" +msgstr "Opuštění módu Malování pozice švu" msgid "Paint-on seam editing" -msgstr "" +msgstr "Editace pozice švu" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -672,50 +680,50 @@ msgstr "Tvar textu" #. TRN - Title in Undo/Redo stack after rotate with text around emboss axe msgid "Text rotate" -msgstr "" +msgstr "Otáčení textu" #. TRN - Title in Undo/Redo stack after move with text along emboss axe - From surface msgid "Text move" -msgstr "" +msgstr "Přesun textu" msgid "Set Mirror" -msgstr "" +msgstr "Zrcadlení" msgid "Embossed text" -msgstr "" +msgstr "Embossovaný text" msgid "Enter emboss gizmo" -msgstr "" +msgstr "Vstup do Ebosování textu" msgid "Leave emboss gizmo" -msgstr "" +msgstr "Opuštění Ebosování textu" msgid "Embossing actions" -msgstr "" +msgstr "Emobosovací akce" msgid "Emboss" -msgstr "" +msgstr "Embosování" msgid "NORMAL" -msgstr "" +msgstr "NORMÁLNÍ" msgid "SMALL" -msgstr "" +msgstr "MALÝ" msgid "ITALIC" -msgstr "" +msgstr "KURZIVA" msgid "SWISS" -msgstr "" +msgstr "SWISS" msgid "MODERN" -msgstr "" +msgstr "MODERNÍ" msgid "First font" -msgstr "" +msgstr "První písmo" msgid "Default font" -msgstr "" +msgstr "Výchozí písmo" msgid "Advanced" msgstr "Pokročilé" @@ -723,143 +731,144 @@ msgstr "Pokročilé" msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." -msgstr "" +msgstr "Text nelze napsat zvoleným typem písma. Zkuste vybrat jiné písmo." msgid "Embossed text cannot contain only white spaces." -msgstr "" +msgstr "Reliéfní text nesmí obsahovat pouze bílé znaky." msgid "Text contains character glyph (represented by '?') unknown by font." msgstr "" +"Text obsahuje znakový glyf (reprezentovaný znakem \"?\"), který písmo nezná." msgid "Text input doesn't show font skew." -msgstr "" +msgstr "Při zadávání textu se nezobrazuje zkosení písma." msgid "Text input doesn't show font boldness." -msgstr "" +msgstr "Při zadávání textu se nezobrazuje tučné formátování písma." msgid "Text input doesn't show gap between lines." -msgstr "" +msgstr "Při zadávání textu se nezobrazuje mezera mezi řádky." msgid "Too tall, diminished font height inside text input." -msgstr "" +msgstr "Příliš vysoká, zmenšená výška písma uvnitř textového vstupu." msgid "Too small, enlarged font height inside text input." -msgstr "" +msgstr "Příliš malé, zvěte výšku písma uvnitř textového vstupu." msgid "Text doesn't show current horizontal alignment." -msgstr "" +msgstr "Text nezobrazuje aktuální vodorovné zarovnání." msgid "Revert font changes." -msgstr "" +msgstr "Vrátit změny písma." #, boost-format msgid "Font \"%1%\" can't be selected." -msgstr "" +msgstr "Písmo \"%1%\" nelze vybrat." msgid "Operation" -msgstr "" +msgstr "Operace" msgid "Join" -msgstr "" +msgstr "Přidat" msgid "Click to change text into object part." -msgstr "" +msgstr "Kliknutím změníte text na část objektu." msgid "You can't change a type of the last solid part of the object." -msgstr "" +msgstr "Nelze změnit typ poslední plné části objektu." msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "Řezat" msgid "Click to change part type into negative volume." -msgstr "" +msgstr "Kliknutím změníte typ části modelu na negativní objem." msgid "Modifier" msgstr "Modifikátor" msgid "Click to change part type into modifier." -msgstr "" +msgstr "Kliknutím změníte typ části modelu na modifikátor." msgid "Change Text Type" -msgstr "" +msgstr "Změnit typ operace s textem" #, boost-format msgid "Rename style(%1%) for embossing text" -msgstr "" +msgstr "Přejmenování stylu(%1%) pro reliéfní text" msgid "Name can't be empty." -msgstr "" +msgstr "Název nesmí být prázdný." msgid "Name has to be unique." -msgstr "" +msgstr "Jméno musí být unikátní." msgid "OK" msgstr "OK" msgid "Rename style" -msgstr "" +msgstr "Přejmenovat styl" msgid "Rename current style." -msgstr "" +msgstr "Přejmenování aktuálního stylu." msgid "Can't rename temporary style." -msgstr "" +msgstr "Nelze přejmenovat dočasný styl." msgid "First Add style to list." -msgstr "" +msgstr "Nejprve do seznamu přidejte styl." #, boost-format msgid "Save %1% style" -msgstr "" +msgstr "Uložit styl %1%" msgid "No changes to save." -msgstr "" +msgstr "Žádné změny k uložení." msgid "New name of style" -msgstr "" +msgstr "Nový název stylu" msgid "Save as new style" -msgstr "" +msgstr "Uložit jako nový styl" msgid "Only valid font can be added to style." -msgstr "" +msgstr "Do stylu lze přidat pouze platné písmo." msgid "Add style to my list." -msgstr "" +msgstr "Přidat styl na můj seznam." msgid "Save as new style." -msgstr "" +msgstr "Uložit jako nový styl" msgid "Remove style" -msgstr "" +msgstr "Odstranit styl" msgid "Can't remove the last existing style." -msgstr "" +msgstr "Nelze odstranit poslední existující styl." #, boost-format msgid "Are you sure you want to permanently remove the \"%1%\" style?" -msgstr "" +msgstr "Opravdu chcete trvale odstranit styl \"%1%\"?" #, boost-format msgid "Delete \"%1%\" style." -msgstr "" +msgstr "Odstranění stylu \"%1%\"." #, boost-format msgid "Can't delete \"%1%\". It is last style." -msgstr "" +msgstr "Styl \"%1%\" nelze odstranit, protože je to poslední styl." #, boost-format msgid "Can't delete temporary style \"%1%\"." -msgstr "" +msgstr "Nelze odstranit dočasný styl \"%1%\"." #, boost-format msgid "Modified style \"%1%\"" -msgstr "" +msgstr "Upravený styl \"%1%\"" #, boost-format msgid "Current style is \"%1%\"" -msgstr "" +msgstr "Aktuální styl je \"%1%\"" #, boost-format msgid "" @@ -867,145 +876,152 @@ msgid "" "\n" "Would you like to continue anyway?" msgstr "" +"Změna stylu na \"%1%\" zruší aktuální úpravy stylu.\n" +"\n" +"Chcete přesto pokračovat?" msgid "Not valid style." -msgstr "" +msgstr "Neplatný styl." #, boost-format msgid "Style \"%1%\" can't be used and will be removed from a list." -msgstr "" +msgstr "Styl \"%1%\" nelze použít a bude ze seznamu odstraněn." msgid "Unset italic" -msgstr "" +msgstr "Odnastavení kurzívy" msgid "Set italic" -msgstr "" +msgstr "Nastavení kurzívy" msgid "Unset bold" -msgstr "" +msgstr "Odstranění tučného písma" msgid "Set bold" -msgstr "" +msgstr "Nastavení tučného písma" msgid "Revert text size." -msgstr "" +msgstr "Vrátit velikost textu." msgid "Revert embossed depth." -msgstr "" +msgstr "Obnovit původní hloubku." msgid "" "Advanced options cannot be changed for the selected font.\n" "Select another font." msgstr "" +"Pro vybrané písmo nelze měnit pokročilé možnosti nastavení.\n" +"Vyberte jiné písmo." msgid "Revert using of model surface." -msgstr "" +msgstr "Vrátit použití povrchu modelu." msgid "Revert Transformation per glyph." -msgstr "" +msgstr "Vrátit transformaci po znacích." msgid "Set global orientation for whole text." -msgstr "" +msgstr "Nastavení globální orientace pro celý text." msgid "Set position and orientation per glyph." -msgstr "" +msgstr "Nastavení polohy a orientace pro každý znak zvlášť." msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "Zleva" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "Střed" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "Zprava" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "Horní" msgctxt "Alignment" msgid "Middle" -msgstr "" +msgstr "Doprostřed" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "Spodní" msgid "Revert alignment." -msgstr "" +msgstr "Vrátit zarovnání." #. TRN EmbossGizmo: font units msgid "points" -msgstr "" +msgstr "body" msgid "Revert gap between characters" -msgstr "" +msgstr "Vrátit mezeru mezi znaky" msgid "Distance between characters" -msgstr "" +msgstr "Vzdálenost mezi znaky" msgid "Revert gap between lines" -msgstr "" +msgstr "Vrátit mezeru mezi extruzemi" msgid "Distance between lines" -msgstr "" +msgstr "Vzdálenost mezi extruzemi" msgid "Undo boldness" -msgstr "" +msgstr "Akce zpět Tučné písmo" msgid "Tiny / Wide glyphs" -msgstr "" +msgstr "Drobné / široké glyfy" msgid "Undo letter's skew" -msgstr "" +msgstr "Akce zpět Zkosení písma" msgid "Italic strength ratio" -msgstr "" +msgstr "Míra zkosení kurzívy" msgid "Undo translation" -msgstr "" +msgstr "Akce zpět Posun" msgid "Distance of the center of the text to the model surface." -msgstr "" +msgstr "Vzdálenost středu textu od povrchu modelu." msgid "Undo rotation" -msgstr "" +msgstr "Akce zpět Rotace" msgid "Rotate text Clock-wise." -msgstr "" +msgstr "Otáčení textu ve směru hodinových ručiček." msgid "Unlock the text's rotation when moving text along the object's surface." -msgstr "" +msgstr "Odemknout natočení textu při pohybu textu po povrchu objektu." msgid "Lock the text's rotation when moving text along the object's surface." -msgstr "" +msgstr "Uzamknout natočení textu při pohybu textu po povrchu objektu." msgid "Select from True Type Collection." -msgstr "" +msgstr "Vyberte z kolekce True Type." msgid "Set text to face camera" -msgstr "" +msgstr "Natočit text kolmo ke kameře" msgid "Orient the text towards the camera." -msgstr "" +msgstr "Orientovat text směrem ke kameře." #, boost-format msgid "" "Can't load exactly same font(\"%1%\"). Aplication selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" +"Nelze načíst přesně stejné písmo(\"%1%\"). Aplikace vybrala podobné " +"písmo(\"%2%\"). Musíte zadat písmo pro povolení editace textu." msgid "No symbol" -msgstr "" +msgstr "Žádný symbol" msgid "Loading" msgstr "Načítání" msgid "In queue" -msgstr "" +msgstr "Ve frontě" #. TRN - Input label. Be short as possible #. Height of one text line - Font Ascent @@ -1016,35 +1032,35 @@ msgstr "Výška" #. Copy surface of model on surface of the embossed text #. TRN - Input label. Be short as possible msgid "Use surface" -msgstr "" +msgstr "Použít povrch" #. TRN - Input label. Be short as possible #. Option to change projection on curved surface #. for each character(glyph) in text separately msgid "Per glyph" -msgstr "" +msgstr "Na znak" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right msgid "Alignment" -msgstr "" +msgstr "Zarovnání" #. TRN - Input label. Be short as possible msgid "Char gap" -msgstr "" +msgstr "Mezera mezi znaky" #. TRN - Input label. Be short as possible msgid "Line gap" -msgstr "" +msgstr "Řádkování" #. TRN - Input label. Be short as possible msgid "Boldness" -msgstr "" +msgstr "Tučnost" #. TRN - Input label. Be short as possible #. Like Font italic msgid "Skew ratio" -msgstr "" +msgstr "Míra zkosení" #. TRN - Input label. Be short as possible #. Distance from model surface to be able @@ -1052,251 +1068,254 @@ msgstr "" #. move text as modifier fully out of not flat surface #. TRN - Input label. Be short as possible msgid "From surface" -msgstr "" +msgstr "Z povrchu" #. TRN - Input label. Be short as possible #. Keep vector from bottom to top of text aligned with printer Y axis msgid "Keep up" -msgstr "" +msgstr "Držet směr" #. TRN - Input label. Be short as possible. #. Some Font file contain multiple fonts inside and #. this is numerical selector of font inside font collections msgid "Collection" -msgstr "" +msgstr "Kolekce" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" -msgstr "" +msgstr "Otáčení SVG" #. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface msgid "SVG move" -msgstr "" +msgstr "Přesun SVG" msgid "Enter SVG gizmo" -msgstr "" +msgstr "Vstup do SVG nástroje" msgid "Leave SVG gizmo" -msgstr "" +msgstr "Opuštění SVG nástroje" msgid "SVG actions" -msgstr "" +msgstr "SVG akce" msgid "SVG" -msgstr "" +msgstr "SVG" #, boost-format msgid "Opacity (%1%)" -msgstr "" +msgstr "Průhlednost (%1%)" #, boost-format msgid "Color gradient (%1%)" -msgstr "" +msgstr "Barevný gradient (%1%)" msgid "Undefined fill type" -msgstr "" +msgstr "Nedefinovaný typ výplně" msgid "Linear gradient" -msgstr "" +msgstr "Lineární gradient" msgid "Radial gradient" -msgstr "" +msgstr "Radiální gradient" msgid "Open filled path" -msgstr "" +msgstr "Otevřená vyplněná cesta" msgid "Undefined stroke type" -msgstr "" +msgstr "Nedefinovaný typ obrysu" msgid "Path can't be healed from selfintersection and multiple points." -msgstr "" +msgstr "Cestu nelze opravit z křížení sama sebe a více bodů." msgid "" "Final shape constains selfintersection or multiple points with same " "coordinate." msgstr "" +"Konečný tvar obsahuje vlastní průsečík nebo více bodů se stejnou souřadnicí." #, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "" +msgstr "Tvar je označen jako neviditelný (%1%)." #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. #, boost-format msgid "Fill of shape (%1%) contains unsupported: %2%." -msgstr "" +msgstr "Výplň tvaru (%1%) obsahuje nepodporované: %2%." #, boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "" +msgstr "Obrys tvaru (%1%) je příliš tenký (minimální šířka je %2% mm)." #, boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." -msgstr "" +msgstr "Obrys tvaru (%1%) obsahuje nepodporované: %2%." msgid "Face the camera" -msgstr "" +msgstr "Kolmo ke kameře" #. TRN - Preview of filename after clear local filepath. msgid "Unknown filename" -msgstr "" +msgstr "Neznámý název souboru" #, boost-format msgid "SVG file path is \"%1%\"" -msgstr "" +msgstr "Cesta k SVG souboru je \"%1%\"." msgid "Reload SVG file from disk." -msgstr "" +msgstr "Znovu načíst SVG z disku." msgid "Change file" -msgstr "" +msgstr "Změnit soubor" msgid "Change to another .svg file" -msgstr "" +msgstr "Změnit na jiný .svg soubor" msgid "Forget the file path" -msgstr "" +msgstr "Zapomenout cestu k souboru" msgid "" "Do NOT save local path to 3MF file.\n" "Also disables 'reload from disk' option." msgstr "" +"Neukládat místní cestu k 3MF souboru.\n" +"Také znemožní funkci \"Znovu načíst z disku\"." #. TRN: An menu option to convert the SVG into an unmodifiable model part. msgid "Bake" -msgstr "" +msgstr "Zapéct" #. TRN: Tooltip for the menu item. msgid "Bake into model as uneditable part" -msgstr "" +msgstr "Zapéct do modelu jako neupravitelnou část" msgid "Save as" -msgstr "" +msgstr "Uložit jako" msgid "Save SVG file" -msgstr "" +msgstr "Uložit SVG soubor" msgid "Save as '.svg' file" -msgstr "" +msgstr "Uložit jako soubor '.svg'" msgid "Size in emboss direction." -msgstr "" +msgstr "Velikost ve směru embosování." #. TRN: The placeholder contains a number. #, boost-format msgid "Scale also changes amount of curve samples (%1%)" -msgstr "" +msgstr "Změna velikosti současně mění jemnost diskretizace oblouků (%1%)" msgid "Width of SVG." -msgstr "" +msgstr "Šířka SVG." msgid "Height of SVG." -msgstr "" +msgstr "Výška SVG." msgid "Lock/unlock the aspect ratio of the SVG." -msgstr "" +msgstr "Zamknout/odemknout poměr stran SVG." msgid "Reset scale" -msgstr "" +msgstr "Výchozí měřítko" msgid "Distance of the center of the SVG to the model surface." -msgstr "" +msgstr "Vzdálenost mezi středem SVG a povrchem modelu." msgid "Reset distance" -msgstr "" +msgstr "Obnovit vzdálenost" msgid "Reset rotation" -msgstr "" +msgstr "Výchozí natočení" msgid "Lock/unlock rotation angle when dragging above the surface." -msgstr "" +msgstr "Zamknutí/odemknutí úhlu natočení při přetahování nad povrchem." msgid "Mirror vertically" -msgstr "" +msgstr "Zrcadlit vertikálně" msgid "Mirror horizontally" -msgstr "" +msgstr "Zrcadlit horizontálně" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" -msgstr "" +msgstr "Změna typu SVG" #. TRN - Input label. Be short as possible msgid "Mirror" msgstr "Zrcadlit" msgid "Choose SVG file for emboss:" -msgstr "" +msgstr "Vyberte SVG soubor pro embosování:" #, boost-format msgid "File does NOT exist (%1%)." -msgstr "" +msgstr "Soubor neexistuje (%1%)." #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" -msgstr "" +msgstr "Název souboru musí končit \".svg\", ale vy jste vybrali %1%." #, boost-format msgid "Nano SVG parser can't load from file (%1%)." -msgstr "" +msgstr "Nano SVG parser nemůže číst ze souboru (%1%)." #, boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." -msgstr "" +msgstr "SVG soubor neobsahuje jedinou cestu, kterou lze embosovat (%1%)." msgid "Vertex" -msgstr "" +msgstr "Vertex" msgid "Edge" -msgstr "" +msgstr "Hrana" msgid "Plane" -msgstr "" +msgstr "Rovina" msgid "Point on edge" -msgstr "" +msgstr "Bod na hraně" msgid "Point on circle" -msgstr "" +msgstr "Bod na kružnici" msgid "Point on plane" -msgstr "" +msgstr "Bod v rovině" msgid "Center of edge" -msgstr "" +msgstr "Střed hrany" msgid "Center of circle" -msgstr "" +msgstr "Střed kruhu" msgid "ShiftLeft mouse button" msgstr "" msgid "Select feature" -msgstr "" +msgstr "Vyberat objekt" msgid "Select point" -msgstr "" +msgstr "Zvolte bod" msgid "Delete" msgstr "Smazat" msgid "Restart selection" -msgstr "" +msgstr "Zrušit výběr" msgid "Esc" msgstr "Esc" msgid "Unselect" -msgstr "" +msgstr "Zrušení výběru" msgid "Measure" -msgstr "" +msgstr "Měření" msgid "Edit to scale" -msgstr "" +msgstr "Změna rozměru" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "Měřítko" msgid "None" msgstr "Žádné" @@ -1308,22 +1327,22 @@ msgid "Length" msgstr "Vzdálenost" msgid "Selection" -msgstr "" +msgstr "Výběr" msgid "Copy to clipboard" msgstr "Kopírovat do schránky" msgid "Perpendicular distance" -msgstr "" +msgstr "Kolmá vzdálenost" msgid "Distance" -msgstr "" +msgstr "Vzdálenost" msgid "Direct distance" -msgstr "" +msgstr "Přímá vzdálenost" msgid "Distance XYZ" -msgstr "" +msgstr "Vzdálenost XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1364,9 +1383,6 @@ msgstr "" "Konfigurační soubor \" %1% \" byl načten, ale některé hodnoty nebyly " "rozpoznány." -msgid "V" -msgstr "V" - 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." @@ -1477,6 +1493,9 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Vyberte jeden nebo více souborů (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "Vyberte ZIP soubor" + msgid "Choose one file (gcode/3mf):" msgstr "Vyberte jeden soubor (gcode/3mf):" @@ -1545,6 +1564,13 @@ msgstr "Probíhá nahrávání" msgid "Select a G-code file:" msgstr "Vyberte soubor s G-kódem:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Nelze spustit stahování z URL. Cílová složka není nastavena. Zvolte cílovou " +"složku v průvodci nastavení." + msgid "Import File" msgstr "Importovat soubor" @@ -1634,22 +1660,22 @@ msgid "Add support enforcer" msgstr "Přidat vynucení podpěr" msgid "Add text" -msgstr "" +msgstr "Přidat text" msgid "Add negative text" -msgstr "" +msgstr "Přidat text jako negativní objem" msgid "Add text modifier" -msgstr "" +msgstr "Přidat textový modifikátor" msgid "Add SVG part" -msgstr "" +msgstr "Přidat SVG část" msgid "Add negative SVG" -msgstr "" +msgstr "Přidat negativní SVG" msgid "Add SVG modifier" -msgstr "" +msgstr "Přidání SVG modifikátoru" msgid "Select settings" msgstr "Vybrat nastavení" @@ -1711,7 +1737,7 @@ msgid "" msgstr "" msgid "Text" -msgstr "" +msgstr "Text" msgid "Height range Modifier" msgstr "Modifikátor výškového rozsahu" @@ -1771,8 +1797,8 @@ msgstr "Výchozí" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "aktivní" +msgid "current" +msgstr "proud" msgid "Scale to build volume" msgstr "Škálovat na sestavení objemu" @@ -1844,16 +1870,16 @@ msgid "Mirror object" msgstr "Zrcadlit objekt" msgid "Edit text" -msgstr "" +msgstr "Upravit text" msgid "Ability to change text, font, size, ..." -msgstr "" +msgstr "Možnost měnit text, písmo, velikost, ..." msgid "Edit SVG" -msgstr "" +msgstr "Upravit SVG" msgid "Change SVG source file, projection, size, ..." -msgstr "" +msgstr "Změna zdrojového souboru SVG, projekce, velikosti, ..." msgid "Invalidate cut info" msgstr "Zneplatnění informací o řezu" @@ -1864,6 +1890,9 @@ msgstr "Přidat Primitivní" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "Přidat modely" + msgid "Show Labels" msgstr "Zobrazit štítky" @@ -1915,6 +1944,12 @@ msgstr "Uspořádat" msgid "arrange current plate" msgstr "uspořádat aktuální podložku" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Automatické otáčení" @@ -1948,9 +1983,6 @@ msgstr "Změnit Filament" msgid "Set Filament for selected items" msgstr "Nastavit Filament pro vybrané položky" -msgid "current" -msgstr "proud" - msgid "Unlock" msgstr "Odemknout" @@ -2287,9 +2319,6 @@ msgstr "Zadejte vlastní G-kód použitý na aktuální vrstvě:" msgid "Jump to Layer" msgstr "Přejít na vrstvu" -msgid "Jump to layer" -msgstr "Přeskočit do vrstvy" - msgid "Please enter the layer number" msgstr "Zadejte prosím číslo vrstvy" @@ -2359,7 +2388,7 @@ msgstr "Nepodařilo se připojit k tiskárně" msgid "Connection to printer failed" msgstr "Připojení k tiskárně selhalo" -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "Prosím, zkontrolujte síťové připojení tiskárny a Studia." msgid "Connecting..." @@ -2383,11 +2412,11 @@ msgstr "Automatické Doplnění" msgid "AMS not connected" msgstr "AMS není připojen" -msgid "Load Filament" -msgstr "Zavézt Filament" +msgid "Load" +msgstr "Načíst" -msgid "Unload Filament" -msgstr "Vysunout Filament" +msgid "Unload" +msgstr "Vysunout" msgid "Ext Spool" msgstr "Ext Cívka" @@ -2404,7 +2433,7 @@ msgstr "Zkusit znovu" msgid "Calibrating AMS..." msgstr "Kalibruji AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "Během kalibrace došlo k problému. Kliknutím zobrazíte řešení." msgid "Calibrate again" @@ -2445,10 +2474,8 @@ msgstr "Vezměte nový filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Vyberte slot AMS a poté stiskněte \" Načíst \" nebo \" Uvolnit \" pro " -"automatické načtení nebo vyjměte vlákno." msgid "Edit" msgstr "Upravit" @@ -2537,13 +2564,13 @@ msgid "Bed filling done." msgstr "Vyplnění podložky je dokončené." msgid "Searching for optimal orientation" -msgstr "" +msgstr "Hledání optimální orientace" msgid "Orientation search canceled." -msgstr "" +msgstr "Hledání optimální orientace zrušeno." msgid "Orientation found." -msgstr "" +msgstr "Orientace nalezena." msgid "Logging in" msgstr "Přihlášení" @@ -2714,14 +2741,8 @@ msgstr "Orca Slicer je licencován pod " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, verze 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" -"Orca Slicer je založen na BambuStudio od Bambulab, které je od PrusaSlicer " -"od Prusa Research. PrusaSlicer je od Slic3r od Alessandra Ranellucciho a " -"komunita RepRap" msgid "Libraries" msgstr "Knihovny" @@ -2814,10 +2835,12 @@ msgstr "Jste si jistý, že chcete vymazat informace o filamentu?" msgid "You need to select the material type and color first." msgstr "Nejprve musíte vybrat typ materiálu a barvu." -msgid "Please input a valid value (K in 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2922,36 +2945,15 @@ msgstr "Zakázat AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Tisk s filamentem namontovaným na zadní straně podvozku" -msgid "Cabin humidity" -msgstr "Vlhkost v kabině" +msgid "Current 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.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Zelená znamená, že vlhkost AMS je normální, oranžová znamená vlhkost vysokou " -"Červená znamená, že vlhkost je příliš vysoká. (Vlhkoměr: čím nižší, tím " -"lepší.)" - -msgid "Desiccant status" -msgstr "Stav vysoušedla" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Stav vysoušedla nižší než dva pruhy znamená, že vysoušedlo může být " -"neaktivní. Vyměňte prosím vysoušedlo. (Čáry: čím vyšší, tím lepší.)" - -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 "" -"Poznámka: Když je víko otevřené nebo je vyměněno balení vysoušedla, může to " -"trvat hodiny nebo noc absorbovat vlhkost. Nízké teploty také zpomalují " -"proces. Během této doby indikátor nemusí představovat komoru přesně." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3010,6 +3012,12 @@ msgstr "" "(Aktuálně podporuje automatické doplňování spotřebního materiálu stejné " "značky, typu materiálu a barvy)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Nastavení AMS" @@ -3024,11 +3032,9 @@ msgstr "" "Lab. To trvá asi 20 sekund." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Poznámka: Pokud se během tisku vloží nový filament, AMS nebude automaticky " -"číst všechny informace, dokud tisk neskončí." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3077,6 +3083,14 @@ msgstr "" "AMS bude pokračovat na další cívku se stejnými vlastnostmi filamentu " "automaticky, když dojde aktuální filament" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Soubor" @@ -3148,6 +3162,63 @@ msgstr "Plovoucí rezervovaný operand" msgid "Stack overflow" msgstr "Přetečení zásobníku" +msgid "Running post-processing scripts" +msgstr "Vykonávají se postprodukční skripty" + +msgid "Successfully executed post-processing script" +msgstr "" + +msgid "Unknown error occured during exporting G-code." +msgstr "Během exportu G-codu došlo k neznámé chybě." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Kopírování dočasného G-codu do výstupního G-codu se nezdařilo. Není SD karta " +"chráněná proti zápisu?\n" +"Chybová hláška: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Kopírování dočasného G-codu do výstupního G-codu se nezdařilo. Může to být " +"problém s cílovým zařízením. Zkuste exportovat znovu nebo použijte jiné " +"zařízení. Poškozený výstupní G-code je v %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Přejmenování G-codu po zkopírování do vybrané cílové složky se nezdařilo. " +"Aktuální cesta je %1%.tmp. Zkuste to prosím znovu." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Kopírování dočasného G-codu bylo dokončeno, ale původní G-code na %1% nemohl " +"být během kontroly kopírování otevřen. Výstupní G-code je v %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Kopírování dočasného G-codu bylo dokončeno, ale exportovaný G-code nemohl " +"být během kontroly kopírování otevřen. Výstupní G-cod je v %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G-code byl exportován do %1%" + msgid "Unknown error when export G-code." msgstr "Neznámá chyba při exportu G-kódu." @@ -3161,13 +3232,6 @@ msgstr "" "Chybová zpráva: %1%.\n" "Zdrojový soubor %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Úspěšný export G-kódu do %1%" - -msgid "Running post-processing scripts" -msgstr "Vykonávají se postprodukční skripty" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Kopírování dočasného G-kódu do výstupního G-kódu selhalo" @@ -3177,6 +3241,222 @@ msgstr "" "Plánování nahrávání do `%1%`. Viz Okno -> Fronta nahrávaní do tiskového " "serveru" +msgid "Device" +msgstr "Zařízení" + +msgid "Task Sending" +msgstr "" + +msgid "Task Sent" +msgstr "" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "" + +msgid "View" +msgstr "Zobrazení" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "" + +msgid "Task Name" +msgstr "" + +msgid "Device Status" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Přidat" + +msgid "Idle" +msgstr "Nečinný" + +msgid "Printing" +msgstr "Tisk" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Nekompatibilní" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Připravit" + +msgid "Slicing" +msgstr "Slicování" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Pokračovat" + +msgid "Stop" +msgstr "Zastavit" + +msgid "Task Status" +msgstr "" + +msgid "Sent Time" +msgstr "" + +msgid "There are no tasks to be sent!" +msgstr "" + +msgid "No historical tasks!" +msgstr "" + +msgid "Loading..." +msgstr "Načítání..." + +msgid "No AMS" +msgstr "" + +msgid "Send to Multi-device" +msgstr "" + +msgid "Preparing print job" +msgstr "Příprava tiskové úlohy" + +msgid "Abnormal print file data. Please slice again" +msgstr "Abnormální data tiskového souboru. Prosím znovu slicovat" + +msgid "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "" + +msgid "Use AMS" +msgstr "" + +msgid "Select Printers" +msgstr "" + +msgid "Ams Status" +msgstr "" + +msgid "Printing Options" +msgstr "" + +msgid "Bed Leveling" +msgstr "Vyrovnání podložky" + +msgid "Timelapse" +msgstr "Časosběr" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" + +msgid "Wait" +msgstr "Zaneprázdněn" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" + +msgid "Send" +msgstr "Odeslat" + +msgid "Name is invalid;" +msgstr "Jméno je neplatné;" + +msgid "illegal characters:" +msgstr "nepovolené znaky:" + +msgid "illegal suffix:" +msgstr "nelegální přípona:" + +msgid "The name is not allowed to be empty." +msgstr "Název nesmí být prázdný." + +msgid "The name is not allowed to start with space character." +msgstr "Název nesmí začínat mezerou." + +msgid "The name is not allowed to end with space character." +msgstr "Název nesmí končit mezerou." + +msgid "The name length exceeds the limit." +msgstr "Délka názvu překračuje limit." + msgid "Origin" msgstr "Počátek" @@ -3248,6 +3528,19 @@ msgstr "Vyberte STL soubor, ze kterého chcete importovat model podložky:" msgid "Bed Shape" msgstr "Tvar Podložky" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" + +msgid "Please check.\n" +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" @@ -3333,26 +3626,6 @@ msgstr "" "\n" "Hodnota bude resetována na 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 "" -"Spirálový režim funguje pouze tehdy, když je 1 smyčka na stěně, podpěry jsou " -"deaktivovány, horní skořepina vrstvy jsou 0, hustota vnitřní výplně je 0 a " -"typ časosběru je tradiční." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Ale stroje s I3 strukturou nevytvářejí časosběrná videa." - -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 "" -"Změnit tato nastavení automaticky? \n" -"Ano - Změňte tato nastavení a povolte režim spirála/váza automaticky\n" -"Ne - zrušit povolení spirálového režimu" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3412,6 +3685,26 @@ msgid "" "Reset to 0." msgstr "" +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 "" +"Spirálový režim funguje pouze tehdy, když je 1 smyčka na stěně, podpěry jsou " +"deaktivovány, horní skořepina vrstvy jsou 0, hustota vnitřní výplně je 0 a " +"typ časosběru je tradiční." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Ale stroje s I3 strukturou nevytvářejí časosběrná videa." + +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 "" +"Změnit tato nastavení automaticky? \n" +"Ano - Změňte tato nastavení a povolte režim spirála/váza automaticky\n" +"Ne - zrušit povolení spirálového režimu" + msgid "Auto bed leveling" msgstr "Automatické vyrovnávání podložky" @@ -3517,18 +3810,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Základní deska" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Neznámý" @@ -3623,19 +3904,19 @@ msgstr "výchozí" #, boost-format msgid "Edit Custom G-code (%1%)" -msgstr "" +msgstr "Upravit Vlastní G-code (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" -msgstr "" +msgstr "Vestavěné zástupné symboly (dvojklikem na položku přidáte do G-code)" msgid "Search gcode placeholders" msgstr "" msgid "Add selected placeholder to G-code" -msgstr "" +msgstr "Přidat vybraný zástupný symbol do G-code" msgid "Select placeholder" -msgstr "" +msgstr "Vyberte zástupný symbol" msgid "[Global] Slicing State" msgstr "" @@ -3656,17 +3937,17 @@ msgid "Objects Info" msgstr "" msgid "Dimensions" -msgstr "" +msgstr "Rozměry" msgid "Temperatures" -msgstr "" +msgstr "Teploty" msgid "Timestamps" -msgstr "" +msgstr "Časová razítka" #, boost-format msgid "Specific for %1%" -msgstr "" +msgstr "Specifické pro %1%" msgid "Presets" msgstr "Předvolby" @@ -3678,7 +3959,7 @@ msgid "Filament settings" msgstr "Nastavení filamentu" msgid "SLA Materials settings" -msgstr "" +msgstr "Nastavení SLA materiálů" msgid "Printer settings" msgstr "Nastavení tiskárny" @@ -3686,9 +3967,6 @@ msgstr "Nastavení tiskárny" msgid "parameter name" msgstr "název parametru" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s nemůže být procento" @@ -3700,6 +3978,10 @@ msgstr "Hodnota %s je mimo rozsah, pokračovat?" msgid "Parameter validation" msgstr "Validace parametru" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" + msgid "Value is out of range." msgstr "Hodnota je mimo rozsah." @@ -3713,6 +3995,20 @@ msgstr "" "ANO pro %s%%, \n" "NE pro %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Neplatný vstupní formát. Očekává se vektor rozměrů v následujícím formátu: " +"\"%1%\"" + +msgid "Input value is out of range" +msgstr "Zadaná hodnota je mimo rozsah" + +msgid "Some extension in the input is invalid" +msgstr "Některá přípona ve vstupu je neplatná" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Neplatný formát. Očekávaný vektorový formát: \"%1%\"" @@ -3780,12 +4076,12 @@ msgstr "Displej" msgid "Flushed" msgstr "Čištění" -msgid "Total" -msgstr "Celkem" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "Celkem" + msgid "Total Estimation" msgstr "Celkový odhad" @@ -3888,6 +4184,12 @@ msgstr "Časový odhad" msgid "Normal mode" msgstr "Normální režim" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Čas přípravy" @@ -3981,6 +4283,9 @@ msgstr "Volby uspořádání" msgid "Spacing" msgstr "Vzdálenost" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Automatické otočení pro uspořádání" @@ -3993,9 +4298,6 @@ msgstr "Vyhněte se oblasti kalibrace extruze" msgid "Align to Y axis" msgstr "Zarovnat podle osy Y" -msgid "Add" -msgstr "Přidat" - msgid "Add plate" msgstr "Přidat Podložku" @@ -4127,6 +4429,9 @@ msgstr "Monitorování automatického nahrávání" msgid "Go Live" msgstr "Přejít naživo" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Rozlišení" @@ -4179,14 +4484,11 @@ msgstr "Uzavření aplikace, zatímco některé přednastavení jsou upraveny." msgid "Logging" msgstr "Protokolování" -msgid "Prepare" -msgstr "Připravit" - msgid "Preview" msgstr "Náhled" -msgid "Device" -msgstr "Zařízení" +msgid "Multi-device" +msgstr "" msgid "Project" msgstr "Projekt" @@ -4212,9 +4514,6 @@ msgstr "Slicuj Vše" msgid "Export G-code file" msgstr "Exportovat soubor s G-kódem" -msgid "Send" -msgstr "Odeslat" - msgid "Export plate sliced file" msgstr "Exportovat soubor slicované na podložce" @@ -4335,6 +4634,12 @@ msgstr "Importovat 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Načíst model" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Importovat konfigurace" @@ -4368,8 +4673,8 @@ msgstr "Exportovat G-kód" msgid "Export current plate as G-code" msgstr "Exportovat stávající plochu do G-kód" -msgid "Export &Configs" -msgstr "Exportovat &konfigurace" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Exportovat aktuální konfiguraci do souborů" @@ -4470,9 +4775,6 @@ msgstr "Zobrazit zvýraznění převisů objektu ve 3D scéně" msgid "Preferences" msgstr "Nastavení" -msgid "View" -msgstr "Zobrazení" - msgid "Help" msgstr "Nápověda" @@ -4539,10 +4841,10 @@ msgstr "Exportovat &Trasy extruderu jako OBJ" msgid "Export toolpaths as OBJ" msgstr "Exportovat trasy extruderu jako OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Otevřít &Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Otevřít Studio" msgid "&Quit" @@ -4642,42 +4944,49 @@ msgstr "" msgid "Synchronization" msgstr "Synchronizace" -msgid "Initialize failed (No Device)!" -msgstr "Inicializace se nezdařila (žádné zařízení)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Inicializace se nezdařila (Připojení zařízení není připraveno)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicializace se nezdařila (žádné kamerové zařízení)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Tiskárna je zaneprázdněna stahováním, počkejte prosím na dokončení stahování." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Inicializace se nezdařila (Není podporováno ve stávající verzi tiskárny)!" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicializace se nezdařila (není přístupné v režimu pouze LAN)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicializace se nezdařila (chybějící LAN IP tiskárny)!" +msgid "Please confirm if the printer is connected." +msgstr "" + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" + +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "Inicializace..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Inicializace se nezdařila (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" -msgid "Network unreachable" -msgstr "Nedostupná síť" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Zastaveno [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Zastaveno." @@ -4708,19 +5017,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Inicializace virtuální kamery selhala (%s)!" +msgid "Network unreachable" +msgstr "Nedostupná síť" + msgid "Information" msgstr "Informace" msgid "Playing..." msgstr "Hraje..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Načítání selhalo [%d]!" - -msgid "Loading..." -msgstr "Načítání..." - msgid "Year" msgstr "Rok" @@ -4739,9 +5044,6 @@ msgstr "Seskupit soubory podle měsíce, poslední první." msgid "Show all files, recent first." msgstr "Zobrazit všechny soubory, poslední první." -msgid "Timelapse" -msgstr "Časosběr" - msgid "Switch to timelapse files." msgstr "Přepnout na soubory časosběru." @@ -4769,6 +5071,12 @@ msgstr "Vybrat" msgid "Batch manage files." msgstr "Dávková správa souborů." +msgid "Refresh" +msgstr "Obnovit" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Žádné tiskárny." @@ -4779,13 +5087,32 @@ msgstr "Spojení selhalo [%d]!" msgid "Loading file list..." msgstr "Načítání seznamu souborů..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Žádné soubory [%d]" +msgid "No files" +msgstr "" + +msgid "Load failed" +msgstr "" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Inicializace se nezdařila (Připojení zařízení není připraveno)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "" #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Načítání selhalo [%d]" +msgid "Initialize failed (%s)!" +msgstr "Inicializace se nezdařila (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4810,11 +5137,11 @@ msgstr "Smazat soubor" msgid "Fetching model infomations ..." msgstr "Načítání informací o modelu ..." -msgid "Failed to fetching model infomations from printer." -msgstr "Nepodařilo se načíst informace o modelu z tiskárny." +msgid "Failed to fetch model information from printer." +msgstr "" -msgid "Failed to parse model infomations." -msgstr "Nepodařilo se zpracovat informace o modelu." +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4827,6 +5154,12 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Soubor '%s' byl ztracen! Stáhněte si jej prosím znovu." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" + msgid "Download waiting..." msgstr "Čekání na stahování..." @@ -4843,13 +5176,12 @@ msgstr "Stahování dokončeno" msgid "Downloading %d%%..." msgstr "Stahování %d%%..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4907,12 +5239,6 @@ msgstr "Obrátit osu Rotace" msgid "Printing Progress" msgstr "Průběh tisku" -msgid "Resume" -msgstr "Pokračovat" - -msgid "Stop" -msgstr "Zastavit" - msgid "0" msgstr "0" @@ -4955,6 +5281,9 @@ msgstr "" msgid "Control" msgstr "Ovládání" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Možnosti tisku" @@ -4973,9 +5302,6 @@ msgstr "Komora" msgid "Bed" msgstr "Podložka" -msgid "Unload" -msgstr "Vysunout" - msgid "Debug Info" msgstr "Informace o ladění" @@ -5159,9 +5485,6 @@ msgstr "Stav" msgid "Update" msgstr "Aktualizovat" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Znovu Nezobrazovat" @@ -5192,6 +5515,35 @@ msgstr "%s informace" msgid "Skip" msgstr "Přeskočit" +msgid "Newer 3mf version" +msgstr "Novější verze 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "" + +msgid "Latest Version: " +msgstr "" + +msgid "Not for now" +msgstr "" + msgid "3D Mouse disconnected." msgstr "3D myš odpojena." @@ -5264,12 +5616,12 @@ msgstr[2] "%1$d objekty byly načteny jako součást rozříznutého objektu." msgid "ERROR" msgstr "CHYBA" -msgid "CANCELED" -msgstr "ZRUŠENO" - msgid "COMPLETED" msgstr "DOKONČENO" +msgid "CANCELED" +msgstr "ZRUŠENO" + msgid "Cancel upload" msgstr "Zrušit nahrávání" @@ -5380,6 +5732,25 @@ msgstr "Povolit zvuky upozornění" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "" + +msgid "Hardened Steel" +msgstr "" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Globální" @@ -5561,10 +5932,10 @@ msgstr "" "nedokonalosti. Doporučuje se přepnout na hladký režim." msgid "Expand sidebar" -msgstr "" +msgstr "Rozbalit postranní panel" msgid "Collapse sidebar" -msgstr "" +msgstr "Sbalit postranní panel" #, c-format, boost-format msgid "Loading file: %s" @@ -5589,9 +5960,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Měli byste aktualizovat software.\n" -msgid "Newer 3mf version" -msgstr "Novější verze 3mf" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5634,6 +6002,9 @@ msgstr "Názvy součástí v souboru kroku nejsou ve formátu UTF8!" msgid "The name may show garbage characters!" msgstr "Kvůli nepodporovanému kódování textu se mohou objevit nesmyslné znaky!" +msgid "Remember my choice." +msgstr "Zapamatovat si mou volbu." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5759,9 +6130,6 @@ msgstr "Nelze znovu načíst:" msgid "Error during reload" msgstr "Chyba při opětovném načtení souboru" -msgid "Slicing" -msgstr "Slicování" - msgid "There are warnings after slicing models:" msgstr "Po slicování modelů jsou varování:" @@ -5821,9 +6189,15 @@ msgstr "Import modelu" msgid "prepare 3mf file..." msgstr "připravte soubor 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "stahuji projekt ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt stažen %d%%" @@ -5835,7 +6209,7 @@ msgstr "" "Import do Orca Sliceru selhal. Stáhněte soubor a proveďte jeho ruční import." msgid "Import SLA archive" -msgstr "" +msgstr "Importovat SLA archiv" msgid "The selected file" msgstr "Vybraný soubor" @@ -5846,6 +6220,22 @@ msgstr "neobsahuje platný G-kód." msgid "Error occurs while loading G-code file" msgstr "Při načítání souboru G-kód došlo k chybě" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Načítání ZIP archivu z %1% se nezdařilo." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Nepodařilo se rozbalit soubor do %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Nepodařilo se najít rozbalený soubor na cestě %1%. Rozbalení souboru se " +"nezdařilo." + msgid "Drop project file" msgstr "Zrušit soubor projektu" @@ -5870,18 +6260,12 @@ msgstr "Soubory G-kódu a modely nelze načíst společně!" msgid "Can not add models when in preview mode!" msgstr "Nelze přidat modely v režimu náhledu!" -msgid "Add Models" -msgstr "Přidat modely" - msgid "All objects will be removed, continue?" msgstr "Všechny objekty budou odebrány, pokračovat?" msgid "The current project has unsaved changes, save it before continue?" msgstr "Aktuální projekt má neuložené změny, uložit je před pokračováním?" -msgid "Remember my choice." -msgstr "Zapamatovat si mou volbu." - msgid "Number of copies:" msgstr "Počet kopií:" @@ -5913,19 +6297,36 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." +msgstr "" + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "" + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "" + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "" + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." msgstr "" -"Nelze provést logickou operaci nad mashí modelů. Budou exportovány pouze " -"kladné části." msgid "" "Are you sure you want to store original SVGs with their local paths into the " "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" +"Jste si jisti, že chcete do souboru 3MF uložit původní SVG s lokální cestou " +"k souboru?\n" +"Pokud stisknete \"NE\", všechny SVG v projektu již nebude možné upravovat." msgid "Private protection" -msgstr "" +msgstr "Ochrana soukromí" msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "Je tiskárna připravená k tisku? Je podložka prázdná a čistá?" @@ -6069,6 +6470,11 @@ msgstr "Región přihlášení" msgid "Stealth Mode" msgstr "Tajný Režim" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -6084,15 +6490,45 @@ msgstr "Imperiální" msgid "Units" msgstr "Jednotky" -msgid "Home" +msgid "Allow only one OrcaSlicer instance" msgstr "" +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"Na OSX je ve výchozím nastavení vždy spuštěna pouze jedna instance aplikace. " +"Je však povoleno spouštět více instancí stejné aplikace z příkazového řádku. " +"V takovém případě toto nastavení povolí pouze jednu instanci." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + +msgid "Home" +msgstr "Home" + msgid "Default Page" msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Přiblížit na pozici myši" @@ -6109,9 +6545,15 @@ msgstr "" "Pokud je povoleno, použijte volnou kameru. Pokud není povoleno, použijte " "omezenou kameru." -msgid "Show splash screen" +msgid "Reverse mouse zoom" msgstr "" +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + +msgid "Show splash screen" +msgstr "Zobrazovat úvodní obrazovku" + msgid "Show the splash screen during startup." msgstr "" @@ -6127,9 +6569,32 @@ msgstr "" msgid "If enabled, auto-calculate everytime the color changed." msgstr "" -msgid "Network" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + +msgid "Network" +msgstr "Síť" + msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" "Automatická synchronizace uživatelských předvoleb (Tiskárna/Filament/Proces)" @@ -6173,6 +6638,42 @@ msgstr "" "Pokud je povoleno, nastaví OrcaSlicer jako výchozí aplikaci pro otevírání " "souborů .step" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Maximální počet nedávných projektů" @@ -6343,12 +6844,21 @@ msgstr "" msgid "Create printer" msgstr "" -msgid "Incompatible" -msgstr "Nekompatibilní" - msgid "The selected preset is null!" msgstr "Vybrané přednastavení je nula!" +msgid "End" +msgstr "Konec" + +msgid "Customize" +msgstr "Přizpůsobit" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + msgid "Plate name" msgstr "Název Podložky" @@ -6358,8 +6868,14 @@ msgstr "Stejné jako globální tisková sekvence" msgid "Print sequence" msgstr "Tisková sekvence" -msgid "Customize" -msgstr "Přizpůsobit" +msgid "Same as Global" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Spirálová váza" msgid "First layer filament sequence" msgstr "Sekvence filamentu první vrstvy" @@ -6422,15 +6938,6 @@ msgstr "Uživatelská předvolba" msgid "Preset Inside Project" msgstr "Projekt uvnitř přednastavení" -msgid "Name is invalid;" -msgstr "Jméno je neplatné;" - -msgid "illegal characters:" -msgstr "nepovolené znaky:" - -msgid "illegal suffix:" -msgstr "nelegální přípona:" - msgid "Name is unavailable." msgstr "Jméno není k dispozici." @@ -6449,15 +6956,6 @@ msgstr "" msgid "Please note that saving action will replace this preset" msgstr "Upozorňujeme, že akce uložení nahradí toto přednastavení" -msgid "The name is not allowed to be empty." -msgstr "Název nesmí být prázdný." - -msgid "The name is not allowed to start with space character." -msgstr "Název nesmí začínat mezerou." - -msgid "The name is not allowed to end with space character." -msgstr "Název nesmí končit mezerou." - msgid "The name cannot be the same as a preset alias name." msgstr "Název se nesmí shodovat s názvem aliasem přednastavení." @@ -6495,7 +6993,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Vyhledávání" msgid "My Device" msgstr "Moje zařízení" @@ -6515,9 +7013,6 @@ msgstr "Nemohu najít moje zařízení?" msgid "Log out successful." msgstr "Odhlášení proběhlo úspěšně." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Zaneprázdněn" @@ -6542,12 +7037,6 @@ msgstr "" msgid "Send print job to" msgstr "Odeslat tiskovou úlohu na" -msgid "Refresh" -msgstr "Obnovit" - -msgid "Bed Leveling" -msgstr "Vyrovnání podložky" - msgid "Flow Dynamics Calibration" msgstr "Kalibrace Dynamiky Průtoku" @@ -6560,9 +7049,6 @@ msgstr "odeslat dokončeno" msgid "Error code" msgstr "Chybový kód" -msgid "Printer local connection failed, please try again." -msgstr "Lokální připojení k tiskárně selhalo, zkuste to znovu." - msgid "No login account, only printers in LAN mode are displayed" msgstr "Žádný přihlašovací účet, jsou zobrazeny pouze tiskárny v režimu LAN" @@ -6638,9 +7124,11 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Před tiskem je třeba vložit SD kartu." -msgid "The selected printer is incompatible with the chosen printer presets." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" -"Vybraná tiskárna není kompatibilní s vybranými přednastaveními tiskárny." msgid "An SD card needs to be inserted to record timelapse." msgstr "Pro záznam časosběru je třeba vložit SD kartu." @@ -6697,16 +7185,22 @@ msgid "nozzle in preset: %s %s" msgstr "" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" +msgid "nozzle memorized: %.2f %s" msgstr "" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" + +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" msgid "" @@ -6714,25 +7208,10 @@ msgid "" msgstr "" "Pokud stále chcete pokračovat v tisku, klikněte prosím na tlačítko Potvrdit." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "Připojování k tiskárně. Nelze zrušit během procesu připojování." -msgid "Preparing print job" -msgstr "Příprava tiskové úlohy" - -msgid "Abnormal print file data. Please slice again" -msgstr "Abnormální data tiskového souboru. Prosím znovu slicovat" - -msgid "The name length exceeds the limit." -msgstr "Délka názvu překračuje limit." - msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." @@ -6746,12 +7225,19 @@ msgstr "Automatická kalibrace průtoku pomocí Mikro Lidar" msgid "Modifying the device name" msgstr "Úprava názvu zařízení" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Odeslat do tiskárny SD kartu" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Nelze odeslat tiskovou úlohu, když probíhá aktualizace" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"Vybraná tiskárna není kompatibilní s vybranými přednastaveními tiskárny." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Před odesláním na SD kartu do tiskárny je třeba vložit SD kartu." @@ -6794,6 +7280,26 @@ msgstr "Časový limit pro obdržení hlášení o přihlášení vypršel" msgid "Unknown Failure" msgstr "Neznámá chyba" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Přihlaste se k tiskárně" @@ -6978,6 +7484,20 @@ msgid "Adjust" msgstr "" msgid "Ignore" +msgstr "Ignorovat" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." msgstr "" msgid "" @@ -7060,6 +7580,9 @@ msgstr "Filament na podpěry" msgid "Tree supports" msgstr "Stromové podpěry" +msgid "Skirt" +msgstr "Obrys" + msgid "Prime tower" msgstr "Čistící věž" @@ -7245,6 +7768,14 @@ msgstr "Parametry při výměně (Multi Material s více extrudery)" msgid "Printable space" msgstr "Prostor pro tisk" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Neplatná hodnota zadaná pro parametr %1%: %2%" + +msgid "G-code flavor is switched" +msgstr "G-code flavor je přepnutá" + msgid "Cooling Fan" msgstr "Ventilátor chlazení" @@ -7472,23 +8003,28 @@ msgstr "" "následující neuložené změny:" #, 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?" +msgid "You have changed some settings of preset \"%1%\". " msgstr "" -"Změnili jste některá nastavení předvolby \"%1%\" . \n" -"Přejete si po přepnutí zachovat tato změněná nastavení (nová " -"hodnota)přednastavení?" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "" + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Změnili jste některá přednastavená nastavení. \n" -"Přejete si po přepnutí zachovat tato změněná nastavení (nová " -"hodnota)přednastavení?" msgid "Extruders count" msgstr "Počet extruderů" @@ -7514,12 +8050,15 @@ msgid "" "Note: New modified presets will be selected in settings tabs after close " "this dialog." msgstr "" +"Přeneste vybrané možnosti z levého přednastavení do pravého.\n" +"Poznámka: Po zavření tohoto dialogu budou na kartách nastavení vybrány nové " +"upravené předvolby." msgid "Transfer values from left to right" -msgstr "" +msgstr "Přenést hodnoty zleva doprava" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7600,6 +8139,56 @@ msgstr "Žádné aktualizace nejsou dostupné." msgid "The configuration is up to date." msgstr "Konfigurace je aktuální." +msgid "Obj file Import color" +msgstr "" + +msgid "Specify number of colors:" +msgstr "" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "" + +msgid "Recommended " +msgstr "" + +msgid "Current filament colors:" +msgstr "" + +msgid "Quick set:" +msgstr "" + +msgid "Color match" +msgstr "" + +msgid "Approximate color matching." +msgstr "" + +msgid "Append" +msgstr "" + +msgid "Add consumable extruder after existing extruders." +msgstr "" + +msgid "Reset mapped extruders." +msgstr "" + +msgid "Cluster colors" +msgstr "" + +msgid "Map Filament" +msgstr "" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" + msgid "Ramming customization" msgstr "Přizpůsobení rapidní extruze" @@ -7684,6 +8273,32 @@ msgstr "Z" msgid "To" msgstr "Do" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "" @@ -7874,13 +8489,13 @@ msgid "Gizmo FDM paint-on seam" msgstr "Gizmo FDM malování pozice švu" msgid "Gizmo Text emboss / engrave" -msgstr "" +msgstr "Gizmo Text emboss / gravírování" msgid "Zoom in" -msgstr "" +msgstr "Přiblížit" msgid "Zoom out" -msgstr "" +msgstr "Oddálit" msgid "Switch between Prepare/Preview" msgstr "Přepnout mezi Přípravou/Náhledem" @@ -7954,6 +8569,12 @@ msgstr "Posunout posuvník 5x rychleji" msgid "Shift+Mouse wheel" msgstr "Shift+kolečko myši" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Poznámka k vydání" @@ -7983,6 +8604,42 @@ msgstr "" msgid "Done" msgstr "Hotovo" +msgid "resume" +msgstr "" + +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Zavézt Filament" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8039,12 +8696,6 @@ msgstr "Verze:" msgid "Update firmware" msgstr "Aktualizovat firmware" -msgid "Printing" -msgstr "Tisk" - -msgid "Idle" -msgstr "Nečinný" - msgid "Beta version" msgstr "" @@ -8079,7 +8730,7 @@ 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." +"update next time starting Orca." msgstr "" "Verze firmwaru je abnormální. Oprava a aktualizace jsou nutné před tisk. " "Chcete provést aktualizaci nyní? Aktualizaci můžete provést také později na " @@ -8218,9 +8869,6 @@ msgstr "Vnitřní most" msgid "Gap infill" msgstr "Výplň mezery" -msgid "Skirt" -msgstr "Obrys" - msgid "Support interface" msgstr "Kontaktní vrstva podpěr" @@ -8427,6 +9075,8 @@ msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"Čistící věž je v současné době možná pouze v případě relativního adresování " +"exruderu (use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." @@ -8843,6 +9493,15 @@ msgstr "Engineering Podložka" msgid "First layer print sequence" msgstr "Sekvence tisku první vrstvy" +msgid "Other layers print sequence" +msgstr "" + +msgid "The number of other layers print sequence" +msgstr "" + +msgid "Other layers filament sequence" +msgstr "" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "Tento G-kód se vkládá při každé změně vrstvy před zvednutím z" @@ -8889,7 +9548,7 @@ msgid "" msgstr "" msgid "Everywhere" -msgstr "" +msgstr "Všude" msgid "Top and bottom surfaces" msgstr "" @@ -9381,7 +10040,7 @@ msgid "" msgstr "" msgid "Disabled" -msgstr "" +msgstr "Zakázáno" msgid "Limited filtering" msgstr "" @@ -9565,7 +10224,7 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9619,6 +10278,12 @@ msgstr "" "Poloměr vůle kolem extruderu. Používá se pro zamezení kolizi při tisku " "vedlejších objektů." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9719,6 +10384,22 @@ msgstr "" "nezastaví a poběží alespoň na minimální rychlost, aby se snížila frekvence " "spouštění a zastavování" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Čas vrstvy" @@ -9997,8 +10678,8 @@ msgstr "Výrobce filamentu. Pouze pro zobrazení" msgid "(Undefined)" msgstr "(Nedefinováno)" -msgid "Infill direction" -msgstr "Směr výplně" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10006,6 +10687,20 @@ msgid "" msgstr "" "Úhel pro vzor vnitřní výplně, který řídí začátek nebo hlavní směr linky" +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Hustota vnitřní výplně" @@ -10051,6 +10746,9 @@ msgstr "Kubický podepíraný" msgid "Lightning" msgstr "Blesky" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Délka kotvy vnitřní výplně" @@ -10257,6 +10955,9 @@ msgstr "" "\"close_fan_first_layers\", v takovém případě se bude ventilátor točit na " "maximální povolenou hodnotu ve vrstvě \"close_fan_first_layers\" + 1." +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "Rychlost ventilátoru kontaktních vrstev podpěr" @@ -10328,15 +11029,28 @@ msgstr "" "Rychlost vyplňování mezery. Mezera má obvykle nepravidelnou šířku extruze a " "měla by být vytištěna pomaleji" +msgid "Precise Z height" +msgstr "" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" + msgid "Arc fitting" msgstr "Přizpůsobení oblouku" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Povolte toto, abyste získali soubor G-kódu, který má pohyby G2 a G3. A " -"tolerance montáže je stejná s rozlišením" msgid "Add line number" msgstr "Přidat číslo řádku" @@ -10566,12 +11280,25 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Výplň/Přesah stěny" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"Oblast výplně je mírně zvětšena, aby se překrývala se stěnou pro lepší " -"lepení. Procentuální hodnota je vztažena k šířce extruze vnitřní výplně" msgid "Speed of internal sparse infill" msgstr "Rychlost vnitřní výplně" @@ -10589,13 +11316,13 @@ msgstr "" "rozpustným podpůrným materiálem" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Maximální šířka segmentované oblasti" msgid "Maximum width of a segmented region. Zero disables this feature." -msgstr "" +msgstr "Maximální šířka segmentované oblasti. Nula tuto funkci vypne." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Hloubka propojení segmentované oblasti" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" @@ -11217,6 +11944,24 @@ msgstr "" "Některé množství materiálu v extruderu je staženo zpět, aby se zabránilo " "slizu při dlouhém pohybu. Nastavte nulu, abyste zablokovali retrakce" +msgid "Long retraction when cut(experimental)" +msgstr "" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" + +msgid "Retraction distance when cut" +msgstr "" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" + msgid "Z hop when retract" msgstr "Z hop při retrakci" @@ -11551,6 +12296,29 @@ msgstr "Výška obrysu" msgid "How many layers of skirt. Usually only one layer" msgstr "Kolik vrstev Obrysu. Obvykle pouze jedna vrstva" +msgid "Draft shield" +msgstr "Ochranný štít" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "Omezeno" + +msgid "Enabled" +msgstr "Povoleno" + msgid "Skirt loops" msgstr "Obrysové smyčky" @@ -11564,6 +12332,17 @@ msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" "Rychlost obrysu, v mm/s. Nula znamená použít výchozí rychlost vrstvy extruze." +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -11592,9 +12371,6 @@ msgstr "" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "Rychlost vnitřní plné výplně, nikoli horní a spodní plochy" -msgid "Spiral vase" -msgstr "Spirálová váza" - 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 " @@ -11882,7 +12658,7 @@ msgid "Number of bottom interface layers" msgstr "" msgid "Same as top" -msgstr "" +msgstr "Stejné jako vrchní" msgid "Top interface spacing" msgstr "Horní rozestup" @@ -12301,6 +13077,31 @@ msgstr "Rozteč čistících linek v čistící věži" msgid "Spacing of purge lines on the wipe tower." msgstr "Rozteč čistících linek v čistící věži." +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "Extruder čistící věže" @@ -12657,91 +13458,104 @@ msgid "Load custom gcode from json" msgstr "Načíst vlastní G-kód z JSON" msgid "Current z-hop" -msgstr "" +msgstr "Aktuální z-hop" msgid "Contains z-hop present at the beginning of the custom G-code block." -msgstr "" +msgstr "Obsahuje z-hop na začátku vlastního bloku G-code." msgid "" "Position of the extruder at the beginning of the custom G-code block. If the " "custom G-code travels somewhere else, it should write to this variable so " "PrusaSlicer knows where it travels from when it gets control back." msgstr "" +"Poloha extruderu na začátku vlastního bloku G-code. Pokud vlastní G-code " +"vytváří pohyb, měl by pohyb zapsat do této proměnné, aby PrusaSlicer věděl, " +"odkud se pohybuje, až získá zpět kontrolu." msgid "" "Retraction state at the beginning of the custom G-code block. If the custom " "G-code moves the extruder axis, it should write to this variable so " "PrusaSlicer deretracts correctly when it gets control back." msgstr "" +"Stav retrakce na začátku vlastního G-code. Pokud vlastní G-code pohybuje " +"osou extruderu, měl by do této proměnné zapisovat, aby PrusaSlicer správně " +"zrušil deretrakce, když mu bude znovu předáno řízení." msgid "Extra deretraction" -msgstr "" +msgstr "Extra deretrakce" msgid "Currently planned extra extruder priming after deretraction." -msgstr "" +msgstr "Současně naplánované extra čištění extruderu po deretrakci." msgid "Current extruder" -msgstr "" +msgstr "Aktuální extruder" msgid "Zero-based index of currently used extruder." -msgstr "" +msgstr "Index aktuálně používaného extrudéru (počítáno do nuly)." msgid "Current object index" -msgstr "" +msgstr "Aktuální index objektu" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." msgstr "" +"Specifické pro sekvenční tisk. Index aktuálně tištěného objektu (počítáno do " +"nuly)." msgid "Has wipe tower" -msgstr "" +msgstr "Má čistící věž" msgid "Whether or not wipe tower is being generated in the print." -msgstr "" +msgstr "Zda se v tisku generuje čistící věž." msgid "Initial extruder" -msgstr "" +msgstr "Počáteční extruder" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." msgstr "" +"Index prvního extruderu použitého při tisku (počítáno do nuly). Stejně jako " +"initial_tool." msgid "Initial tool" -msgstr "" +msgstr "Počáteční nástroj" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" +"Index prvního extruderu použitého při tisku (počítáno do nuly). Stejně jako " +"initial_extruder." msgid "Is extruder used?" -msgstr "" +msgstr "Je extruder použitý?" msgid "Vector of bools stating whether a given extruder is used in the print." msgstr "" msgid "Volume per extruder" -msgstr "" +msgstr "Objem pro každý extruder" msgid "Total filament volume extruded per extruder during the entire print." msgstr "" +"Celkový objem filamentu vytlačeného daným extruderem během celého tisku." msgid "Total toolchanges" msgstr "" msgid "Number of toolchanges during the print." -msgstr "" +msgstr "Počet výměn nástrojů během tisku." msgid "Total volume" -msgstr "" +msgstr "Celkový objem" msgid "Total volume of filament used during the entire print." -msgstr "" +msgstr "Celkový objem filamentu použitý během celého tisku." msgid "Weight per extruder" -msgstr "" +msgstr "Hmotnost pro každý extruder" msgid "" "Weight per extruder extruded during the entire print. Calculated from " @@ -12749,7 +13563,7 @@ msgid "" msgstr "" msgid "Total weight" -msgstr "" +msgstr "Celková hmotnost" msgid "" "Total weight of the print. Calculated from filament_density value in " @@ -12757,25 +13571,25 @@ msgid "" msgstr "" msgid "Total layer count" -msgstr "" +msgstr "Celkový počet vrstev" msgid "Number of layers in the entire print." -msgstr "" +msgstr "Počet vrstev v celém tisku." msgid "Number of objects" -msgstr "" +msgstr "Počet objektů" msgid "Total number of objects in the print." -msgstr "" +msgstr "Celkový počet objektů v tisku." msgid "Number of instances" -msgstr "" +msgstr "Počet instancí" msgid "Total number of object instances in the print, summed over all objects." -msgstr "" +msgstr "Celkový počet instancí objektu v tisku, sečtený pro všechny objekty." msgid "Scale per object" -msgstr "" +msgstr "Měřítko pro každý objekt" msgid "" "Contains a string with the information about what scaling was applied to the " @@ -12785,22 +13599,23 @@ msgid "" msgstr "" msgid "Input filename without extension" -msgstr "" +msgstr "Název vstupního souboru bez přípony" msgid "Source filename of the first object, without extension." -msgstr "" +msgstr "Název zdrojového souboru prvního objektu bez přípony." msgid "" "The vector has two elements: x and y coordinate of the point. Values in mm." -msgstr "" +msgstr "Vektor má dva prvky: souřadnice x a y bodu. Hodnoty v mm." msgid "" "The vector has two elements: x and y dimension of the bounding box. Values " "in mm." msgstr "" +"Vektor má dva prvky: rozměr x a y ohraničujícího rámečku. Hodnoty v mm." msgid "First layer convex hull" -msgstr "" +msgstr "Konvexní obal první vrstvy" msgid "" "Vector of points of the first layer convex hull. Each element has the " @@ -12808,66 +13623,68 @@ msgid "" msgstr "" msgid "Bottom-left corner of first layer bounding box" -msgstr "" +msgstr "Levý dolní roh ohraničujícího rámečku v první vrstvě" msgid "Top-right corner of first layer bounding box" -msgstr "" +msgstr "Pravý horní roh ohraničujícího rámečku v první vrstvě" msgid "Size of the first layer bounding box" -msgstr "" +msgstr "Velikost ohraničujícího rámečku v první vrstvě" msgid "Bottom-left corner of print bed bounding box" -msgstr "" +msgstr "Levý dolní roh ohraničujícího rámečku tiskové podložky" msgid "Top-right corner of print bed bounding box" -msgstr "" +msgstr "Pravý horní roh ohraničujícího rámečku tiskové podložky" msgid "Size of the print bed bounding box" -msgstr "" +msgstr "Velikost ohraničujícího rámečku tiskové podložky" msgid "Timestamp" -msgstr "" +msgstr "Časové razítko" msgid "String containing current time in yyyyMMdd-hhmmss format." -msgstr "" +msgstr "Řetězec obsahující aktuální čas ve formátu rrrrMMdd-hhmmss." msgid "Day" -msgstr "" +msgstr "Den" msgid "Hour" -msgstr "" +msgstr "Hodina" msgid "Minute" -msgstr "" +msgstr "Minuta" msgid "Print preset name" -msgstr "" +msgstr "Název přednastavení tisku" msgid "Name of the print preset used for slicing." -msgstr "" +msgstr "Název přednastavení tisku použitého pro slicování." msgid "Filament preset name" -msgstr "" +msgstr "Název přednastavení filamentu" msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" +"Názvy přednastavení filamentu používaných pro slicování. Proměnná je vektor " +"obsahující jeden název pro každý extruder." msgid "Printer preset name" -msgstr "" +msgstr "Název přednastavení tiskárny" msgid "Name of the printer preset used for slicing." -msgstr "" +msgstr "Název přednastavení tiskárny použité pro slicování." msgid "Physical printer name" -msgstr "" +msgstr "Fyzický název tiskárny" msgid "Name of the physical printer used for slicing." -msgstr "" +msgstr "Název fyzické tiskárny použité pro slicování." msgid "Layer number" -msgstr "" +msgstr "Číslo vrstvy" msgid "Index of the current layer. One-based (i.e. first layer is number 1)." msgstr "" @@ -12879,12 +13696,13 @@ msgid "" "Height of the current layer above the print bed, measured to the top of the " "layer." msgstr "" +"Výška aktuální vrstvy nad tiskovou podložkou, měřeno k hornímu okraji vrstvy." msgid "Maximal layer z" msgstr "" msgid "Height of the last layer above the print bed." -msgstr "" +msgstr "Výška poslední vrstvy nad tiskovou podložkou." msgid "Filament extruder ID" msgstr "" @@ -13005,6 +13823,9 @@ msgstr "Zrušeno" msgid "load_obj: failed to parse" msgstr "load_obj: nepodařilo se zpracovat" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Soubor obsahuje polygon s více než 4 vrcholy." @@ -13082,12 +13903,6 @@ msgstr "Průtok" msgid "Max Volumetric Speed" msgstr "Maximální objemová rychlost" -msgid "Please enter the name you want to save to printer." -msgstr "Zadejte název, který chcete uložit do tiskárny." - -msgid "The name cannot exceed 40 characters." -msgstr "Název nemůže překročit 40 znaků." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13136,6 +13951,14 @@ msgstr "Vyberte prosím filament pro kalibraci." msgid "The input value size must be 3." msgstr "Velikost vstupní hodnoty musí být 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Připojování k tiskárně..." @@ -13145,6 +13968,19 @@ msgstr "Výsledek neúspěšného testu byl zahozen." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Výsledek kalibrace dynamiky průtoku byl uložen do tiskárny" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Interní chyba" @@ -13192,32 +14028,15 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Najdete podrobnosti o kalibraci průtoku dynamiky v naší wiki.\n" -"\n" -"Obvykle kalibrace není potřebná. Při spuštění tisku s jednobarevným/" -"materiálovým filamentem a zaškrtnutou volbou \"kalibrace průtoku dynamiky\" " -"v menu spuštění tisku, tiskárna bude postupovat podle staré metody a " -"zkalibruje filament před tiskem. Při spuštění tisku s vícebarevným/" -"materiálovým filamentem bude tiskárna při každé změně filamentu používat " -"výchozí kompenzační parametr pro filament, což má většinou dobrý výsledek.\n" -"\n" -"Všimněte si, že existují některé případy, které mohou způsobit, že výsledek " -"kalibrace nebude spolehlivý: použití texturované podložky pro kalibraci; " -"podložka nemá dobrou adhezi (prosím umyjte podložku nebo naneste " -"lepidlo!) ... Více informací najdete v naší wiki.\n" -"\n" -"Výsledky kalibrace mají v našich testech asi 10% fluktuaci, což může " -"způsobit, že výsledek nebude přesně stejný u každé kalibrace. Stále zkoumáme " -"kořenovou příčinu, abychom mohli provést zlepšení v nových aktualizacích." msgid "When to use Flow Rate Calibration" msgstr "Kdy použít kalibraci průtoku" @@ -13338,28 +14157,22 @@ msgstr "" msgid "Failed" msgstr "Selhalo" +msgid "Please enter the name you want to save to printer." +msgstr "Zadejte název, který chcete uložit do tiskárny." + +msgid "The name cannot exceed 40 characters." +msgstr "Název nemůže překročit 40 znaků." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" -"Bude uložen pouze jeden z výsledků se stejným názvem. Opravdu chcete přepsat " -"ostatní výsledky?" - -#, 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 "" -"Už existuje historický kalibrační výsledek se stejným názvem: %s. Bude " -"uložen pouze jeden z výsledků se stejným názvem. Opravdu chcete přepsat " -"historický výsledek?" msgid "Please find the best line on your plate" msgstr "Najděte nejlepší linku na své podložce" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "Prosím, najděte roh s dokonalým stupněm extruze" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "" msgid "Input Value" msgstr "Vstupní hodnota" @@ -13435,12 +14248,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametry tisku" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Typ Podložky" @@ -13488,12 +14295,6 @@ msgstr "Do hodnoty k" msgid "Step value" msgstr "Krok hodnoty" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Průměr trysky byl synchronizován z Nastavení tiskárny" @@ -13506,6 +14307,9 @@ msgstr "Do objemové rychlosti" msgid "Flow Dynamics Calibration Result" msgstr "Výsledek kalibrace dynamiky průtoku" +msgid "New" +msgstr "Nový" + msgid "No History Result" msgstr "Žádný historický výsledek" @@ -13518,9 +14322,22 @@ msgstr "Aktualizace historických záznamů kalibrace dynamiky průtoku probíh msgid "Action" msgstr "Akce" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Upravit kalibraci dynamiky průtoku" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "" + msgid "Network lookup" msgstr "Vyhledávání v síti" @@ -13609,6 +14426,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -13705,6 +14525,9 @@ msgstr "Pokud je to nutné, použijte pro oddělení složek lomítko (/)." msgid "Upload to storage" msgstr "Nahrát do úložiště" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "Název nahrávaného souboru neskončí s \"%s\". Přejete si pokračovat?" @@ -13903,6 +14726,13 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" @@ -13959,12 +14789,6 @@ msgstr "" msgid "Printable Space" msgstr "" -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" - msgid "Hot Bed STL" msgstr "" @@ -14094,14 +14918,20 @@ msgstr "" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -msgid "Printer Setting" +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." msgstr "" -msgid "Export Configs" +msgid "Printer Setting" msgstr "" msgid "Printer config bundle(.orca_printer)" @@ -14186,6 +15016,9 @@ msgstr "" msgid "Please select a type you want to export" msgstr "" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" + msgid "Edit Filament" msgstr "" @@ -14213,7 +15046,7 @@ msgid "Are you sure to delete the selected preset?" msgstr "" msgid "Delete preset" -msgstr "" +msgstr "Smazat přednastavení" msgid "+ Add Preset" msgstr "" @@ -14252,11 +15085,24 @@ msgid "For more information, please check out Wiki" msgstr "" msgid "Collapse" -msgstr "" +msgstr "Sbalit" msgid "Daily Tips" msgstr "" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "" + msgid "Need select printer" msgstr "Je nutné vybrat tiskárnu" @@ -14288,6 +15134,12 @@ msgstr "" msgid "Refresh Printers" msgstr "Obnovit tiskárny" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -14326,111 +15178,116 @@ msgstr "" #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Nesprávný typ tiskového serveru: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "Připojení k AstroBoxu funguje správně." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Nelze se připojit k AstroBoxu" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Poznámka: Je vyžadována verze AstroBoxu nejméně 1.1.0." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "Připojení k Duet funguje správně." msgid "Could not connect to Duet" -msgstr "" +msgstr "Nelze se připojit k Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Došlo k neznámé chybě" msgid "Wrong password" -msgstr "" +msgstr "Chybné heslo" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Nelze získat prostředky pro vytvoření nového spojení" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "Na kartě FlashAir není nahrávání povoleno." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "Připojení k FlashAir funguje správně a nahrávání je povoleno." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Nelze se spojit s FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Poznámka: Vyžaduje se FlashAir s firmwarem 2.00.02 nebo novějším a " +"aktivovanou funkcí nahrávání." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "Připojení k MKS funguje správně." msgid "Could not connect to MKS" -msgstr "" +msgstr "Nelze se připojit k MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Připojení k OctoPrint pracuje správně." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Nelze se spojit s OctoPrintem" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Poznámka: Je vyžadován OctoPrint ve verzi alespoň 1.1.0." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Připojení k tiskárně Prusa SL1 /SL1S funguje správně." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Nelze se připojit k Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Připojení k PrusaLinku funguje správně." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Nelze se připojit k PrusaLinku" msgid "Storages found" -msgstr "" +msgstr "Úložiště nalezeno" #. TRN %1% = storage path #, boost-format msgid "%1% : read only" -msgstr "" +msgstr "%1% : pouze pro čtení" #. TRN %1% = storage path #, boost-format msgid "%1% : no free space" -msgstr "" +msgstr "%1% : nedostatek volného místa" #. TRN %1% = host #, boost-format msgid "Upload has failed. There is no suitable storage found at %1%." msgstr "" +"Nahrání se nezdařilo. Na adrese %1% nebylo nalezeno žádné vhodné úložiště." msgid "Connection to Prusa Connect works correctly." -msgstr "" +msgstr "Připojení k Prusa Connectu funguje správně." msgid "Could not connect to Prusa Connect" -msgstr "" +msgstr "Nelze se připojit k Prusa Connectu" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Připojení k Repetieru funguje správně." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Nelze se připojit k Repetieru" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Poznámka: Je vyžadována verze Repetier alespoň 0.90.0." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP stavový kód: %1%\n" +"Tělo zprávy: \"%2%\"" #, boost-format msgid "" @@ -14438,6 +15295,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Parsování odpovědi od hostitele se nezdařilo.\n" +"Tělo zprávy: \"%1%\"\n" +"Chyba: \"%2%\"" #, boost-format msgid "" @@ -14445,6 +15305,178 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Výčet tiskových serverů se nezdařil.\n" +"Tělo zprávy: \"%1%\"\n" +"Chyba: \"%2%\"" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" msgid "Connected to Obico successfully!" msgstr "" @@ -14458,17 +15490,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14824,6 +15854,256 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Lokální připojení k tiskárně selhalo, zkuste to znovu." + +#~ 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 "" +#~ "Najdete podrobnosti o kalibraci průtoku dynamiky v naší wiki.\n" +#~ "\n" +#~ "Obvykle kalibrace není potřebná. Při spuštění tisku s jednobarevným/" +#~ "materiálovým filamentem a zaškrtnutou volbou \"kalibrace průtoku dynamiky" +#~ "\" v menu spuštění tisku, tiskárna bude postupovat podle staré metody a " +#~ "zkalibruje filament před tiskem. Při spuštění tisku s vícebarevným/" +#~ "materiálovým filamentem bude tiskárna při každé změně filamentu používat " +#~ "výchozí kompenzační parametr pro filament, což má většinou dobrý " +#~ "výsledek.\n" +#~ "\n" +#~ "Všimněte si, že existují některé případy, které mohou způsobit, že " +#~ "výsledek kalibrace nebude spolehlivý: použití texturované podložky pro " +#~ "kalibraci; podložka nemá dobrou adhezi (prosím umyjte podložku nebo " +#~ "naneste lepidlo!) ... Více informací najdete v naší wiki.\n" +#~ "\n" +#~ "Výsledky kalibrace mají v našich testech asi 10% fluktuaci, což může " +#~ "způsobit, že výsledek nebude přesně stejný u každé kalibrace. Stále " +#~ "zkoumáme kořenovou příčinu, abychom mohli provést zlepšení v nových " +#~ "aktualizacích." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Bude uložen pouze jeden z výsledků se stejným názvem. Opravdu chcete " +#~ "přepsat ostatní výsledky?" + +#, 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 "" +#~ "Už existuje historický kalibrační výsledek se stejným názvem: %s. Bude " +#~ "uložen pouze jeden z výsledků se stejným názvem. Opravdu chcete přepsat " +#~ "historický výsledek?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Prosím, najděte roh s dokonalým stupněm extruze" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer je založen na BambuStudio od Bambulab, které je od " +#~ "PrusaSlicer od Prusa Research. PrusaSlicer je od Slic3r od Alessandra " +#~ "Ranellucciho a komunita RepRap" + +#~ msgid "Export &Configs" +#~ msgstr "Exportovat &konfigurace" + +#~ msgid "Infill direction" +#~ msgstr "Směr výplně" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Povolte toto, abyste získali soubor G-kódu, který má pohyby G2 a G3. A " +#~ "tolerance montáže je stejná s rozlišením" + +#~ 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 "" +#~ "Oblast výplně je mírně zvětšena, aby se překrývala se stěnou pro lepší " +#~ "lepení. Procentuální hodnota je vztažena k šířce extruze vnitřní výplně" + +#~ msgid "Unload Filament" +#~ msgstr "Vysunout Filament" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Vyberte slot AMS a poté stiskněte \" Načíst \" nebo \" Uvolnit \" pro " +#~ "automatické načtení nebo vyjměte vlákno." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Základní deska" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "active" +#~ msgstr "aktivní" + +#~ msgid "Jump to layer" +#~ msgstr "Přeskočit do vrstvy" + +#~ msgid "Cabin humidity" +#~ msgstr "Vlhkost v kabině" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Zelená znamená, že vlhkost AMS je normální, oranžová znamená vlhkost " +#~ "vysokou Červená znamená, že vlhkost je příliš vysoká. (Vlhkoměr: čím " +#~ "nižší, tím lepší.)" + +#~ msgid "Desiccant status" +#~ msgstr "Stav vysoušedla" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "Stav vysoušedla nižší než dva pruhy znamená, že vysoušedlo může být " +#~ "neaktivní. Vyměňte prosím vysoušedlo. (Čáry: čím vyšší, tím lepší.)" + +#~ 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 "" +#~ "Poznámka: Když je víko otevřené nebo je vyměněno balení vysoušedla, může " +#~ "to trvat hodiny nebo noc absorbovat vlhkost. Nízké teploty také zpomalují " +#~ "proces. Během této doby indikátor nemusí představovat komoru přesně." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Poznámka: Pokud se během tisku vloží nový filament, AMS nebude " +#~ "automaticky číst všechny informace, dokud tisk neskončí." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Úspěšný export G-kódu do %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Inicializace se nezdařila (žádné zařízení)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Inicializace se nezdařila (žádné kamerové zařízení)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "Tiskárna je zaneprázdněna stahováním, počkejte prosím na dokončení " +#~ "stahování." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Inicializace se nezdařila (Není podporováno ve stávající verzi tiskárny)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Inicializace se nezdařila (není přístupné v režimu pouze LAN)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "Inicializace se nezdařila (chybějící LAN IP tiskárny)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Zastaveno [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Načítání selhalo [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Žádné soubory [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Načítání selhalo [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Nepodařilo se načíst informace o modelu z tiskárny." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "Nepodařilo se zpracovat informace o modelu." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Nelze provést logickou operaci nad mashí modelů. Budou exportovány pouze " +#~ "kladné části." + +#, 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 "" +#~ "Změnili jste některá nastavení předvolby \"%1%\" . \n" +#~ "Přejete si po přepnutí zachovat tato změněná nastavení (nová " +#~ "hodnota)přednastavení?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Změnili jste některá přednastavená nastavení. \n" +#~ "Přejete si po přepnutí zachovat tato změněná nastavení (nová " +#~ "hodnota)přednastavení?" + +#~ msgid " ℃" +#~ msgstr " ℃" + #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 19b5d499db..6150a2ba9b 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-05 11:32+0200\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -11,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" msgstr "Stützen aufmalen" @@ -154,7 +155,7 @@ msgid "Height range" msgstr "Höhenbereich" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Enter" msgid "Toggle Wireframe" msgstr "Gittermodell ein-/ausblenden" @@ -256,6 +257,9 @@ msgstr "Rotation zurücksetzen" msgid "World coordinates" msgstr "Weltkoordinaten" +msgid "Object coordinates" +msgstr "Objektkoordinaten" + msgid "°" msgstr "°" @@ -1394,9 +1398,6 @@ msgstr "" "Konfigurationsdatei \"%1%\" wurde geladen, aber einige Werte wurden nicht " "erkannt." -msgid "V" -msgstr "V" - 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." @@ -1509,6 +1510,9 @@ msgstr "" 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):" +msgid "Choose ZIP file" +msgstr "ZIP Datei wählen" + msgid "Choose one file (gcode/3mf):" msgstr "Wählen sie eine Datei (3mf):" @@ -1581,6 +1585,13 @@ msgstr "Laufende Uploads" msgid "Select a G-code file:" msgstr "Wähle eine G-Code Datei:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Der URL-Download konnte nicht gestartet werden. Der Zielordner ist nicht " +"festgelegt. Bitte wählen Sie den Zielordner im Konfigurationsassistenten." + msgid "Import File" msgstr "Datei importieren" @@ -1814,8 +1825,8 @@ msgstr "Standard" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "Aktiv" +msgid "current" +msgstr "Aktuell" msgid "Scale to build volume" msgstr "Auf Druckvolumen skalieren" @@ -1908,6 +1919,9 @@ msgstr "Primitiv hinzufügen" msgid "Add Handy models" msgstr "Modelle hinzufügen" +msgid "Add Models" +msgstr "Modelle hinzufügen" + msgid "Show Labels" msgstr "Bezeichnung anzeigen" @@ -1960,6 +1974,12 @@ msgstr "Anordnen" msgid "arrange current plate" msgstr "Aktuelle Druckplatte anordnen" +msgid "Reload All" +msgstr "Alles neu laden" + +msgid "reload all from disk" +msgstr "Alles von der Festplatte neu laden" + msgid "Auto Rotate" msgstr "Automatisch rotieren" @@ -1993,9 +2013,6 @@ msgstr "Filament wechseln" msgid "Set Filament for selected items" msgstr "Filament für ausgewählte Elemente festlegen" -msgid "current" -msgstr "Aktuell" - msgid "Unlock" msgstr "Entsperren" @@ -2344,9 +2361,6 @@ msgstr "" msgid "Jump to Layer" msgstr "Wechsle zu Layer" -msgid "Jump to layer" -msgstr "Wechsle zu Layer" - msgid "Please enter the layer number" msgstr "Bitte die Schichtnummer eingeben" @@ -2420,7 +2434,7 @@ 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." +msgid "Please check the network connection of the printer and Orca." msgstr "Bitte überprüfen Sie die Netzwerkverbindung von Drucker und Studio." msgid "Connecting..." @@ -2444,10 +2458,10 @@ msgstr "Automatisch nachfüllen" msgid "AMS not connected" msgstr "AMS nicht verbunden" -msgid "Load Filament" +msgid "Load" msgstr "Laden" -msgid "Unload Filament" +msgid "Unload" msgstr "Entladen" msgid "Ext Spool" @@ -2465,7 +2479,7 @@ msgstr "Wiederholen" msgid "Calibrating AMS..." msgstr "AMS kalibrieren..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Während der Kalibrierung ist ein Problem aufgetreten. Klicken Sie hier, um " "die Lösung zu sehen." @@ -2508,10 +2522,10 @@ msgstr "Neues Filament holen" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Wählen Sie einen AMS-Slot und drücken Sie dann \"Laden\" oder \"Entladen\", " -"um automatisch Filament zu laden oder zu entladen." +"Wählen Sie einen AMS-Steckplatz aus und drücken Sie dann die Schaltfläche " +"„Laden“ oder „Entladen“, um Filamente automatisch zu laden oder zu entladen." msgid "Edit" msgstr "Bearbeiten" @@ -2784,14 +2798,8 @@ msgstr "Orca Slicer 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" -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." +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer basiert auf PrusaSlicer und BambuStudio" msgid "Libraries" msgstr "Bibliotheken" @@ -2887,11 +2895,14 @@ msgstr "Sind Sie sicher, dass Sie die Filamentinformationen löschen möchten?" 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.3)" -msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "" +"Bitte geben Sie einen gültigen Wert ein (K in %.1f~%.1f, N in %.1f~%.1f)" msgid "Other Color" msgstr "Andere Farbe" @@ -2999,39 +3010,19 @@ 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" -msgid "Cabin humidity" -msgstr "Luftfeuchtigkeit in der Druck-Kammer" +msgid "Current Cabin humidity" +msgstr "Aktuelle Kabinenfeuchtigkeit" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Grün bedeutet, dass die AMS-Luftfeuchtigkeit normal ist, orange bedeutet, " -"dass die Luftfeuchtigkeit hoch ist, und rot bedeutet, dass die " -"Luftfeuchtigkeit zu hoch ist. (Hygrometer: je niedriger, desto besser.)" - -msgid "Desiccant status" -msgstr "Trockenmittelstatus" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Ein Trockenmittelstatus von weniger als zwei Balken bedeutet, dass das " -"Trockenmittel möglicherweise inaktiv ist. Bitte tauschen Sie das " -"Trockenmittel aus. (Je höher, desto besser.)" - -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 "" -"Hinweis: Wenn der Deckel geöffnet ist oder die Trockenmittelpackung " -"gewechselt wird, kann es Stunden oder gar eine Nacht dauern, bis die " -"Feuchtigkeit aufgenommen wurde. Niedrige Temperaturen verlangsamen den " -"Prozess ebenfalls. Während dieser Zeit stellt der Indikator die Werte der " -"Kammer möglicherweise nicht genau dar." +"Wechseln Sie das Trockenmittel, wenn es zu feucht ist. Der Indikator kann " +"nicht genau in folgenden Fällen angezeigt werden: wenn der Deckel geöffnet " +"ist oder das Trockenmittelbeutel gewechselt wird. Es dauert Stunden, um die " +"Feuchtigkeit aufzunehmen, niedrige Temperaturen verlangsamen den Prozess." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3091,6 +3082,12 @@ msgstr "" "(Derzeit wird die automatische Versorgung mit Verbrauchsmaterialien mit " "derselben Marke, demselben Materialtyp und derselben Farbe unterstützt)" +msgid "DRY" +msgstr "Trocken" + +msgid "WET" +msgstr "Feucht" + msgid "AMS Settings" msgstr "AMS-Einstellungen" @@ -3105,11 +3102,11 @@ msgstr "" "Lab Filament eingesetzt wird. Dies dauert etwa 20 Sekunden." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" "Hinweis: Wenn während des Drucks neues Filament eingelegt wird, liest das " -"AMS nicht automatisch die Informationen ein, bis der Druckvorgang " +"AMS die Informationen nicht automatisch ein, bis der Druckvorgang " "abgeschlossen ist." msgid "" @@ -3163,6 +3160,16 @@ msgstr "" "AMS wechselt automatisch zu einer anderen Spule mit denselben " "Filamenteigenschaften, wenn das aktuelle Filament leer ist." +msgid "Air Printing Detection" +msgstr "Luftdruckerkennung" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Erkennt Verstopfungen und Filamentabrieb und stoppt den Druck sofort, um " +"Zeit und Filament zu sparen." + msgid "File" msgstr "Datei" @@ -3237,6 +3244,68 @@ msgstr "Reservierter Gleitkomma-Operand" msgid "Stack overflow" msgstr "Stapelüberlauf" +msgid "Running post-processing scripts" +msgstr "Ausführen von Nachbearbeitungsskripten" + +msgid "Successfully executed post-processing script" +msgstr "Nachbearbeitungsskript erfolgreich ausgeführt" + +msgid "Unknown error occured during exporting G-code." +msgstr "Unbekannter Fehler beim Exportieren des G-Codes aufgetreten." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist " +"fehlgeschlagen. Ist die SD-Karte schreibgeschützt?\n" +"Fehlermeldung: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist " +"fehlgeschlagen. Es könnte ein Problem mit dem Zielgerät geben. Versuchen Sie " +"es erneut oder verwenden Sie ein anderes Gerät. Der beschädigte Ausgabe-G-" +"Code befindet sich in %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Das Umbenennen des G-Codes nach dem Kopieren in den ausgewählten Zielordner " +"ist fehlgeschlagen. Der aktuelle Pfad ist %1%.tmp. Bitte versuchen Sie es " +"erneut." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Das Kopieren des temporären G-Codes wurde abgeschlossen, aber der " +"ursprüngliche Code unter %1% konnte während der Überprüfung des " +"Kopiervorgangs nicht geöffnet werden. Der Ausgabe-G-Code befindet sich in " +"%2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Das Kopieren des temporären G-Codes wurde abgeschlossen, aber der " +"exportierte Code konnte während der Überprüfung des Kopiervorgangs nicht " +"geöffnet werden. Der Ausgabe-G-Code befindet sich in %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G-Code-Datei exportiert nach %1%" + msgid "Unknown error when export G-code." msgstr "Unbekannter Fehler beim exportieren des G-Code." @@ -3250,13 +3319,6 @@ msgstr "" "Fehlernachricht: %1%.\n" "Ursprungsdatei %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Erfolgreich G-Code nach %1% exportiert" - -msgid "Running post-processing scripts" -msgstr "Ausführen von Nachbearbeitungsskripten" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" "Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen." @@ -3266,6 +3328,229 @@ msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" "Planen des Uploads auf `%1%`. Siehe Fenster -> Host-Upload-Druckwarteschlange" +msgid "Device" +msgstr "Gerät" + +msgid "Task Sending" +msgstr "Aufgabe senden" + +msgid "Task Sent" +msgstr "Aufgabe gesendet" + +msgid "Edit multiple printers" +msgstr "Mehrere Drucker bearbeiten" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" +"Die maximale Anzahl von Druckern, die ausgewählt werden können, beträgt %d" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "Keine Aufgabe" + +msgid "View" +msgstr "Ansicht" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "Drucker bearbeiten" + +msgid "Device Name" +msgstr "Gerätename" + +msgid "Task Name" +msgstr "Aufgabenname" + +msgid "Device Status" +msgstr "Gerätestatus" + +msgid "Actions" +msgstr "Aktionen" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Wählen Sie hier die Geräte aus, die Sie verwalten möchten (bis zu 6 Geräte)" + +msgid "Add" +msgstr "Hinzufügen" + +msgid "Idle" +msgstr "Inaktiv" + +msgid "Printing" +msgstr "Drucken" + +msgid "Upgrading" +msgstr "Aktualisieren" + +msgid "Incompatible" +msgstr "Inkompatibel" + +msgid "syncing" +msgstr "synchronisieren" + +msgid "Printing Finish" +msgstr "Druck beendet" + +msgid "Printing Failed" +msgstr "Druck fehlgeschlagen" + +msgid "Printing Pause" +msgstr "Druck pausiert" + +msgid "Prepare" +msgstr "Vorbereiten" + +msgid "Slicing" +msgstr "Slicen" + +msgid "Pending" +msgstr "Ausstehend" + +msgid "Sending" +msgstr "Sende" + +msgid "Sending Finish" +msgstr "Senden beendet" + +msgid "Sending Cancel" +msgstr "Senden abbrechen" + +msgid "Sending Failed" +msgstr "Senden fehlgeschlagen" + +msgid "Print Success" +msgstr "Druck erfolgreich" + +msgid "Print Failed" +msgstr "Druck fehlgeschlagen" + +msgid "Removed" +msgstr "Entfernt" + +msgid "Resume" +msgstr "Fortsetzen" + +msgid "Stop" +msgstr "Stop" + +msgid "Task Status" +msgstr "Aufgabenstatus" + +msgid "Sent Time" +msgstr "Sende Zeit" + +msgid "There are no tasks to be sent!" +msgstr "Es gibt keine Aufgaben, die gesendet werden sollen!" + +msgid "No historical tasks!" +msgstr "Keine historischen Aufgaben!" + +msgid "Loading..." +msgstr "Laden..." + +msgid "No AMS" +msgstr "Kein AMS" + +msgid "Send to Multi-device" +msgstr "An Multi-Gerät senden" + +msgid "Preparing print job" +msgstr "Druckauftrag vorbereiten" + +msgid "Abnormal print file data. Please slice again" +msgstr "Fehlerhafte Daten in der Druckdatei. Bitte slicen Sie erneut" + +msgid "There is no device available to send printing." +msgstr "Es ist kein Gerät verfügbar, um den Druck zu senden." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" +"Die Anzahl der gleichzeitig verwendeten Drucker darf nicht gleich 0 sein." + +msgid "Use External Spool" +msgstr "Externe Spule verwenden" + +msgid "Use AMS" +msgstr "AMS verwenden" + +msgid "Select Printers" +msgstr "Drucker auswählen" + +msgid "Ams Status" +msgstr "AMS-Status" + +msgid "Printing Options" +msgstr "Druckoptionen" + +msgid "Bed Leveling" +msgstr "Druckbettnivellierung" + +msgid "Timelapse" +msgstr "Zeitraffer" + +msgid "Flow Dynamic Calibration" +msgstr "Dynamische Flusskalibrierung" + +msgid "Send Options" +msgstr "Senden-Optionen" + +msgid "Send to" +msgstr "Senden an" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"Drucker gleichzeitig drucken.(Es hängt davon ab, wie viele Geräte " +"gleichzeitig erhitzt werden können.)" + +msgid "Wait" +msgstr "Warten" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"Minute pro Charge.(Es hängt davon ab, wie lange es dauert, die Erhitzung " +"abzuschließen.)" + +msgid "Send" +msgstr "Senden" + +msgid "Name is invalid;" +msgstr "Der Name ist ungültig;" + +msgid "illegal characters:" +msgstr "unzulässige Zeichen:" + +msgid "illegal suffix:" +msgstr "unzulässiger Zusatz:" + +msgid "The name is not allowed to be empty." +msgstr "Der Name darf nicht leer sein." + +msgid "The name is not allowed to start with space character." +msgstr "Der Name darf nicht mit einem Leerzeichen beginnen." + +msgid "The name is not allowed to end with space character." +msgstr "Der Name darf nicht mit einem Leerzeichen enden." + +msgid "The name length exceeds the limit." +msgstr "Die Namenslänge überschreitet das Limit." + msgid "Origin" msgstr "Nullpunkt" @@ -3342,6 +3627,23 @@ msgstr "" msgid "Bed Shape" msgstr "Druckbettform" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Die empfohlene Mindesttemperatur liegt unter 190 Grad oder die empfohlene " +"Maximaltemperatur liegt über 300 Grad.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"Die empfohlene Mindesttemperatur darf nicht höher sein als die empfohlene " +"Maximaltemperatur.\n" + +msgid "Please check.\n" +msgstr "Bitte überprüfen.\n" + 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" @@ -3430,30 +3732,6 @@ msgstr "" "\n" "Der Wert wird auf 0 zurückgesetzt." -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." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Maschinen mit I3-Struktur erzeugen jedoch keine Zeitraffer-Videos." - -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 "" -"Diese Einstellungen automatisch ändern? \n" -"Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" -"Nein - Spiralmodus nicht aktivieren" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3524,6 +3802,30 @@ msgstr "" "seam_slope_start_height muss kleiner als layer_height sein.\n" "auf 0 gesetzt" +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." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Maschinen mit I3-Struktur erzeugen jedoch keine Zeitraffer-Videos." + +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 "" +"Diese Einstellungen automatisch ändern? \n" +"Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" +"Nein - Spiralmodus nicht aktivieren" + msgid "Auto bed leveling" msgstr "Automatische Druckbettnivellierung" @@ -3630,18 +3932,6 @@ msgstr "Pause bei Fehler der ersten Schicht" msgid "Nozzle clog pause" msgstr "Pause bei Düsenverstopfung" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Mainboard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Unbekannt" @@ -3804,9 +4094,6 @@ msgstr "Drucker-Einstellungen" msgid "parameter name" msgstr "Parametername" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kann nicht Prozent sein" @@ -3818,6 +4105,12 @@ msgstr "Wert %s ist außerhalb der Reichweite, fortfahren?" msgid "Parameter validation" msgstr "Parameterüberprüfung" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" +"Wert %s ist außerhalb des Bereichs. Der gültige Bereich liegt zwischen %d " +"und %d." + msgid "Value is out of range." msgstr "Wert ist außerhalb der Reichweite." @@ -3831,6 +4124,20 @@ msgstr "" "Ja für %s%%, \n" "Nein für %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Ungültiges Eingabeformat. Erwarteter Vektor der Abmessungen im folgenden " +"Format: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Der Eingabewert ist nicht im gültigen Bereich" + +msgid "Some extension in the input is invalid" +msgstr "Erweiterung in der Eingabe ist ungültig" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ungültiges Format. Erwartetes Vektorformat: \"%1%\"" @@ -3898,12 +4205,12 @@ msgstr "Anzeigen" msgid "Flushed" msgstr "Gereinigt" -msgid "Total" -msgstr "Gesamt" - msgid "Tower" msgstr "Turm" +msgid "Total" +msgstr "Gesamt" + msgid "Total Estimation" msgstr "Gesamtschätzung" @@ -4006,6 +4313,12 @@ msgstr "Geschätzte Zeit" msgid "Normal mode" msgstr "Normaler Modus" +msgid "Total Filament" +msgstr "Gesamtfilament" + +msgid "Model Filament" +msgstr "Modellfilament" + msgid "Prepare time" msgstr "Vorbereitungszeit" @@ -4099,6 +4412,9 @@ msgstr "Anordnungsoptionen" msgid "Spacing" msgstr "Abstand" +msgid "0 means auto spacing." +msgstr "0 bedeutet automatischer Abstand." + msgid "Auto rotate for arrangement" msgstr "Automatische Rotation für die Anordnung" @@ -4111,9 +4427,6 @@ msgstr "Vermeiden Sie den Bereich der Extrusionskalibrierung" msgid "Align to Y axis" msgstr "An Y-Achse ausrichten" -msgid "Add" -msgstr "Hinzufügen" - msgid "Add plate" msgstr "Druckplatte hinzufügen" @@ -4168,7 +4481,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Größe:" -#, boost-format +#, 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)." @@ -4246,6 +4559,9 @@ msgstr "Überwachung automatisch aufzeichnen" msgid "Go Live" msgstr "Live-Übertragung starten" +msgid "Liveview Retry" +msgstr "Live-Ansicht erneut versuchen" + msgid "Resolution" msgstr "Auflösung" @@ -4299,14 +4615,11 @@ msgstr "" msgid "Logging" msgstr "Protokollierung" -msgid "Prepare" -msgstr "Vorbereiten" - msgid "Preview" msgstr "Vorschau" -msgid "Device" -msgstr "Gerät" +msgid "Multi-device" +msgstr "Multi-Gerät" msgid "Project" msgstr "Projekt" @@ -4334,9 +4647,6 @@ msgstr "Alle Platten slicen" msgid "Export G-code file" msgstr "G-Code als Datei exportieren" -msgid "Send" -msgstr "Senden" - msgid "Export plate sliced file" msgstr "Exportiere aktuelle Platte als STL Datei" @@ -4457,6 +4767,12 @@ msgstr "Importiere 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Lade ein Modell" +msgid "Import Zip Archive" +msgstr "Zip-Archiv importieren" + +msgid "Load models contained within a zip archive" +msgstr "Modelle aus einem Zip-Archiv laden" + msgid "Import Configs" msgstr "Konfigurationen importieren" @@ -4490,8 +4806,8 @@ msgstr "Exportiere G-Code" msgid "Export current plate as G-code" msgstr "Aktuelle Druckplatte als G-Code exportieren" -msgid "Export &Configs" -msgstr "Exportieren &Konfigurieren" +msgid "Export Preset Bundle" +msgstr "Preset-Bundle exportieren" msgid "Export current configuration to files" msgstr "Aktuelle Konfiguration in Dateien exportieren" @@ -4592,9 +4908,6 @@ msgstr "Hervorhebung des Objektüberhangs in einer 3D-Szene anzeigen" msgid "Preferences" msgstr "Einstellungen" -msgid "View" -msgstr "Ansicht" - msgid "Help" msgstr "Hilfe" @@ -4661,10 +4974,10 @@ msgstr "Werkzeugwege als OBJ exportieren" msgid "Export toolpaths as OBJ" msgstr "Werkzeugweg als OBJ exportieren" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Öffne &Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Öffne Studio" msgid "&Quit" @@ -4770,45 +5083,67 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisierung" -msgid "Initialize failed (No Device)!" -msgstr "Initialisierung fehlgeschlagen (Kein Gerät)!" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Die Initialisierung ist fehlgeschlagen (Geräteverbindung nicht bereit)!" +"Das Gerät kann keine weiteren Gespräche führen. Bitte versuchen Sie es " +"später erneut." -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialisierung fehlgeschlagen (keine Kamera)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Der Drucker ist mit dem Herunterladen beschäftigt; Bitte warten Sie, bis der " -"Download beendet ist." +"Die Wiedergabe funktioniert nicht richtig. Bitte installieren Sie den " +"Systemplayer neu." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"Initialisierung fehlgeschlagen (Nicht unterstützt auf der aktuellen " -"Druckerversion)!" +"Der Player ist nicht geladen. Klicken Sie auf die Schaltfläche „Wiedergabe“, " +"um es erneut zu versuchen." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisierung fehlgeschlagen (Kein Zugriff im reinen LAN-Modus)!" +msgid "Please confirm if the printer is connected." +msgstr "Bitte bestätigen Sie, ob der Drucker verbunden ist." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialisierung fehlgeschlagen (Fehlende LAN IP des Druckers)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"Der Drucker ist derzeit mit dem Herunterladen beschäftigt. Bitte versuchen " +"Sie es erneut, nachdem es beendet ist." + +msgid "Printer camera is malfunctioning." +msgstr "Die Druckerkamera funktioniert nicht richtig." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Problem aufgetreten. Bitte aktualisieren Sie die Drucker-Firmware und " +"versuchen Sie es erneut." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN-Only-Liveview ist ausgeschaltet. Bitte schalten Sie die Live-Ansicht auf " +"dem Druckerbildschirm ein." + +msgid "Please enter the IP of printer to connect." +msgstr "" +"Bitte geben Sie die IP des Druckers ein, um eine Verbindung herzustellen." msgid "Initializing..." msgstr "Initialisieren..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Initialisierung ist fehlgeschlagen (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"Verbindung fehlgeschlagen. Bitte überprüfen Sie das Netzwerk und versuchen " +"Sie es erneut" -msgid "Network unreachable" -msgstr "Netzwerk nicht erreichbar" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Bitte überprüfen Sie das Netzwerk und versuchen Sie es erneut. Sie können " +"den Drucker neu starten oder aktualisieren, wenn das Problem weiterhin " +"besteht." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "[%d] gestoppt!" +msgid "The printer has been logged out and cannot connect." +msgstr "Der Drucker wurde abgemeldet und kann keine Verbindung herstellen." msgid "Stopped." msgstr "Gestoppt." @@ -4839,19 +5174,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Die Initialisierung der virtuellen Kamera ist fehlgeschlagen (%s)!" +msgid "Network unreachable" +msgstr "Netzwerk nicht erreichbar" + msgid "Information" msgstr "Informationen" msgid "Playing..." msgstr "Laufend..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Laden fehlgeschlagen [%d]!" - -msgid "Loading..." -msgstr "Laden..." - msgid "Year" msgstr "Jahr" @@ -4870,9 +5201,6 @@ msgstr "Dateien nach Monat gruppieren, neueste zuerst." msgid "Show all files, recent first." msgstr "Alle Dateien anzeigen, die neuesten zuerst." -msgid "Timelapse" -msgstr "Zeitraffer" - msgid "Switch to timelapse files." msgstr "Wechseln zu Zeitrafferdateien." @@ -4900,6 +5228,12 @@ msgstr "Auswählen" msgid "Batch manage files." msgstr "Batch-Verwaltung von Dateien." +msgid "Refresh" +msgstr "Aktualisieren" + +msgid "Reload file list from printer." +msgstr "Dateiliste vom Drucker neu laden." + msgid "No printers." msgstr "Keine Drucker." @@ -4910,13 +5244,39 @@ msgstr "Verbindung fehlgeschlagen [%d]!" msgid "Loading file list..." msgstr "Dateiliste laden..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Keine Dateien [%d]" +msgid "No files" +msgstr "Keine Dateien" + +msgid "Load failed" +msgstr "Laden fehlgeschlagen" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"Die Initialisierung ist fehlgeschlagen (Geräteverbindung nicht bereit)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Das Durchsuchen von Dateien auf der MicroSD-Karte wird in der aktuellen " +"Firmware nicht unterstützt. Bitte aktualisieren Sie die Drucker-Firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"Initialisierung fehlgeschlagen (Speicher nicht verfügbar, MicroSD-Karte " +"einlegen.)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN-Verbindung fehlgeschlagen (SD-Karte konnte nicht angezeigt werden)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "" +"Das durchsuchen von Dateien auf der MicroSD-Karte wird im LAN-Only-Modus " +"nicht unterstützt." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Laden fehlgeschlagen [%d]" +msgid "Initialize failed (%s)!" +msgstr "Initialisierung ist fehlgeschlagen (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4938,11 +5298,11 @@ 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 fetch model information from printer." +msgstr "Abrufen von Modellinformationen vom Drucker fehlgeschlagen." -msgid "Failed to parse model infomations." -msgstr "Modellinformationen konnten nicht analysiert werden" +msgid "Failed to parse model information." +msgstr "Analysieren von Modellinformationen fehlgeschlagen." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4956,6 +5316,14 @@ msgid "File '%s' was lost! Please download it again." msgstr "" "Die Datei '%s' ist verloren gegangen! Bitte laden Sie diese erneut herunter." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Datei: %s\n" +"Titel: %s\n" + msgid "Download waiting..." msgstr "Auf Download warten..." @@ -4972,15 +5340,14 @@ msgstr "Herunterladen abgeschlossen" msgid "Downloading %d%%..." msgstr "%d%% wird heruntergeladen..." -msgid "Connection lost. Please retry." -msgstr "Verbindung verloren. Bitte versuchen Sie es erneut." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Das Gerät kann keine weiteren Gespräche führen. Bitte versuchen Sie es " -"später erneut." +"Der Drucker wird neu verbunden, die Operation kann nicht sofort " +"abgeschlossen werden. Bitte versuchen Sie es später erneut." -msgid "File not exists." +msgid "File does not exist." msgstr "Datei existiert nicht." msgid "File checksum error. Please retry." @@ -5038,12 +5405,6 @@ msgstr "Invertiere Roll-Achse" msgid "Printing Progress" msgstr "Druckprozess" -msgid "Resume" -msgstr "Fortsetzen" - -msgid "Stop" -msgstr "Stop" - msgid "0" msgstr "0" @@ -5088,6 +5449,9 @@ msgstr "Schalte Kameraperspektive" msgid "Control" msgstr "Steuerung" +msgid "Printer Parts" +msgstr "Drucker-Teile" + msgid "Print Options" msgstr "Druckoptionen" @@ -5106,9 +5470,6 @@ msgstr "Cham" msgid "Bed" msgstr "Druckbett" -msgid "Unload" -msgstr "Entladen" - msgid "Debug Info" msgstr "Debug-Informationen" @@ -5298,9 +5659,6 @@ msgstr "Status" msgid "Update" msgstr "Update" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Nicht erneut anzeigen" @@ -5331,6 +5689,40 @@ msgstr "%s Information" msgid "Skip" msgstr "Überspringen" +msgid "Newer 3mf version" +msgstr "Neuere 3mf-Version" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"Die 3mf-Dateiversion ist in der Beta und neuer als die aktuelle OrcaSlicer- " +"Version." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" +"Wenn Sie Orca Slicer Beta ausprobieren möchten, können Sie hier klicken" + +msgid "Download Beta Version" +msgstr "Beta-Version herunterladen" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "Die 3mf-Dateiversion ist neuer als die aktuelle Orca Slicer Version." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Ein Update von Orca Slicer ermöglicht die Nutzung aller Funktionen in der " +"3mf-Datei." + +msgid "Current Version: " +msgstr "Aktuelle Version: " + +msgid "Latest Version: " +msgstr "Neueste Version: " + +msgid "Not for now" +msgstr "Nicht jetzt" + msgid "3D Mouse disconnected." msgstr "3D-Maus nicht angeschlossen." @@ -5400,12 +5792,12 @@ msgstr[1] "%1$d Objekte wurden als Teile des geschnittenen Objekts geladen." msgid "ERROR" msgstr "FEHLER" -msgid "CANCELED" -msgstr "ABGEBROCHEN" - msgid "COMPLETED" msgstr "ERLEDIGT" +msgid "CANCELED" +msgstr "ABGEBROCHEN" + msgid "Cancel upload" msgstr "Upload abbrechen" @@ -5518,6 +5910,27 @@ msgstr "Erlaube akustische Signale" msgid "Filament Tangle Detect" msgstr "Filamentverwicklung erkannt" +msgid "Nozzle Clumping Detection" +msgstr "Düsenverklumpen-Erkennung" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Überprüfen Sie, ob die Düse durch Filament oder andere Fremdkörper verklumpt " +"ist." + +msgid "Nozzle Type" +msgstr "Düsentyp" + +msgid "Stainless Steel" +msgstr "Edelstahl" + +msgid "Hardened Steel" +msgstr "Gehärteter Stahl" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Allgemein" @@ -5730,9 +6143,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Sie sollten Ihre Software aktualisieren.\n" -msgid "Newer 3mf version" -msgstr "Neuere 3mf-Version" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5782,6 +6192,9 @@ msgstr "" "Aufgrund der nicht unterstützten Textkodierung können unbrauchbare Zeichen " "erscheinen!" +msgid "Remember my choice." +msgstr "Meine Auswahl merken." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5913,9 +6326,6 @@ msgstr "Kann nicht neu geladen werden:" msgid "Error during reload" msgstr "Fehler beim Neuladen" -msgid "Slicing" -msgstr "Slicen" - msgid "There are warnings after slicing models:" msgstr "Es gibt Warnungen nach dem slicen des Modells:" @@ -5978,12 +6388,20 @@ msgstr "Modell importieren" msgid "prepare 3mf file..." msgstr "3mf-Datei vorbereiten…" +msgid "Download failed, unknown file format." +msgstr "Download fehlgeschlagen, unbekanntes Dateiformat." + msgid "downloading project ..." msgstr "Projekt wird heruntergeladen..." +msgid "Download failed, File size exception." +msgstr "Download fehlgeschlagen, Dateigröße nicht erlaubt." + #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Projekt heruntergeladen %d%%" +msgstr "" +"Projekt heruntergeladen %d%%Der Import in Orca Slicer ist fehlgeschlagen. " +"Bitte laden Sie die Datei herunter und importieren Sie sie manuell." msgid "" "Importing to Orca Slicer failed. Please download the file and manually " @@ -6004,6 +6422,22 @@ 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." +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Das Laden eines ZIP-Archivs auf dem Pfad %1% ist fehlgeschlagen." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Entpacken der Datei nach %1%: %2% fehlgeschlagen" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Die entpackte Datei bei %1% konnte nicht gefunden werden. Das Entpacken der " +"Datei ist fehlgeschlagen." + msgid "Drop project file" msgstr "Projektdatei ablegen" @@ -6028,9 +6462,6 @@ msgstr "G-Code-Dateien und Modelle können nicht zusammen geladen werden!" msgid "Can not add models when in preview mode!" msgstr "Modelle können im Vorschaumodus nicht hinzugefügt werden" -msgid "Add Models" -msgstr "Modelle hinzufügen" - msgid "All objects will be removed, continue?" msgstr "Alle Objekte werden entfernt, fortfahren?" @@ -6039,9 +6470,6 @@ msgstr "" "Das aktuelle Projekt enthält nicht gespeicherte Änderungen. Möchten Sie " "speichern, bevor Sie fortfahren?" -msgid "Remember my choice." -msgstr "Meine Auswahl merken." - msgid "Number of copies:" msgstr "Anzahl der Kopien:" @@ -6058,7 +6486,7 @@ msgid "The provided file name is not valid." msgstr "Der angegebene Dateiname ist ungültig." msgid "The following characters are not allowed by a FAT file system:" -msgstr "die folgenden Zeichen sind nicht erlaubt beim Fat Datei System:" +msgstr "Folgende Zeichen werden vom FAT Dateisystem nicht unterstützt:" msgid "Save Sliced file as:" msgstr "Geslicte Datei speichern unter:" @@ -6073,10 +6501,27 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Eine boolesche Operation kann für Modellnetze nicht ausgeführt werden. Es " -"werden nur positive Teile exportiert." +"Die Boolesche Operation auf den Modellnetzen kann nicht durchgeführt werden. " +"Nur positive Teile werden beibehalten. Sie können die Netze reparieren und " +"es erneut versuchen." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Grund: Teil \"%1%\" ist leer." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Grund: Teil \"%1%\" hat kein Volumen." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Grund: Teil \"%1%\" hat Selbstüberschneidung." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Grund: \"%1%\" und ein anderes Teil haben keine Schnittmenge." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6237,6 +6682,14 @@ msgstr "Login-Region" msgid "Stealth Mode" msgstr "Unsichtbarer Modus" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" +"Dies stoppt die Übertragung von Daten an die Cloud-Dienste von Bambu. " +"Benutzer, die keine BBL-Maschinen verwenden oder nur den LAN-Modus " +"verwenden, können diese Funktion sicher aktivieren." + msgid "Enable network plugin" msgstr "Netzwerk-Plugin aktivieren" @@ -6252,6 +6705,27 @@ msgstr "Imperial" msgid "Units" msgstr "Einheiten" +msgid "Allow only one OrcaSlicer instance" +msgstr "Nur eine OrcaSlicer-Instanz zulassen" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"Auf OSX läuft standardmäßig immer nur eine Instanz der App. Es ist jedoch " +"möglich, mehrere Instanzen derselben App von der Befehlszeile aus zu " +"starten. In diesem Fall erlaubt diese Einstellung nur eine Instanz." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Wenn dies aktiviert ist und OrcaSlicer gestartet wird, während bereits eine " +"andere Instanz von OrcaSlicer läuft, wird diese Instanz stattdessen " +"reaktiviert." + msgid "Home" msgstr "Startseite" @@ -6316,6 +6790,33 @@ msgstr "Reinigungsvolumen: Auto-Berechnung bei jeder Farbänderung." msgid "If enabled, auto-calculate everytime the color changed." msgstr "Wenn aktiviert, wird bei jeder Farbänderung automatisch berechnet." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Reinigungsvolumen: Auto-Berechnung bei jedem Filamentwechsel." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "Wenn aktiviert, wird bei jedem Filamentwechsel automatisch berechnet." + +msgid "Remember printer configuration" +msgstr "Druckerkonfiguration merken" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Wenn aktiviert, merkt sich Orca die Filament-/Prozesskonfiguration für jeden " +"Drucker und wechselt automatisch." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "Multi-Geräte-Verwaltung (nach Neustart von Studio wirksam)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Wenn diese Option aktiviert ist, können Sie eine Aufgabe gleichzeitig an " +"mehrere Geräte senden und mehrere Geräte verwalten." + msgid "Network" msgstr "Netzwerk" @@ -6361,6 +6862,48 @@ msgstr "" "Wenn aktiviert, wird OrcaSlicer als Standardanwendung zum Öffnen von .step-" "Dateien festgelegt" +msgid "Associate web links to OrcaSlicer" +msgstr "Web-Links mit OrcaSlicer verknüpfen" + +msgid "Associate URLs to OrcaSlicer" +msgstr "URLs mit OrcaSlicer verknüpfen" + +msgid "Current association: " +msgstr "Aktuelle Zuordnung:" + +msgid "Associate prusaslicer://" +msgstr "prusaslicer:// verknüpfen" + +msgid "Not associated to any application" +msgstr "Nicht mit einer Anwendung verknüpft" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Verknüpfen Sie OrcaSlicer mit prusaslicer://-Links, damit Orca Modelle von " +"Printable.com öffnen kann." + +msgid "Associate bambustudio://" +msgstr "Verknüpfen mit bambustudio://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Verknüpfen Sie OrcaSlicer mit bambustudio://-Links, damit Orca Modelle von " +"makerworld.com öffnen kann." + +msgid "Associate cura://" +msgstr "cura:// verknüpfen" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Verknüpfen Sie OrcaSlicer mit cura://-Links, damit Orca Modelle von " +"thingiverse.com öffnen kann." + msgid "Maximum recent projects" msgstr "Höchstanzahl an letzten Projekten" @@ -6532,12 +7075,21 @@ msgstr "Systemdrucker auswählen/entfernen" msgid "Create printer" msgstr "Drucker erstellen" -msgid "Incompatible" -msgstr "Inkompatibel" - msgid "The selected preset is null!" msgstr "Das selektierte Profil ist leer!" +msgid "End" +msgstr "Ende" + +msgid "Customize" +msgstr "Anpassen" + +msgid "Other layer filament sequence" +msgstr "Andere Filament-Schichtsequenz" + +msgid "Please input layer value (>= 2)." +msgstr "Bitte geben Sie einen Schichtwert (>= 2) ein." + msgid "Plate name" msgstr "Platten-Name" @@ -6547,8 +7099,14 @@ msgstr "Gleich wie globale Drucksequenz" msgid "Print sequence" msgstr "Druckreihenfolge" -msgid "Customize" -msgstr "Anpassen" +msgid "Same as Global" +msgstr "Gleich wie global" + +msgid "Disable" +msgstr "Deaktivieren" + +msgid "Spiral vase" +msgstr "Vasenmodus" msgid "First layer filament sequence" msgstr "Erste Filament-Schichtsequenz" @@ -6613,15 +7171,6 @@ msgstr "Benutzer-Profil" msgid "Preset Inside Project" msgstr "Projektbasiertes Profil" -msgid "Name is invalid;" -msgstr "Der Name ist ungültig;" - -msgid "illegal characters:" -msgstr "unzulässige Zeichen:" - -msgid "illegal suffix:" -msgstr "unzulässiger Zusatz:" - msgid "Name is unavailable." msgstr "Der Name ist nicht verfügbar." @@ -6641,15 +7190,6 @@ msgstr "" 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." - -msgid "The name is not allowed to start with space character." -msgstr "Der Name darf nicht mit einem Leerzeichen beginnen." - -msgid "The name is not allowed to end with space character." -msgstr "Der Name darf nicht mit einem Leerzeichen enden." - msgid "The name cannot be the same as a preset alias name." msgstr "Der Name kann nicht mit einem Profil-Aliasnamen identisch sein." @@ -6708,9 +7248,6 @@ msgstr "Kann das Geräte nicht finden?" msgid "Log out successful." msgstr "Abmeldung erfolgreich." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Beschäftigt" @@ -6735,12 +7272,6 @@ msgstr "Bambu strukturierte PEI-Platte" msgid "Send print job to" msgstr "Druckauftrag senden an" -msgid "Refresh" -msgstr "Aktualisieren" - -msgid "Bed Leveling" -msgstr "Druckbettnivellierung" - msgid "Flow Dynamics Calibration" msgstr "Dynamische Flusskalibrierung" @@ -6754,11 +7285,6 @@ msgstr "Senden abgeschlossen" msgid "Error code" msgstr "Fehlercode" -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" @@ -6841,8 +7367,13 @@ 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 "Der ausgewählte Drucker ist mit den gewählten Druckerprofilen nicht " +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"Der ausgewählte Drucker (%s) ist mit dem gewählten Druckerprofil im Slicer " +"(%s) nicht kompatibel." msgid "An SD card needs to be inserted to record timelapse." msgstr "" @@ -6872,8 +7403,8 @@ msgstr "" msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" -"Zeitraffer wird nicht unterstützt, da die Druckreihenfolge auf \"Nach " -"Objekt\" eingestellt ist." +"Zeitraffer wird nicht unterstützt, da die Druckreihenfolge auf \"Nach Objekt" +"\" eingestellt ist." msgid "Errors" msgstr "Fehler" @@ -6904,20 +7435,30 @@ msgid "nozzle in preset: %s %s" msgstr "Düse im Profil: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "Düse gemerkt: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "Düse gemerkt: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"Ihr Düsendurchmesser im Profil stimmt nicht mit dem gemerkten " -"Düsendurchmesser überein. Haben Sie Ihre Düse kürzlich gewechselt?" +"Ihr Düsendurchmesser in der gesliceten Datei stimmt nicht mit der gemerkten " +"Düse überein. Wenn Sie Ihre Düse kürzlich gewechselt haben, gehen Sie zu " +"Gerät > Drucker-Teile, um die Einstellungen zu ändern." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"*Drucken von %s Material mit %s kann zu einer Beschädigung der Düse führen" +"Das Drucken von Hochtemperaturmaterial (%s Material) mit %s kann zu einer " +"Beschädigung der Düse führen" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Bitte beheben Sie den obigen Fehler, sonst kann der Druck nicht fortgesetzt " +"werden." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6925,26 +7466,11 @@ msgstr "" "Bitte klicken Sie auf die Bestätigungsschaltfläche, wenn Sie den " "Druckvorgang trotzdem fortsetzen möchten." -msgid "Hardened Steel" -msgstr "Gehärteter Stahl" - -msgid "Stainless Steel" -msgstr "Edelstahl" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" "Verbindung zum Drucker wird hergestellt. Während des Verbindungsvorgangs " -msgid "Preparing print job" -msgstr "Druckauftrag vorbereiten" - -msgid "Abnormal print file data. Please slice again" -msgstr "Fehlerhafte 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." @@ -6957,6 +7483,9 @@ msgstr "Automatische Flusskalibrierung mit Micro Lidar" msgid "Modifying the device name" msgstr "Den Gerätenamen ändern" +msgid "Bind with Pin Code" +msgstr "Mit Pin-Code verbinden" + msgid "Send to Printer SD card" msgstr "An MicroSD-Karte des Druckers senden" @@ -6965,6 +7494,9 @@ msgstr "" "Der Druckauftrag kann nicht gesendet werden, während ein Update ausgeführt " "wird" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "Der ausgewählte Drucker ist mit den gewählten Druckerprofilen nicht " + 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-" @@ -7010,6 +7542,28 @@ msgstr "Zeitüberschreitung beim Empfang des Anmeldeberichts" msgid "Unknown Failure" msgstr "Unbekannter Fehler" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Bitte finden Sie den Pin-Code auf der Konto-Seite auf dem Druckerbildschirm " +"und geben Sie den Pin-Code unten ein." + +msgid "Can't find Pin Code?" +msgstr "Können Sie den Pin-Code nicht finden?" + +msgid "Pin Code" +msgstr "Pin-Code" + +msgid "Binding..." +msgstr "Bindung..." + +msgid "Please confirm on the printer screen" +msgstr "Bitte bestätigen Sie auf dem Druckerbildschirm" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Anmeldung fehlgeschlagen. Bitte überprüfen Sie den Pin-Code." + msgid "Log in printer" msgstr "Drucker anmelden" @@ -7218,16 +7772,39 @@ msgstr "Anpassen" msgid "Ignore" msgstr "Ignorieren" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Experimentelle Funktion: Filament beim Filamentwechsel weiter zurückziehen " +"und abschneiden, um den Flush zu minimieren. Obwohl dies den Flush deutlich " +"reduzieren kann, kann es auch das Risiko von Düsenverstopfungen oder anderen " +"Druckkomplikationen erhöhen." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimentelle Funktion: Filament beim Filamentwechsel weiter zurückziehen " +"und abschneiden, um den Flush zu minimieren. Obwohl dies den Flush deutlich " +"reduzieren kann, kann es auch das Risiko von Düsenverstopfungen oder anderen " +"Druckkomplikationen erhöhen. Bitte verwenden Sie die Funktion mit der " +"neuesten Drucker-Firmware." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen " "\"Timelapse Wischturm\" hinzuzufügen, indem Sie mit der rechten Maustaste " -"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"-" -">\"Timelapse Wischturm\" wählen." +"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"->" +"\"Timelapse Wischturm\" wählen." msgid "Line width" msgstr "Breite der Linie" @@ -7299,6 +7876,9 @@ msgstr "Supportfilament" msgid "Tree supports" msgstr "Baumstützen" +msgid "Skirt" +msgstr "Saum" + msgid "Prime tower" msgstr "Reinigungsturm" @@ -7484,6 +8064,14 @@ msgstr "Toolchange-Parameter bei Multi-Extruder-MM-Druckern" msgid "Printable space" msgstr "Druckbarer Raum" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Ungültiger Wert für Parameter %1%: %2% angegeben" + +msgid "G-code flavor is switched" +msgstr "G-Code-Variante wird umgeschaltet" + msgid "Cooling Fan" msgstr "Kühlung" @@ -7722,23 +8310,36 @@ msgstr "" "die folgenden nicht gespeicherten Änderungen:" #, 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 "" -"Sie haben einige Einstellungen des Profils \"%1%\" geändert.\n" -"Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem Wechsel " -"der Profile beibehalten?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Sie haben einige Einstellungen des Profils \"%1%\" geändert. " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"Sie haben einige Profileinstellungen geändert.\n" -"Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem Wechseln " -"der Profile beibehalten?" +"\n" +"Sie können die geänderten Profilwerte speichern oder verwerfen." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Sie können die geänderten Profilwerte speichern oder verwerfen oder wählen, " +"ob Sie die geänderten Werte in das neue Profil übertragen möchten." + +msgid "You have previously modified your settings." +msgstr "Sie haben Ihre Einstellungen zuvor geändert." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Sie können die geänderten Profilwerte verwerfen oder wählen, ob Sie die " +"geänderten Werte in das neue Projekt übertragen möchten." msgid "Extruders count" msgstr "Anzahl der Extruder" @@ -7774,11 +8375,11 @@ msgid "Transfer values from left to right" msgstr "Werte von links nach rechts übertragen" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" -"Wenn aktiviert, kann dieses Dialogfeld zum Übertragen ausgewählter Werte von " -"links nach rechts verwendet werden." +"Wenn aktiviert, kann dieses Dialogfeld verwendet werden, um ausgewählte " +"Werte von links nach rechts zu übertragen." msgid "Add File" msgstr "Datei hinzufügen" @@ -7860,6 +8461,60 @@ msgstr "Keine Updates verfügbar." msgid "The configuration is up to date." msgstr "Die Konfiguration ist auf dem neuesten Stand." +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + msgid "Ramming customization" msgstr "Ramming-Anpassung" @@ -7877,7 +8532,10 @@ msgstr "" "Ramming bezeichnet die schnelle Extrusion kurz vor einem Werkzeugwechsel bei " "einem Single-Extruder-MM-Drucker. Sein Zweck ist es, das Ende des entladenen " "Filaments so zu formen, dass es das Einsetzen des neuen Filaments nicht " -"verhindert und selbst später wieder eingeführt werden kann. Diese " +"verhindert und selbst später wieder eingeführt werden kann.\n" +"\n" +"Dies ist eine Einstellung für Experten, eine falsche Einstellung führt " +"wahrscheinlich zu Verstopfungen, schleifendem Extruderrad, usw." msgid "Total ramming time" msgstr "Summe der Ramming-Zeit" @@ -7940,11 +8598,50 @@ msgstr "Von" msgid "To" msgstr "Zu" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" +"Windows Media Player wird für diese Aufgabe benötigt! Möchten Sie 'Windows " +"Media Player' für Ihr Betriebssystem aktivieren?" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" +"BambuSource wurde nicht korrekt für das Abspielen von Medien registriert! " +"Drücken Sie Ja, um es erneut zu registrieren. Sie werden zweimal aufgefordert" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" +"Fehlendes BambuSource-Komponente für das Abspielen von Medien registriert! " +"Bitte installieren Sie BambuStudio erneut oder suchen Sie nach " +"Kundendiensthilfe." + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" +"Verwendung eines BambuSource aus einer anderen Installation, das Abspielen " +"von Videos funktioniert möglicherweise nicht korrekt! Drücken Sie Ja, um es " +"zu beheben." + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" +"Ihr System fehlt H.264-Codecs für GStreamer, die zum Abspielen von Videos " +"erforderlich sind. (Versuchen Sie, die Pakete gstreamer1.0-plugins-bad oder " +"gstreamer1.0-libav zu installieren und starten Sie Orca Slicer neu?)" + msgid "Bambu Network plug-in not detected." -msgstr "Bambu Network-Plug-in nicht erkannt." +msgstr "Bambu Network Plugin nicht erkannt." msgid "Click here to download it." -msgstr "Klicken Sie hier, um es herunterzuladen." +msgstr "Hier klicken um es herunterzuladen." msgid "Login" msgstr "Anmelden" @@ -8123,7 +8820,7 @@ msgid "Gizmo cut" msgstr "Trennen" msgid "Gizmo Place face on bed" -msgstr "Fläche auf Druckbett platzieren " +msgstr "Fläche auf Druckbett platzieren" msgid "Gizmo SLA support points" msgstr "SLA Stützpunkte" @@ -8214,6 +8911,12 @@ msgstr "Schieberegler 5x schneller bewegen" msgid "Shift+Mouse wheel" msgstr "Umschalt+Mausrad" +msgid "Horizontal slider - Move to start position" +msgstr "Horizontaler Schieberegler - Zur Startposition bewegen" + +msgid "Horizontal slider - Move to last position" +msgstr "Horizontaler Schieberegler - Zur letzten Position bewegen" + msgid "Release Note" msgstr "Hinweis zur Veröffentlichung" @@ -8227,8 +8930,8 @@ msgstr "Aktualisierung des Netzwerk-Plugins" msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." msgstr "" -"Klicken Sie auf OK, um das Netzwerk-Plugin beim nächsten Start von Bambu " -"Studio zu aktualisieren." +"Klicken Sie auf OK, um das Netzwerk-Plugin beim nächsten Start von Orca " +"Slicer zu aktualisieren." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" @@ -8244,6 +8947,42 @@ msgstr "Überspringe diese Version" msgid "Done" msgstr "Erledigt" +msgid "resume" +msgstr "Fortsetzen" + +msgid "Resume Printing" +msgstr "Druck fortsetzen" + +msgid "Resume Printing(defects acceptable)" +msgstr "Druck fortsetzen (Fehler akzeptabel)" + +msgid "Resume Printing(problem solved)" +msgstr "Druck fortsetzen (Problem gelöst)" + +msgid "Stop Printing" +msgstr "Druck abbrechen" + +msgid "Check Assistant" +msgstr "Assistent überprüfen" + +msgid "Filament Extruded, Continue" +msgstr "Filament extrudiert, fortsetzen" + +msgid "Not Extruded Yet, Retry" +msgstr "Noch nicht extrudiert, erneut versuchen" + +msgid "Finished, Continue" +msgstr "Fertig, fortsetzen" + +msgid "Load Filament" +msgstr "Laden" + +msgid "Filament Loaded, Resume" +msgstr "Filament geladen, fortsetzen" + +msgid "View Liveview" +msgstr "Live-Ansicht anzeigen" + msgid "Confirm and Update Nozzle" msgstr "Bestätigen und Düse aktualisieren" @@ -8303,12 +9042,6 @@ msgstr "Version:" msgid "Update firmware" msgstr "Firmware aktualisieren" -msgid "Printing" -msgstr "Drucken" - -msgid "Idle" -msgstr "Inaktiv" - msgid "Beta version" msgstr "Beta-Version" @@ -8344,7 +9077,7 @@ 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." +"update next time starting Orca." msgstr "" "Die Firmware-Version ist nicht korrekt. Vor dem Drucken müssen Sie die " "Firmware reparieren und aktualisieren. Möchten Sie diese jetzt " @@ -8376,7 +9109,7 @@ msgid "Repair failed." msgstr "Reparatur fehlgeschlagen." msgid "Loading repaired objects" -msgstr "Laden reparierter Objekte" +msgstr "Reparierte Objekte laden" msgid "Exporting 3mf file failed" msgstr "Exportieren der 3mf-Datei fehlgeschlagen" @@ -8492,9 +9225,6 @@ msgstr "Interne Brücke" msgid "Gap infill" msgstr "Lückenfüllung" -msgid "Skirt" -msgstr "Saum" - msgid "Support interface" msgstr "Stützstruktur-Schnittstelle" @@ -9170,6 +9900,15 @@ msgstr "Technische Druckplatte" msgid "First layer print sequence" msgstr "Erste Schicht Druckreihenfolge" +msgid "Other layers print sequence" +msgstr "Andere Schichten Druckreihenfolge" + +msgid "The number of other layers print sequence" +msgstr "Die Anzahl der anderen Schichten Druckreihenfolge" + +msgid "Other layers filament sequence" +msgstr "Andere Schichten Filamentreihenfolge" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "" "Dieser G-Code wird bei jedem Schichtwechsel vor dem anheben von Z eingefügt." @@ -10021,22 +10760,21 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Reihenfolge der Wand/Füllung. Wenn das Kontrollkästchen nicht aktiviert ist, " +"Reihenfolge der Wand/Füllung. Wenn das Kontrollkästchen nicht aktiviert ist," "werden die Wände zuerst gedruckt, was in den meisten Fällen am besten " "funktioniert.\n" "\n" -"Das Drucken der Wände zuerst kann bei extremen Überhängen hilfreich sein, da " -"die Wände die benachbarte Füllung haben, an der sie haften können. Die " -"Füllung drückt jedoch die gedruckten Wände leicht heraus, wo sie an ihnen " -"befestigt ist, was zu einer schlechteren Oberflächenqualität führt. Es kann " -"auch dazu führen, dass die Füllung durch die äußeren Oberflächen des Teils " -"schimmert." +"Das Drucken der Füllung zuerst kann bei extremen Überhängen helfen, da die " +"Wände an die benachbarte Füllung haften. Die Füllung drückt jedoch leicht " +"gegen die gedruckten Wände, an denen sie befestigt ist, was zu einer " +"schlechteren Oberflächenqualität führt. Es kann auch dazu führen, dass die " +"Füllung durch die äußeren Oberflächen des Teils scheint." msgid "Wall loop direction" msgstr "Druck-Richtung der Wand" @@ -10091,6 +10829,12 @@ msgstr "" "Sicherheitsradius um den Extruder: Dient zur Kollisionsvermeidung beim " "objektweisen Drucken." +msgid "Nozzle height" +msgstr "Düsenhöhe" + +msgid "The height of nozzle tip." +msgstr "Die Höhe der Düsenspitze." + msgid "Bed mesh min" msgstr "Bett Min Abtastbereich" @@ -10218,6 +10962,33 @@ msgstr "" "und läuft zumindest mit minimaler Geschwindigkeit, um die Häufigkeit des " "Ein- und Ausschaltens zu reduzieren" +msgid "Don't slow down outer walls" +msgstr "Äußere Wände nicht verlangsamen" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"Wenn diese Einstellung aktiviert ist, wird sichergestellt, dass die externen " +"Umfänge nicht verlangsamt werden, um die Mindestschichtzeit zu erreichen. " +"Dies ist besonders hilfreich in den folgenden Szenarien:\n" +"\n" +" 1. Um Änderungen im Glanz beim Drucken von glänzenden Filamenten zu " +"vermeiden\n" +"2. Um Änderungen in der Geschwindigkeit der äußeren Wand zu vermeiden, die " +"leichte Wandartefakte erzeugen können, die wie Z-Banding aussehen\n" +"3. Um das Drucken mit Geschwindigkeiten zu vermeiden, die VFAs (feine " +"Artefakte) an den äußeren Wänden verursachen\n" +"\n" + msgid "Layer time" msgstr "Schichtdauer" @@ -10498,7 +11269,7 @@ msgid "Filament price. For statistics only" msgstr "Filamentpreis. Nur für statistische Zwecke." msgid "money/kg" -msgstr "€/kg" +msgstr "Kosten/kg" msgid "Vendor" msgstr "Hersteller" @@ -10509,14 +11280,30 @@ msgstr "Hersteller des Filaments. Nur zur Anzeige." msgid "(Undefined)" msgstr "(undefiniert)" -msgid "Infill direction" -msgstr "Richtung der Füllung" +msgid "Sparse infill direction" +msgstr "Richtung des einfachereren Fülling" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "Winkel des Füllmusters, das die Richtung der Linien bestimmt." +msgid "Solid infill direction" +msgstr "Richtung des massiven Füllmusters" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Winkel des massiven Füllmusters, der die Start- oder Hauptrichtung der Linie " +"steuert." + +msgid "Rotate solid infill direction" +msgstr "Massives Füllmuster drehen" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Drehe das massive Füllmuster um 90° für jede Schicht." + msgid "Sparse infill density" msgstr "Fülldichte" @@ -10564,6 +11351,9 @@ msgstr "Kubisch Stützen" msgid "Lightning" msgstr "Blitz" +msgid "Cross Hatch" +msgstr "Kreuzschraffur" + msgid "Sparse infill anchor length" msgstr "Länge des Infill-Ankers" @@ -10774,18 +11564,21 @@ 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." +"\"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 " +"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." +msgid "layer" +msgstr "Schicht" + msgid "Support interface fan speed" msgstr "Stützstruktur-Schnittstelle" @@ -10858,15 +11651,40 @@ msgstr "" "Geschwindigkeit für die Lückenfüllung. Lücken haben normalerweise eine " "unregelmäßige Linienbreite und sollten deshalb langsamer gedruckt werden." +msgid "Precise Z height" +msgstr "Präzise Z-Höhe" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Aktivieren Sie diese Option, um die genaue Z-Höhe des Objekts nach dem " +"Slicen zu erhalten. Es wird die genaue Objekthöhe durch Feinabstimmung der " +"Schichthöhen der letzten Schichten erhalten. Beachten Sie, dass dies ein " +"experimenteller Parameter ist." + msgid "Arc fitting" msgstr "Als Bogen drucken" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Aktivieren Sie dies, um eine G-Code-Datei zu erhalten, die G2 und G3 Befehle " -"enthält. Die Bogentoleranz ist die gleiche wie die Auflösung." +"Aktivieren Sie diese Option, um eine G-Code-Datei zu erhalten, die G2- und " +"G3-Bewegungen enthält. Die Passungstoleranz entspricht der Auflösung. \n" +"\n" +"Hinweis: Für Klipper-Maschinen wird empfohlen, diese Option zu deaktivieren. " +"Klipper profitiert nicht von Bogenbefehlen, da diese von der Firmware wieder " +"in Linienabschnitte aufgeteilt werden. Dies führt zu einer Verringerung der " +"Oberflächenqualität, da Linienabschnitte vom Slicer in Bögen umgewandelt und " +"dann von der Firmware wieder in Linienabschnitte umgewandelt werden." msgid "Add line number" msgstr "Liniennummer hinzufügen" @@ -11002,7 +11820,7 @@ msgid "The printer cost per hour" msgstr "Die Druckkosten pro Stunde" msgid "money/h" -msgstr "€/h" +msgstr "Kosten/h" msgid "Support control chamber temperature" msgstr "Druckkammer-Temperatursteuerung" @@ -11101,13 +11919,36 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Überlappung Füllung/Wand" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"Der Bereich der Füllung wird leicht vergrößert, damit er sich mit der Wand " -"überlappt, um eine bessere Haftung zu erreichen. Der Prozentwert bezieht " -"sich auf die Linienbreite der inneren Füllung." +"Die Füllfläche wird leicht vergrößert, um mit der Wand zu überlappen und " +"eine bessere Haftung zu gewährleisten. Der Prozentwert bezieht sich auf die " +"Linienbreite der spärlichen Füllung. Setzen Sie diesen Wert auf ~10-15%, um " +"eine mögliche Überextrusion und Materialansammlung zu minimieren, die zu " +"rauen Oberflächen führen kann." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"Der obere massive Füllbereich wird leicht vergrößert, um mit der Wand zu " +"überlappen und eine bessere Haftung zu gewährleisten und das Auftreten von " +"Pinholes zu minimieren, wo die obere Füllung auf die Wände trifft. Ein Wert " +"von 25-30% ist ein guter Ausgangspunkt, um das Auftreten von Pinholes zu " +"minimieren. Der Prozentwert bezieht sich auf die Linienbreite der spärlichen " +"Füllung." msgid "Speed of internal sparse infill" msgstr "Geschwindigkeit der inneren Füllung" @@ -11789,6 +12630,30 @@ msgstr "" "Filaments bei langen Verfahrwegen zu vermeiden. Null deaktiviert dein " "Rückzug." +msgid "Long retraction when cut(experimental)" +msgstr "Langer Rückzug beim Schneiden (experimentell)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimentelle Funktion. Rückzug und Abschneiden des Filaments bei einem " +"längeren Abstand während des Wechsels, um den Reinigungsvorgang zu " +"minimieren. Obwohl dies den Reinigungsvorgang erheblich reduziert, kann es " +"auch das Risiko von Düsenverstopfungen oder anderen Druckproblemen erhöhen." + +msgid "Retraction distance when cut" +msgstr "Rückzugslänge beim Schneiden" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimentelle Funktion. Rückzugslänge vor dem Abschneiden beim Filament-" +"Wechsel" + msgid "Z hop when retract" msgstr "Z-Hop beim Rückzug" @@ -11990,7 +12855,7 @@ msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" -"Wenden Sie Schaltnähte nur auf glatte Umfänge an, bei denen traditionelle " +"Wenden Sie Schrägnähte nur auf glatte Umfänge an, bei denen traditionelle " "Nahtstellen die Nähte an scharfen Ecken nicht effektiv verbergen." msgid "Conditional angle threshold" @@ -12010,7 +12875,7 @@ msgstr "" "Schrägnaht verwendet. Der Standardwert beträgt 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Bedingte Überstandsschwelle" #, no-c-format, no-boost-format msgid "" @@ -12039,8 +12904,8 @@ msgid "" "percentage (e.g., 80%), the speed is calculated based on the respective " "outer or inner wall speed. The default value is set to 100%." msgstr "" -"Diese Option legt die Druckgeschwindigkeit für Schaltnähte fest. Es wird " -"empfohlen, Schaltnähte mit einer langsamen Geschwindigkeit (weniger als 100 " +"Diese Option legt die Druckgeschwindigkeit für Schrägnähte fest. Es wird " +"empfohlen, Schrägnähte mit einer langsamen Geschwindigkeit (weniger als 100 " "mm/s) zu drucken. Es ist auch ratsam, die 'Glättung der Extrusionsrate' zu " "aktivieren, wenn die eingestellte Geschwindigkeit erheblich von der " "Geschwindigkeit der äußeren oder inneren Wände abweicht. Wenn die hier " @@ -12055,10 +12920,10 @@ msgid "Scarf joint flow ratio" msgstr "Schrägnaht Flussverhältnis" msgid "This factor affects the amount of material for scarf joints." -msgstr "Dieser Faktor beeinflusst die Menge an Material für Schaltnähte." +msgstr "Dieser Faktor beeinflusst die Menge an Material für Schrägnähte." msgid "Scarf start height" -msgstr "Start Höhe des Schrägnaht" +msgstr "Starthöhe der Schrägnaht" msgid "" "Start height of the scarf.\n" @@ -12173,6 +13038,42 @@ msgstr "Höhe der Umrandungsringe" msgid "How many layers of skirt. Usually only one layer" msgstr "Wie viele Schichten des Skirts. Normalerweise nur eine Schicht." +msgid "Draft shield" +msgstr "Luftzug-Schutz" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Ein Luftzugs-Schutz ist nützlich, um einen ABS- oder ASA-Druck vor Verzug " +"und Ablösen vom Druckbett aufgrund von Luftzug zu schützen. Er wird " +"normalerweise nur bei offenen Druckern benötigt, d.h. ohne Gehäuse. \n" +"\n" +"Optionen:\n" +"Aktiviert = Umrandung ist so hoch wie das höchste gedruckte Objekt.\n" +"Begrenzt = Umrandung ist so hoch wie durch die Höhe der Umrandung " +"angegeben.\n" +"\n" +"Hinweis: Mit dem aktiven Luftzug-Schutz wird die Umrandung in der " +"Umrandungsdistanz vom Objekt gedruckt. Daher kann es bei aktiven Rändern zu " +"Überschneidungen kommen. Um dies zu vermeiden, erhöhen Sie den Wert " +"derUmrandungsdistanz. \n" + +msgid "Limited" +msgstr "Begrenzt" + +msgid "Enabled" +msgstr "Aktiviert" + msgid "Skirt loops" msgstr "Anzahl Umrandungsringe" @@ -12188,6 +13089,22 @@ msgstr "" "Geschwindigkeit der Umrandung in mm/s. Null bedeutet Verwendung der Standard-" "Schichtextrusionsgeschwindigkeit." +msgid "Skirt minimum extrusion length" +msgstr "Minimale Extrusionslänge der Umrandung" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Minimale Filamentextrusionslänge in mm beim Drucken der Umrandung. Null " +"bedeutet, dass diese Funktion deaktiviert ist.\n" +"\n" +"Die Verwendung eines Werts ungleich Null ist nützlich, wenn der Drucker so " +"eingestellt ist, dass er ohne eine Primelinie druckt." + 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" @@ -12218,9 +13135,6 @@ msgstr "" "Geschwindigkeit der inneren massiven Füllungen, ohne die obere oder untere " "Oberfläche." -msgid "Spiral vase" -msgstr "Vasenmodus" - 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 " @@ -12725,7 +13639,7 @@ msgid "Distance from tree branch to the outermost brim line" msgstr "Abstand vom Modell zur äußersten Randlinie" msgid "Tip Diameter" -msgstr "Tippdurchmesser" +msgstr "Durchmesser der Spitze" #. TRN PrintSettings: "Organic supports" > "Tip Diameter" msgid "Branch tip diameter for organic supports." @@ -12739,7 +13653,7 @@ msgstr "Diese Einstellung bestimmt den Anfangsdurchmesser der Stützknoten." #. TRN PrintSettings: #lmFIXME msgid "Branch Diameter Angle" -msgstr "Ast-Durchmesserwinkel" +msgstr "Ast-Verjüngungs-Winkel" #. TRN PrintSettings: "Organic supports" > "Branch Diameter Angle" msgid "" @@ -12754,7 +13668,7 @@ msgstr "" "organischen Stütze erhöhen." msgid "Branch Diameter with double walls" -msgstr "Ast-Durchmesser mit doppelten Wänden" +msgstr "Doppelte Wände für Ast-Durchmesser ab" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -12973,6 +13887,53 @@ msgstr "Wischabstand der Reinigungsturmpurges" msgid "Spacing of purge lines on the wipe tower." msgstr "Abstand der Reinigungsturmpurges." +msgid "Maximum wipe tower print speed" +msgstr "Maximale Druckgeschwindigkeit des Reinigungsturms" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"Die maximale Druckgeschwindigkeit beim Reinigen im Reinigungsturm und beim " +"Drucken der dünnen Schichten des Reinigungsturms. Beim Reinigen wird, wenn " +"die Geschwindigkeit des dünnen Infill oder die berechnete Geschwindigkeit " +"aus der maximalen Volumengeschwindigkeit des Filaments niedriger ist, die " +"niedrigste verwendet.\n" +"\n" +"Beim Drucken der dünnen Schichten wird, wenn die Geschwindigkeit des inneren " +"Umfangs oder die berechnete Geschwindigkeit aus der maximalen " +"Volumengeschwindigkeit des Filaments niedriger ist, die niedrigste " +"verwendet.\n" +"\n" +"Das Erhöhen dieser Geschwindigkeit kann die Stabilität des Turms " +"beeinträchtigen sowie die Kraft erhöhen, mit der die Düse auf mögliche " +"Klumpen trifft, die sich auf dem Reinigungsturm gebildet haben.\n" +"\n" +"Bevor Sie diesen Parameter über den Standardwert von 90 mm/s erhöhen, " +"stellen Sie sicher, dass Ihr Druckerzuverlässig bei den erhöhten " +"Geschwindigkeiten Brücken drucken kann und dass das Auslaufen beim " +"Werkzeugwechsel gut kontrolliert wird.\n" +"\n" +"Für die äußeren Umfänge des Reinigungsturms wird die Geschwindigkeit des " +"inneren Umfangs unabhängig von dieser Einstellung verwendet." + msgid "Wipe tower extruder" msgstr "Reinigungsturm-Extruder" @@ -13446,7 +14407,7 @@ msgstr "Volumen pro Extruder" msgid "Total filament volume extruded per extruder during the entire print." msgstr "" "Gesamtes Filamentvolumen, das pro Extruder während des gesamten Drucks " -"extrudiert wurde." +"extrudiert wird." msgid "Total toolchanges" msgstr "Gesamte Anzahl der Werkzeugwechsel" @@ -13746,6 +14707,9 @@ msgstr "Abgebrochen" msgid "load_obj: failed to parse" msgstr "load_obj: konnte nicht analysiert werden" +msgid "load mtl in obj: failed to parse" +msgstr "Laden von mtl in obj: konnte nicht analysiert werden" + msgid "The file contains polygons with more than 4 vertices." msgstr "Die Datei enthält Polygone mit mehr als 4 Eckpunkten." @@ -13824,14 +14788,6 @@ msgstr "Flussrate" msgid "Max Volumetric Speed" msgstr "Maximale volumetrische Geschwindigkeit" -msgid "Please enter the name you want to save to printer." -msgstr "" -"Bitte geben Sie den Namen ein, unter dem Sie ihn auf dem Drucker speichern " -"möchten." - -msgid "The name cannot exceed 40 characters." -msgstr "Der Name darf 40 Zeichen nicht überschreiten." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13882,6 +14838,19 @@ msgstr "Bitte wählen Sie das Filament zur Kalibrierung aus." msgid "The input value size must be 3." msgstr "Die Eingabewertgröße muss 3 sein." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Dieser Maschinentyp kann nur 16 historische Ergebnisse pro Düse speichern. " +"Sie können die vorhandenen historischen Ergebnisse löschen und dann die " +"Kalibrierung starten. Oder Sie können die Kalibrierung fortsetzen, aber Sie " +"können keine neuen Kalibrierungshistorien erstellen. \n" +"Möchten Sie die Kalibrierung dennoch fortsetzen?" + msgid "Connecting to printer..." msgstr "Verbindung zum Drucker wird hergestellt..." @@ -13891,6 +14860,24 @@ msgstr "Das fehlgeschlagene Testergebnis wurde verworfen." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Flussdynamik-Kalibrierungsergebnis wurde auf dem Drucker gespeichert" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Es gibt bereits ein historisches Kalibrierungsergebnis mit dem gleichen " +"Namen: %s. Nur eines der Ergebnisse mit dem gleichen Namen wird gespeichert. " +"Sind Sie sicher, dass Sie das historische Ergebnis überschreiben möchten?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Dieser Maschinentyp kann nur %d historische Ergebnisse pro Düse speichern. " +"Dieses Ergebnis wird nicht gespeichert." + msgid "Internal Error" msgstr "Interner Fehler" @@ -13941,35 +14928,35 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Sie finden die Details der Dynamischen-Kalibrierung in unserem Wiki.\n" +"Bitte finden Sie die Details zur Flussdynamik-Kalibrierung in unserem Wiki.\n" "\n" -"Normalerweise ist die Kalibrierung nicht erforderlich. Wenn Sie einen Einzel-" -"Farb-/Materialdruck mit der Option \"Flussdynamik-Kalibrierung\" im " -"Druckstartmenü starten, wird der Drucker den alten Weg gehen und das " -"Filament vor dem Druck kalibrieren; Wenn Sie einen Mehrfarben-/Materialdruck " -"starten, verwendet der Drucker den Standard-Kompensationsparameter für das " -"Filament während jedes Filamentwechsels, was in den meisten Fällen zu einem " -"guten Ergebnis führt.\n" +"Normalerweise ist die Kalibrierung nicht erforderlich. Wenn Sie einen Druck " +"mit einer einzigen Farbe/einem einzigen Material starten und die Option " +"\"Flussdynamik-Kalibrierung\" im Druckstartmenü aktiviert ist, folgt der " +"Drucker dem alten Weg, kalibriert das Filament vor dem Druck; Wenn Sie einen " +"Druck mit mehreren Farben/Materialien starten, verwendet der Drucker den " +"Standardkompensationsparameter für das Filament bei jedem Filamentwechsel, " +"was in den meisten Fällen zu einem guten Ergebnis führt.\n" "\n" -"Bitte beachten Sie, dass es einige Fälle gibt, in denen das Kalibrierungs-" -"Ergebnis nicht zuverlässig ist: Verwendung einer Texturplatte zur " -"Kalibrierung; Die Bauplatte hat keine gute Haftung (bitte waschen Sie die " -"Bauplatte oder tragen Sie Klebestift auf!) ... Sie finden mehr in unserem " -"Wiki.\n" +"Bitte beachten Sie, dass es einige Fälle gibt, die die " +"Kalibrierungsergebnisse unzuverlässig machen können, wie z.B. unzureichende " +"Haftung auf dem Druckbett. Eine Verbesserung der Haftung kann durch Waschen " +"des Druckbetts oder Auftragen von Klebstoff erreicht werden. Weitere " +"Informationen zu diesem Thema finden Sie in unserem Wiki.\n" "\n" -"Die Kalibrierungsergebnisse haben in unserem Test etwa 10 Prozent " -"Schwankungen, was dazu führen kann, dass das Ergebnis nicht genau bei jeder " -"Kalibrierung gleich ist. Wir untersuchen immer noch die Ursache, um mit " -"neuen Updates Verbesserungen vorzunehmen." +"Die Kalibrierungsergebnisse haben in unserem Test etwa 10 Prozent Jitter, " +"was dazu führen kann, dass das Ergebnis bei jeder Kalibrierung nicht genau " +"dasselbe ist. Wir untersuchen immer noch die Ursache, um mit neuen Updates " +"Verbesserungen vorzunehmen." msgid "When to use Flow Rate Calibration" msgstr "Wann soll die Flussratenkalibrierung verwendet werden" @@ -14093,28 +15080,26 @@ msgstr "" msgid "Failed" msgstr "Fehlgeschlagen" +msgid "Please enter the name you want to save to printer." +msgstr "" +"Bitte geben Sie den Namen ein, unter dem Sie ihn auf dem Drucker speichern " +"möchten." + +msgid "The name cannot exceed 40 characters." +msgstr "Der Name darf 40 Zeichen nicht überschreiten." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" -"Nur eines der Ergebnisse mit dem gleichen Namen wird gespeichert. Sind Sie " +"Es wird nur eines der Ergebnisse mit demselben Namen gespeichert. Sind Sie " "sicher, dass Sie die anderen Ergebnisse überschreiben möchten?" -#, 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 "" -"Es gibt bereits ein historisches Kalibrierungsergebnis mit dem gleichen " -"Namen: %s. Nur eines der Ergebnisse mit dem gleichen Namen wird gespeichert. " -"Sind Sie sicher, dass Sie das historische Ergebnis überschreiben möchten?" - msgid "Please find the best line on your plate" msgstr "Bitte finden Sie die beste Linie auf Ihrer Platte" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "Bitte finden Sie die Ecke mit perfektem Extrusionsgrad" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Bitte finden Sie die Ecke mit dem perfekten Extrusionsgrad" msgid "Input Value" msgstr "Eingabewert" @@ -14193,12 +15178,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Druckparameter" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Druckbetttyp" @@ -14247,12 +15226,6 @@ msgstr "bis zum k Wert" msgid "Step value" msgstr "Schrittweite" -msgid "0.5" -msgstr "0,5" - -msgid "0.005" -msgstr "0,005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Der Düsendurchmesser wurde aus den Druckereinstellungen synchronisiert" @@ -14260,11 +15233,14 @@ msgid "From Volumetric Speed" msgstr "Vom volumetrischen Speed" msgid "To Volumetric Speed" -msgstr "zum volumetrischen Speed" +msgstr "zur volumetrischen Geschwindigkeit" msgid "Flow Dynamics Calibration Result" msgstr "Flussdynamik-Kalibrierungsergebnis" +msgid "New" +msgstr "Neu" + msgid "No History Result" msgstr "Kein historisches Ergebnis" @@ -14277,9 +15253,23 @@ msgstr "Erneuern der historischen Flussdynamik-Kalibrierungsdatensätze" msgid "Action" msgstr "Aktivität" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"Dieser Maschinentyp kann nur %d historische Ergebnisse pro Düse speichern." + msgid "Edit Flow Dynamics Calibration" msgstr "Ändern der Flussdynamik-Kalibrierung" +msgid "New Flow Dynamic Calibration" +msgstr "Neue Flussdynamik-Kalibrierung" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "Das Filament muss ausgewählt werden." + msgid "Network lookup" msgstr "Netzwerk durchsuchen" @@ -14368,6 +15358,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14465,6 +15458,9 @@ msgstr "" msgid "Upload to storage" msgstr "Hochladen in den Speicher" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" @@ -14680,6 +15676,16 @@ msgstr "" "Sie haben noch keinen Drucker oder keine Voreinstellung ausgewählt. Bitte " "wählen Sie mindestens einen aus." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Der Filamentname %s, den Sie erstellt haben, existiert bereits. \n" +"Wenn Sie mit der Erstellung fortfahren, wird die erstellte Voreinstellung " +"mit ihrem vollständigen Namen angezeigt. Möchten Sie fortfahren?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" "Einige vorhandene Voreinstellungen konnten nicht erstellt werden, wie " @@ -14693,8 +15699,8 @@ msgstr "" "Möchten Sie es überschreiben?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Wir würden die Voreinstellungen als \"Hersteller Typ Seriennummer @Drucker, " @@ -14744,12 +15750,6 @@ msgstr "Rechteck" msgid "Printable Space" msgstr "Druckbarer Raum" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "Hot Bed STL" @@ -14905,7 +15905,7 @@ msgstr "Filament erstellt" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "Bitte gehen Sie zu den Filament-Einstellungen, um Ihre Voreinstellungen zu " @@ -14914,12 +15914,25 @@ msgstr "" "maximale volumetrische Geschwindigkeit einen erheblichen Einfluss auf die " "Druckqualität haben. Bitte stellen Sie sie sorgfältig ein." +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Studio hat festgestellt, dass Ihre Benutzervoreinstellungen-" +"Synchronisierungs-Funktion nicht aktiviert ist, was zu fehlerhaften Filament-" +"Einstellungen auf der Geräteseite führen kann. \n" +"Klicken Sie auf \"Benutzervoreinstellungen synchronisieren\", um die " +"Synchronisierungsfunktion zu aktivieren." + msgid "Printer Setting" msgstr "Druckereinstellung" -msgid "Export Configs" -msgstr "Konfigurationen exportieren" - msgid "Printer config bundle(.orca_printer)" msgstr "Drucker-Konfigurationsbündel (.orca_printer)" @@ -15022,6 +16035,11 @@ msgstr "Bitte wählen Sie mindestens einen Drucker oder ein Filament aus." msgid "Please select a type you want to export" msgstr "Bitte wählen Sie einen Typ aus, den Sie exportieren möchten" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"Es konnte kein temporärer Ordner erstellt werden, bitte versuchen Sie es " +"erneut." + msgid "Edit Filament" msgstr "Filament bearbeiten" @@ -15101,6 +16119,22 @@ msgstr "Zuklappen" msgid "Daily Tips" msgstr "Tägliche Tipps" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "Düse gemerkt: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"Ihr Düsendurchmesser im Profil stimmt nicht mit dem gemerkten " +"Düsendurchmesser überein. Haben Sie Ihre Düse kürzlich gewechselt?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "" +"*Drucken von %s Material mit %s kann zu einer Beschädigung der Düse führen" + msgid "Need select printer" msgstr "Drucker auswählen" @@ -15132,6 +16166,12 @@ msgstr "Sind Sie sicher, dass Sie sich abmelden möchten?" msgid "Refresh Printers" msgstr "Drucker aktualisieren" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15302,6 +16342,270 @@ msgstr "" "Nachrichtentext: \"%1%\"\n" "Fehler: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Es hat eine kleine Schichthöhe und führt zu fast vernachlässigbaren " +"Schichtlinien und hoher Druckqualität. Es ist für die meisten allgemeinen " +"Druckfälle geeignet." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es niedrigere " +"Geschwindigkeiten und Beschleunigungen, und das spärliche Füllmuster ist " +"Gyroid. Daher ergibt sich eine wesentlich höhere Druckqualität, aber eine " +"viel längere Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine etwas größere " +"Schichthöhe und führt zu fast vernachlässigbaren Schichtlinien und einer " +"etwas kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine größere " +"Schichthöhe und führt zu leicht sichtbaren Schichtlinien, aber einer " +"kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu fast unsichtbaren Schichtlinien und einer höheren " +"Druckqualität, aber einer kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es kleinere Schicht-" +"linien, niedrigere Geschwindigkeiten und Beschleunigungen, und das spärliche " +"Füllmuster ist Gyroid. Daher ergibt sich fast unsichtbare Schichtlinien und " +"eine wesentlich höhere Druckqualität, aber eine wesentlich längere Druckzeit." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu minimalen Schichtlinien und einer höheren " +"Druckqualität, aber einer kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es kleinere Schicht-" +"linien, niedrigere Geschwindigkeiten und Beschleunigungen, und das spärliche " +"Füllmuster ist Gyroid. Daher ergibt sich minimale Schichtlinien und eine " +"wesentlich höhere Druckqualität, aber eine wesentlich längere Druckzeit." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Es hat eine allgemeine Schichthöhe und führt zu allgemeinen Schichtlinien " +"und Druckqualität. Es ist für die meisten allgemeinen Druckfälle geeignet." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es mehr Wand-Schleifen " +"und eine höhere spärliche Fülldichte. Daher ergibt sich eine höhere " +"Festigkeit der Drucke, aber mehr Filamentverbrauch und eine längere " +"Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine größere " +"Schichthöhe und führt zu deutlicheren Schichtlinien und einer niedrigeren " +"Druckqualität, aber einer etwas kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine größere " +"Schichthöhe und führt zu deutlicheren Schichtlinien und einer niedrigeren " +"Druckqualität, aber einer kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger deutlichen Schichtlinien und einer höheren " +"Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe, niedrigere Geschwindigkeiten und Beschleunigungen, und das " +"spärliche Füllmuster ist Gyroid. Daher ergibt sich weniger deutliche " +"Schichtlinien und eine wesentlich höhere Druckqualität, aber eine wesentlich " +"längere Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu fast vernachlässigbaren Schichtlinien und einer " +"höheren Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe, niedrigere Geschwindigkeiten und Beschleunigungen, und das " +"spärliche Füllmuster ist Gyroid. Daher ergibt sich fast vernachlässigbare " +"Schichtlinien und eine wesentlich höhere Druckqualität, aber eine wesentlich " +"längere Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu fast vernachlässigbaren Schichtlinien und einer " +"längeren Druckzeit." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Es hat eine große Schichthöhe und führt zu deutlichen Schichtlinien und " +"normaler Druckqualität und Druckzeit." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es mehr Wand-Schleifen " +"und eine höhere spärliche Fülldichte. Daher ergibt sich eine höhere " +"Festigkeit der Drucke, aber mehr Filamentverbrauch und eine längere " +"Druckzeit." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine größere " +"Schichthöhe und führt zu deutlicheren Schichtlinien und einer niedrigeren " +"Druckqualität, aber einer kürzeren Druckzeit in einigen Druckfällen." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine größere " +"Schichthöhe und führt zu wesentlich deutlicheren Schichtlinien und einer " +"viel niedrigeren Druckqualität, aber einer kürzeren Druckzeit in einigen " +"Druckfällen." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger deutlichen Schichtlinien und einer leicht " +"höheren Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger deutlichen Schichtlinien und einer höheren " +"Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Es hat eine sehr große Schichthöhe und führt zu sehr deutlichen " +"Schichtlinien, niedriger Druckqualität und allgemeiner Druckzeit." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine größere " +"Schichthöhe und führt zu sehr deutlichen Schichtlinien und einer viel " +"niedrigeren Druckqualität, aber einer kürzeren Druckzeit in einigen " +"Druckfällen." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine viel größere " +"Schichthöhe und führt zu extrem deutlichen Schichtlinien und einer viel " +"niedrigeren Druckqualität, aber einer wesentlich kürzeren Druckzeit in " +"einigen Druckfällen." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine etwas kleinere " +"Schichthöhe und führt zu etwas weniger, aber immer noch deutlichen " +"Schichtlinien und einer leicht höheren Druckqualität, aber einer längeren " +"Druckzeit in einigen Druckfällen." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger, aber immer noch deutlichen Schichtlinien " +"und einer leicht höheren Druckqualität, aber einer längeren Druckzeit in " +"einigen Druckfällen." + msgid "Connected to Obico successfully!" msgstr "Erfolgreich mit Obico verbunden!" @@ -15314,21 +16618,17 @@ msgstr "Erfolgreich mit SimplyPrint verbunden!" msgid "Could not connect to SimplyPrint" msgstr "Konnte keine Verbindung zu SimplyPrint herstellen" +msgid "Internel error" +msgstr "" + +msgid "Unknown error" +msgstr "Unbekannter Fehler" + msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" "SimplyPrint-Konto nicht verknüpft. Gehen Sie zu den Verbindungsoptionen, um " "es einzurichten." -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." -msgstr "" -"Die Dateigröße überschreitet das 100-MB-Upload-Limit. Bitte laden Sie Ihre " -"Datei über das Panel hoch." - -msgid "Unknown error" -msgstr "Unbekannter Fehler" - msgid "Connection to Flashforge works correctly." msgstr "Verbindung zu Flashforge funktioniert korrekt." @@ -15744,6 +17044,440 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "Die Dateigröße überschreitet das 100-MB-Upload-Limit. Bitte laden Sie " +#~ "Ihre Datei über das Panel hoch." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.3, N in 0.6~2.0)" + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "Wählen die verbundenen Drucker (0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "Wählen die verbundenen Drucker (%d/6)" + +#~ msgid "PrintingPause" +#~ msgstr "Druckpause" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "" +#~ "Die lokale Verbindung des Druckers ist fehlgeschlagen. Bitte versuchen " +#~ "Sie es erneut." + +#~ 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 "" +#~ "Sie finden die Details der Dynamischen-Kalibrierung in unserem Wiki.\n" +#~ "\n" +#~ "Normalerweise ist die Kalibrierung nicht erforderlich. Wenn Sie einen " +#~ "Einzel-Farb-/Materialdruck mit der Option \"Flussdynamik-Kalibrierung\" " +#~ "im Druckstartmenü starten, wird der Drucker den alten Weg gehen und das " +#~ "Filament vor dem Druck kalibrieren; Wenn Sie einen Mehrfarben-/" +#~ "Materialdruck starten, verwendet der Drucker den Standard-" +#~ "Kompensationsparameter für das Filament während jedes Filamentwechsels, " +#~ "was in den meisten Fällen zu einem guten Ergebnis führt.\n" +#~ "\n" +#~ "Bitte beachten Sie, dass es einige Fälle gibt, in denen das Kalibrierungs-" +#~ "Ergebnis nicht zuverlässig ist: Verwendung einer Texturplatte zur " +#~ "Kalibrierung; Die Bauplatte hat keine gute Haftung (bitte waschen Sie die " +#~ "Bauplatte oder tragen Sie Klebestift auf!) ... Sie finden mehr in unserem " +#~ "Wiki.\n" +#~ "\n" +#~ "Die Kalibrierungsergebnisse haben in unserem Test etwa 10 Prozent " +#~ "Schwankungen, was dazu führen kann, dass das Ergebnis nicht genau bei " +#~ "jeder Kalibrierung gleich ist. Wir untersuchen immer noch die Ursache, um " +#~ "mit neuen Updates Verbesserungen vorzunehmen." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Nur eines der Ergebnisse mit dem gleichen Namen wird gespeichert. Sind " +#~ "Sie sicher, dass Sie die anderen Ergebnisse überschreiben möchten?" + +#, 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 "" +#~ "Es gibt bereits ein historisches Kalibrierungsergebnis mit dem gleichen " +#~ "Namen: %s. Nur eines der Ergebnisse mit dem gleichen Namen wird " +#~ "gespeichert. Sind Sie sicher, dass Sie das historische Ergebnis " +#~ "überschreiben möchten?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Bitte finden Sie die Ecke mit perfektem Extrusionsgrad" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " +#~ "PrusaSlicer links from Printable.com" +#~ msgstr "" +#~ "Verknüpfen Sie OrcaSlicer mit prusaslicer://-Links, damit Orca " +#~ "PrusaSlicer-Links von Printable.com öffnen kann." + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Reihenfolge der Wand/Füllung. Wenn das Kontrollkästchen nicht aktiviert " +#~ "ist, werden die Wände zuerst gedruckt, was in den meisten Fällen am " +#~ "besten funktioniert.\n" +#~ "\n" +#~ "Das Drucken der Wände zuerst kann bei extremen Überhängen hilfreich sein, " +#~ "da die Wände die benachbarte Füllung haben, an der sie haften können. Die " +#~ "Füllung drückt jedoch die gedruckten Wände leicht heraus, wo sie an ihnen " +#~ "befestigt ist, was zu einer schlechteren Oberflächenqualität führt. Es " +#~ "kann auch dazu führen, dass die Füllung durch die äußeren Oberflächen des " +#~ "Teils schimmert." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Maximum print speed when purging" +#~ msgstr "Maximale Druckgeschwindigkeit beim Reinigen" + +#~ msgid "" +#~ "The maximum print speed when purging in the wipe tower. If the sparse " +#~ "infill speed or calculated speed from the filament max volumetric speed " +#~ "is lower, the lowest speed will be used instead.\n" +#~ "Increasing this speed may affect the tower's stability, as purging can be " +#~ "performed over sparse layers. Before increasing this parameter beyond the " +#~ "default of 90mm/sec, make sure your printer can reliably bridge at the " +#~ "increased speeds." +#~ msgstr "" +#~ "Die maximale Druckgeschwindigkeit beim Reinigen im Reinigungsturm. Wenn " +#~ "die Geschwindigkeit des dünnen Infill oder die berechnete Geschwindigkeit " +#~ "aus der maximalen Volumengeschwindigkeit des Filaments niedriger ist, " +#~ "wird die niedrigste Geschwindigkeit verwendet.\n" +#~ "Das Erhöhen dieser Geschwindigkeit kann die Stabilität des Turms " +#~ "beeinträchtigen, da das Reinigen über dünnen Schichten erfolgen kann. " +#~ "Bevor Sie diesen Parameter über den Standardwert von 90 mm/s erhöhen, " +#~ "stellen Sie sicher, dass Ihr Drucker die erhöhten Geschwindigkeiten " +#~ "zuverlässig überbrücken kann." + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer basiert auf BambuStudio von Bambulab, welches von PrusaSlicer " +#~ "von Prusa Research stammt. PrusaSlicer wiederum basiert auf Slic3r von " +#~ "Alessandro Ranellucci und der RepRap-Community." + +#~ msgid "Export &Configs" +#~ msgstr "Exportieren &Konfigurieren" + +#~ msgid "" +#~ "Over 4 systems/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "Mehr als 4 Systeme/Handy verwenden den Remote-Zugriff. Sie können einige " +#~ "schließen und es erneut versuchen." + +#~ msgid "Infill direction" +#~ msgstr "Richtung der Füllung" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Aktivieren Sie dies, um eine G-Code-Datei zu erhalten, die G2 und G3 " +#~ "Befehle enthält. Die Bogentoleranz ist die gleiche wie die Auflösung." + +#~ 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 "" +#~ "Der Bereich der Füllung wird leicht vergrößert, damit er sich mit der " +#~ "Wand überlappt, um eine bessere Haftung zu erreichen. Der Prozentwert " +#~ "bezieht sich auf die Linienbreite der inneren Füllung." + +#~ msgid "Export Configs" +#~ msgstr "Konfigurationen exportieren" + +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Aktivitäten für nicht gespeicherte Änderungen" + +#~ msgid "Preset Value" +#~ msgstr "voreingestellter Wert" + +#~ msgid "Modified Value" +#~ msgstr "geänderter Wert" + +#~ msgid "Transfer Modified Value" +#~ msgstr "geänderten Wert übertragen" + +#~ msgid "Use Preset Value" +#~ msgstr "voreingestellten Wert verwenden" + +#~ msgid "Save Modified Value" +#~ msgstr "geänderten Wert speichern" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie diese geänderten Einstellungen (geänderter Wert) speichern?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie diese geänderten Einstellungen (geänderter Wert) nach dem " +#~ "Wechsel des Profils beibehalten?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Sie haben Ihre Einstellungen zuvor geändert und sind dabei, sie durch " +#~ "neue zu überschreiben." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie Ihre aktuellen geänderten Einstellungen beibehalten oder die " +#~ "voreingestellten Einstellungen verwenden?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie Ihre aktuellen geänderten Einstellungen speichern?" + +#~ msgid "Unload Filament" +#~ msgstr "Entladen" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Wählen Sie einen AMS-Slot und drücken Sie dann \"Laden\" oder \"Entladen" +#~ "\", um automatisch Filament zu laden oder zu entladen." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Mainboard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0,5" + +#~ msgid "0.005" +#~ msgstr "0,005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Neue Flussdynamik-Kalibrierung" + +#~ msgid "" +#~ "The 3mf file version is in Beta and it is newer than the current " +#~ "OrcaSlicer version." +#~ msgstr "" +#~ "Die 3mf-Dateiversion ist in Beta und neuer als die aktuelle Bambu Studio-" +#~ "Version." + +#~ msgid "active" +#~ msgstr "Aktiv" + +#~ msgid "Jump to layer" +#~ msgstr "Wechsle zu Layer" + +#~ msgid "Cabin humidity" +#~ msgstr "Luftfeuchtigkeit in der Druck-Kammer" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Grün bedeutet, dass die AMS-Luftfeuchtigkeit normal ist, orange bedeutet, " +#~ "dass die Luftfeuchtigkeit hoch ist, und rot bedeutet, dass die " +#~ "Luftfeuchtigkeit zu hoch ist. (Hygrometer: je niedriger, desto besser.)" + +#~ msgid "Desiccant status" +#~ msgstr "Trockenmittelstatus" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "Ein Trockenmittelstatus von weniger als zwei Balken bedeutet, dass das " +#~ "Trockenmittel möglicherweise inaktiv ist. Bitte tauschen Sie das " +#~ "Trockenmittel aus. (Je höher, desto besser.)" + +#~ 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 "" +#~ "Hinweis: Wenn der Deckel geöffnet ist oder die Trockenmittelpackung " +#~ "gewechselt wird, kann es Stunden oder gar eine Nacht dauern, bis die " +#~ "Feuchtigkeit aufgenommen wurde. Niedrige Temperaturen verlangsamen den " +#~ "Prozess ebenfalls. Während dieser Zeit stellt der Indikator die Werte der " +#~ "Kammer möglicherweise nicht genau dar." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Hinweis: Wenn während des Drucks neues Filament eingelegt wird, liest das " +#~ "AMS nicht automatisch die Informationen ein, bis der Druckvorgang " +#~ "abgeschlossen ist." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Erfolgreich G-Code nach %1% exportiert" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Initialisierung fehlgeschlagen (Kein Gerät)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Initialisierung fehlgeschlagen (keine Kamera)!" + +#~ 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 "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Initialisierung fehlgeschlagen (Nicht unterstützt auf der aktuellen " +#~ "Druckerversion)!" + +#~ 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)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "[%d] gestoppt!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Laden fehlgeschlagen [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Keine Dateien [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Laden fehlgeschlagen [%d]" + +#~ 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 "Connection lost. Please retry." +#~ msgstr "Verbindung verloren. Bitte versuchen Sie es erneut." + +#~ msgid "File not exists." +#~ msgstr "Datei existiert nicht." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Eine boolesche Operation kann für Modellnetze nicht ausgeführt werden. Es " +#~ "werden nur positive Teile exportiert." + +#, 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 "" +#~ "Sie haben einige Einstellungen des Profils \"%1%\" geändert.\n" +#~ "Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem " +#~ "Wechsel der Profile beibehalten?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Sie haben einige Profileinstellungen geändert.\n" +#~ "Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem " +#~ "Wechseln der Profile beibehalten?" + +#~ msgid " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "Bitte gehen Sie zu den Filament-Einstellungen, um Ihre Voreinstellungen " +#~ "zu bearbeiten, wenn Sie dies benötigen.\n" +#~ "Bitte beachten Sie, dass die Düsentemperatur, die Heizbetttemperatur und " +#~ "die maximale volumetrische Geschwindigkeit einen erheblichen Einfluss auf " +#~ "die Druckqualität haben. Bitte stellen Sie sie sorgfältig ein." + #~ msgid "Timeout when authenticating with the account server." #~ msgstr "Zeitüberschreitung bei der Authentifizierung mit dem Kontoserver." @@ -15887,8 +17621,8 @@ msgstr "" #~ msgstr "Keine dünnen Schichten (EXPERIMENTELL)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" +#~ "\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "Wir würden die Voreinstellungen als \"Hersteller Typ Seriennummer " diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 7390582025..733bbaae89 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -152,7 +153,7 @@ msgid "Height range" msgstr "Height range" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Enter" msgid "Toggle Wireframe" msgstr "Toggle Wireframe" @@ -167,10 +168,10 @@ msgid "Height Range" msgstr "Height Range" msgid "Vertical" -msgstr "" +msgstr "Vertical" msgid "Horizontal" -msgstr "" +msgstr "Horizontal" msgid "Remove painted color" msgstr "Remove painted color" @@ -254,6 +255,9 @@ msgstr "Reset rotation" msgid "World coordinates" msgstr "World coordinates" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -268,16 +272,16 @@ msgid "uniform scale" msgstr "Uniform scale" msgid "Planar" -msgstr "" +msgstr "Planar" msgid "Dovetail" -msgstr "" +msgstr "Dovetail" msgid "Auto" msgstr "Auto" msgid "Manual" -msgstr "" +msgstr "Manual" msgid "Plug" msgstr "Plug" @@ -286,7 +290,7 @@ msgid "Dowel" msgstr "Dowel" msgid "Snap" -msgstr "" +msgstr "Snap" msgid "Prism" msgstr "" @@ -301,7 +305,7 @@ msgid "Hexagon" msgstr "Hexagon" msgid "Keep orientation" -msgstr "" +msgstr "Keep orientation" msgid "Place on cut" msgstr "Place on cut" @@ -325,19 +329,19 @@ msgstr "Shape" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Depth" msgid "Groove" -msgstr "" +msgstr "Groove" msgid "Width" msgstr "Width" msgid "Flap Angle" -msgstr "" +msgstr "Flap Angle" msgid "Groove Angle" -msgstr "" +msgstr "Groove Angle" msgid "Part" msgstr "Part" @@ -360,7 +364,7 @@ msgid "Move cut plane" msgstr "" msgid "Mode" -msgstr "" +msgstr "Mode" msgid "Change cut mode" msgstr "" @@ -408,7 +412,7 @@ msgid "Remove connectors" msgstr "Remove connectors" msgid "Bulge" -msgstr "" +msgstr "Bulge" msgid "Bulge proportion related to radius" msgstr "" @@ -517,7 +521,7 @@ msgid "Cut by Plane" msgstr "" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgstr "Non-manifold edges be caused by cut tool: do you want to fix now?" msgid "Repairing model object" msgstr "Repairing model object" @@ -615,13 +619,13 @@ msgid "Remove selection" msgstr "Remove selection" msgid "Entering Seam painting" -msgstr "" +msgstr "Entering seam painting" msgid "Leaving Seam painting" -msgstr "" +msgstr "Leaving Seam Painting" msgid "Paint-on seam editing" -msgstr "" +msgstr "Paint-on seam editing" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -760,7 +764,7 @@ msgstr "" msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "Cut" msgid "Click to change part type into negative volume." msgstr "" @@ -902,19 +906,19 @@ msgstr "" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "Left" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "Center" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "Right" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "Top" msgctxt "Alignment" msgid "Middle" @@ -922,7 +926,7 @@ msgstr "" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "Bottom" msgid "Revert alignment." msgstr "" @@ -1234,43 +1238,43 @@ msgid "SVG file does NOT contain a single path to be embossed (%1%)." msgstr "" msgid "Vertex" -msgstr "" +msgstr "Vertex" msgid "Edge" -msgstr "" +msgstr "Edge" msgid "Plane" -msgstr "" +msgstr "Plane" msgid "Point on edge" -msgstr "" +msgstr "Point on edge" msgid "Point on circle" -msgstr "" +msgstr "Point on circle" msgid "Point on plane" -msgstr "" +msgstr "Point on plane" msgid "Center of edge" -msgstr "" +msgstr "Center of edge" msgid "Center of circle" -msgstr "" +msgstr "Center of circle" msgid "ShiftLeft mouse button" msgstr "" msgid "Select feature" -msgstr "" +msgstr "Select feature" msgid "Select point" -msgstr "" +msgstr "Select point" msgid "Delete" msgstr "Delete" msgid "Restart selection" -msgstr "" +msgstr "Restart selection" msgid "Esc" msgstr "Esc" @@ -1279,14 +1283,14 @@ msgid "Unselect" msgstr "" msgid "Measure" -msgstr "" +msgstr "Measure" msgid "Edit to scale" -msgstr "" +msgstr "Edit to scale" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "Scale" msgid "None" msgstr "None" @@ -1298,22 +1302,22 @@ msgid "Length" msgstr "Length" msgid "Selection" -msgstr "" +msgstr "Selection" msgid "Copy to clipboard" msgstr "Copy to clipboard" msgid "Perpendicular distance" -msgstr "" +msgstr "Perpendicular distance" msgid "Distance" -msgstr "" +msgstr "Distance" msgid "Direct distance" -msgstr "" +msgstr "Direct distance" msgid "Distance XYZ" -msgstr "" +msgstr "Distance XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1353,9 +1357,6 @@ msgid "" msgstr "" "The configuration file “%1%” was loaded, but some values were not recognized." -msgid "V" -msgstr "V" - 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." @@ -1448,11 +1449,14 @@ msgid "Choose one file (3mf):" msgstr "Choose one file (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" -msgstr "" +msgstr "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" 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 ZIP file" +msgstr "" + msgid "Choose one file (gcode/3mf):" msgstr "" @@ -1489,9 +1493,11 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"The number of user presets cached in the cloud has exceeded the upper limit, " +"newly created user presets can only be used locally." msgid "Sync user presets" -msgstr "" +msgstr "Sync user presets" msgid "Loading user preset" msgstr "Loading user preset" @@ -1520,6 +1526,11 @@ msgstr "Ongoing uploads" msgid "Select a G-code file:" msgstr "Select a G-code file:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" + msgid "Import File" msgstr "Import File" @@ -1654,16 +1665,16 @@ msgid "Cone" msgstr "Cone" msgid "Disc" -msgstr "" +msgstr "Disc" msgid "Torus" -msgstr "" +msgstr "Torus" msgid "Orca Cube" msgstr "" msgid "3DBenchy" -msgstr "" +msgstr "3DBenchy" msgid "Autodesk FDM Test" msgstr "" @@ -1716,10 +1727,10 @@ msgid "Fix model" msgstr "Fix Model" msgid "Export as one STL" -msgstr "" +msgstr "Export as one STL" msgid "Export as STLs" -msgstr "" +msgstr "Export as STLs" msgid "Reload from disk" msgstr "Reload from disk" @@ -1746,8 +1757,8 @@ msgstr "Default" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "active" +msgid "current" +msgstr "current" msgid "Scale to build volume" msgstr "Scale to build volume" @@ -1792,10 +1803,10 @@ msgid "Assemble the selected objects to an object with single part" msgstr "Assemble the selected objects into an object with single part" msgid "Mesh boolean" -msgstr "" +msgstr "Mesh boolean" msgid "Mesh boolean operations including union and subtraction" -msgstr "" +msgstr "Mesh boolean operations including union and subtraction" msgid "Along X axis" msgstr "Along X Axis" @@ -1839,6 +1850,9 @@ msgstr "Add Primitive" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "Add Models" + msgid "Show Labels" msgstr "Show Labels" @@ -1890,6 +1904,12 @@ msgstr "Arrange" msgid "arrange current plate" msgstr "Arrange current plate" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Auto Rotate" @@ -1923,9 +1943,6 @@ msgstr "Change Filament" msgid "Set Filament for selected items" msgstr "Set Filament for selected items" -msgid "current" -msgstr "current" - msgid "Unlock" msgstr "Unlock" @@ -1933,7 +1950,7 @@ msgid "Lock" msgstr "Lock" msgid "Edit Plate Name" -msgstr "" +msgstr "Edit Plate Name" msgid "Name" msgstr "Name" @@ -1993,7 +2010,7 @@ msgid "Error!" msgstr "Error!" msgid "Failed to get the model data in the current file." -msgstr "" +msgstr "Failed to get the model data in the current file." msgid "Generic" msgstr "Generic" @@ -2232,7 +2249,7 @@ msgid "Pause" msgstr "Pause" msgid "Template" -msgstr "" +msgstr "Template" msgid "Custom" msgstr "Custom" @@ -2255,9 +2272,6 @@ msgstr "Enter Custom G-code used on current layer:" msgid "Jump to Layer" msgstr "Jump to layer" -msgid "Jump to layer" -msgstr "Jump to layer" - msgid "Please enter the layer number" msgstr "Please enter the layer number." @@ -2286,7 +2300,7 @@ msgid "Change filament at the beginning of this layer." msgstr "Change filament at the beginning of this layer." msgid "Delete Pause" -msgstr "" +msgstr "Delete Pause" msgid "Delete Custom Template" msgstr "Delete Custom Template" @@ -2304,7 +2318,7 @@ msgid "No printer" msgstr "No printer" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "Failed to connect to the server" @@ -2327,8 +2341,8 @@ 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 "Please check the network connection of the printer and Orca." +msgstr "Please check the network connection of the printer and Orca." msgid "Connecting..." msgstr "Connecting..." @@ -2337,7 +2351,7 @@ msgid "?" msgstr "?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "Empty" @@ -2346,15 +2360,15 @@ msgid "AMS" msgstr "AMS" msgid "Auto Refill" -msgstr "" +msgstr "Auto Refill" msgid "AMS not connected" msgstr "AMS not connected" -msgid "Load Filament" +msgid "Load" msgstr "Load" -msgid "Unload Filament" +msgid "Unload" msgstr "Unload" msgid "Ext Spool" @@ -2372,8 +2386,8 @@ msgstr "Retry" msgid "Calibrating AMS..." msgstr "Calibrating AMS..." -msgid "A problem occured during calibration. Click to view the solution." -msgstr "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." +msgstr "A problem occurred during calibration. Click to view the solution." msgid "Calibrate again" msgstr "Calibrate again" @@ -2382,7 +2396,7 @@ msgid "Cancel calibration" msgstr "Cancel calibration" msgid "Idling..." -msgstr "" +msgstr "Idling..." msgid "Heat the nozzle" msgstr "Heat the nozzle" @@ -2400,23 +2414,23 @@ msgid "Purge old filament" msgstr "Purge old filament" msgid "Feed Filament" -msgstr "" +msgstr "Feed Filament" msgid "Confirm extruded" -msgstr "" +msgstr "Confirm extruded" msgid "Check filament location" -msgstr "" +msgstr "Check filament location" msgid "Grab new filament" msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Choose an AMS slot then press \"Load\" or \"Unload\" to automatically load " -"or unload filament." +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filament." msgid "Edit" msgstr "Edit" @@ -2495,7 +2509,7 @@ msgid "Orienting canceled." msgstr "" msgid "Filling" -msgstr "" +msgstr "Filling" msgid "Bed filling canceled." msgstr "Bed filling canceled." @@ -2579,7 +2593,7 @@ msgid "Sending print job through cloud service" msgstr "Sending print job through cloud service" msgid "Print task sending times out." -msgstr "" +msgstr "Print task sending times out." msgid "Service Unavailable" msgstr "Service Unavailable" @@ -2596,7 +2610,7 @@ 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 "" +msgstr "Successfully sent. Will automatically jump to the next page in %ss" msgid "An SD card needs to be inserted before printing via LAN." msgstr "A MicroSD card needs to be inserted before printing via LAN." @@ -2679,10 +2693,7 @@ msgstr "Orca Slicer 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2757,10 +2768,10 @@ msgid "Setting AMS slot information while printing is not supported" msgstr "Setting AMS slot information while printing is not supported" msgid "Factors of Flow Dynamics Calibration" -msgstr "" +msgstr "Factors of Flow Dynamics Calibration" msgid "PA Profile" -msgstr "" +msgstr "PA Profile" msgid "Factor K" msgstr "Factor K" @@ -2777,10 +2788,12 @@ 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.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2886,36 +2899,19 @@ msgstr "Disable AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Print with filament on external spool" -msgid "Cabin humidity" -msgstr "Cabin humidity" +msgid "Current Cabin humidity" +msgstr "Current Cabin humidity" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Green means that AMS humidity is normal, orange means that humidity is high, " -"and red means that humidity is too high. (Hygrometer: the lower, the better.)" - -msgid "Desiccant status" -msgstr "Desiccant status" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant. (The higher, the better.)" - -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 "" -"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." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases: when the lid is open or the " +"desiccant pack is changed. It takes a few hours to absorb the moisture, and " +"low temperatures also slow down the process." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2947,16 +2943,19 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" +"When the current material run out, the printer will continue to print in the " +"following order." msgid "Group" msgstr "Group" msgid "The printer does not currently support auto refill." -msgstr "" +msgstr "The printer does not currently support auto refill." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" +"AMS filament backup is not enabled; please enable it in the AMS settings." msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -2964,6 +2963,16 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"If there are two identical filaments in an AMS, AMS filament backup will be " +"enabled. \n" +"(This currently supports automatic supply of consumables with the same " +"brand, material type, and color)" + +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" msgid "AMS Settings" msgstr "AMS Settings" @@ -2979,11 +2988,11 @@ msgstr "" "new Bambu Lab filament spool. This takes about 20 seconds." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a 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." +"Note: if a new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3035,6 +3044,16 @@ msgstr "" "AMS will continue to another spool with the same filament properties " "automatically when current filament runs out." +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "File" @@ -3108,6 +3127,51 @@ msgstr "Floating reserved operand" msgid "Stack overflow" msgstr "Stack overflow" +msgid "Running post-processing scripts" +msgstr "Running post-processing scripts" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Unknown error with G-code export" @@ -3121,13 +3185,6 @@ msgstr "" "Error message: %1%.\n" "Source file %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Success! G-code exported to %1%" - -msgid "Running post-processing scripts" -msgstr "Running post-processing scripts" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Copying of the temporary G-code to the output G-code failed." @@ -3135,6 +3192,225 @@ msgstr "Copying of the temporary G-code to the output G-code failed." msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgid "Device" +msgstr "Device" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "View" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "Device Name" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Device Status" +msgstr "Device Status" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Add" + +msgid "Idle" +msgstr "Idle" + +msgid "Printing" +msgstr "Printing" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Prepare" + +msgid "Slicing" +msgstr "Slicing" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "Sending" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Resume" + +msgid "Stop" +msgstr "Stop" + +msgid "Task Status" +msgstr "Task Status" + +msgid "Sent Time" +msgstr "Sent Time" + +msgid "There are no tasks to be sent!" +msgstr "There are no tasks to be sent!" + +msgid "No historical tasks!" +msgstr "No historical tasks!" + +msgid "Loading..." +msgstr "Loading..." + +msgid "No AMS" +msgstr "No AMS" + +msgid "Send to Multi-device" +msgstr "Send to Multi-device" + +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 "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "Use External Spool" + +msgid "Use AMS" +msgstr "Use AMS" + +msgid "Select Printers" +msgstr "Select Printers" + +msgid "Ams Status" +msgstr "AMS Status" + +msgid "Printing Options" +msgstr "Printing Options" + +msgid "Bed Leveling" +msgstr "Bed leveling" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "Send Options" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "Send" + +msgid "Name is invalid;" +msgstr "Name is invalid;" + +msgid "illegal characters:" +msgstr "Illegal characters:" + +msgid "illegal suffix:" +msgstr "Illegal suffix:" + +msgid "The name is not allowed to be empty." +msgstr "The name field is not allowed to be empty." + +msgid "The name is not allowed to start with space character." +msgstr "The name is not allowed to start with a space." + +msgid "The name is not allowed to end with space character." +msgstr "The name is not allowed to end with a space." + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + msgid "Origin" msgstr "Origin" @@ -3205,6 +3481,23 @@ msgstr "Choose an STL file to import bed model from:" msgid "Bed Shape" msgstr "Bed Shape" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" + +msgid "Please check.\n" +msgstr "Please check.\n" + 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" @@ -3236,6 +3529,9 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"Current chamber temperature is higher than the material's safe temperature; " +"this may result in material softening and nozzle clogs.The maximum safe " +"temperature for the material is %d" msgid "" "Too small layer height.\n" @@ -3287,25 +3583,6 @@ msgstr "" "\n" "The value will be reset to 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 "" -"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 " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" -"Change these settings automatically? \n" -"Yes - Change these settings and enable spiral/vase mode automatically\n" -"No - Cancel enabling spiral mode" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3365,6 +3642,25 @@ msgid "" "Reset to 0." msgstr "" +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 "" +"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 " But machines with I3 structure will not generate timelapse videos." +msgstr " But machines with I3 structure will not generate timelapse videos." + +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 "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral/vase mode automatically\n" +"No - Cancel enabling spiral mode" + msgid "Auto bed leveling" msgstr "Auto bed leveling" @@ -3429,58 +3725,46 @@ msgid "Paused due to heat bed temperature malfunction" msgstr "Paused due to heat bed temperature malfunction" msgid "Filament unloading" -msgstr "" +msgstr "Filament unloading" msgid "Skip step pause" -msgstr "" +msgstr "Skip step pause" msgid "Filament loading" -msgstr "" +msgstr "Filament loading" msgid "Motor noise calibration" -msgstr "" +msgstr "Motor noise calibration" msgid "Paused due to AMS lost" -msgstr "" +msgstr "Paused due to AMS lost" msgid "Paused due to low speed of the heat break fan" -msgstr "" +msgstr "Paused due to low speed of the heat break fan" msgid "Paused due to chamber temperature control error" -msgstr "" +msgstr "Paused due to chamber temperature control error" msgid "Cooling chamber" -msgstr "" +msgstr "Cooling chamber" msgid "Paused by the Gcode inserted by user" -msgstr "" +msgstr "Paused by the Gcode inserted by user" msgid "Motor noise showoff" -msgstr "" +msgstr "Motor noise showoff" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Nozzle filament covered detected pause" msgid "Cutter error pause" -msgstr "" +msgstr "Cutter error pause" msgid "First layer error pause" -msgstr "" +msgstr "First layer error pause" msgid "Nozzle clog pause" -msgstr "" - -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" +msgstr "Nozzle clog pause" msgid "Unknown" msgstr "Unknown" @@ -3511,18 +3795,27 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃. In order to avoid extruder clogging, low temperature filament (PLA/PETG/" +"TPU) is not allowed to be loaded." msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"Low temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order " +"to avoid extruder clogging, it is not allowed to set the chamber temperature " +"above 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated, and the target chamber temperature will " +"automatically be set to 0℃." msgid "Failed to start printing job" msgstr "Failed to start print job" @@ -3530,34 +3823,39 @@ msgstr "Failed to start print job" msgid "" "This calibration does not support the currently selected nozzle diameter" msgstr "" +"This calibration does not support the currently selected nozzle diameter" msgid "Current flowrate cali param is invalid" -msgstr "" +msgstr "Current flowrate cali param is invalid" msgid "Selected diameter and machine diameter do not match" -msgstr "" +msgstr "Selected diameter and machine diameter do not match" msgid "Failed to generate cali gcode" -msgstr "" +msgstr "Failed to generate cali gcode" msgid "Calibration error" -msgstr "" +msgstr "Calibration error" msgid "TPU is not supported by AMS." -msgstr "" +msgstr "TPU is not supported by AMS." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -msgstr "" +msgstr "Bambu PET-CF/PA6-CF is not supported by AMS." msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." 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 filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." msgid "default" msgstr "default" @@ -3627,9 +3925,6 @@ msgstr "Printer settings" msgid "parameter name" msgstr "parameter name" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s can’t be a percentage" @@ -3641,6 +3936,10 @@ msgstr "Value %s is out of range, continue?" msgid "Parameter validation" msgstr "Parameter validation" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Value %s is out of range. The valid range is from %d to %d." + msgid "Value is out of range." msgstr "Value is out of range." @@ -3654,6 +3953,18 @@ msgstr "" "YES for %s%%, \n" "NO for %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" + +msgid "Input value is out of range" +msgstr "" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Invalid format. Expected vector format: \"%1%\"" @@ -3721,12 +4032,12 @@ msgstr "Display" msgid "Flushed" msgstr "Flushed" +msgid "Tower" +msgstr "Tower" + msgid "Total" msgstr "Total" -msgid "Tower" -msgstr "" - msgid "Total Estimation" msgstr "Total estimation" @@ -3734,7 +4045,7 @@ msgid "Total time" msgstr "Total time" msgid "Total cost" -msgstr "" +msgstr "Total cost" msgid "up to" msgstr "up to" @@ -3829,6 +4140,12 @@ msgstr "Time Estimation" msgid "Normal mode" msgstr "Normal mode" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "Prepare time" @@ -3922,6 +4239,9 @@ msgstr "Arrange options" msgid "Spacing" msgstr "Spacing" +msgid "0 means auto spacing." +msgstr "0 means auto spacing." + msgid "Auto rotate for arrangement" msgstr "Auto rotate for arrangement" @@ -3932,10 +4252,7 @@ msgid "Avoid extrusion calibration region" msgstr "Avoid extrusion calibration region" msgid "Align to Y axis" -msgstr "" - -msgid "Add" -msgstr "Add" +msgstr "Align to Y axis" msgid "Add plate" msgstr "Add Plate" @@ -4001,7 +4318,7 @@ msgid "An object is layed over the boundary of plate." msgstr "An object is laid over the boundary of the plate." msgid "A G-code path goes beyond the max print height." -msgstr "" +msgstr "A G-code path goes beyond the max print height." msgid "A G-code path goes beyond the boundary of plate." msgstr "A G-code path goes beyond plate boundaries." @@ -4029,10 +4346,10 @@ msgid "Bed leveling" msgstr "Bed leveling" msgid "Vibration compensation" -msgstr "" +msgstr "Vibration compensation" msgid "Motor noise cancellation" -msgstr "" +msgstr "Motor noise cancellation" msgid "Calibration program" msgstr "Calibration program" @@ -4059,7 +4376,7 @@ msgid "Calibrating" msgstr "Calibrating" msgid "No step selected" -msgstr "" +msgstr "No step selected" msgid "Auto-record Monitoring" msgstr "Auto-record Monitoring" @@ -4067,6 +4384,9 @@ msgstr "Auto-record Monitoring" msgid "Go Live" msgstr "Go Live" +msgid "Liveview Retry" +msgstr "Liveview Retry" + msgid "Resolution" msgstr "Resolution" @@ -4119,14 +4439,11 @@ msgstr "Closing Application while some presets are modified." msgid "Logging" msgstr "Logging" -msgid "Prepare" -msgstr "Prepare" - msgid "Preview" msgstr "Preview" -msgid "Device" -msgstr "Device" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "Project" @@ -4152,9 +4469,6 @@ msgstr "Slice all" msgid "Export G-code file" msgstr "Export G-code file" -msgid "Send" -msgstr "Send" - msgid "Export plate sliced file" msgstr "Export plate sliced file" @@ -4275,6 +4589,12 @@ msgstr "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Load a model" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Import Configs" @@ -4285,10 +4605,10 @@ msgid "Import" msgstr "Import" msgid "Export all objects as one STL" -msgstr "" +msgstr "Export all objects as one STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "Export all objects as STLs" msgid "Export Generic 3MF" msgstr "Export Generic 3MF" @@ -4308,8 +4628,8 @@ msgstr "Export G-code" msgid "Export current plate as G-code" msgstr "Export current plate as G-code" -msgid "Export &Configs" -msgstr "Export &Configs" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Export current configuration to files" @@ -4410,56 +4730,53 @@ msgstr "Show object overhang highlight in 3D scene" msgid "Preferences" msgstr "Preferences" -msgid "View" -msgstr "View" - msgid "Help" msgstr "Help" msgid "Temperature Calibration" -msgstr "" +msgstr "Temperature Calibration" msgid "Pass 1" -msgstr "" +msgstr "Pass 1" msgid "Flow rate test - Pass 1" -msgstr "" +msgstr "Flow rate test - Pass 1" msgid "Pass 2" -msgstr "" +msgstr "Pass 2" msgid "Flow rate test - Pass 2" -msgstr "" +msgstr "Flow rate test - Pass 2" msgid "Flow rate" -msgstr "" +msgstr "Flow rate" msgid "Pressure advance" -msgstr "" +msgstr "Pressure advance" msgid "Retraction test" -msgstr "" +msgstr "Retraction test" msgid "Orca Tolerance Test" -msgstr "" +msgstr "Orca Tolerance Test" msgid "Max flowrate" -msgstr "" +msgstr "Max flowrate" msgid "VFA" -msgstr "" +msgstr "VFA" msgid "More..." -msgstr "" +msgstr "More..." msgid "Tutorial" -msgstr "" +msgstr "Tutorial" msgid "Calibration help" -msgstr "" +msgstr "Calibration help" msgid "More calibrations" -msgstr "" +msgstr "More calibrations" msgid "&Open G-code" msgstr "&Open G-code" @@ -4479,11 +4796,11 @@ msgstr "Export &Toolpaths as OBJ" msgid "Export toolpaths as OBJ" msgstr "Export toolpaths as OBJ" -msgid "Open &Studio" -msgstr "Open &Studio" +msgid "Open &Slicer" +msgstr "Open &Slicer" -msgid "Open Studio" -msgstr "Open Studio" +msgid "Open Slicer" +msgstr "Open Slicer" msgid "&Quit" msgstr "&Quit" @@ -4574,40 +4891,54 @@ msgstr "" msgid "Synchronization" msgstr "Synchronization" -msgid "Initialize failed (No Device)!" -msgstr "Initialization failed (No Device)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "The device cannot handle more conversations. Please retry later." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "Player is malfunctioning. Please reinstall the system player." -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialization failed (No Camera Device)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "The player is not loaded; please click the \"play\" button to retry." -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 "Please confirm if the printer is connected." +msgstr "Please confirm if the printer is connected." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" +"The printer is currently busy downloading. Please try again after it " +"finishes." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" +msgid "Printer camera is malfunctioning." +msgstr "Printer camera is malfunctioning." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialization failed (Missing LAN IP of printer)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "A problem occurred. Please update the printer firmware and try again." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." + +msgid "Please enter the IP of printer to connect." +msgstr "Please enter the IP of the printer to connect." msgid "Initializing..." msgstr "Initializing..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Initialization failed (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Connection Failed. Please check the network and try again" -msgid "Network unreachable" -msgstr "Network unreachable" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Please check the network and try again. You can restart or update the " +"printer if the issue persists." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Stopped [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "The printer has been logged out and cannot connect." msgid "Stopped." msgstr "Stopped." @@ -4638,19 +4969,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Virtual camera initialize failed (%s)!" +msgid "Network unreachable" +msgstr "Network unreachable" + msgid "Information" msgstr "Information" msgid "Playing..." msgstr "Playing..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Loading failed [%d]!" - -msgid "Loading..." -msgstr "Loading..." - msgid "Year" msgstr "Year" @@ -4669,9 +4996,6 @@ msgstr "Group files by month, recent first." msgid "Show all files, recent first." msgstr "Show all files, recent first." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Switch to timelapse files." @@ -4699,6 +5023,12 @@ msgstr "Select" msgid "Batch manage files." msgstr "Batch manage files." +msgid "Refresh" +msgstr "Refresh" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "No printers." @@ -4709,13 +5039,34 @@ msgstr "Connection failed [%d]!" msgid "Loading file list..." msgstr "Loading file list..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "No files [%d]" +msgid "No files" +msgstr "No files" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Load failed [%d]" +msgid "Initialize failed (%s)!" +msgstr "Initialization failed (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4737,11 +5088,11 @@ 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 fetch model information from printer." +msgstr "Failed to fetch model information from printer." -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "Failed to parse model information." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4752,6 +5103,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "File '%s' was lost! Please download it again." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "Download waiting..." @@ -4768,27 +5127,28 @@ msgstr "Download finished" msgid "Downloading %d%%..." msgstr "Downloading %d%%..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." -msgstr "" +msgid "File does not exist." +msgstr "File does not exist." msgid "File checksum error. Please retry." -msgstr "" +msgstr "File checksum error. Please retry." msgid "Not supported on the current printer version." -msgstr "" +msgstr "Not supported on the current printer version." msgid "Storage unavailable, insert SD card." -msgstr "" +msgstr "Storage unavailable, insert Micro SD card." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Error code: %d" msgid "Speed:" msgstr "Speed:" @@ -4832,12 +5192,6 @@ msgstr "" msgid "Printing Progress" msgstr "Printing progress" -msgid "Resume" -msgstr "Resume" - -msgid "Stop" -msgstr "Stop" - msgid "0" msgstr "0" @@ -4851,17 +5205,21 @@ msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." msgstr "" +"You have completed printing the mall model, \n" +"but synchronizing rating information has failed." msgid "How do you like this printing file?" -msgstr "" +msgstr "How do you like this printing file?" msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" +"(The model has already been rated. Your rating will overwrite the previous " +"rating.)" msgid "Rate" -msgstr "" +msgstr "Rate" msgid "Camera" msgstr "Camera" @@ -4878,6 +5236,9 @@ msgstr "" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "Print Options" @@ -4896,9 +5257,6 @@ msgstr "Cham" msgid "Bed" msgstr "Bed" -msgid "Unload" -msgstr "Unload" - msgid "Debug Info" msgstr "Debug Info" @@ -4936,6 +5294,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Please heat the nozzle to above 170 degree before loading or unloading " +"filament." msgid "Still unload" msgstr "Still unload" @@ -4972,64 +5332,67 @@ msgid "Can't start this without SD card." msgstr "Can't start without MicroSD card." msgid "Rate the Print Profile" -msgstr "" +msgstr "Rate the Print Profile" msgid "Comment" -msgstr "" +msgstr "Comment" msgid "Rate this print" -msgstr "" +msgstr "Rate this print" msgid "Add Photo" -msgstr "" +msgstr "Add Photo" msgid "Delete Photo" -msgstr "" +msgstr "Delete Photo" msgid "Submit" -msgstr "" +msgstr "Submit" msgid "Please click on the star first." -msgstr "" +msgstr "Please click on the star first." msgid "InFo" -msgstr "" +msgstr "Info" msgid "Get oss config failed." -msgstr "" +msgstr "Get oss config failed." msgid "Upload Pictrues" -msgstr "" +msgstr "Upload Pictures" msgid "Number of images successfully uploaded" -msgstr "" +msgstr "Number of images successfully uploaded" msgid " upload failed" -msgstr "" +msgstr " upload failed" msgid " upload config prase failed\n" -msgstr "" +msgstr " upload config prase failed\n" msgid " No corresponding storage bucket\n" -msgstr "" +msgstr " No corresponding storage bucket\n" msgid " can not be opened\n" -msgstr "" +msgstr " cannot be opened\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" msgstr "" +"The following issues occurred during the process of uploading images. Do you " +"want to ignore them?\n" +"\n" msgid "info" msgstr "info" msgid "Synchronizing the printing results. Please retry a few seconds later." -msgstr "" +msgstr "Synchronizing the printing results. Please retry a few seconds later." msgid "Upload failed\n" -msgstr "" +msgstr "Upload failed\n" msgid "obtaining instance_id failed\n" msgstr "Obtaining instance_id failed\n" @@ -5039,28 +5402,38 @@ msgid "" "\n" " error code: " msgstr "" +"Your comment result cannot be uploaded due to the following reasons:\n" +"\n" +" error code: " msgid "error message: " -msgstr "" +msgstr "error message: " msgid "" "\n" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"Would you like to redirect to the webpage to give a rating?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" msgstr "" +"Some of your images failed to upload. Would you like to redirect to the " +"webpage for rating?" msgid "You can select up to 16 images." -msgstr "" +msgstr "You can select up to 16 images." msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" +"At least one successful print record of this print profile is required \n" +"to give a positive rating (4 or 5 stars)." msgid "Status" msgstr "Status" @@ -5068,9 +5441,6 @@ msgstr "Status" msgid "Update" msgstr "Update" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Don't show again" @@ -5101,6 +5471,35 @@ msgstr "%s information" msgid "Skip" msgstr "Skip" +msgid "Newer 3mf version" +msgstr "Newer 3mf version" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Download Beta Version" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Current Version: " + +msgid "Latest Version: " +msgstr "Latest Version: " + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "3D Mouse disconnected." @@ -5126,10 +5525,10 @@ msgid "Details" msgstr "Details" msgid "New printer config available." -msgstr "" +msgstr "New printer config available." msgid "Wiki" -msgstr "" +msgstr "Wiki" msgid "Undo integration failed." msgstr "Undo integration failed." @@ -5170,12 +5569,12 @@ msgstr[1] "" msgid "ERROR" msgstr "ERROR" -msgid "CANCELED" -msgstr "CANCELED" - msgid "COMPLETED" msgstr "COMPLETED" +msgid "CANCELED" +msgstr "CANCELED" + msgid "Cancel upload" msgstr "Cancel upload" @@ -5192,10 +5591,10 @@ msgid "Export successfully." msgstr "Exported successfully" msgid "Model file downloaded." -msgstr "" +msgstr "Model file downloaded." msgid "Serious warning:" -msgstr "" +msgstr "Serious warning:" msgid " (Repair)" msgstr " (Repair)" @@ -5282,10 +5681,29 @@ msgid "Auto-recovery from step loss" msgstr "Auto-recover from step loss" msgid "Allow Prompt Sound" -msgstr "" +msgstr "Allow Prompt Sound" msgid "Filament Tangle Detect" -msgstr "" +msgstr "Filament Tangle Detection" + +msgid "Nozzle Clumping Detection" +msgstr "Nozzle Clumping Detection" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Check if the nozzle is clumping by filament or other foreign objects." + +msgid "Nozzle Type" +msgstr "Nozzle Type" + +msgid "Stainless Steel" +msgstr "Stainless Steel" + +msgid "Hardened Steel" +msgstr "Hardened Steel" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" msgid "Global" msgstr "Global" @@ -5376,7 +5794,7 @@ msgid "Set filaments to use" msgstr "Set filaments to use" msgid "Search plate, object and part." -msgstr "" +msgstr "Search plate, object and part." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -5443,6 +5861,9 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"The current heatbed temperature is relatively high. The nozzle may clog when " +"printing this filament in a closed environment. Please open the front door " +"and/or remove the upper glass." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5457,6 +5878,8 @@ msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." msgstr "" +"Enabling traditional timelapse photography may cause surface imperfections. " +"It is recommended to change to smooth mode." msgid "Expand sidebar" msgstr "" @@ -5485,9 +5908,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "You should update your software.\n" -msgid "Newer 3mf version" -msgstr "Newer 3mf version" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5503,26 +5923,30 @@ msgid "Please correct them in the param tabs" msgstr "Please correct them in the Param tabs" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" +msgstr "The 3mf has following modified G-code in filament or printer presets:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"Please confirm that these modified G-codes are safe to prevent any damage to " +"the machine!" msgid "Modified G-codes" -msgstr "" +msgstr "Modified G-code" msgid "The 3mf has following customized filament or printer presets:" -msgstr "" +msgstr "The 3mf has following customized filament or printer presets:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"Please confirm that the G-codes within these presets are safe to prevent any " +"damage to the machine!" msgid "Customized Preset" -msgstr "" +msgstr "Customized Preset" msgid "Name of components inside step file is not UTF8 format!" msgstr "Component name(s) inside step file not in UTF8 format!" @@ -5530,6 +5954,9 @@ msgstr "Component name(s) inside step file not in UTF8 format!" msgid "The name may show garbage characters!" msgstr "Because of unsupported text encoding, garbage characters may appear!" +msgid "Remember my choice." +msgstr "Remember my choice." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "Failed loading file \"%1%\". An invalid configuration was found." @@ -5586,22 +6013,24 @@ msgid "Export STL file:" msgstr "Export STL file:" msgid "Export AMF file:" -msgstr "" +msgstr "Export AMF file:" msgid "Save file as:" msgstr "Save file as" msgid "Export OBJ file:" -msgstr "" +msgstr "Export OBJ file:" #, c-format, boost-format msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"The file %s already exists.\n" +"Do you want to replace it?" msgid "Comfirm Save As" -msgstr "" +msgstr "Confirm Save As" msgid "Delete object which is a part of cut object" msgstr "Delete object which is a part of cut object" @@ -5622,13 +6051,13 @@ msgid "Another export job is running." msgstr "Another export job is running." msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "Unable to replace with more than one volume" msgid "Error during replace" msgstr "Error during replacement" msgid "Replace from:" -msgstr "" +msgstr "Replace from:" msgid "Select a new file" msgstr "Select a new file" @@ -5643,19 +6072,16 @@ msgid "Do you want to replace it" msgstr "Do you want to replace it?" msgid "Message" -msgstr "" +msgstr "Message" msgid "Reload from:" -msgstr "" +msgstr "Reload from:" msgid "Unable to reload:" -msgstr "" +msgstr "Unable to reload:" msgid "Error during reload" -msgstr "" - -msgid "Slicing" -msgstr "Slicing" +msgstr "Error during reload" msgid "There are warnings after slicing models:" msgstr "There are warnings after slicing models:" @@ -5715,9 +6141,15 @@ msgstr "Importing Model" msgid "prepare 3mf file..." msgstr "preparing 3mf file..." +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "downloading project ..." +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Project downloaded %d%%" @@ -5739,6 +6171,20 @@ msgstr "Does not contain valid G-code." msgid "Error occurs while loading G-code file" msgstr "An Error has occurred while loading the G-code file." +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" + msgid "Drop project file" msgstr "Drop project file" @@ -5763,9 +6209,6 @@ msgstr "G-code files and models cannot be loaded together!" msgid "Can not add models when in preview mode!" msgstr "Unable to add models in preview mode" -msgid "Add Models" -msgstr "Add Models" - msgid "All objects will be removed, continue?" msgstr "All objects will be removed, continue?" @@ -5774,9 +6217,6 @@ msgstr "" "The current project has unsaved changes. Would you like to save before " "continuing?" -msgid "Remember my choice." -msgstr "Remember my choice." - msgid "Number of copies:" msgstr "Number of copies:" @@ -5787,13 +6227,13 @@ msgid "Save G-code file as:" msgstr "Save G-code file as:" msgid "Save SLA file as:" -msgstr "" +msgstr "Save SLA file as:" msgid "The provided file name is not valid." -msgstr "" +msgstr "The provided file name is not valid." msgid "The following characters are not allowed by a FAT file system:" -msgstr "" +msgstr "The following characters are not allowed by a FAT file system:" msgid "Save Sliced file as:" msgstr "Save Sliced file as:" @@ -5808,10 +6248,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5859,7 +6315,7 @@ msgstr "Number of currently selected parts: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "" +msgstr "Number of currently selected objects: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -5961,6 +6417,11 @@ msgstr "Login Region" msgid "Stealth Mode" msgstr "" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -5976,6 +6437,24 @@ msgstr "Imperial" msgid "Units" msgstr "Units" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this setting will allow only one instance." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -5985,6 +6464,18 @@ msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Zoom to mouse position" @@ -6001,6 +6492,12 @@ msgstr "" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "" @@ -6014,11 +6511,36 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "If enabled, useful hints are displayed at startup." msgid "Flushing volumes: Auto-calculate everytime the color changed." -msgstr "" +msgstr "Flushing volumes: Auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed." +msgstr "If enabled, auto-calculate every time the color changes." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Flushing volumes: Auto-calculate every time the filament is changed." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "If enabled, auto-calculate every time filament is changed" + +msgid "Remember printer configuration" msgstr "" +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." + msgid "Network" msgstr "" @@ -6064,6 +6586,42 @@ msgstr "" "If enabled, this sets Orca Slicer as the default application to open .step " "files." +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -6074,7 +6632,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Clear my choice on the unsaved projects." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "No warnings when loading 3MF with modified G-code" msgid "Auto-Backup" msgstr "Auto-Backup" @@ -6230,16 +6788,25 @@ msgid "Add/Remove materials" msgstr "Add/Remove materials" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Select/Remove printers(system presets)" msgid "Create printer" -msgstr "" - -msgid "Incompatible" -msgstr "Incompatible" +msgstr "Create printer" msgid "The selected preset is null!" -msgstr "" +msgstr "The selected preset is null!" + +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "Customize" + +msgid "Other layer filament sequence" +msgstr "Other layer filament sequence" + +msgid "Please input layer value (>= 2)." +msgstr "Please input layer value (>= 2)." msgid "Plate name" msgstr "Plate name" @@ -6250,11 +6817,17 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Print sequence" -msgid "Customize" -msgstr "" +msgid "Same as Global" +msgstr "Same as Global" + +msgid "Disable" +msgstr "Disable" + +msgid "Spiral vase" +msgstr "Spiral vase" msgid "First layer filament sequence" -msgstr "" +msgstr "First layer filament sequence" msgid "Same as Global Plate Type" msgstr "Same as Global Plate Type" @@ -6314,15 +6887,6 @@ msgstr "User Preset" msgid "Preset Inside Project" msgstr "Preset Inside Project" -msgid "Name is invalid;" -msgstr "Name is invalid;" - -msgid "illegal characters:" -msgstr "Illegal characters:" - -msgid "illegal suffix:" -msgstr "Illegal suffix:" - msgid "Name is unavailable." msgstr "Name is unavailable." @@ -6341,15 +6905,6 @@ msgstr "" msgid "Please note that saving action will replace this preset" msgstr "Please note that saving will overwrite the current preset." -msgid "The name is not allowed to be empty." -msgstr "The name field is not allowed to be empty." - -msgid "The name is not allowed to start with space character." -msgstr "The name is not allowed to start with a space." - -msgid "The name is not allowed to end with space character." -msgstr "The name is not allowed to end with a space." - msgid "The name cannot be the same as a preset alias name." msgstr "The name cannot be the same as a preset alias name." @@ -6387,7 +6942,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Search" msgid "My Device" msgstr "My Device" @@ -6407,9 +6962,6 @@ msgstr "Can't find devices?" msgid "Log out successful." msgstr "Log out successful." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Busy" @@ -6426,7 +6978,7 @@ msgid "Bambu Smooth PEI Plate" msgstr "" msgid "High temperature Plate" -msgstr "" +msgstr "High temperature Plate" msgid "Bambu Textured PEI Plate" msgstr "" @@ -6434,17 +6986,11 @@ msgstr "" msgid "Send print job to" msgstr "Send print job to" -msgid "Refresh" -msgstr "Refresh" - -msgid "Bed Leveling" -msgstr "Bed leveling" - msgid "Flow Dynamics Calibration" -msgstr "" +msgstr "Flow Dynamics Calibration" msgid "Click here if you can't connect to the printer" -msgstr "" +msgstr "Click here if you can't connect to the printer" msgid "send completed" msgstr "Send complete" @@ -6452,9 +6998,6 @@ msgstr "Send complete" msgid "Error code" msgstr "Error code" -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" @@ -6532,8 +7075,13 @@ 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "A MicroSD card needs to be inserted to record a timelapse." @@ -6553,10 +7101,13 @@ msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." msgstr "" +"When spiral vase mode is enabled, machines with I3 structure will not " +"generate timelapse videos." msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"Timelapse is not supported because Print sequence is set to \"By object\"." msgid "Errors" msgstr "Errors" @@ -6584,62 +7135,67 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "nozzle in preset: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "" +msgid "nozzle memorized: %.2f %s" +msgstr "nozzle memorized: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" +"Your nozzle diameter in sliced file is not consistent with the saved nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Please fix the error above, otherwise printing cannot continue." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - 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." +"Connecting to the printer. Unable to cancel during the connection process." msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." msgstr "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." msgid "Automatic flow calibration using Micro Lidar" -msgstr "" +msgstr "Automatic flow calibration using Micro Lidar" msgid "Modifying the device name" msgstr "Modifying the device name" +msgid "Bind with Pin Code" +msgstr "Bind with Pin Code" + msgid "Send to Printer SD card" msgstr "Send to Printer MicroSD card" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Cannot send print tasks when an update is in progress" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "The selected printer is incompatible with the chosen printer presets." + 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." @@ -6654,7 +7210,7 @@ msgid "Slice ok." msgstr "Slice complete" msgid "View all Daily tips" -msgstr "" +msgstr "View all Daily tips" msgid "Failed to create socket" msgstr "Failed to create socket" @@ -6683,6 +7239,28 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Unknown Failure" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." + +msgid "Can't find Pin Code?" +msgstr "Can't find Pin Code?" + +msgid "Pin Code" +msgstr "Pin Code" + +msgid "Binding..." +msgstr "Binding..." + +msgid "Please confirm on the printer screen" +msgstr "Please confirm on the printer screen" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Log in failed. Please check the Pin Code." + msgid "Log in printer" msgstr "Log in printer" @@ -6800,7 +7378,7 @@ msgstr "" "the model without prime tower. Do you want to enable the prime tower?" msgid "Still print by object?" -msgstr "" +msgstr "Still print by object?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6858,15 +7436,39 @@ msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " +"height limits ,this may cause printing quality issues." msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "Adjust to the set range automatically? \n" msgid "Adjust" -msgstr "" +msgstr "Adjust" msgid "Ignore" +msgstr "Ignore" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications. Please use with the latest printer firmware." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -6937,7 +7539,7 @@ msgid "Acceleration" msgstr "Acceleration" msgid "Jerk(XY)" -msgstr "" +msgstr "Jerk(XY)" msgid "Raft" msgstr "Raft" @@ -6948,6 +7550,9 @@ msgstr "Filament for Supports" msgid "Tree supports" msgstr "" +msgid "Skirt" +msgstr "" + msgid "Prime tower" msgstr "Prime tower" @@ -6961,7 +7566,7 @@ msgid "Post-processing Scripts" msgstr "Post-processing Scripts" msgid "Notes" -msgstr "" +msgstr "Notes" msgid "Frequent" msgstr "Frequent" @@ -7035,13 +7640,16 @@ msgstr "" "of 0 means the filament does not support printing on the Engineering Plate." msgid "Smooth PEI Plate / High Temp Plate" -msgstr "" +msgstr "Smooth PEI Plate / High Temp Plate" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" +"Bed temperature when Smooth PEI Plate/High temperature plate is installed. " +"Value 0 means the filament does not support to print on the Smooth PEI Plate/" +"High Temp Plate" msgid "Textured PEI Plate" msgstr "Textured PEI Plate" @@ -7093,13 +7701,13 @@ msgid "Auxiliary part cooling fan" msgstr "Auxiliary part cooling fan" msgid "Exhaust fan" -msgstr "" +msgstr "Exhaust fan" msgid "During print" -msgstr "" +msgstr "During print" msgid "Complete print" -msgstr "" +msgstr "Complete print" msgid "Filament start G-code" msgstr "Filament start G-code" @@ -7114,7 +7722,7 @@ msgid "Wipe tower parameters" msgstr "" msgid "Toolchange parameters with single extruder MM printers" -msgstr "" +msgstr "Toolchange parameters with single extruder MM printers" msgid "Ramming settings" msgstr "" @@ -7125,6 +7733,14 @@ msgstr "" msgid "Printable space" msgstr "Printable space" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "" @@ -7150,7 +7766,7 @@ msgid "Machine end G-code" msgstr "Machine end G-code" msgid "Printing by object G-code" -msgstr "" +msgstr "Printing by object G-code" msgid "Before layer change G-code" msgstr "Before layer change G-code" @@ -7159,7 +7775,7 @@ msgid "Layer change G-code" msgstr "Layer change G-code" msgid "Time lapse G-code" -msgstr "" +msgstr "Time lapse G-code" msgid "Change filament G-code" msgstr "Change filament G-code" @@ -7211,9 +7827,12 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Disable it in order to enable Firmware Retraction?" msgid "Firmware Retraction" -msgstr "" +msgstr "Firmware Retraction" msgid "Detached" msgstr "Detached" @@ -7223,9 +7842,11 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"%d Filament Preset and %d Process Preset is attached to this printer. Those " +"presets would be deleted if the printer is deleted." msgid "Presets inherited by other presets can not be deleted!" -msgstr "" +msgstr "Presets inherited by other presets can not be deleted!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." @@ -7247,6 +7868,9 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"Are you sure to delete the selected preset? \n" +"If the preset corresponds to a filament currently in use on your printer, " +"please reset the filament information for that slot." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7346,23 +7970,30 @@ msgstr "" "contains the following unsaved changes:" #, 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 "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "You have changed some settings of preset \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"You can save or discard the preset values you have modified." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "You have previously modified your settings." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" msgid "Extruders count" msgstr "Extruder count" @@ -7393,7 +8024,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7477,6 +8108,60 @@ msgstr "No updates available." msgid "The configuration is up to date." msgstr "The configuration is up to date." +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + msgid "Ramming customization" msgstr "" @@ -7511,7 +8196,7 @@ msgid "Auto-Calc" msgstr "Auto-Calc" msgid "Re-calculate" -msgstr "" +msgstr "Re-calculate" msgid "Flushing volumes for filament change" msgstr "Flushing volumes for filament change" @@ -7550,12 +8235,38 @@ msgstr "From" msgid "To" msgstr "To" -msgid "Bambu Network plug-in not detected." +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" msgstr "" -msgid "Click here to download it." +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" msgstr "" +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "Bambu Network plug-in not detected." + +msgid "Click here to download it." +msgstr "Click here to download it." + msgid "Login" msgstr "Login" @@ -7587,7 +8298,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "Show/Hide 3Dconnexion devices settings dialog" msgid "Switch table page" -msgstr "" +msgstr "Switch table page" msgid "Show keyboard shortcuts list" msgstr "Show keyboard shortcuts list" @@ -7820,6 +8531,12 @@ msgstr "Move slider 5x faster" msgid "Shift+Mouse wheel" msgstr "Shift+Mouse wheel" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Release Note" @@ -7843,13 +8560,49 @@ msgid "New version of Orca Slicer" msgstr "New version of Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "Skip this Version" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "resume" + +msgid "Resume Printing" +msgstr "Resume Printing" + +msgid "Resume Printing(defects acceptable)" +msgstr "Resume Printing (defects acceptable)" + +msgid "Resume Printing(problem solved)" +msgstr "Resume Printing (problem solved)" + +msgid "Stop Printing" +msgstr "Stop Printing" + +msgid "Check Assistant" +msgstr "Check Assistant" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruded, Continue" + +msgid "Not Extruded Yet, Retry" +msgstr "Not Extruded Yet, Retry" + +msgid "Finished, Continue" +msgstr "Finished, Continue" + +msgid "Load Filament" +msgstr "Load" + +msgid "Filament Loaded, Resume" +msgstr "Filament Loaded, Resume" + +msgid "View Liveview" +msgstr "View Liveview" + msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Confirm and Update Nozzle" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN Connection Failed (Sending print file)" @@ -7876,21 +8629,23 @@ msgid "Where to find your printer's IP and Access Code?" msgstr "Where to find your printer's IP and Access Code?" msgid "Step 3: Ping the IP address to check for packet loss and latency." -msgstr "" +msgstr "Step 3: Ping the IP address to check for packet loss and latency." msgid "Test" -msgstr "" +msgstr "Test" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP and Access Code Verified! You may close the window" msgid "Connection failed, please double check IP and Access Code" -msgstr "" +msgstr "Connection failed, please double check IP and Access Code" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"Connection failed! If your IP and Access Code is correct, \n" +"please move to step 3 for troubleshooting network issues" msgid "Model:" msgstr "Model:" @@ -7904,14 +8659,8 @@ msgstr "Version:" msgid "Update firmware" msgstr "Update firmware" -msgid "Printing" -msgstr "Printing" - -msgid "Idle" -msgstr "Idle" - msgid "Beta version" -msgstr "" +msgstr "Beta version" msgid "Latest version" msgstr "Latest version" @@ -7944,7 +8693,7 @@ 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." +"update next time starting Orca." msgstr "" "The firmware version is abnormal. Repairing and updating are required before " "printing. Do you want to update now? You can also update later on the " @@ -8083,9 +8832,6 @@ msgstr "" msgid "Gap infill" msgstr "Gap infill" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Support interface" @@ -8276,26 +9022,33 @@ msgid "" msgstr "" msgid "Variable layer height is not supported with Organic supports." -msgstr "" +msgstr "Variable layer height is not supported with Organic supports." msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Different nozzle diameters and different filament diameters is not allowed " +"when prime tower is enabled." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"Ooze prevention is currently not supported with the prime tower enabled." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." msgid "The prime tower is not supported in \"By object\" print." msgstr "A prime tower is not supported in “By object” print." @@ -8523,11 +9276,12 @@ msgstr "" "username:password@your-octopi-address/" msgid "Device UI" -msgstr "" +msgstr "Device UI" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" +"Specify the URL of your device user interface if it's not same as print_host" msgid "API Key / Password" msgstr "API Key / Password" @@ -8687,7 +9441,16 @@ msgid "Engineering Plate" msgstr "Engineering Plate" msgid "First layer print sequence" -msgstr "" +msgstr "First layer print sequence" + +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" 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." @@ -8818,12 +9581,14 @@ msgid "" msgstr "" msgid "Top surface flow ratio" -msgstr "" +msgstr "Top surface flow ratio" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" +"This factor affects the amount of material for top solid infill. You can " +"decrease it slightly to have smooth surface finish" msgid "Bottom surface flow ratio" msgstr "" @@ -8968,7 +9733,7 @@ msgid "" msgstr "" msgid "mm/s or %" -msgstr "" +msgstr "mm/s or %" msgid "External" msgstr "" @@ -9112,7 +9877,7 @@ msgid "Default process profile when switch to this machine profile" msgstr "Default process profile when switching to this machine profile" msgid "Activate air filtration" -msgstr "" +msgstr "Activate air filtration" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" @@ -9124,6 +9889,8 @@ msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" msgstr "" +"Speed of exhaust fan during printing.This speed will override the speed in " +"filament custom g-code" msgid "Speed of exhaust fan after printing completes" msgstr "" @@ -9230,12 +9997,14 @@ msgid "End G-code when finish the whole printing" msgstr "Add end G-Code when finishing the entire print." msgid "Between Object Gcode" -msgstr "" +msgstr "Between Object Gcode" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"Insert Gcode between objects. This parameter will only come into effect when " +"you print your models object by object" msgid "End G-code when finish the printing of this filament" msgstr "Add end G-code when finishing the printing of this filament." @@ -9299,7 +10068,7 @@ msgstr "" "infill." msgid "Internal solid infill pattern" -msgstr "" +msgstr "Internal solid infill pattern" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " @@ -9319,7 +10088,7 @@ msgstr "" "printed slower than inner walls for higher quality." msgid "Small perimeters" -msgstr "" +msgstr "Small perimeters" msgid "" "This separate setting will affect the speed of perimeters having radius <= " @@ -9334,6 +10103,7 @@ msgstr "" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm" msgstr "" +"This sets the threshold for small perimeter length. Default threshold is 0mm" msgid "Walls printing order" msgstr "" @@ -9373,13 +10143,13 @@ msgid "Inner/Outer/Inner" msgstr "" msgid "Print infill first" -msgstr "" +msgstr "Print infill first" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9433,6 +10203,12 @@ msgstr "" "Clearance radius around extruder: used for collision avoidance in by-object " "printing." +msgid "Nozzle height" +msgstr "Nozzle height" + +msgid "The height of nozzle tip." +msgstr "The height of nozzle tip." + msgid "Bed mesh min" msgstr "" @@ -9503,7 +10279,7 @@ msgstr "" "is slight overflow or underflow." msgid "Enable pressure advance" -msgstr "" +msgstr "Enable pressure advance" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " @@ -9529,6 +10305,22 @@ msgstr "" "and will instead run at least at minimum speed to reduce the frequency of " "starting and stopping." +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Layer time" @@ -9548,10 +10340,10 @@ msgid "Default filament color" msgstr "Default filament color" msgid "Filament notes" -msgstr "" +msgstr "Filament notes" msgid "You can put your notes regarding the filament here." -msgstr "" +msgstr "You can put your notes regarding the filament here." msgid "Required nozzle HRC" msgstr "Required nozzle HRC" @@ -9629,6 +10421,8 @@ msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" +"Speed used for unloading the filament on the wipe tower (does not affect " +"initial part of unloading just after ramming)." msgid "Unloading speed at the start" msgstr "" @@ -9645,6 +10439,9 @@ msgid "" "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" +"Time to wait after the filament is unloaded. May help to get reliable tool " +"changes with flexible materials that may need more time to shrink to " +"original dimensions." msgid "Number of cooling moves" msgstr "" @@ -9748,13 +10545,16 @@ msgstr "" "Support material is commonly used to print support and support interfaces." msgid "Softening temperature" -msgstr "" +msgstr "Softening temperature" msgid "" "The material softens at this temperature, so when the bed temperature is " "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than this, it's highly recommended to open the front " +"door and/or remove the upper glass to avoid clogs." msgid "Price" msgstr "Price" @@ -9766,16 +10566,16 @@ msgid "money/kg" msgstr "money/kg" msgid "Vendor" -msgstr "" +msgstr "Vendor" msgid "Vendor of filament. For show only" -msgstr "" +msgstr "Vendor of filament. For show only" msgid "(Undefined)" msgstr "(Undefined)" -msgid "Infill direction" -msgstr "Infill direction" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -9784,6 +10584,20 @@ msgstr "" "This is the angle for sparse infill pattern, which controls the start or " "main direction of lines." +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Sparse infill density" @@ -9829,6 +10643,9 @@ msgstr "Support Cubic" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "Cross Hatch" + msgid "Sparse infill anchor length" msgstr "" @@ -9895,12 +10712,14 @@ msgid "" msgstr "" msgid "mm/s² or %" -msgstr "" +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 "" +"Acceleration of sparse infill. If the value is expressed as a percentage (e." +"g. 100%), it will be calculated based on the default acceleration." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -9916,13 +10735,13 @@ msgstr "" "acceleration can improve build plate adhesion." msgid "Enable accel_to_decel" -msgstr "" +msgstr "Enable accel_to_decel" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "" +msgstr "Klipper's max_accel_to_decel will be adjusted automatically" msgid "accel_to_decel" -msgstr "" +msgstr "accel_to_decel" #, c-format, boost-format msgid "" @@ -9930,10 +10749,10 @@ msgid "" msgstr "" msgid "Jerk of outer walls" -msgstr "" +msgstr "Jerk of outer walls" msgid "Jerk of inner walls" -msgstr "" +msgstr "Jerk of inner walls" msgid "Jerk for top surface" msgstr "" @@ -10004,6 +10823,9 @@ msgid "" "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "" @@ -10058,7 +10880,7 @@ msgid "Whether to apply fuzzy skin on the first layer" msgstr "" msgid "Filter out tiny gaps" -msgstr "" +msgstr "Filter out tiny gaps" msgid "Layers and Perimeters" msgstr "Layers and Perimeters" @@ -10073,15 +10895,31 @@ msgstr "" "This is the speed for gap infill. Gaps usually have irregular line width and " "should be printed more slowly." +msgid "Precise Z height" +msgstr "Precise Z height" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." + msgid "Arc fitting" msgstr "Arc fitting" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Enable this to get a G-code file with G2 and G3 moves. The fitting tolerance " -"is the same as the resolution." msgid "Add line number" msgstr "Add line number" @@ -10136,10 +10974,10 @@ msgid "HRC" msgstr "HRC" msgid "Printer structure" -msgstr "" +msgstr "Printer structure" msgid "The physical arrangement and components of a printing device" -msgstr "" +msgstr "The physical arrangement and components of a printing device" msgid "CoreXY" msgstr "" @@ -10154,10 +10992,10 @@ msgid "Delta" msgstr "" msgid "Best object position" -msgstr "" +msgstr "Best object position" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." -msgstr "" +msgstr "Best auto arranging position in range [0,1] w.r.t. bed shape." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " @@ -10203,7 +11041,7 @@ msgid "money/h" msgstr "" msgid "Support control chamber temperature" -msgstr "" +msgstr "Support controlling chamber temperature" msgid "" "This option is enabled if machine support controlling chamber temperature\n" @@ -10211,7 +11049,7 @@ msgid "" msgstr "" msgid "Support air filtration" -msgstr "" +msgstr "Support air filtration" msgid "" "Enable this if printer support air filtration\n" @@ -10244,7 +11082,7 @@ msgid "" msgstr "" msgid "Exclude objects" -msgstr "" +msgstr "Exclude objects" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" @@ -10279,37 +11117,53 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Infill/wall overlap" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. 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." msgid "Speed of internal sparse infill" msgstr "This is the speed for internal sparse infill." msgid "Interface shells" -msgstr "" +msgstr "Interface shells" 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 "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Maximum width of a segmented region" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" +"Maximum width of a segmented region. A value of 0 disables this feature." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Interlocking depth of a segmented region" msgid "Interlocking depth of a segmented region. Zero disables this feature." -msgstr "" +msgstr "Interlocking depth of a segmented region. Zero disables this feature." msgid "Ironing Type" msgstr "Ironing type" @@ -10686,6 +11540,10 @@ msgid "" "positive, it is loaded further, if negative, the loading move is shorter " "than unloading." msgstr "" +"When set to zero, the distance the filament is moved from parking position " +"during load is exactly the same as it was moved back during unload. When " +"positive, it is loaded further, if negative, the loading move is shorter " +"than unloading." msgid "Start end points" msgstr "Start end points" @@ -10783,10 +11641,10 @@ msgid "" msgstr "" msgid "Printer notes" -msgstr "" +msgstr "Printer notes" msgid "You can put your notes regarding the printer here." -msgstr "" +msgstr "You can put your notes regarding the printer here." msgid "Raft contact Z distance" msgstr "Raft contact Z distance" @@ -10868,6 +11726,30 @@ 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." +msgid "Long retraction when cut(experimental)" +msgstr "Long retraction when cut (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." + +msgid "Retraction distance when cut" +msgstr "Retraction distance when cut" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimental feature. Retraction length before cutting off during filament " +"change" + msgid "Z hop when retract" msgstr "Z hop when retracting" @@ -10882,20 +11764,24 @@ msgstr "" "prevent stringing." msgid "Z hop lower boundary" -msgstr "" +msgstr "Z hop lower boundary" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"Z hop will only come into effect when Z is above this value and is below the " +"parameter: \"Z hop upper boundary\"" msgid "Z hop upper boundary" -msgstr "" +msgstr "Z hop upper boundary" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"If this value is positive, Z hop will only come into effect when Z is above " +"the parameter: \"Z hop lower boundary\" and is below this value" msgid "Z hop type" msgstr "" @@ -10943,7 +11829,7 @@ msgid "Top and Bottom" msgstr "" msgid "Extra length on restart" -msgstr "" +msgstr "Extra length on restart" msgid "" "When the retraction is compensated after the travel move, the extruder will " @@ -10972,7 +11858,7 @@ msgstr "" "setting this to 0 means that it will be the same speed as the retraction." msgid "Use firmware retraction" -msgstr "" +msgstr "Use firmware retraction" msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " @@ -11016,7 +11902,7 @@ msgid "" msgstr "" msgid "Seam gap" -msgstr "" +msgstr "Seam gap" msgid "" "In order to reduce the visibility of the seam in a closed loop extrusion, " @@ -11030,17 +11916,20 @@ msgstr "" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" +"Use scarf joint to minimize seam visibility and increase seam strength." msgid "Conditional scarf joint" -msgstr "" +msgstr "Conditional scarf joint" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." msgid "Conditional angle threshold" -msgstr "" +msgstr "Conditional angle threshold" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -11083,39 +11972,44 @@ msgid "This factor affects the amount of material for scarf joints." msgstr "" msgid "Scarf start height" -msgstr "" +msgstr "Scarf start height" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"Start height of the scarf.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." msgid "Scarf around entire wall" -msgstr "" +msgstr "Scarf around entire wall" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "The scarf extends to the entire length of the wall." msgid "Scarf length" -msgstr "" +msgstr "Scarf length" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." msgid "Scarf steps" -msgstr "" +msgstr "Scarf steps" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "Minimum number of segments of each scarf." msgid "Scarf joint for inner walls" -msgstr "" +msgstr "Scarf joint for inner walls" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "Use scarf joint for inner walls as well." msgid "Role base wipe speed" msgstr "" @@ -11150,7 +12044,7 @@ msgid "" msgstr "" msgid "Wipe speed" -msgstr "" +msgstr "Wipe speed" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -11158,6 +12052,10 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" +"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%" msgid "Skirt distance" msgstr "Skirt distance" @@ -11171,6 +12069,29 @@ msgstr "Skirt height" msgid "How many layers of skirt. Usually only one layer" msgstr "Number of skirt layers: usually only one" +msgid "Draft shield" +msgstr "" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "" + +msgid "Enabled" +msgstr "" + msgid "Skirt loops" msgstr "Skirt loops" @@ -11184,6 +12105,17 @@ msgstr "" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -11212,9 +12144,6 @@ msgstr "" "This is the speed for internal solid infill, not including the top or bottom " "surface." -msgid "Spiral vase" -msgstr "Spiral vase" - 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 " @@ -11225,20 +12154,24 @@ msgstr "" "The final generated model has no seam." msgid "Smooth Spiral" -msgstr "" +msgstr "Smooth Spiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" msgid "Max XY Smoothing" -msgstr "" +msgstr "Max XY Smoothing" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Maximum distance to move points in XY to try to achieve a smooth spiral. If " +"expressed as a %, it will be computed over nozzle diameter" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -11309,6 +12242,10 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" +"If enabled, the wipe tower will not be printed on layers with no tool " +"changes. On layers with a tool change, extruder will travel downward to " +"print the wipe tower. User is responsible for ensuring there is no collision " +"with the print." msgid "Prime all printing extruders" msgstr "" @@ -11416,10 +12353,10 @@ msgstr "" "etc." msgid "Remove small overhangs" -msgstr "" +msgstr "Remove small overhangs" msgid "Remove small overhangs that possibly need no supports." -msgstr "" +msgstr "Remove small overhangs that possibly need no supports." msgid "Top Z distance" msgstr "Top Z distance" @@ -11444,11 +12381,12 @@ msgstr "" "filament for support, and current filament is used" msgid "Avoid interface filament for base" -msgstr "" +msgstr "Avoid interface filament for base" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Avoid using support interface filament to print support base if possible." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -11484,10 +12422,10 @@ msgid "Bottom interface layers" msgstr "Bottom interface layers" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Number of bottom interface layers" msgid "Same as top" -msgstr "" +msgstr "Same as top" msgid "Top interface spacing" msgstr "Top interface spacing" @@ -11694,10 +12632,10 @@ msgid "" msgstr "" msgid "Support wall loops" -msgstr "" +msgstr "Support wall loops" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "This setting specify the count of walls around support" msgid "Tree support with infill" msgstr "Tree support with infill" @@ -11719,7 +12657,7 @@ msgid "" msgstr "" msgid "Chamber temperature" -msgstr "" +msgstr "Chamber temperature" msgid "" "Higher chamber temperature can help suppress or reduce warping and " @@ -11730,6 +12668,12 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on. At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials, the actual chamber temperature should not " +"be high to avoid clogs, so 0 (turned off) is highly recommended." msgid "Nozzle temperature for layers after the initial one" msgstr "Nozzle temperature after the first layer" @@ -11874,6 +12818,31 @@ msgstr "" msgid "Spacing of purge lines on the wipe tower." msgstr "" +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "" @@ -11998,7 +12967,7 @@ msgid "" msgstr "" msgid "Use relative E distances" -msgstr "" +msgstr "Use relative E distances" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " @@ -12552,6 +13521,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: failed to parse" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12565,73 +13537,70 @@ 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 "Flow Rate Calibration" -msgstr "" +msgstr "Flow Rate Calibration" msgid "Max Volumetric Speed Calibration" -msgstr "" +msgstr "Max Volumetric Speed Calibration" msgid "Manage Result" -msgstr "" +msgstr "Manage Result" msgid "Manual Calibration" -msgstr "" +msgstr "Manual Calibration" msgid "Result can be read by human eyes." -msgstr "" +msgstr "Result can be read by human eyes." msgid "Auto-Calibration" -msgstr "" +msgstr "Auto-Calibration" msgid "We would use Lidar to read the calibration result" -msgstr "" +msgstr "We would use Lidar to read the calibration result" msgid "Prev" -msgstr "" +msgstr "Prev" msgid "Recalibration" -msgstr "" +msgstr "Recalibration" msgid "Calibrate" -msgstr "" +msgstr "Calibrate" msgid "Finish" msgstr "Finish" msgid "How to use calibration result?" -msgstr "" +msgstr "How can I use calibration results?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" +"You could change the Flow Dynamics Calibration Factor in material editing" msgid "" "The current firmware version of the printer does not support calibration.\n" "Please upgrade the printer firmware." msgstr "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." msgid "Calibration not supported" -msgstr "" +msgstr "Calibration not supported" msgid "Error desc" -msgstr "" +msgstr "Error desc" msgid "Extra info" -msgstr "" +msgstr "Extra info" msgid "Flow Dynamics" -msgstr "" +msgstr "Flow Dynamics" msgid "Flow Rate" -msgstr "" +msgstr "Flow Rate" 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 "" +msgstr "Max Volumetric Speed" #, c-format, boost-format msgid "" @@ -12641,62 +13610,99 @@ msgid "" "End value: > Start value\n" "Value step: >= %.3f)" msgstr "" +"Please input valid values:\n" +"Start value: >= %.1f\n" +"End value: <= %.1f\n" +"End value: > Start value\n" +"Value step: >= %.3f)" msgid "The name cannot be empty." -msgstr "" +msgstr "The name cannot be empty." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "The selected preset: %s is not found." msgid "The name cannot be the same as the system preset name." -msgstr "" +msgstr "The name cannot be the same as the system preset name." msgid "The name is the same as another existing preset name" -msgstr "" +msgstr "The name is the same as another existing preset name" msgid "create new preset failed." -msgstr "" +msgstr "create new preset failed." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" +"Are you sure to cancel the current calibration and return to the home page?" msgid "No Printer Connected!" -msgstr "" +msgstr "No Printer Connected!" msgid "Printer is not connected yet." -msgstr "" +msgstr "Printer is not connected yet." msgid "Please select filament to calibrate." -msgstr "" +msgstr "Please select filament to calibrate." msgid "The input value size must be 3." +msgstr "The input value size must be 3." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgid "Connecting to printer..." -msgstr "" +msgstr "Connecting to printer..." msgid "The failed test result has been dropped." -msgstr "" +msgstr "The failed test result has been dropped." msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "Flow Dynamics Calibration result has been saved to the printer" + +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" msgstr "" +"There is already a previous calibration result with the same name: %s. Only " +"one result with a name is saved. Are you sure you want to overwrite the " +"previous result?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." msgid "Internal Error" -msgstr "" +msgstr "Internal Error" msgid "Please select at least one filament for calibration" -msgstr "" +msgstr "Please select at least one filament for calibration" msgid "Flow rate calibration result has been saved to preset" -msgstr "" +msgstr "Flow rate calibration result has been saved to preset" msgid "Max volumetric speed calibration result has been saved to preset" -msgstr "" +msgstr "Max volumetric speed calibration result has been saved to preset" msgid "When do you need Flow Dynamics Calibration" -msgstr "" +msgstr "When do you need Flow Dynamics Calibration" msgid "" "We now have added the auto-calibration for different filaments, which is " @@ -12708,9 +13714,17 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" +"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." msgid "About this calibration" -msgstr "" +msgstr "About this calibration" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -12722,10 +13736,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12733,7 +13747,7 @@ msgid "" msgstr "" msgid "When to use Flow Rate Calibration" -msgstr "" +msgstr "When to use Flow Rate Calibration" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -12746,12 +13760,24 @@ msgid "" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." msgstr "" +"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." 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 "" +"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." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -12761,6 +13787,12 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" +"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." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -12780,227 +13812,256 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" +"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, have sparkles, or have a highly-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." msgid "When you need Max Volumetric Speed Calibration" -msgstr "" +msgstr "When you need Max Volumetric Speed Calibration" msgid "Over-extrusion or under extrusion" -msgstr "" +msgstr "Over-extrusion or under extrusion" msgid "Max Volumetric Speed calibration is recommended when you print with:" -msgstr "" +msgstr "Max Volumetric Speed calibration is recommended when you print with:" msgid "material with significant thermal shrinkage/expansion, such as..." -msgstr "" +msgstr "material with significant thermal shrinkage/expansion, such as..." msgid "materials with inaccurate filament diameter" -msgstr "" +msgstr "materials with inaccurate filament diameter" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "" +msgstr "We found the best Flow Dynamics Calibration Factor" msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." msgstr "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" msgstr "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" msgid "Failed" msgstr "Failed" +msgid "Please enter the name you want to save to printer." +msgstr "Please enter the name you want to save to printer." + +msgid "The name cannot exceed 40 characters." +msgstr "The name cannot exceed 40 characters." + 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?" +"want to override the other results?" msgstr "" +"Only one of the results with the same name will be saved. Are you sure you " +"want to replace the other results?" msgid "Please find the best line on your plate" -msgstr "" +msgstr "Please find the best line on your plate" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Please find the corner with the perfect degree of extrusion" msgid "Input Value" -msgstr "" +msgstr "Input Value" msgid "Save to Filament Preset" -msgstr "" +msgstr "Save to Filament Preset" msgid "Preset" -msgstr "" +msgstr "Preset" msgid "Record Factor" -msgstr "" +msgstr "Record Factor" msgid "We found the best flow ratio for you" -msgstr "" +msgstr "We found the best flow ratio for you" msgid "Flow Ratio" -msgstr "" +msgstr "Flow Ratio" msgid "Please input a valid value (0.0 < flow ratio < 2.0)" -msgstr "" +msgstr "Please input a valid value (0.0 < flow ratio < 2.0)" msgid "Please enter the name of the preset you want to save." -msgstr "" +msgstr "Please enter the name of the preset you want to save." msgid "Calibration1" -msgstr "" +msgstr "Calibration1" msgid "Calibration2" -msgstr "" +msgstr "Calibration2" msgid "Please find the best object on your plate" -msgstr "" +msgstr "Please find the best object on your plate" msgid "Fill in the value above the block with smoothest top surface" -msgstr "" +msgstr "Fill in the value above the block with smoothest top surface" msgid "Skip Calibration2" -msgstr "" +msgstr "Skip Calibration2" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "" +msgstr "flow ratio : %s " msgid "Please choose a block with smoothest top surface" -msgstr "" +msgstr "Please choose a block with smoothest top surface" msgid "Please choose a block with smoothest top surface." -msgstr "" +msgstr "Please choose a block with smoothest top surface." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" -msgstr "" +msgstr "Please input a valid value (0 <= Max Volumetric Speed <= 60)" msgid "Calibration Type" -msgstr "" +msgstr "Calibration Type" msgid "Complete Calibration" -msgstr "" +msgstr "Complete Calibration" msgid "Fine Calibration based on flow ratio" -msgstr "" +msgstr "Fine Calibration based on flow ratio" msgid "Title" -msgstr "" +msgstr "Title" msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." msgstr "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." msgid "Printing Parameters" -msgstr "" - -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" +msgstr "Printing Parameters" msgid "Plate Type" msgstr "Plate Type" msgid "filament position" -msgstr "" +msgstr "filament position" msgid "External Spool" -msgstr "" +msgstr "External Spool" msgid "Filament For Calibration" -msgstr "" +msgstr "Filament For Calibration" 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 "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family(Brand = Bambu, Family = Basic, Matte)" msgid "Pattern" -msgstr "" +msgstr "Pattern" msgid "Method" -msgstr "" +msgstr "Method" #, c-format, boost-format msgid "%s is not compatible with %s" -msgstr "" +msgstr "%s is not compatible with %s" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -msgstr "" +msgstr "TPU is not supported for Flow Dynamics Auto-Calibration." msgid "Connecting to printer" -msgstr "" +msgstr "Connecting to printer" msgid "From k Value" -msgstr "" +msgstr "From k Value" msgid "To k Value" -msgstr "" +msgstr "To k Value" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" -msgstr "" +msgstr "The nozzle diameter has been synchronized from the printer Settings" msgid "From Volumetric Speed" -msgstr "" +msgstr "From Volumetric Speed" msgid "To Volumetric Speed" -msgstr "" +msgstr "To Volumetric Speed" msgid "Flow Dynamics Calibration Result" -msgstr "" +msgstr "Flow Dynamics Calibration Result" + +msgid "New" +msgstr "New" msgid "No History Result" -msgstr "" +msgstr "No History Result" msgid "Success to get history result" -msgstr "" +msgstr "Success to get history result" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "" +msgstr "Refreshing the previous Flow Dynamics Calibration records" msgid "Action" -msgstr "" +msgstr "Action" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." msgid "Edit Flow Dynamics Calibration" -msgstr "" +msgstr "Edit Flow Dynamics Calibration" + +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." msgid "Network lookup" -msgstr "" +msgstr "Network lookup" msgid "Address" -msgstr "" +msgstr "Address" msgid "Hostname" -msgstr "" +msgstr "Hostname" msgid "Service name" -msgstr "" +msgstr "Service name" msgid "OctoPrint version" -msgstr "" +msgstr "OctoPrint version" msgid "Searching for devices" -msgstr "" +msgstr "Searching for devices" msgid "Finished" msgstr "Finished" @@ -13015,37 +14076,37 @@ msgid "" msgstr "" msgid "PA Calibration" -msgstr "" +msgstr "PA Calibration" msgid "DDE" msgstr "" msgid "Bowden" -msgstr "" +msgstr "Bowden" msgid "Extruder type" msgstr "" msgid "PA Tower" -msgstr "" +msgstr "PA Tower" msgid "PA Line" -msgstr "" +msgstr "PA Line" msgid "PA Pattern" -msgstr "" +msgstr "PA Pattern" msgid "Start PA: " -msgstr "" +msgstr "Start PA: " msgid "End PA: " -msgstr "" +msgstr "End PA: " msgid "PA step: " -msgstr "" +msgstr "PA step: " msgid "Print numbers" -msgstr "" +msgstr "Print numbers" msgid "" "Please input valid values:\n" @@ -13053,39 +14114,46 @@ msgid "" "End PA: > Start PA\n" "PA step: >= 0.001)" msgstr "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" msgid "Temperature calibration" -msgstr "" +msgstr "Temperature calibration" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" +msgstr "PETG" + +msgid "PCTG" msgstr "" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" -msgstr "" +msgstr "Filament type" msgid "Start temp: " -msgstr "" +msgstr "Start temp: " msgid "End temp: " -msgstr "" +msgstr "End temp: " msgid "Temp step: " -msgstr "" +msgstr "Temp step: " msgid "" "Please input valid values:\n" @@ -13095,16 +14163,16 @@ msgid "" msgstr "" msgid "Max volumetric speed test" -msgstr "" +msgstr "Max volumetric speed test" msgid "Start volumetric speed: " -msgstr "" +msgstr "Start volumetric speed: " msgid "End volumetric speed: " -msgstr "" +msgstr "End volumetric speed: " msgid "step: " -msgstr "" +msgstr "step: " msgid "" "Please input valid values:\n" @@ -13114,13 +14182,13 @@ msgid "" msgstr "" msgid "VFA test" -msgstr "" +msgstr "VFA test" msgid "Start speed: " -msgstr "" +msgstr "Start speed: " msgid "End speed: " -msgstr "" +msgstr "End speed: " msgid "" "Please input valid values:\n" @@ -13130,129 +14198,132 @@ msgid "" msgstr "" msgid "Start retraction length: " -msgstr "" +msgstr "Start retraction length: " msgid "End retraction length: " -msgstr "" +msgstr "End retraction length: " msgid "mm/mm" -msgstr "" +msgstr "mm/mm" msgid "Send G-Code to printer host" msgstr "" msgid "Upload to Printer Host with the following filename:" -msgstr "" +msgstr "Upload to Printer Host with the following filename:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "" +msgstr "Use forward slashes ( / ) as a directory separator if needed." msgid "Upload to storage" msgstr "" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "" +msgstr "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgid "Upload" -msgstr "" +msgstr "Upload" msgid "Print host upload queue" -msgstr "" +msgstr "Print host upload queue" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" -msgstr "" +msgstr "Progress" msgid "Host" -msgstr "" +msgstr "Host" msgctxt "OfFile" msgid "Size" -msgstr "" +msgstr "Size" msgid "Filename" -msgstr "" +msgstr "Filename" msgid "Cancel selected" -msgstr "" +msgstr "Cancel selected" msgid "Show error message" -msgstr "" +msgstr "Show error message" msgid "Enqueued" -msgstr "" +msgstr "Queued" msgid "Uploading" msgstr "Uploading" msgid "Cancelling" -msgstr "" +msgstr "Cancelling" msgid "Error uploading to print host" msgstr "" msgid "Unable to perform boolean operation on selected parts" -msgstr "" +msgstr "Unable to perform boolean operation on selected parts" msgid "Mesh Boolean" -msgstr "" +msgstr "Mesh Boolean" msgid "Union" -msgstr "" +msgstr "Union" msgid "Difference" -msgstr "" +msgstr "Difference" msgid "Intersection" -msgstr "" +msgstr "Intersection" msgid "Source Volume" -msgstr "" +msgstr "Source Volume" msgid "Tool Volume" -msgstr "" +msgstr "Tool Volume" msgid "Subtract from" -msgstr "" +msgstr "Subtract from" msgid "Subtract with" -msgstr "" +msgstr "Subtract with" msgid "selected" -msgstr "" +msgstr "selected" msgid "Part 1" -msgstr "" +msgstr "Part 1" msgid "Part 2" -msgstr "" +msgstr "Part 2" msgid "Delete input" -msgstr "" +msgstr "Delete input" msgid "Network Test" -msgstr "" +msgstr "Network Test" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Start Test Multi-Thread" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Start Test Single-Thread" msgid "Export Log" -msgstr "" +msgstr "Export Log" msgid "OrcaSlicer Version:" msgstr "" msgid "System Version:" -msgstr "" +msgstr "System Version:" msgid "DNS Server:" -msgstr "" +msgstr "DNS Server:" msgid "Test OrcaSlicer(GitHub)" msgstr "" @@ -13261,100 +14332,116 @@ msgid "Test OrcaSlicer(GitHub):" msgstr "" msgid "Test Bing.com" -msgstr "" +msgstr "Test Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "Test bing.com:" msgid "Log Info" -msgstr "" +msgstr "Log Info" msgid "Select filament preset" -msgstr "" +msgstr "Select filament preset" msgid "Create Filament" -msgstr "" +msgstr "Create Filament" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Create Based on Current Filament" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Copy Current Filament Preset " msgid "Basic Information" -msgstr "" +msgstr "Basic Information" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Add Filament Preset under this filament" msgid "We could create the filament presets for your following printer:" -msgstr "" +msgstr "We could create the filament presets for your following printer:" msgid "Select Vendor" -msgstr "" +msgstr "Select Vendor" msgid "Input Custom Vendor" -msgstr "" +msgstr "Input Custom Vendor" msgid "Can't find vendor I want" -msgstr "" +msgstr "Can't find vendor I want" msgid "Select Type" -msgstr "" +msgstr "Select Type" msgid "Select Filament Preset" -msgstr "" +msgstr "Select Filament Preset" msgid "Serial" -msgstr "" +msgstr "Serial" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "e.g. Basic, Matte, Silk, Marble" msgid "Filament Preset" -msgstr "" +msgstr "Filament Preset" msgid "Create" -msgstr "" +msgstr "Create" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "Vendor is not selected; please reselect vendor." msgid "Custom vendor is not input, please input custom vendor." -msgstr "" +msgstr "Custom vendor missing; please input custom vendor." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "Filament type is not selected, please reselect type." msgid "Filament serial is not inputed, please input serial." -msgstr "" +msgstr "Filament serial missing; please input serial." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"There may be disallowed characters in the vendor or serial input of the " +"filament. Please delete and re-enter." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." -msgstr "" +msgstr "All inputs in the custom vendor or serial are spaces. Please re-enter." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "The vendor can not be a number; please re-enter." msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +"You have not selected a printer or preset yet. Please select at least one." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"The Filament name %s you created already exists. \n" +"If you continue, the preset created will be displayed with its full name. Do " +"you want to continue?" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "Some existing presets have failed to be created, as follows:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"Do you want to rewrite it?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" @@ -13363,114 +14450,112 @@ msgid "" msgstr "" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Create Printer/Nozzle" msgid "Create Printer" -msgstr "" +msgstr "Create Printer" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Create Nozzle for Existing Printer" msgid "Create from Template" -msgstr "" +msgstr "Create from Template" msgid "Create Based on Current Printer" -msgstr "" +msgstr "Create Based on Current Printer" msgid "Import Preset" -msgstr "" +msgstr "Import Preset" msgid "Create Type" -msgstr "" +msgstr "Create Type" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "The model was not found; please reselect vendor." msgid "Select Model" -msgstr "" +msgstr "Select Model" msgid "Select Printer" -msgstr "" +msgstr "Select Printer" msgid "Input Custom Model" -msgstr "" +msgstr "Input Custom Model" msgid "Can't find my printer model" -msgstr "" +msgstr "Can't find my printer model" msgid "Rectangle" -msgstr "" +msgstr "Rectangle" msgid "Printable Space" -msgstr "" - -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" +msgstr "Printable Space" msgid "Hot Bed STL" -msgstr "" +msgstr "Hot Bed STL" msgid "Load stl" -msgstr "" +msgstr "Load stl" msgid "Hot Bed SVG" -msgstr "" +msgstr "Hot Bed SVG" msgid "Load svg" -msgstr "" +msgstr "Load svg" msgid "Max Print Height" -msgstr "" +msgstr "Max Print Height" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "The file exceeds %d MB, please import again." msgid "Exception in obtaining file size, please import again." -msgstr "" +msgstr "Exception in obtaining file size, please import again." msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "Preset path was not found; please reselect vendor." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "The printer model was not found, please reselect." msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "The nozzle diameter was not found; please reselect." msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "The printer preset was not found; please reselect." msgid "Printer Preset" -msgstr "" +msgstr "Printer Preset" msgid "Filament Preset Template" -msgstr "" +msgstr "Filament Preset Template" msgid "Deselect All" -msgstr "" +msgstr "Deselect All" msgid "Process Preset Template" -msgstr "" +msgstr "Process Preset Template" msgid "Back Page 1" -msgstr "" +msgstr "Back Page 1" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"You have not yet chosen which printer preset to create based on. Please " +"choose the vendor and model of the printer" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"You have entered a disallowed character in the printable area section on the " +"first page. Please use only numbers." msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "The custom printer or model missing; please input." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -13481,73 +14566,97 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserved.\n" +"\tCancel: Do not create a preset; return to the creation interface." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "You need to select at least one filament preset." msgid "You need to select at least one process preset." -msgstr "" +msgstr "You need to select at least one process preset." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "Create filament presets failed. As follows:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "Create process presets failed. As follows:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Vendor was not found; please reselect." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "Current vendor has no models, please reselect." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"You have not selected the vendor and model or input the custom vendor and " +"model." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"There may be escape characters in the custom printer vendor or model. Please " +"delete and re-enter." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" +"All inputs in the custom printer vendor or model are spaces. Please re-enter." msgid "Please check bed printable shape and origin input." -msgstr "" +msgstr "Please check bed printable shape and origin input." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"You have not yet selected the printer to replace the nozzle for; please " +"choose a printer." msgid "Create Printer Successful" -msgstr "" +msgstr "Create Printer Successful" msgid "Create Filament Successful" -msgstr "" +msgstr "Filament Created Successfully" msgid "Printer Created" -msgstr "" +msgstr "Printer Created" msgid "Please go to printer settings to edit your presets" -msgstr "" +msgstr "Please go to printer settings to edit your presets" msgid "Filament Created" -msgstr "" +msgstr "Filament Created" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Please go to filament settings to edit your presets if you need to.\n" +"Please note that nozzle temperature, hot bed temperature, and maximum " +"volumetric speed each have a significant impact on printing quality. Please " +"set them carefully." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" -msgstr "" - -msgid "Export Configs" -msgstr "" +msgstr "Printer Setting" msgid "Printer config bundle(.orca_printer)" msgstr "" @@ -13556,31 +14665,31 @@ msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Printer presets(.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Filament presets(.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Process presets(.zip)" msgid "initialize fail" -msgstr "" +msgstr "initialize fail" msgid "add file fail" -msgstr "" +msgstr "add file fail" msgid "add bundle structure file fail" -msgstr "" +msgstr "add bundle structure file fail" msgid "finalize fail" -msgstr "" +msgstr "finalize fail" msgid "open zip written fail" -msgstr "" +msgstr "open zip written fail" msgid "Export successful" -msgstr "" +msgstr "Export successful" #, c-format, boost-format msgid "" @@ -13589,6 +14698,10 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it?\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" @@ -13599,51 +14712,68 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"User's fillment preset set. \n" +"Can be shared with others." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Only display printers with changes to printer, filament, and process presets " +"are displayed." msgid "Only display the filament names with changes to filament presets." -msgstr "" +msgstr "Only display the filament names with changes to filament presets." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Only printer names with user printer presets will be displayed, and each " +"preset you choose will be exported as a zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Only the filament names with user filament presets will be displayed, \n" +"and all user filament presets in each filament name you select will be " +"exported as a zip." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Only printer names with changed process presets will be displayed, \n" +"and all user process presets in each printer name you select will be " +"exported as a zip." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Please select at least one printer or filament." msgid "Please select a type you want to export" -msgstr "" +msgstr "Please select a preset type you want to export" + +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." msgid "Edit Filament" -msgstr "" +msgstr "Edit Filament" msgid "Filament presets under this filament" -msgstr "" +msgstr "Filament presets under this filament" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Note: If the only preset under this filament is deleted, the filament will " +"be deleted after exiting the dialog." msgid "Presets inherited by other presets can not be deleted" -msgstr "" +msgstr "Presets inherited by other presets can not be deleted" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." @@ -13651,182 +14781,216 @@ msgstr[0] "" msgstr[1] "" msgid "Delete Preset" -msgstr "" +msgstr "Delete Preset" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "Are you sure to delete the selected preset?" msgid "Delete preset" -msgstr "" +msgstr "Delete preset" msgid "+ Add Preset" -msgstr "" +msgstr "+ Add Preset" msgid "Delete Filament" -msgstr "" +msgstr "Delete Filament" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"All the filament presets belong to this filament would be deleted. \n" +"If you are using this filament on your printer, please reset the filament " +"information for that slot." msgid "Delete filament" -msgstr "" +msgstr "Delete filament" msgid "Add Preset" -msgstr "" +msgstr "Add Preset" msgid "Add preset for new printer" -msgstr "" +msgstr "Add preset for new printer" msgid "Copy preset from filament" -msgstr "" +msgstr "Copy preset from filament" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "The filament choice not find filament preset, please reselect it" msgid "[Delete Required]" -msgstr "" +msgstr "[Delete Required]" msgid "Edit Preset" -msgstr "" +msgstr "Edit Preset" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "For more information, please check out our Wiki" msgid "Collapse" -msgstr "" +msgstr "Collapse" msgid "Daily Tips" +msgstr "Daily Tips" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "nozzle memorized: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" msgstr "" +"Your nozzle diameter in preset is not consistent with the saved nozzle " +"diameter. Have you changed your nozzle?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*Printing %s material with %s may cause nozzle damage" msgid "Need select printer" -msgstr "" +msgstr "Need select printer" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "The start, end or step is not valid value." msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" msgstr "" +"Unable to calibrate: maybe because the set calibration value range is too " +"large, or the step is too small" #, fuzzy msgid "Physical Printer" msgstr "Printer" msgid "Print Host upload" -msgstr "" +msgstr "Print Host upload" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "Could not get a valid Printer Host reference" msgid "Success!" -msgstr "" +msgstr "Success!" msgid "Are you sure to log out?" msgstr "" msgid "Refresh Printers" +msgstr "Refresh Printers" + +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" msgstr "" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" +msgstr "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgid "Open CA certificate file" -msgstr "" +msgstr "Open CA certificate file" #, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." msgstr "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." msgid "Login/Test" msgstr "" msgid "Connection to printers connected via the print host failed." -msgstr "" +msgstr "Connection to printers connected via the print host failed." #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Mismatched type of print host: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "Connection to AstroBox is working correctly." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Could not connect to AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Note: AstroBox version 1.1.0 or higher is required." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "Connection to Duet is working correctly." msgid "Could not connect to Duet" -msgstr "" +msgstr "Could not connect to Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Unknown error occured" msgid "Wrong password" -msgstr "" +msgstr "Wrong password" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Could not get resources to create a new connection" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "Upload not enabled on FlashAir card." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "Connection to FlashAir is working correctly and upload is enabled." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Could not connect to FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Note: FlashAir with firmware 2.00.02 or newer and activated upload function " +"is required." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "Connection to MKS is working correctly." msgid "Could not connect to MKS" -msgstr "" +msgstr "Could not connect to MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Connection to OctoPrint is working correctly." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Could not connect to OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Note: OctoPrint version 1.1.0 or higher is required." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Connection to Prusa SL1 / SL1S is working correctly." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Could not connect to Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Connection to PrusaLink is working correctly." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Could not connect to PrusaLink" msgid "Storages found" msgstr "" @@ -13853,19 +15017,21 @@ msgid "Could not connect to Prusa Connect" msgstr "" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Connection to Repetier is working correctly." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Could not connect to Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Note: Repetier version 0.90.0 or higher is required." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" #, boost-format msgid "" @@ -13873,6 +15039,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Parsing of host response failed.\n" +"Message body: \"%1%\"\n" +"Error: \"%2%\"" #, boost-format msgid "" @@ -13880,6 +15049,260 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Enumeration of host printers failed.\n" +"Message body: \"%1%\"\n" +"Error: \"%2%\"" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a small layer height, and results in almost negligible layer lines " +"and high print quality. It is suitable for most general printing cases." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. This results in " +"much higher print quality but a much longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height. This results in almost negligible layer lines and " +"slightly longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height. This results in slightly visible layer lines but shorter print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height. This results in almost invisible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost invisible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height. This results in minimal layer lines and higher print quality but " +"longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in minimal layer lines and much higher print quality " +"but much longer print time." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a normal layer height, and results in average layer lines and print " +"quality. It is suitable for most printing cases." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but slightly shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in less apparent layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost negligible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and longer print time." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in much more apparent layer lines and much lower print " +"quality, but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and slightly higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"It has a very big layer height, and results in very apparent layer lines, " +"low print quality and shorter printing time." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height. This results in very apparent layer lines and much lower print " +"quality but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height. This results in extremely apparent layer lines and much lower " +"print quality but much shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height. This results in slightly less but still apparent layer " +"lines and slightly higher print quality, but longer print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height. This results in less but still apparent layer lines and slightly " +"higher print quality, but longer print time in some cases." msgid "Connected to Obico successfully!" msgstr "" @@ -13893,17 +15316,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14005,6 +15426,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Fix Model\n" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " +"problems on the Windows system?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -14244,6 +15668,10 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"When do you need to print with the printer door opened?\n" +"Did you know that opening the printer door can reduce the probability of " +"extruder/hotend clogging when printing lower temperature filament with a " +"higher enclosure temperature? There is more info about this in the Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -14252,6 +15680,241 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Avoid warping\n" +"Did you know that when printing materials that are prone to warping such as " +"ABS, appropriately increasing the heatbed temperature can reduce the " +"probability of warping?" + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Please input a valid value (K in 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Printer local connection failed; please try again." + +#~ 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 "" +#~ "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." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to replace the other results?" + +#, 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 "" +#~ "There is already a previous calibration result with the same name: %s. " +#~ "Only one of the results with the same name is saved. Are you sure you " +#~ "want to replace the previous result?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Please find the corner with the perfect degree of extrusion" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Export &Configs" +#~ msgstr "Export &Configs" + +#~ msgid "Infill direction" +#~ msgstr "Infill direction" + +#~ 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." + +#~ 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." + +#~ msgid "Unload Filament" +#~ msgstr "Unload" + +#~ 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." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "active" +#~ msgstr "active" + +#~ msgid "Jump to layer" +#~ msgstr "Jump to layer" + +#~ msgid "Cabin humidity" +#~ msgstr "Cabin humidity" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Green means that AMS humidity is normal, orange means that humidity is " +#~ "high, and red means that humidity is too high. (Hygrometer: the lower, " +#~ "the better.)" + +#~ msgid "Desiccant status" +#~ msgstr "Desiccant status" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant. (The higher, the better.)" + +#~ 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 "" +#~ "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." + +#~ 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." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Success! G-code exported to %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Initialization failed (No Device)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Initialization failed (No Camera Device)!" + +#~ 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 "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)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Stopped [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Loading failed [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "No files [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Load failed [%d]" + +#~ 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 "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." + +#, 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 "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "presets?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "presets?" #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 4bc39e0b55..aa723bf2bb 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -11,8 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4.2\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "Pintar Soportes" @@ -257,6 +257,9 @@ msgstr "Reiniciar rotación" msgid "World coordinates" msgstr "Coordenadas cartesianas" +msgid "Object coordinates" +msgstr "Coordenadas del objeto" + msgid "°" msgstr "°" @@ -526,7 +529,7 @@ msgstr "Corte en Plano" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" -"Los bordes con pliegues pueden ser causados por la herramienta de corte, " +"Los bordes con pliegues pueden ser causa de la herramienta de corte, " "¿quieres arreglarlo ahora?" msgid "Repairing model object" @@ -1399,9 +1402,6 @@ msgstr "" "Se ha cargado el archivo de configuración \"%1%\", pero no se han reconocido " "algunos valores." -msgid "V" -msgstr "V" - 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." @@ -1409,8 +1409,10 @@ msgstr "" "OrcaSlicer 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 "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" @@ -1421,8 +1423,11 @@ 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." -# 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 "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" @@ -1518,6 +1523,9 @@ msgstr "Escoja uno o más archivos (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Elige uno o más archivos (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "Escoger archivo ZIP" + msgid "Choose one file (gcode/3mf):" msgstr "Elegir un archivo (gcode/3mf):" @@ -1590,6 +1598,14 @@ msgstr "Cargas en curso" msgid "Select a G-code file:" msgstr "Seleccionar un archivo de G-Code:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"No se pudo iniciar la descarga del URL. La carpeta de destino no se " +"seleccionó. Por favor escoge una carpeta de destino en el Asistente de " +"Configuración." + msgid "Import File" msgstr "Importar Archivo" @@ -1622,7 +1638,7 @@ msgid "Infill" msgstr "Relleno" msgid "Support" -msgstr "Soporte" +msgstr "Soportes" msgid "Flush options" msgstr "Opciones de caudal" @@ -1727,7 +1743,7 @@ msgid "Disc" msgstr "Disco" msgid "Torus" -msgstr "" +msgstr "Torus" msgid "Orca Cube" msgstr "Cubo Orca" @@ -1759,7 +1775,7 @@ msgstr "" "perímetro (min_width_top_surface)\" a 0 para que \"Sólo un perímetro en las " "superficies superiores\" funcione mejor. \n" "Sí - Cambiar estos ajustes automáticamente \n" -"No - No cambiar estos ajustes para mí." +"No - No cambiar estos ajustes para mí" msgid "Text" msgstr "Texto" @@ -1822,8 +1838,8 @@ msgstr "Por defecto" msgid "Filament %d" msgstr "Filamento %d" -msgid "active" -msgstr "activo" +msgid "current" +msgstr "actual" msgid "Scale to build volume" msgstr "Escala para la impresión del volumen" @@ -1915,6 +1931,9 @@ msgstr "Añadir Primitivo" msgid "Add Handy models" msgstr "Añadir modelos prácticos" +msgid "Add Models" +msgstr "Añadir Modelos" + msgid "Show Labels" msgstr "Mostrar Etiquetas" @@ -1953,25 +1972,31 @@ 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 bandeja 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 bandeja actual" msgid "Arrange" msgstr "Organizar" msgid "arrange current plate" -msgstr "posicionar la bandeja actual" +msgstr "Posicionar la bandeja actual" + +msgid "Reload All" +msgstr "Recargar todo" + +msgid "reload all from disk" +msgstr "Recargar todo desde disco" msgid "Auto Rotate" msgstr "Rotación Automática" msgid "auto rotate current plate" -msgstr "auto rotar la bandeja actual" +msgstr "Auto rotar la bandeja actual" msgid "Delete Plate" msgstr "Borrar Bandeja" @@ -2000,9 +2025,6 @@ msgstr "Cambiar el Filamento" msgid "Set Filament for selected items" msgstr "Ajustar el filamento para los elementos seleccionados" -msgid "current" -msgstr "actual" - msgid "Unlock" msgstr "Desbloquear" @@ -2342,9 +2364,6 @@ msgstr "Inserta el G-Code personalizado usado en la capa actual:" msgid "Jump to Layer" msgstr "Salta a la Capa" -msgid "Jump to layer" -msgstr "Salta a la capa" - msgid "Please enter the layer number" msgstr "Por favor, introduce el número de capa" @@ -2397,16 +2416,18 @@ msgid "Failed to connect to the server" msgstr "No se ha podido conectar con el servidor" msgid "Check the status of current system services" -msgstr "Check the status of current system services" +msgstr "Comprobar el estado de los servicios actuales del sistema" msgid "code" -msgstr "code" +msgstr "código" msgid "Failed to connect to cloud service" -msgstr "Failed to connect to cloud service" +msgstr "Error al conectar con el servicio en la nube" 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" +msgstr "" +"Haga clic en el hipervínculo anterior para ver el estado del servicio en la " +"nube" msgid "Failed to connect to the printer" msgstr "No se ha podido conectar a la impresora" @@ -2414,8 +2435,8 @@ 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 "Please check the network connection of the printer and Orca." +msgstr "Compruebe la conexión de red de la impresora y Orca." msgid "Connecting..." msgstr "Conectando…" @@ -2438,11 +2459,11 @@ msgstr "Auto Rellenado" msgid "AMS not connected" msgstr "AMS no conectado" -msgid "Load Filament" -msgstr "Cargar" +msgid "Load" +msgstr "Carga" -msgid "Unload Filament" -msgstr "Descargar" +msgid "Unload" +msgstr "Descarga" msgid "Ext Spool" msgstr "Carrete Externo" @@ -2459,7 +2480,7 @@ msgstr "Reintentar" msgid "Calibrating AMS..." msgstr "Calibración de AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Se ha producido un problema durante la calibración. Haga clic para ver la " "solución." @@ -2498,11 +2519,11 @@ msgid "Check filament location" msgstr "Probar localización de filamento" msgid "Grab new filament" -msgstr "Grab new filament" +msgstr "Cargar nuevo filamento" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" "Elija una ranura AMS y pulse el botón \"Cargar\" o \"Descargar\" para cargar " "o descargar automáticamente el filamento." @@ -2588,10 +2609,10 @@ msgid "Filling" msgstr "Relleno" msgid "Bed filling canceled." -msgstr "Bed filling canceled." +msgstr "Relleno de cama cancelado." msgid "Bed filling done." -msgstr "Bed filling done." +msgstr "Relleno de cama hecho." msgid "Searching for optimal orientation" msgstr "Buscando una orientación óptima" @@ -2609,16 +2630,18 @@ msgid "Login failed" msgstr "Fallo en el inicio de sesión" msgid "Please check the printer network connection." -msgstr "Por favor, comprueba la conexión de área local." +msgstr "Por favor, compruebe la conexión de área local." msgid "Abnormal print file data. Please slice again." -msgstr "Abnormal print file data: please slice again." +msgstr "Datos de archivo de impresión anormales. Vuelva a laminar." msgid "Task canceled." -msgstr "Task canceled." +msgstr "Tarea cancelada." 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." +msgstr "" +"Se ha agotado el tiempo de carga. Compruebe el estado de la red e inténtelo " +"de nuevo." msgid "Cloud service connection failed. Please try again." msgstr "" @@ -2626,43 +2649,47 @@ msgstr "" "nuevo." msgid "Print file not found. please slice again." -msgstr "Print file not found; please slice again." +msgstr "" +"No se ha encontrado el archivo de impresión; por favor, lamine de nuevo." 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." +"El archivo de impresión supera el tamaño máximo permitido (1 GB). Por favor, " +"simplifique el modelo y vuelva a laminarlo" 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 "Failed to upload file to ftp. Please try again." -msgstr "Failed to upload file to ftp. Please try again." +msgstr "" +"No se ha podido cargar el archivo en el ftp. Por favor, inténtelo de nuevo." 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." +"Compruebe el estado actual del servidor Bambú haciendo clic en el enlace " +"anterior." 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." +"El tamaño del archivo de impresión es demasiado grande. Ajuste el tamaño del " +"archivo e inténtalo de nuevo." 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." +msgstr "" +"Archivo de impresión no encontrado; por favor, laminelo de nuevo y envíelo " +"para imprimir." 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." +"No se ha podido cargar el archivo de impresión a través de FTP. Compruebe el " +"estado de la red e inténtelo de nuevo." msgid "Sending print job over LAN" msgstr "Enviando el trabajo de impresión a través de la LAN" @@ -2772,14 +2799,8 @@ msgstr "Orca Slicer 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" -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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer se basa en PrusaSlicer y BambuStudio" msgid "Libraries" msgstr "Librerías" @@ -2878,11 +2899,13 @@ msgstr "¿Estás seguro que quieres limpiar la información de filamento?" msgid "You need to select the material type and color first." msgstr "Necesitas seleccionar el tipo y el color del material primero." -msgid "Please input a valid value (K in 0~0.3)" -msgstr "Por favor, introduzca un valor válido (K en 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "Por favor, introduzca un valor válido (K en %.1f~%.1f)" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "Por favor, introduzca un valor válido (K en 0~0.3, N en 0.6~2.0))" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "Introduzca un valor válido (K en %.1f~%.1f, N en %.1f~%.1f)" msgid "Other Color" msgstr "Otro color" @@ -2989,38 +3012,19 @@ msgstr "Desactivar AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Imprimir con el filamento montado en la parte posterior del chasis" -msgid "Cabin humidity" -msgstr "Humedad de cabina" +msgid "Current Cabin humidity" +msgstr "Humedad actual de la cabina" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." 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.)" - -msgid "Desiccant status" -msgstr "Estado del secante" - -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)" - -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 "" -"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." +"Cambie el desecante cuando esté demasiado húmedo. El indicador puede no ser " +"preciso en los siguientes casos: cuando la tapa está abierta o se cambia el " +"paquete de desecante, tarda horas en absorber la humedad, las bajas " +"temperaturas también ralentizan el proceso." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3080,6 +3084,12 @@ msgstr "" "(Actualmente admite el suministro automático de consumibles con la misma " "marca, tipo de material y color)." +msgid "DRY" +msgstr "SECO" + +msgid "WET" +msgstr "HÚMEDO" + msgid "AMS Settings" msgstr "Ajustes del AMS" @@ -3094,11 +3104,11 @@ msgstr "" "nuevo filamento de Bambu Lab. Esto tardara unos 20 segundos." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" "Nota: si se inserta un nuevo filamento durante la impresión, el AMS no leerá " -"automáticamente ninguna información hasta que la impresión haya finalizado." +"automáticamente ninguna información hasta que finalice la impresión." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3150,6 +3160,16 @@ msgstr "" "El AMS continuará con otra bobina con las mismas propiedades de filamento " "automáticamente cuando el filamento se termine" +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "Archivo" @@ -3223,6 +3243,66 @@ msgstr "Operando reservado flotante" msgid "Stack overflow" msgstr "Columna de Sobrecaudal" +msgid "Running post-processing scripts" +msgstr "Ejecutando scripts de post-procesado" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "Se produjo un error desconocido durante la exportación del código G." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Error al copiar el código G temporal en el código G de salida. ¿Quizás la " +"tarjeta SD está bloqueada contra escritura?\n" +"Mensaje de error: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"La copia del código G temporal al código G de salida ha fallado. Puede haber " +"un problema con el dispositivo de destino, intenta exportar nuevamente o usa " +"un dispositivo diferente. El código G de salida dañado está en %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"El cambio de nombre del código G después de copiar en la carpeta de destino " +"seleccionada ha fallado. La ruta actual es %1%.tmp. Intenta exportar de " +"nuevo." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"La copia del código G temporal ha finalizado, pero el código original en %1% " +"no se pudo abrir durante la verificación de copia. El código G de salida " +"está en %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"La copia del código G temporal ha finalizado, pero el código exportado no se " +"pudo abrir durante la verificación de la copia. El código G de salida está " +"en %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Archivo de código G exportado a %1%" + msgid "Unknown error when export G-code." msgstr "Error desconocido al exportar el G-Code." @@ -3236,13 +3316,6 @@ msgstr "" "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" - -msgid "Running post-processing scripts" -msgstr "Ejecutando scripts de post-procesado" - 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" @@ -3252,6 +3325,226 @@ msgstr "" "Programación de la carga a %1%. Mire la Ventana -> Cola de Impresión del " "Anfitrión" +msgid "Device" +msgstr "Dispositivo" + +msgid "Task Sending" +msgstr "Envío de tareas" + +msgid "Task Sent" +msgstr "Tarea enviada" + +msgid "Edit multiple printers" +msgstr "Editar varias impresoras" + +msgid "Select connected printers (0/6)" +msgstr "Seleccionar impresoras conectadas (0/6)" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "Seleccionar Impresoras Conectadas (%d/6)" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "El número máximo de impresoras que se pueden seleccionar es %d" + +msgid "Offline" +msgstr "Fuera de línea" + +msgid "No task" +msgstr "Ninguna tarea" + +msgid "View" +msgstr "Vista" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "Editar Impresoras" + +msgid "Device Name" +msgstr "Nombre del dispositivo" + +msgid "Task Name" +msgstr "Nombre de la tarea" + +msgid "Device Status" +msgstr "Estado del dispositivo" + +msgid "Actions" +msgstr "Acciones" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Seleccione aquí los dispositivos que desea gestionar (hasta 6 dispositivos)" + +msgid "Add" +msgstr "Añadir" + +msgid "Idle" +msgstr "Inactivo" + +msgid "Printing" +msgstr "Imprimendo" + +msgid "Upgrading" +msgstr "Actualizando" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "Sincronizando" + +msgid "Printing Finish" +msgstr "Impresión Finalizada" + +msgid "Printing Failed" +msgstr "Impresión fallida" + +msgid "Printing Pause" +msgstr "Pausa de Impresión" + +msgid "Prepare" +msgstr "Preparar" + +msgid "Slicing" +msgstr "Laminando" + +msgid "Pending" +msgstr "Pendiente" + +msgid "Sending" +msgstr "Enviando" + +msgid "Sending Finish" +msgstr "Envío Finalizado" + +msgid "Sending Cancel" +msgstr "Envío Cancelado" + +msgid "Sending Failed" +msgstr "Envío fallido" + +msgid "Print Success" +msgstr "Impresión exitosa" + +msgid "Print Failed" +msgstr "Error de impresión" + +msgid "Removed" +msgstr "Eliminado" + +msgid "Resume" +msgstr "Reanudar" + +msgid "Stop" +msgstr "Detener" + +msgid "Task Status" +msgstr "Estado de la tarea" + +msgid "Sent Time" +msgstr "Hora de envío" + +msgid "There are no tasks to be sent!" +msgstr "No hay tareas que enviar." + +msgid "No historical tasks!" +msgstr "Sin tareas históricas" + +msgid "Loading..." +msgstr "Cargando..." + +msgid "No AMS" +msgstr "Sin AMS" + +msgid "Send to Multi-device" +msgstr "Enviar a multidispositivo" + +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 "There is no device available to send printing." +msgstr "No hay ningún dispositivo disponible para enviar impresiones." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "El número de impresoras en uso simultáneamente no puede ser igual a 0." + +msgid "Use External Spool" +msgstr "Utilizar carrete externo" + +msgid "Use AMS" +msgstr "Usar AMS" + +msgid "Select Printers" +msgstr "Seleccionar impresoras" + +msgid "Ams Status" +msgstr "Estado del AMS" + +msgid "Printing Options" +msgstr "Opciones de impresión" + +msgid "Bed Leveling" +msgstr "Nivelación de la cama" + +msgid "Timelapse" +msgstr "Intervalo" + +msgid "Flow Dynamic Calibration" +msgstr "Calibración dinámica del caudal" + +msgid "Send Options" +msgstr "Opciones de envío" + +msgid "Send to" +msgstr "Mandar a" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"impresoras al mismo tiempo.(Depende de cuántos aparatos puedan calentarse al " +"mismo tiempo)." + +msgid "Wait" +msgstr "Espere" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minuto cada tanda. (Depende de lo que tarde en terminar de calentarse)." + +msgid "Send" +msgstr "Enviar" + +msgid "Name is invalid;" +msgstr "El nombre no es válido;" + +msgid "illegal characters:" +msgstr "caracteres no permitidos:" + +msgid "illegal suffix:" +msgstr "sufijo no permitido:" + +msgid "The name is not allowed to be empty." +msgstr "No se permite que el nombre esté vacío." + +msgid "The name is not allowed to start with space character." +msgstr "No se permite que el nombre comience con un carácter de espacio." + +msgid "The name is not allowed to end with space character." +msgstr "No se permite que el nombre termine con un espacio." + +msgid "The name length exceeds the limit." +msgstr "La longitud del nombre supera el límite." + msgid "Origin" msgstr "Origen" @@ -3324,6 +3617,23 @@ msgstr "Escoge un archivo STL para importar el modelo de la cama de impresión:" msgid "Bed Shape" msgstr "Forma de la cama de impresión" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"La temperatura mínima recomendada es inferior a 190 grados o la temperatura " +"máxima recomendada es superior a 300 grados.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"La temperatura mínima recomendada no puede ser superior a la temperatura " +"máxima recomendada.\\n\n" + +msgid "Please check.\n" +msgstr "Por favor, compruébalo.\n" + 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" @@ -3412,27 +3722,6 @@ msgstr "" "\n" "El valor se restablecerá a 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 "" -"El modo espiral sólo funciona cuando los bucles de perímetro son 1, el " -"soporte está desactivado, las capas superiores de la cubierta son 0, la " -"densidad de relleno de baja densidad es 0 y el tipo de timelapse es el " -"tradicional." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Las máquina con estructura I3 no generarán videos de timelapse." - -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 "" -"¿Cambiar estos ajustes automáticamente? \n" -"Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" -"No - Dejar de usar el modo espiral esta vez" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3503,6 +3792,27 @@ msgstr "" "seam_slope_start_height debe ser menor que layer_height.\n" "Restablecer a 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 "" +"El modo espiral sólo funciona cuando los bucles de perímetro son 1, el " +"soporte está desactivado, las capas superiores de la cubierta son 0, la " +"densidad de relleno de baja densidad es 0 y el tipo de timelapse es el " +"tradicional." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Las máquina con estructura I3 no generarán videos de timelapse." + +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 "" +"¿Cambiar estos ajustes automáticamente? \n" +"Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" +"No - Dejar de usar el modo espiral esta vez" + msgid "Auto bed leveling" msgstr "Nivelación de cama automática" @@ -3612,18 +3922,6 @@ msgstr "Pausa de error de primera capa" msgid "Nozzle clog pause" msgstr "Pausa de obstrucción de boquilla" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Placa Base" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Desconocido" @@ -3766,7 +4064,7 @@ msgstr "Marcas de tiempo" #, boost-format msgid "Specific for %1%" -msgstr "Específico para %1%." +msgstr "Específico para %1%" msgid "Presets" msgstr "Perfiles" @@ -3786,9 +4084,6 @@ msgstr "Ajustes de la impresora" msgid "parameter name" msgstr "nombre del parámetro" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s no puede ser un porcentaje" @@ -3800,6 +4095,10 @@ msgstr "El valor %s está fuera de rango, ¿continuar?" msgid "Parameter validation" msgstr "Validación de parámetros" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "El valor %s está fuera de rango. El rango válido es de %d a %d." + msgid "Value is out of range." msgstr "El valor está fuera de rango." @@ -3813,6 +4112,20 @@ msgstr "" "SÍ para %s%%, \n" "NO para %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Formato de entrada no válido. Se espera un vector de dimensiones con el " +"siguiente formato: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Valor de entrada fuera de rango" + +msgid "Some extension in the input is invalid" +msgstr "Alguna extensión de la entrada no es válida" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vector esperado: \"%1%\"" @@ -3880,12 +4193,12 @@ msgstr "Pantalla" msgid "Flushed" msgstr "Descargado" -msgid "Total" -msgstr "Total" - msgid "Tower" msgstr "Torre" +msgid "Total" +msgstr "Total" + msgid "Total Estimation" msgstr "Estimación total" @@ -3988,6 +4301,12 @@ msgstr "Estimación de Tiempo" msgid "Normal mode" msgstr "Modo normal" +msgid "Total Filament" +msgstr "Filamento total" + +msgid "Model Filament" +msgstr "Modelo Filamento" + msgid "Prepare time" msgstr "Planificar tiempo" @@ -4081,6 +4400,9 @@ msgstr "Opciones de Organización" msgid "Spacing" msgstr "Separación" +msgid "0 means auto spacing." +msgstr "0 significa auto separación." + msgid "Auto rotate for arrangement" msgstr "Rotación automática para el posicionamiento" @@ -4093,9 +4415,6 @@ msgstr "Evitar la zona de calibración del extrusor" msgid "Align to Y axis" msgstr "Alinear con el eje Y" -msgid "Add" -msgstr "Añadir" - msgid "Add plate" msgstr "Añadir bandeja" @@ -4228,6 +4547,9 @@ msgstr "Monitorización de Auto-Grabado" msgid "Go Live" msgstr "Ir A En Vivo" +msgid "Liveview Retry" +msgstr "Reintentar Liveview" + msgid "Resolution" msgstr "Resolución" @@ -4280,14 +4602,11 @@ msgstr "Cerrando la aplicación mientras se modifican algunos perfiles." msgid "Logging" msgstr "Registrando" -msgid "Prepare" -msgstr "Preparar" - msgid "Preview" msgstr "Previsualización" -msgid "Device" -msgstr "Dispositivo" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "Proyecto" @@ -4313,9 +4632,6 @@ msgstr "Laminar todo" msgid "Export G-code file" msgstr "Exportar archivo G-Code" -msgid "Send" -msgstr "Enviar" - msgid "Export plate sliced file" msgstr "Explorar archivo de laminado de bandeja de impresión" @@ -4436,6 +4752,12 @@ msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Cargar un modelo" +msgid "Import Zip Archive" +msgstr "Importar archivo Zip" + +msgid "Load models contained within a zip archive" +msgstr "Cargar modelos contenidos en un archivo zip" + msgid "Import Configs" msgstr "Importar configuraciones" @@ -4469,8 +4791,8 @@ msgstr "Exportar G-Code" msgid "Export current plate as G-code" msgstr "Exportar bandeja actual cómo G-Code" -msgid "Export &Configs" -msgstr "Exportar &Configuraciones" +msgid "Export Preset Bundle" +msgstr "Paquete de preajustes de exportación" msgid "Export current configuration to files" msgstr "Exportar configuración actual a archivos" @@ -4566,14 +4888,11 @@ msgid "Show &Overhang" msgstr "Show &Overhang" msgid "Show object overhang highlight in 3D scene" -msgstr "Show object overhang highlight in 3D scene" +msgstr "Mostrar resalte de voladizos de objeto en escena 3D" msgid "Preferences" msgstr "Preferencias" -msgid "View" -msgstr "Vista" - msgid "Help" msgstr "Ayuda" @@ -4629,7 +4948,7 @@ msgid "Open a G-code file" msgstr "Abrir un archivo G-Code" msgid "Re&load from Disk" -msgstr "Re&cargar desde el Disco" +msgstr "Recargar desde el Disco" msgid "Reload the plater from disk" msgstr "Cargar la base del disco" @@ -4640,10 +4959,10 @@ msgstr "Exportar &Movimientos como OBJ" msgid "Export toolpaths as OBJ" msgstr "Exportar trayectorias de herramientas como OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Abrir $Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Abrir Studio" msgid "&Quit" @@ -4746,42 +5065,62 @@ msgstr "" msgid "Synchronization" msgstr "Sincronización" -msgid "Initialize failed (No Device)!" -msgstr "¡Inicialización fallida (No hay dispositivo)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "¡Inicialización fallida (No hay Cámara)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"La impresora está ocupada descargando. Por favor, espere a que finalice." +"El dispositivo no puede gestionar más conversaciones. Intentalo más tarde.El " +"aparato no puede manejar más conversaciones. Vuelva a intentarlo más tarde." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Fallo inicializando (No soportado en la actual versión de la impresora)!" +"El reproductor no funciona correctamente. Vuelva a instalar el reproductor " +"del sistema." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicialización fallida (No accesible en el modo solo Red Local)" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"El reproductor no se carga; haga clic en el botón \"reproducir\" para volver " +"a intentarlo." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialización fallida (Perdida la IP de red de la impresora)" +msgid "Please confirm if the printer is connected." +msgstr "Confirme si la impresora está conectada." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"La impresora está actualmente ocupada descargando. Inténtelo de nuevo cuando " +"finalice." + +msgid "Printer camera is malfunctioning." +msgstr "La cámara de la impresora funciona mal." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Se ha producido un problema. Actualice el firmware de la impresora e " +"inténtelo de nuevo." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." + +msgid "Please enter the IP of printer to connect." +msgstr "Por favor, introduzca la IP de la impresora a conectar." msgid "Initializing..." msgstr "Iniciando..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "¡Fallo al inicializar (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Conexión fallida. Compruebe la red e inténtelo de nuevo" -msgid "Network unreachable" -msgstr "Red inalcanzable" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Compruebe la red e inténtelo de nuevo. Puede reiniciar o actualizar la " +"impresora si el problema persiste." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Parado [%d]" +msgid "The printer has been logged out and cannot connect." +msgstr "La impresora se ha desconectado y no puede conectarse." msgid "Stopped." msgstr "Detenido." @@ -4812,19 +5151,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Inicialización de cámara virtual (%s)" +msgid "Network unreachable" +msgstr "Red inalcanzable" + msgid "Information" msgstr "Información" msgid "Playing..." msgstr "Reproduciendo..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "¡La carga ha fallado [%d]!" - -msgid "Loading..." -msgstr "Cargando..." - msgid "Year" msgstr "Año" @@ -4843,9 +5178,6 @@ msgstr "Agrupar archivos por mes, primero los recientes." msgid "Show all files, recent first." msgstr "Mostrar todos los archivos, primero los recientes." -msgid "Timelapse" -msgstr "Intervalo" - msgid "Switch to timelapse files." msgstr "Cambiar a archivos de timelapse." @@ -4873,6 +5205,12 @@ msgstr "Seleccionar" msgid "Batch manage files." msgstr "Arhivos de proceso por lotes." +msgid "Refresh" +msgstr "Actualizar" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "No hay impresoras." @@ -4883,13 +5221,36 @@ msgstr "Error de conexión [%d]!" msgid "Loading file list..." msgstr "Cargando lista de archivos..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "No files [%d]" +msgid "No files" +msgstr "No hay archivos" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"Error de inicialización (almacenamiento no disponible, inserte una tarjeta " +"SD)." + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Load failed [%d]" +msgid "Initialize failed (%s)!" +msgstr "¡Fallo al inicializar (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4911,11 +5272,11 @@ 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 fetch model information from printer." +msgstr "No se pudo recuperar la información del modelo de la impresora." -msgid "Failed to parse model infomations." -msgstr "Fallo al analizar la información de modelado." +msgid "Failed to parse model information." +msgstr "No se pudo analizar la información del modelo." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4928,6 +5289,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "¡El archivo '%s' se perdió!\" Por favor, vuelva a descargárselo." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "Descarga esperando..." @@ -4944,15 +5313,14 @@ msgstr "Descarga finalizada" msgid "Downloading %d%%..." msgstr "Descargando %d%%..." -msgid "Connection lost. Please retry." -msgstr "Conexión perdida. Por favor, reinténtelo." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"El dispositivo no puede gestionar más conversaciones. Intentalo más tarde.El " -"aparato no puede manejar más conversaciones. Vuelva a intentarlo más tarde." +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "File not exists." +msgid "File does not exist." msgstr "El archivo no existe." msgid "File checksum error. Please retry." @@ -5010,12 +5378,6 @@ msgstr "Invertir eje de Balanceo" msgid "Printing Progress" msgstr "Progreso de impresión" -msgid "Resume" -msgstr "Reanudar" - -msgid "Stop" -msgstr "Detener" - msgid "0" msgstr "0" @@ -5060,6 +5422,9 @@ msgstr "Cambiar vista de cámara" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "Partes de la Impresora" + msgid "Print Options" msgstr "Opciones de Impresora" @@ -5078,9 +5443,6 @@ msgstr "Costura" msgid "Bed" msgstr "Cama" -msgid "Unload" -msgstr "Descarga" - msgid "Debug Info" msgstr "Información de Depuración" @@ -5190,10 +5552,10 @@ msgid "Number of images successfully uploaded" msgstr "Número de imágenes cargadas satisfactoriamente" msgid " upload failed" -msgstr " carga fallida" +msgstr " Carga fallida" msgid " upload config prase failed\n" -msgstr " error en la carga de configuración\n" +msgstr " Error en la carga de configuración\n" msgid " No corresponding storage bucket\n" msgstr " Sin cubo de almacenamiento correspondiente\n" @@ -5235,7 +5597,7 @@ msgstr "" " código de error: " msgid "error message: " -msgstr "mensaje de error: " +msgstr "Mensaje de error: " msgid "" "\n" @@ -5270,9 +5632,6 @@ msgstr "Estado" msgid "Update" msgstr "Actualizar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "No mostrar de nuevo" @@ -5303,6 +5662,41 @@ msgstr "%s información" msgid "Skip" msgstr "Saltar" +msgid "Newer 3mf version" +msgstr "Nueva versión 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"La versión del archivo 3mf está en Beta y es más reciente que la versión " +"actual de OrcaSlicer." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Si desea probar Orca Slicer Beta, puede hacer clic en" + +msgid "Download Beta Version" +msgstr "Descargar versión beta" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" +"La versión del archivo 3mf es más reciente que la versión actual de Orca " +"Slicer." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Actualice su Orca Slicer podría habilitar toda la funcionalidad en el " +"archivo 3mf." + +msgid "Current Version: " +msgstr "Versión actual: " + +msgid "Latest Version: " +msgstr "Ultima versión: " + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "Ratón 3D desconectado." @@ -5372,12 +5766,12 @@ msgstr[1] "%1$d Los objetos se han cargado como partes del objeto de corte" msgid "ERROR" msgstr "ERROR" -msgid "CANCELED" -msgstr "CANCELADO" - msgid "COMPLETED" msgstr "COMPLETADO" +msgid "CANCELED" +msgstr "CANCELADO" + msgid "Cancel upload" msgstr "Carga cancelada" @@ -5489,6 +5883,27 @@ msgstr "Permitir Sonido de Aviso" msgid "Filament Tangle Detect" msgstr "Detección de Enredos de Filamentos" +msgid "Nozzle Clumping Detection" +msgstr "Detección de Atascos de Boquilla" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Compruebe si la boquilla está atascada por el filamento u otros objetos " +"extraños." + +msgid "Nozzle Type" +msgstr "Tipo de Boquilla" + +msgid "Stainless Steel" +msgstr "Acero Inoxidable" + +msgid "Hardened Steel" +msgstr "Acero endurecido" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Global" @@ -5697,9 +6112,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Será mejor que actualices tu software.\n" -msgid "Newer 3mf version" -msgstr "Nueva versión 3mf" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5752,6 +6164,9 @@ msgstr "" msgid "The name may show garbage characters!" msgstr "¡El nombre puede mostrar caracteres no válidos!" +msgid "Remember my choice." +msgstr "Recordar my elección." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5881,9 +6296,6 @@ msgstr "No es posible recargar:" msgid "Error during reload" msgstr "Error durante la recarga" -msgid "Slicing" -msgstr "Laminando" - msgid "There are warnings after slicing models:" msgstr "Hay alertas después de laminar los modelos:" @@ -5944,9 +6356,15 @@ msgstr "Importando modelo" msgid "prepare 3mf file..." msgstr "preparar el archivo 3mf..." +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "descargando proyecto..." +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Proyecto descargado %d%%" @@ -5970,6 +6388,22 @@ msgstr "no contiene G-Code válido." msgid "Error occurs while loading G-code file" msgstr "Se produce un error al cargar el archivo de G-Code" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "La carga del archivo ZIP en la ruta %1% ha fallado." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Fallo al descomprimir el archivo en %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"No se ha encontrado el archivo descomprimido en %1%. No se ha podido " +"descomprimir el archivo." + msgid "Drop project file" msgstr "Soltar el archivo del proyecto" @@ -5994,19 +6428,13 @@ msgstr "¡Los archivos de G-Code 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!" -msgid "Add Models" -msgstr "Añadir Modelos" - msgid "All objects will be removed, continue?" -msgstr "Todos los objetos serán eliminados, deseas continuar?" +msgstr "Todos los objetos serán eliminados, ¿desea continuar?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" "El proyecto actual tiene cambios sin guardar, ¿guardarlos antes de continuar?" -msgid "Remember my choice." -msgstr "Recordar my elección." - msgid "Number of copies:" msgstr "Número de copias:" @@ -6039,10 +6467,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6204,6 +6648,14 @@ msgstr "Región de inicio de sesión" msgid "Stealth Mode" msgstr "Modo invisible" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" +"Esto detiene la transmisión de datos a los servicios en la nube de Bambu. " +"Los usuarios que no utilicen máquinas BBL o que solo utilicen el modo LAN " +"pueden activar esta función de forma segura." + msgid "Enable network plugin" msgstr "Activar el plugin de red" @@ -6219,6 +6671,28 @@ msgstr "Imperial" msgid "Units" msgstr "Unidades" +msgid "Allow only one OrcaSlicer instance" +msgstr "Permitir sólo una instancia de OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"En OSX siempre hay una sola instancia de la aplicación ejecutándose por " +"defecto. Sin embargo, está permitido ejecutar varias instancias de la misma " +"aplicación desde la línea de comandos. En tal caso, esta configuración sólo " +"permitirá una instancia." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Si esta opción está activada, al iniciar OrcaSlicer y otra instancia del " +"mismo OrcaSlicer ya se está ejecutando, esa instancia se reactivará en su " +"lugar." + msgid "Home" msgstr "Página de Inicio" @@ -6228,6 +6702,21 @@ msgstr "Página por defecto" msgid "Set the page opened on startup." msgstr "Establece la página que se abre al inicio." +msgid "Touchpad" +msgstr "Panel táctil" + +msgid "Camera style" +msgstr "Estilo de cámara" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Selecciona el estilo de navegación de la cámara:\n" +"Por defecto: LMB+mover para rotación, RMB/MMB+mover para paneo.\n" +"Panel táctil: Alt+mover para rotación, Shift+mover para paneo." + msgid "Zoom to mouse position" msgstr "Hacer zoom en la posición del ratón" @@ -6246,6 +6735,12 @@ msgstr "" "Si está activada, utiliza la cámara libre. Si no está activada, utiliza la " "cámara restringida." +msgid "Reverse mouse zoom" +msgstr "Invertir el zoom del ratón" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "Si se activa, invierte la dirección del zoom con la rueda del ratón." + msgid "Show splash screen" msgstr "Mostrar pantalla de inicio" @@ -6264,6 +6759,36 @@ msgstr "Volumenes de descarga: Auto calcular en cada cambio de color." msgid "If enabled, auto-calculate everytime the color changed." msgstr "Si está activado, auto calcula en cada cambio de color." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "" +"Volúmenes de descarga: Cálculo automático cada vez que se cambia el " +"filamento." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" +"Si está activada, calcula automáticamente cada vez que se cambia el filamento" + +msgid "Remember printer configuration" +msgstr "Recordar la configuración de la impresora" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Si está activada, Orca recordará y cambiará la configuración de archivos/" +"procesos para cada impresora automáticamente." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "Gestión multidispositivo (surte efecto tras reiniciar Orca)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Con esta opción activada, puede enviar una tarea a varios dispositivos al " +"mismo tiempo y gestionar varios dispositivos." + msgid "Network" msgstr "Red" @@ -6311,6 +6836,48 @@ msgstr "" "Si se activa, ajusta OrcaSlicer como aplicación por defecto para abrir " "archivos .step" +msgid "Associate web links to OrcaSlicer" +msgstr "Asociar enlaces web a OrcaSlicer" + +msgid "Associate URLs to OrcaSlicer" +msgstr "Asociar URLs a OrcaSlicer" + +msgid "Current association: " +msgstr "Asociación actual:" + +msgid "Associate prusaslicer://" +msgstr "Asociar prusaslicer://" + +msgid "Not associated to any application" +msgstr "No asociado a ninguna aplicación" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Asociar OrcaSlicer con prusaslicer:// enlaces para que Orca puede abrir " +"modelos de Printables.com" + +msgid "Associate bambustudio://" +msgstr "Asociar bambustudio://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Asociar OrcaSlicer con bambustudio:// enlaces para que Orca puede abrir " +"modelos de makerworld.com" + +msgid "Associate cura://" +msgstr "Asociar cura://" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Asociar OrcaSlicer con enlaces cura:// para que Orca pueda abrir modelos " +"desde thingiverse.com" + msgid "Maximum recent projects" msgstr "Proyectos recientes máximos" @@ -6333,7 +6900,7 @@ msgstr "" "ocasional." msgid "every" -msgstr "todo" +msgstr "Todo" msgid "The peroid of backup in seconds." msgstr "El periodo de copia de seguridad en segundos." @@ -6482,12 +7049,21 @@ msgstr "Seleccionar/Borrar impresoras (perfiles del sistema)" msgid "Create printer" msgstr "Crear impresora" -msgid "Incompatible" -msgstr "Incompatible" - msgid "The selected preset is null!" msgstr "¡El ajuste seleccionado es nulo!" +msgid "End" +msgstr "Final" + +msgid "Customize" +msgstr "Personalizar" + +msgid "Other layer filament sequence" +msgstr "Secuencia de filamentos de otras capas" + +msgid "Please input layer value (>= 2)." +msgstr "Introduzca el valor de la capa (>= 2)." + msgid "Plate name" msgstr "Nombre de Bandeja" @@ -6497,14 +7073,20 @@ msgstr "Lo mismo que la Secuencia Global de Impresión" msgid "Print sequence" msgstr "Secuencia de impresión" -msgid "Customize" -msgstr "Personalizar" +msgid "Same as Global" +msgstr "Igual que Global" + +msgid "Disable" +msgstr "Desactivar" + +msgid "Spiral vase" +msgstr "Vaso en espiral" msgid "First layer filament sequence" msgstr "Secuencia de primera capa de filamento" msgid "Same as Global Plate Type" -msgstr "Same as Global Plate Type" +msgstr "Igual que el tipo de placa global" msgid "Same as Global Bed Type" msgstr "Lo mismo que el Tipo de Cama Global" @@ -6523,7 +7105,7 @@ msgstr "Desconectarse" msgid "Slice all plate to obtain time and filament estimation" msgstr "" -"Rebana todas las piezas para obtener una estimación del tiempo y del " +"Lamina todas las piezas para obtener una estimación del tiempo y del " "filamento" msgid "Packing project data into 3mf file" @@ -6546,7 +7128,7 @@ msgid "Publish was cancelled" msgstr "La publicación fue cancelada" msgid "Slicing Plate 1" -msgstr "Bandeja de corte 1" +msgstr "Bandeja de Laminado 1" msgid "Packing data to 3mf" msgstr "Empaquetando datos a 3mf" @@ -6564,15 +7146,6 @@ msgstr "Perfil de usuario" msgid "Preset Inside Project" msgstr "Perfil interno del proyecto" -msgid "Name is invalid;" -msgstr "El nombre no es válido;" - -msgid "illegal characters:" -msgstr "caracteres no permitidos:" - -msgid "illegal suffix:" -msgstr "sufijo no permitido:" - msgid "Name is unavailable." msgstr "El nombre no está disponible." @@ -6590,15 +7163,6 @@ msgstr "El perfil \"%1%\" ya existe y es incompatible con la impresora actual." msgid "Please note that saving action will replace this preset" msgstr "Tenga en cuenta que la acción de guardar reemplazará este perfil" -msgid "The name is not allowed to be empty." -msgstr "No se permite que el nombre esté vacío." - -msgid "The name is not allowed to start with space character." -msgstr "No se permite que el nombre comience con un carácter de espacio." - -msgid "The name is not allowed to end with space character." -msgstr "No se permite que el nombre termine con un espacio." - msgid "The name cannot be the same as a preset alias name." msgstr "El nombre no puede ser el mismo que un nombre de alias preestablecido." @@ -6657,9 +7221,6 @@ msgstr "No puedo encontrar mis dispositivos?" msgid "Log out successful." msgstr "Cierre de sesión con éxito." -msgid "Offline" -msgstr "Fuera de línea" - msgid "Busy" msgstr "Ocupado" @@ -6684,12 +7245,6 @@ msgstr "Placa PEI Texturizada Bambu" msgid "Send print job to" msgstr "Enviar el trabajo de impresión a" -msgid "Refresh" -msgstr "Actualizar" - -msgid "Bed Leveling" -msgstr "Nivelación de la cama" - msgid "Flow Dynamics Calibration" msgstr "Calibración de Dinámicas de Flujo" @@ -6702,9 +7257,6 @@ msgstr "envío completo" msgid "Error code" msgstr "Error code" -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" @@ -6787,9 +7339,13 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Es necesario introducir una tarjeta SD antes de imprimir." -msgid "The selected printer is incompatible with the chosen printer presets." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" -"La impresora seleccionada es incompatible con los ajustes seleccionados." +"La impresora seleccionada (%s) es incompatible con el perfil de impresora " +"elegido en la cortadora (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "Es necesario insertar una tarjeta SD para guardar el timelapse." @@ -6841,27 +7397,38 @@ msgid "" "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." +"compruebe si son los filamentos requeridos. Si lo son, presione \"Confirmar" +"\" para empezar a imprimir." #, c-format, boost-format msgid "nozzle in preset: %s %s" msgstr "Boquilla preestablecida: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "Boquilla memorizada: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "Boquilla memorizada: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"¿El diámetro de la boquilla en su configuración no corresponde con el " -"diámetro memorizado? ¿Hizo un cambio de boquilla?" +"El diámetro de la boquilla en el archivo laminado no coincide con la " +"boquilla guardada. Si ha cambiado la boquilla últimamente, vaya a " +"Dispositivo > Piezas de la impresora para cambiar la configuración." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*El material de impresión %s con %s podría causar daños en la boquilla" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"La impresión de material de alta temperatura (%s material) con %s puede " +"causar daños en la boquilla" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Por favor, corrija el error anterior, de lo contrario la impresión no podrá " +"continuar." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6869,38 +7436,26 @@ msgstr "" "Por favor, presione el botón de confirmar si aún quieres proceder con la " "impresión." -msgid "Hardened Steel" -msgstr "Acero endurecido" - -msgid "Stainless Steel" -msgstr "Acero Inoxidable" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "Conectando a la impresora. No es posible cancelar durante la conexión." -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 "" -"¡Precaución! La calibración del caudal en la bandeja PEI texturizada puede " +"¡Precaución! La calibración del flujo en la bandeja PEI texturizada puede " "fallar debido a la superficie dispersa." msgid "Automatic flow calibration using Micro Lidar" -msgstr "Calibración automática de caudal usando Micro Lidar" +msgstr "Calibración automática de flujo usando Micro Lidar" msgid "Modifying the device name" msgstr "Modificar el nombre del dispositivo" +msgid "Bind with Pin Code" +msgstr "Vincular con código PIN" + msgid "Send to Printer SD card" msgstr "Enviar a la tarjeta SD de la impresora" @@ -6909,6 +7464,10 @@ msgstr "" "No se puede enviar la tarea de impresión cuando la actualización está en " "curso" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"La impresora seleccionada es incompatible con los ajustes seleccionados." + 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 " @@ -6928,32 +7487,54 @@ msgid "View all Daily tips" msgstr "Mostrar todos los consejos del día" msgid "Failed to create socket" -msgstr "Failed to create socket" +msgstr "Fallo al crear socket" msgid "Failed to connect socket" -msgstr "Failed to connect socket" +msgstr "Error al conectar el socket" msgid "Failed to publish login request" -msgstr "Failed to publish login request" +msgstr "Error al publicar la solicitud de inicio de sesión" msgid "Get ticket from device timeout" -msgstr "Timeout getting ticket from device" +msgstr "Tiempo de espera para obtener el ticket del dispositivo" msgid "Get ticket from server timeout" -msgstr "Timeout getting ticket from server" +msgstr "Tiempo de espera para obtener el ticket del servidor" msgid "Failed to post ticket to server" -msgstr "Failed to post ticket to server" +msgstr "Error al enviar el ticket al servidor" msgid "Failed to parse login report reason" -msgstr "Failed to parse login report reason" +msgstr "Error al analizar el motivo del informe de inicio de sesión" msgid "Receive login report timeout" -msgstr "Receive login report timeout" +msgstr "Tiempo de espera para recibir el informe de inicio de sesión" msgid "Unknown Failure" msgstr "Error Desconocido" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Busque el código PIN en la página Cuenta en la pantalla de la impresora \n" +"e introdúzcalo a continuación." + +msgid "Can't find Pin Code?" +msgstr "¿No encuentra el código PIN?" + +msgid "Pin Code" +msgstr "Código Pin" + +msgid "Binding..." +msgstr "Vinculando..." + +msgid "Please confirm on the printer screen" +msgstr "Confirme en la pantalla de la impresora" + +msgid "Log in failed. Please check the Pin Code." +msgstr "No se ha podido iniciar sesión. Por favor, compruebe el código PIN." + msgid "Log in printer" msgstr "Iniciar sesión en la impresora" @@ -6961,13 +7542,13 @@ 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" +msgstr "Compruebe el motivo" msgid "Read and accept" -msgstr "Read and accept" +msgstr "Leer y aceptar" msgid "Terms and Conditions" -msgstr "Terms and Conditions" +msgstr "Condiciones generales" msgid "" "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " @@ -6976,23 +7557,24 @@ msgid "" "Use(collectively, the \"Terms\"). If you do not comply with or agree to the " "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" -"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." +"Gracias por adquirir un dispositivo Bambu Lab. Antes de utilizar su " +"dispositivo Bambu Lab, lea los términos y condiciones. Al hacer clic para " +"aceptar el uso de su dispositivo Bambu Lab, acepta cumplir la Política de " +"privacidad y las Condiciones de uso (colectivamente, las \"Condiciones\"). " +"Si no cumple o no acepta la Política de privacidad de Bambu Lab, le rogamos " +"que no utilice los equipos y servicios de Bambu Lab." msgid "and" -msgstr "and" +msgstr "y" msgid "Privacy Policy" -msgstr "Privacy Policy" +msgstr "Política de privacidad" msgid "We ask for your help to improve everyone's printer" -msgstr "We ask for your help to improve everyone's printer" +msgstr "Te pedimos ayuda para mejorar las impresoras de todos" msgid "Statement about User Experience Improvement Program" -msgstr "Statement about User Experience Improvement Program" +msgstr "Declaración sobre el Programa de Mejora de la Experiencia del Usuario" #, c-format, boost-format msgid "" @@ -7008,20 +7590,21 @@ msgid "" "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." +"En la comunidad de impresión 3D, aprendemos de los éxitos y fracasos de los " +"demás para ajustar nuestros propios parámetros y ajustes de corte. %s sigue " +"el mismo principio y utiliza el aprendizaje automático para mejorar su " +"rendimiento a partir de los éxitos y fracasos del gran número de impresiones " +"de nuestros usuarios. Estamos entrenando a %s para que sea más inteligente " +"alimentándole con los datos del mundo real. Si usted lo desea, este servicio " +"accederá a la información de sus registros de errores y de uso, que pueden " +"incluir información descrita en la Política de Privacidad. No recopilaremos " +"ningún Dato Personal por el cual un individuo pueda ser identificado directa " +"o indirectamente, incluyendo sin limitación nombres, direcciones, " +"información de pago o números de teléfono. Al habilitar este servicio, usted " +"acepta estos términos y la declaración sobre la Política de Privacidad." msgid "Statement on User Experience Improvement Plan" -msgstr "Statement on User Experience Improvement Plan" +msgstr "Declaración sobre el Plan de mejora de la experiencia de los usuarios" msgid "Log in successful." msgstr "Inicio de sesión con éxito." @@ -7112,7 +7695,7 @@ msgid "" 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 " +"distancia z0, separación de interfaz 0, patrón concéntrico y desactivar " "altura de soporte independiente de altura de capa" msgid "" @@ -7154,11 +7737,34 @@ msgstr "Ajustar" msgid "Ignore" msgstr "Ignorar" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Característica experimental: Retraer y cortar el filamento a mayor distancia " +"durante los cambios de filamento para minimizar el flujo. Aunque puede " +"reducir notablemente el flujo, también puede elevar el riesgo de atascos de " +"boquillas u otras complicaciones de impresión." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Característica experimental: Retraer y cortar el filamento a mayor distancia " +"durante los cambios de filamento para minimizar el flujo. Aunque puede " +"reducir notablemente el flujo, también puede elevar el riesgo de atascos de " +"la boquilla u otras complicaciones de impresión. Utilizar con el último " +"firmware de la impresora." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Cuando grabamos timelapse sin cabezal de impresión, es recomendable añadir " "un \"Torre de Purga de Intervalo\" \n" @@ -7227,7 +7833,7 @@ msgid "Jerk(XY)" msgstr "Jerk(XY)" msgid "Raft" -msgstr "Base de impresión" +msgstr "Balsa/capa base de impresión" msgid "Support filament" msgstr "Filamento de soporte" @@ -7235,6 +7841,9 @@ msgstr "Filamento de soporte" msgid "Tree supports" msgstr "Soportes de árbol" +msgid "Skirt" +msgstr "Falda" + msgid "Prime tower" msgstr "Torre de Purga" @@ -7423,6 +8032,14 @@ msgstr "" msgid "Printable space" msgstr "Espacio imprimible" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Valor no válido proporcionado para el parámetro %1%: %2%" + +msgid "G-code flavor is switched" +msgstr "Se cambia tipo de G-Code" + msgid "Cooling Fan" msgstr "Ventilador de enfriamento" @@ -7560,7 +8177,7 @@ msgid "Are you sure to %1% the selected preset?" msgstr "¿Está seguro de %1% el perfil seleccionado?" msgid "All" -msgstr "Todo" +msgstr "Todas" msgid "Set" msgstr "Ajuste" @@ -7656,23 +8273,36 @@ msgstr "" "los siguientes cambios no guardados:" #, 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 "" -"Has modificado algunos ajustes del perfil \"%1%\". \n" -"¿Deseas mantener estas modificaciones en los ajustes (nuevo valor) después " -"de cambiar de perfil?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Ha cambiado algunos ajustes del preajuste \"%1%\"." msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"Has cambiado algunos ajustes de perfil. \n" -"¿Deseas mantener estas modificaciones en los ajustes (nuevo valor) después " -"de cambiar de perfil?" +"\n" +"Puede guardar o descartar los valores preestablecidos que haya modificado." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Puede guardar o descartar los valores preestablecidos que ha modificado, o " +"elegir transferir los valores que ha modificado al nuevo preestablecido." + +msgid "You have previously modified your settings." +msgstr "Ha modificado previamente su configuración." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Puede descartar los valores preestablecidos que haya modificado, o elegir " +"transferir los valores modificados al nuevo proyecto" msgid "Extruders count" msgstr "Contador de extrusores" @@ -7707,7 +8337,7 @@ msgid "Transfer values from left to right" msgstr "Transferir valores de izquierda a derecha" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Si se activa, este cuadro de diálogo se puede utilizar para convertir los " @@ -7790,6 +8420,60 @@ msgstr "No hay actualizaciones disponibles." msgid "The configuration is up to date." msgstr "La configuración está actualizada." +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + msgid "Ramming customization" msgstr "Personalización de Ramming" @@ -7823,7 +8507,7 @@ msgid "Ramming line width" msgstr "Ancho de línea de Ramming" msgid "Ramming line spacing" -msgstr "Espaciado de línea de moldeado de extremo" +msgstr "Separación de línea de moldeado de extremo" msgid "Auto-Calc" msgstr "Auto-Calc" @@ -7873,6 +8557,43 @@ msgstr "Desde" msgid "To" msgstr "A" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" +"Para esta tarea se necesita el Reproductor de Windows Media. ¿Desea activar " +"el \"Reproductor de Windows Media\" en su sistema operativo?" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" +"BambuSource no se ha registrado correctamente para la reproducción " +"multimedia. Pulse Sí para volver a registrarlo. Será promocionado dos veces" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" +"Falta el componente BambuSource registrado para la reproducción multimedia. " +"Vuelva a instalar BambuStudio o solicite ayuda posventa." + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" +"Si utiliza una BambuSource de una instalación diferente, es posible que la " +"reproducción de vídeo no funcione correctamente. Pulsa Sí para solucionarlo." + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" +"A tu sistema le faltan los codecs H.264 para GStreamer, necesarios para " +"reproducir vídeo. (Prueba a instalar los paquetes gstreamer1.0-plugins-bad " +"o gstreamer1.0-libav y, a continuación, reinicia Orca Slicer...)." + msgid "Bambu Network plug-in not detected." msgstr "Plugin Red Bambú no detectado." @@ -8067,16 +8788,16 @@ msgid "Gizmo Text emboss / engrave" msgstr "Gizmo Texto en relieve / grabado" msgid "Zoom in" -msgstr "Acercarse" +msgstr "Acercar" msgid "Zoom out" -msgstr "Alejarse" +msgstr "Alejar" msgid "Switch between Prepare/Preview" msgstr "Cambiar entre Preparar/Previsualizar" msgid "Plater" -msgstr "Plataforma" +msgstr "Bandeja" msgid "Move: press to snap by 1mm" msgstr "Mover: pulsar para ajustar 1mm" @@ -8149,6 +8870,12 @@ msgstr "Mover el deslizador 5 veces más rápido" msgid "Shift+Mouse wheel" msgstr "Shit+Rueda de ratón" +msgid "Horizontal slider - Move to start position" +msgstr "Deslizador horizontal - Desplazarse a la posición inicial" + +msgid "Horizontal slider - Move to last position" +msgstr "Deslizador horizontal - Desplazarse a la última posición" + msgid "Release Note" msgstr "Notas de lanzamiento" @@ -8178,6 +8905,42 @@ msgstr "Saltar esta Versión" msgid "Done" msgstr "Hecho" +msgid "resume" +msgstr "Continuar" + +msgid "Resume Printing" +msgstr "Continuar Imprimiendo" + +msgid "Resume Printing(defects acceptable)" +msgstr "Continuar Imprimiendo (defectos aceptables)" + +msgid "Resume Printing(problem solved)" +msgstr "Continuar Imprimiendo (problema solucionado)" + +msgid "Stop Printing" +msgstr "Dejar de imprimir" + +msgid "Check Assistant" +msgstr "Asistente de Pruebas" + +msgid "Filament Extruded, Continue" +msgstr "Filamento extruido, Continuar" + +msgid "Not Extruded Yet, Retry" +msgstr "Aún no extruido, reintentar" + +msgid "Finished, Continue" +msgstr "Terminado, Continuar" + +msgid "Load Filament" +msgstr "Cargar" + +msgid "Filament Loaded, Resume" +msgstr "Filamento cargado, reanudar" + +msgid "View Liveview" +msgstr "Ver Vista en Directo" + msgid "Confirm and Update Nozzle" msgstr "Confirmar y Actualizar la Boquilla" @@ -8240,12 +9003,6 @@ msgstr "Versión:" msgid "Update firmware" msgstr "Actualizar firmware" -msgid "Printing" -msgstr "Imprimendo" - -msgid "Idle" -msgstr "Inactivo" - msgid "Beta version" msgstr "Versión beta" @@ -8280,7 +9037,7 @@ 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." +"update next time starting Orca." 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 " @@ -8350,7 +9107,7 @@ msgid "Configuration package: " msgstr "Paquete de configuración: " msgid " updated to " -msgstr " actualizado a " +msgstr " Actualizado a " msgid "Open G-code file:" msgstr "Abrir archivo G-Code:" @@ -8423,9 +9180,6 @@ msgstr "Puente Interior" msgid "Gap infill" msgstr "Relleno de huecos" -msgid "Skirt" -msgstr "Falda" - msgid "Support interface" msgstr "Interfaz de soporte" @@ -8445,8 +9199,8 @@ msgid "" "Invalid spacing supplied to Flow::with_spacing(), check your layer height " "and extrusion width" msgstr "" -"Espaciado no válido suministrado a Flow::with_spacing(), comprueba la altura " -"de su capa y el ancho de extrusión." +"Separación no válido suministrado a Flow::with_spacing(), comprueba la " +"altura de su capa y el ancho de extrusión." msgid "undefined error" msgstr "error no definido" @@ -8682,7 +9436,7 @@ msgid "" "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" +"número de capas de balsa( base de impresión)" msgid "" "The prime tower requires that all objects are sliced with the same layer " @@ -8851,7 +9605,7 @@ msgid "Bed custom model" msgstr "Modelo personalizado de cama" msgid "Elephant foot compensation" -msgstr "Compensación del pie de elefante" +msgstr "Compensación del pata de elefante" msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " @@ -8920,7 +9674,7 @@ msgid "" 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 " +"impresora. Se puede acceder a la impresora detrás de un proX-Y 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/" @@ -9099,6 +9853,15 @@ msgstr "Bandeja de Ingeniería" msgid "First layer print sequence" msgstr "Secuencia de impresión de primera capa" +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" + 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" @@ -9232,7 +9995,7 @@ msgid "" "material for bridge, to improve sag" msgstr "" "Disminuya este valor ligeramente (por ejemplo 0,9) para reducir la cantidad " -"de material para el puente, para mejorar el hundimiento" +"de material para mejorar o evitar el hundimiento de puentes." msgid "Internal bridge flow ratio" msgstr "Ratio de flujo de puentes internos" @@ -9243,8 +10006,9 @@ msgid "" "0.9) to improve surface quality over sparse infill." msgstr "" "Este valor regula el grosor de la capa puente interna. Es la primera capa " -"sobre el relleno poco denso. Disminuya ligeramente este valor (por ejemplo, " -"0,9) para mejorar la calidad de la superficie sobre el relleno disperso." +"sobre el relleno de baja densidad. Disminuya ligeramente este valor (por " +"ejemplo, 0,9) para mejorar la calidad de la superficie sobre el relleno de " +"baja densidad." msgid "Top surface flow ratio" msgstr "Ratio de caudal en superficie superior" @@ -9273,7 +10037,7 @@ msgid "" "Note: This setting will only take effect if the wall sequence is configured " "to Inner-Outer" msgstr "" -"Mejore la precisión de la cubierta ajustando el espaciado entre perímetros " +"Mejore la precisión de la cubierta ajustando la separación entre perímetros " "exteriores. Esto también mejora la consistencia de la capa. \n" "Nota: Este ajuste sólo tendrá efecto si la secuencia de el perímetro está " "configurada como Interior-Exterior" @@ -9401,8 +10165,7 @@ msgstr "" " 1. Ninguno: No se crea ningún puente. \n" "2. Parcialmente Puenteado: Sólo se puentea una parte de la zona sin " "soporte. \n" -"3. Capa de Sacrificio: Se crea una capa de sacrificio. Capa de sacrificio: " -"Se crea una capa de puente de sacrificio completa." +"3. Capa de Sacrificio: Se crea una capa de sacrificio completa." msgid "Partially bridged" msgstr "Parcialmente puenteado" @@ -9645,8 +10408,8 @@ 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 "" -"No apoye todo el área del puente que hace el apoyo muy grande. El puente " -"normalmente puede imprimirse directamente sin soporte si no es muy largo" +"No crear soportes en toda el área de los puentes. Los puentes normalmente " +"pueden imprimirse directamente sin soporte si no son muy largos" msgid "Thick bridges" msgstr "Puentes gruesos" @@ -9707,13 +10470,14 @@ msgstr "" "modelos muy inclinados o curvados.\n" "\n" "Por defecto, los pequeños puentes internos se filtran y el relleno sólido " -"interno se imprime directamente sobre el relleno disperso. Esto funciona " -"bien en la mayoría de los casos, acelerando la impresión sin comprometer " -"demasiado la calidad de la superficie superior. \n" +"interno se imprime directamente sobre el relleno de baja densidad. Esto " +"funciona bien en la mayoría de los casos, acelerando la impresión sin " +"comprometer demasiado la calidad de la superficie superior. \n" "\n" "Sin embargo, en modelos muy inclinados o curvados, especialmente cuando se " -"utiliza una densidad de relleno disperso demasiado baja, esto puede dar " -"lugar a la curvatura del relleno sólido no soportado, causando pillowing.\n" +"utiliza una densidad de relleno de baja densidad demasiado baja, esto puede " +"dar lugar a la curvatura del relleno sólido no soportado, causando " +"pillowing.\n" "\n" "Activando esta opción se imprimirá la capa puente interna sobre el relleno " "sólido interno ligeramente sin soporte. Las opciones siguientes controlan la " @@ -9726,7 +10490,7 @@ msgstr "" "evitando crear puentes internos innecesarios. Funciona bien en la mayoría de " "los modelos difíciles.\n" "\n" -"Sin filtro: crea puentes interiores en todos los posibles salientes " +"Sin filtro: crea puentes interiores en todos los posibles voladizos " "interiores. Esta opción es útil para modelos de superficie superior muy " "inclinada. Sin embargo, en la mayoría de los casos crea demasiados puentes " "innecesarios." @@ -9772,7 +10536,7 @@ msgid "End G-code when finish the printing of this filament" msgstr "Terminar el G-Code cuando se termine de imprimir este filamento" msgid "Ensure vertical shell thickness" -msgstr "Detección de cubiertas delgadas" +msgstr "Detección de perímetros delgados" msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " @@ -9785,13 +10549,14 @@ msgid "" "Default value is All." msgstr "" "Añadir relleno sólido cerca de superficies inclinadas para garantizar el " -"grosor vertical de la cubierta (capas sólidas superior+inferior)\n" +"grosor vertical del perímetro (capas sólidas superior+inferior)\n" "Ninguno: No se añadirá relleno sólido en ninguna parte.\n" "Precaución: Utilice esta opción con cuidado si su modelo tiene superficies " "inclinadas\n" "Sólo crítico: Evite añadir relleno sólido en perímetros\n" -"Moderado: Añadir relleno sólido sólo para superficies muy inclinadas Todas: " -"Añadir relleno sólido para todas las superficies inclinadas adecuadas\n" +"Moderado: Añadir relleno sólido sólo para superficies muy inclinadas \n" +"Todas: Añadir relleno sólido para todas las superficies inclinadas " +"adecuadas\n" "El valor por defecto es Todas." msgid "Critical Only" @@ -9801,7 +10566,7 @@ msgid "Moderate" msgstr "Moderado" msgid "Top surface pattern" -msgstr "Patrón de relleno superior" +msgstr "Patrón de relleno cubierta superior" msgid "Line pattern of top surface infill" msgstr "Patrón de líneas del relleno de la superficie superior" @@ -9816,7 +10581,7 @@ msgid "Monotonic" msgstr "Monotónico" msgid "Monotonic line" -msgstr "Linea continua" +msgstr "Línea Contínua" msgid "Aligned Rectilinear" msgstr "Alineación Rectilinea" @@ -9825,18 +10590,18 @@ msgid "Hilbert Curve" msgstr "Curva Hilbert" msgid "Archimedean Chords" -msgstr "Arcodes de Arquímedes" +msgstr "Acordes de Arquímedes" msgid "Octagram Spiral" msgstr "Octograma en Espiral" msgid "Bottom surface pattern" -msgstr "Patrón de la superficie inferior" +msgstr "Patrón de relleno de cubierta inferior" msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "" -"Patrón de líneas del relleno de la superficie inferior, no del relleno del " -"puente" +"Patrón de líneas del relleno de la superficie de la cubierta inferior, no " +"del relleno del puente" msgid "Internal solid infill pattern" msgstr "Patrón de relleno sólido interno" @@ -9956,22 +10721,20 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Orden de los perímetros/relleno. Cuando la casilla no está marcada, los " -"muros se imprimen primero, lo que funciona mejor en la mayoría de los " -"casos.\n" +"Orden de las paredes/relleno. Cuando la casilla no está marcada, los muros " +"se imprimen primero, lo que funciona mejor en la mayoría de los casos.\n" "\n" -"Imprimir primero los muros puede ayudar con salientes extremos ya que los " +"Imprimir primero el relleno puede ayudar con voladizos extremos ya que los " "muros tienen el relleno vecino al que adherirse. Sin embargo, el relleno " -"empujará ligeramente hacia fuera los perímetros impresas donde se une a " -"ellos, lo que resulta en un peor acabado de la superficie exterior. También " -"puede hacer que el relleno brille a través de las superficies externas de la " -"pieza." +"empujará ligeramente hacia fuera las paredes impresas donde se une a ellos, " +"lo que resulta en un peor acabado de la superficie exterior. También puede " +"hacer que el relleno brille a través de las superficies externas de la pieza." msgid "Wall loop direction" msgstr "Dirección del bucle de perímetro" @@ -10030,6 +10793,12 @@ msgstr "" "El radio de claridad alrededor del extrusor. Se utiliza para evitar la " "colisión con la impresión por objeto." +msgid "Nozzle height" +msgstr "Altura de la boquilla" + +msgid "The height of nozzle tip." +msgstr "La altura de la punta de la boquilla." + msgid "Bed mesh min" msgstr "Malla de cama mínimo" @@ -10155,6 +10924,32 @@ 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" +msgid "Don't slow down outer walls" +msgstr "No frenar en los perímetros externos" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"Si está activada, esta configuración garantizará que los perímetros externos " +"no se ralenticen para cumplir el tiempo de capa mínimo. Esto es " +"especialmente útil en los siguientes escenarios:\n" +"\n" +" 1. Para evitar cambios de brillo al imprimir filamentos brillantes\n" +"2. Para evitar cambios en la velocidad de la pared externa que pueden crear " +"ligeros artefactos de pared que aparecen como z banding\n" +"3. Para evitar imprimir a velocidades que provoquen VFA (artefactos finos) " +"en las paredes externas\n" +"\n" + msgid "Layer time" msgstr "Tiempo de capa" @@ -10239,7 +11034,7 @@ msgid "" 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 " +"X-Y 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." @@ -10448,8 +11243,8 @@ msgstr "Fabricante del filamento. Para mostrar solamente" msgid "(Undefined)" msgstr "(No definido)" -msgid "Infill direction" -msgstr "Ángulo del relleno" +msgid "Sparse infill direction" +msgstr "Dirección de relleno de baja densidad" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10458,17 +11253,33 @@ msgstr "" "Ángulo para el patrón de relleno de baja densidad, que controla el inicio o " "la dirección principal de la línea" +msgid "Solid infill direction" +msgstr "Dirección del relleno sólido" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Ángulo para el patrón de relleno sólido, que controla el inicio o la " +"dirección principal de la línea" + +msgid "Rotate solid infill direction" +msgstr "Cambiar la dirección del relleno sólido" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Cambiar 90° la dirección del relleno sólido para cada capa." + msgid "Sparse infill density" -msgstr "Densidad de relleno" +msgstr "Densidad de relleno de baja densidad" #, no-c-format, no-boost-format msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" -"Densidad del relleno de baja densidad interno, convierte el 100%tu relleno " +"Densidad del relleno de baja densidad interno, el 100% convierte el relleno " "de baja densidad en relleno sólido y se utilizará el patrón de relleno " -"sólido interno." +"sólido interno" msgid "Sparse infill pattern" msgstr "Patrón de relleno de baja densidad" @@ -10506,6 +11317,9 @@ msgstr "Soporte Cúbico" msgid "Lightning" msgstr "Rayo" +msgid "Cross Hatch" +msgstr "Escotilla Transversal" + msgid "Sparse infill anchor length" msgstr "Longitud del anclaje de relleno de baja densidad" @@ -10539,7 +11353,7 @@ msgid "1000 (unlimited)" msgstr "1000 (ilimitada)" msgid "Maximum length of the infill anchor" -msgstr "Máxima longitud del relleno del anclaje" +msgstr "Máxima longitud de relleno del anclaje" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " @@ -10710,10 +11524,10 @@ 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." +"\"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\". " @@ -10721,6 +11535,9 @@ msgstr "" "\"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 "layer" +msgstr "Capa" + msgid "Support interface fan speed" msgstr "Velocidad de ventilador de interfaz de soporte" @@ -10794,15 +11611,39 @@ msgstr "" "Velocidad de relleno del hueco. El hueco suele tener una anchura de línea " "irregular y debe imprimirse más lentamente" +msgid "Precise Z height" +msgstr "Altura Z Precisa (Experimental)" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Habilite esta opción para obtener la altura Z precisa del objeto después del " +"corte. Obtendrá la altura precisa del objeto ajustando las alturas de las " +"últimas capas. Tenga en cuenta que se trata de un parámetro experimental." + msgid "Arc fitting" msgstr "Activar movimientos en arco" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Habilite esto para obtener un archivo de G-Code que tiene movimientos G2 y " -"G3. Y la tolerancia de ajuste es la misma con la resolución" +"Habilite esta opción para obtener un archivo de G-Code con los movimientos " +"G2 y G3. La tolerancia de ajuste es la misma que la resolución.\n" +"\n" +"Nota: Para máquinas klipper, se recomienda desactivar esta opción. Klipper " +"no se beneficia de los comandos de arco ya que estos son divididos de nuevo " +"en segmentos de línea por el firmware. El resultado es una reducción de la " +"calidad de la superficie, ya que los segmentos de línea son convertidos en " +"arcos por la cortadora y de nuevo en segmentos de línea por el firmware." msgid "Add line number" msgstr "Añadir número de línea" @@ -11037,27 +11878,50 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Superposición de relleno/perímetros" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"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 " -"la línea del relleno de baja densidad" +"El área de relleno se amplía ligeramente para solaparse con la pared y " +"mejorar la adherencia. El valor porcentual es relativo a la anchura de línea " +"del de baja densidad. Ajuste este valor a ~10-15% para minimizar la " +"sobreextrusión potencial y la acumulación de material que resulta en " +"superficies superiores ásperas." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Relleno sólido superior/inferior/solapamiento de paredes" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"El área de relleno sólido de cubierta superior se amplía ligeramente para " +"solaparse con la pared y mejorar la adherencia y minimizar la aparición de " +"agujeros de alfiler donde el relleno de cubierta superior se une a las " +"paredes. Un valor del 25-30% es un buen punto de partida para minimizar la " +"aparición de agujeros. El valor porcentual es relativo a la anchura de la " +"línea de relleno de baja densidad" msgid "Speed of internal sparse infill" -msgstr "Velocidad del relleno interno disperso" +msgstr "Velocidad del relleno interno de baja densidad" msgid "Interface shells" -msgstr "Cubiertas de interfaz" +msgstr "Perímetros 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 cubiertas sólidas entre materiales/volúmenes " -"adyacentes. Útil para impresiones multiextrusoras con materiales " +"Fuerza la generación de perímetro sólidos entre materiales/volúmenes " +"adyacentes. Útil para impresiones con varios extrusores, con materiales " "translúcidos o material de soporte soluble manualmente" msgid "Maximum width of a segmented region" @@ -11179,7 +12043,7 @@ msgid "Small area flow compensation (beta)" msgstr "Compensación de flujo en áreas pequeñas (beta)" msgid "Enable flow compensation for small infill areas" -msgstr "Permitir la compensación de flujos en pequeñas zonas de relleno" +msgstr "Permitir la compensación de flujo en zonas con poco relleno" msgid "Flow Compensation Model" msgstr "Modelo de compensación de caudal" @@ -11353,10 +12217,10 @@ msgstr "" "(alta velocidad/ancho mayor) a una extrusión de menor caudal (menor " "velocidad/ancho menor) y viceversa.\n" "\n" -"Define la velocidad máxima a la que el flujo volumétrico extruido en mm3/seg " -"puede cambiar con el tiempo. Valores más altos significan que se permiten " -"cambios de velocidad de extrusión más altos, lo que resulta en transiciones " -"de velocidad más rápidas.\n" +"Define la velocidad máxima a la que el flujo volumétrico extruido en mm3/" +"seg2 puede cambiar con el tiempo. Valores más altos significan que se " +"permiten cambios de velocidad de extrusión más altos, lo que resulta en " +"transiciones de velocidad más rápidas.\n" "\n" "Un valor de 0 desactiva la función. \n" "\n" @@ -11364,7 +12228,7 @@ msgstr "" "(como la Bambu lab o la Voron) este valor no suele ser necesario. Sin " "embargo, puede proporcionar algún beneficio marginal en ciertos casos en los " "que las velocidades de las características varían mucho. Por ejemplo, cuando " -"hay ralentizaciones agresivas debidas a salientes. En estos casos, se " +"hay ralentizaciones agresivas debidas a voladizos. En estos casos, se " "recomienda un valor alto de alrededor de 300-350 mm3/s2, ya que esto permite " "el suavizado suficiente para ayudar al avance de presión a lograr una " "transición de flujo más suave.\n" @@ -11630,10 +12494,10 @@ msgstr "" "resultado impresiones más resistentes.\n" "\n" "Cuando esta opción está activada, es necesario desactivar la opción de " -"asegurar el grosor de la cubierta vertical.\n" +"asegurar el grosor del perímetro vertical.\n" "\n" -"No se recomienda utilizar el relleno relámpago junto con esta opción, ya que " -"el relleno es limitado para anclar los perímetros adicionales." +"No se recomienda utilizar el relleno rayo junto con esta opción, ya que el " +"relleno es limitado para anclar los perímetros adicionales." msgid "" "If you want to process the output G-code through custom scripts, just list " @@ -11655,42 +12519,42 @@ msgid "You can put your notes regarding the printer here." msgstr "Puede colocar sus notas acerca de la impresora aquí." msgid "Raft contact Z distance" -msgstr "Distancia Z de contacto de la base de impresión" +msgstr "Distancia Z de contacto de la balsa(base de impresión)" 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(base de impresión). Se ignora para la " +"interfaz soluble" msgid "Raft expansion" -msgstr "Expansión de la base de impresión" +msgstr "Expansión de la balsa(base de impresión)" 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(base de impresión) en el plano XY" msgid "Initial layer density" msgstr "Densidad de la primera capa" 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 balsa(base de impresión)" msgid "Initial layer expansion" msgstr "Expansión de la primera capa" 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 " +"Expandir la primera base de impresión o capa de soporte base para mejorar la " "adherencia de la cama de la bandeja" msgid "Raft layers" -msgstr "Capas de base de impresión" +msgstr "Capas de balsa (base de impresión)" msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" "El objeto será elevado por este número de capas de soporte. Utilice esta " -"función para evitar la envoltura al imprimir ABS" +"función para evitar deformaciones al imprimir ABS" msgid "" "G-code path is genereated after simplifing the contour of model to avoid too " @@ -11712,7 +12576,7 @@ msgstr "" "este umbral" msgid "Retract amount before wipe" -msgstr "Retracta cantidad antes de limpiar" +msgstr "Retrae cantidad antes de limpiar" msgid "" "The length of fast retraction before wipe, relative to retraction length" @@ -11737,6 +12601,30 @@ msgstr "" "rezumado durante el recorrido largo. Ajustar el cero para desactivar la " "retracción" +msgid "Long retraction when cut(experimental)" +msgstr "Retracción larga al cortar (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Característica experimental. Retraer y cortar el filamento a mayor distancia " +"durante los cambios para minimizar la purga. Si bien esto reduce " +"significativamente la purga, también puede aumentar el riesgo de atascos de " +"boquillas u otros problemas de impresión." + +msgid "Retraction distance when cut" +msgstr "Distancia de retracción al cortar" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Característica experimental. Longitud de retracción antes del corte durante " +"el cambio de filamento" + msgid "Z hop when retract" msgstr "Salto en Z al retraerse" @@ -11942,6 +12830,22 @@ msgstr "" msgid "Conditional angle threshold" msgstr "Umbral angular condicional" +msgid "" +"This option sets the threshold angle for applying a conditional scarf joint " +"seam.\n" +"If the maximum angle within the perimeter loop exceeds this value " +"(indicating the absence of sharp corners), a scarf joint seam will be used. " +"The default value is 155°." +msgstr "" +"Esta opción establece el ángulo umbral para aplicar una costura de junta de " +"bufanda condicional.\n" +"Si el ángulo máximo dentro del bucle perimetral supera este valor (indicando " +"la ausencia de esquinas afiladas), se utilizará una costura de junta de " +"bufanda. El valor por defecto es 155°." + +msgid "Conditional overhang threshold" +msgstr "Umbral de voladizo condicional" + #, no-c-format, no-boost-format msgid "" "This option determines the overhang threshold for the application of scarf " @@ -12068,23 +12972,13 @@ msgstr "" "perímetro externo al imprimir con el orden de impresión de perímetro " "Exterior/Interior o Interior/Exterior/Interior, la desretracción se realiza " "ligeramente en el interior desde el inicio del perímetro externo. De esta " -"manera, cualquier potencial de sobreextrusión queda oculto desde la " -"superficie exterior.\n" +"forma, cualquier posible sobreextrusión queda oculta desde la superficie " +"exterior.\n" "\n" -"Esto es útil cuando se imprime con el orden de impresión de perímetro " -"Exterior/Interior o Interior/Exterior/Interior, ya que en estos modos es más " -"probable que se imprima un perímetro externo inmediatamente después de un " -"movimiento de destracción.Para minimizar la visibilidad de una posible " -"sobreextrusión al inicio de un perímetro exterior cuando se imprime con " -"orden de impresión Exterior/Interior o Interior/Exterior/Interior, la " -"desetracción se realiza ligeramente en el interior desde el inicio del " -"perímetro exterior. De esta forma, cualquier posible sobreextrusión queda " -"oculta desde la superficie exterior.\n" -"\n" -"Esto es útil cuando se imprime con orden de impresión exterior/interior o " -"interior/exterior/perímetro interior, ya que en estos modos es más probable " -"que se imprima un perímetro exterior inmediatamente después de un movimiento " -"de desetracción." +"Esto es útil cuando se imprime con orden de impresión Exterior/Interior o " +"Interior/Exterior/Interior ya que en estos modos es más probable que se " +"imprima un perímetro exterior inmediatamente después de un movimiento de " +"desretracción." msgid "Wipe speed" msgstr "Velocidad de limpieza" @@ -12112,6 +13006,43 @@ msgstr "Altura de falda" msgid "How many layers of skirt. Usually only one layer" msgstr "C capas de falda. Normalmente sólo una capa" +msgid "Draft shield" +msgstr "Escudo de protección" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Un protector contra corrientes de aire es útil para proteger una impresión " +"en ABS o ASA de la deformación y el desprendimiento de la cama de impresión " +"debido a los caudales de aire. Suele ser necesario solo en impresoras de " +"bastidor abierto, es decir, sin cerramiento.\n" +"\n" +"Opciones:\n" +"Activado = la falda es tan alto como el objeto impreso más alto.\n" +"Limitado = la altura de la falda es la especificada por la altura del " +"falda.\n" +"\n" +"Nota: Con el protector contra corrientes de aire activo, la falda se " +"imprimirá a la distancia del faldón del objeto. Por lo tanto, si los bordes " +"están activos, puede cruzarse con ellos. Para evitarlo, aumente el valor de " +"la distancia de la falda.\n" + +msgid "Limited" +msgstr "Limitado" + +msgid "Enabled" +msgstr "Activado" + msgid "Skirt loops" msgstr "Contorno de la falda" @@ -12126,6 +13057,22 @@ msgstr "" "Velocidad de la falda, en mm/s. Cero significa utilizar la velocidad de capa " "por defecto." +msgid "Skirt minimum extrusion length" +msgstr "Longitud mínima de extrusión de la falda" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Longitud mínima de extrusión de filamento en mm al imprimir la falda. Cero " +"significa que esta función está desactivada.\n" +"\n" +"El uso de un valor distinto de cero es útil si la impresora está configurada " +"para imprimir sin una línea de purga." + 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" @@ -12155,9 +13102,6 @@ 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" - 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 " @@ -12255,7 +13199,7 @@ msgid "Enable filament ramming" msgstr "Activar el moldeado de extremo del filamento" msgid "No sparse layers (beta)" -msgstr "Sin capas dispersas (beta)" +msgstr "Sin capas de baja densidad (beta)" msgid "" "If enabled, the wipe tower will not be printed on layers with no " @@ -12352,7 +13296,7 @@ msgid "tree(manual)" msgstr "Árbol(manual)" msgid "Support/object xy distance" -msgstr "Distancia soporte/objeto xy" +msgstr "Distancia soporte/objeto X-Y" msgid "XY separation between an object and its support" msgstr "Separación XY entre un objeto y su soporte" @@ -12400,13 +13344,13 @@ msgid "The z gap between the bottom support interface and object" msgstr "La distancia z entre la interfaz de apoyo inferior y el objeto" msgid "Support/raft base" -msgstr "Soporte/plataforma base" +msgstr "Capa base/balsa" 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 " +"Filamento para imprimir la base de soporte y la balsa de impresión. \"Por " "defecto\" significa que no hay filamento específico para el soporte y se " "utiliza el filamento actual" @@ -12436,7 +13380,7 @@ msgstr "" "por defecto." msgid "Support/raft interface" -msgstr "Interfaz de soporte/base de impresión" +msgstr "Interfaz de soporte/balsa" msgid "" "Filament to print support interface. \"Default\" means no specific filament " @@ -12507,19 +13451,19 @@ msgid "Rectilinear Interlaced" msgstr "Entrelazado rectilíneo" msgid "Base pattern spacing" -msgstr "Espaciamiento del patrón base" +msgstr "Separación del patrón base" 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" msgid "Speed of support" -msgstr "Velocidad de la asistencia" +msgstr "Velocidad en soportes" msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -12555,7 +13499,7 @@ msgid "Organic" msgstr "Orgánico" msgid "Independent support layer height" -msgstr "Altura de la capa de soporte independiente" +msgstr "Altura independiente de la capa de soporte " msgid "" "Support layer uses layer height independent with object layer. This is to " @@ -12703,7 +13647,7 @@ msgid "This setting specify the count of walls around support" msgstr "Este ajuste especifica el número de perímetros alrededor del soporte" msgid "Tree support with infill" -msgstr "Soporte para árboles con relleno" +msgstr "Soporte de árbol con relleno" msgid "" "This setting specifies whether to add infill inside large hollows of tree " @@ -12754,9 +13698,9 @@ 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 los perímetros delgados 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" +"Detectar los perímetros delgados que no pueden contener dos líneas de ancho, " +"y utilizar una sola línea para imprimir. Tal vez no se imprima muy bien, " +"debido a que no es de bucle cerrado" msgid "" "This gcode is inserted when change filament, including T command to trigger " @@ -12897,10 +13841,56 @@ msgstr "" "Un angulo mayor significa una base más ancha." msgid "Wipe tower purge lines spacing" -msgstr "Espaciado de las líneas de la torre de purga" +msgstr "Separación de las líneas de la torre de purga" msgid "Spacing of purge lines on the wipe tower." -msgstr "Espaciado de las líneas de la torre de purga." +msgstr "Separación de las líneas de la torre de purga." + +msgid "Maximum wipe tower print speed" +msgstr "Velocidad máxima de impresión de la torre de purga" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"La velocidad máxima de impresión al purgar en la torre de purga e imprimir " +"las capas dispersas de la torre de purga. Al purgar, si la velocidad de " +"relleno de baja densidad o la velocidad calculada a partir de la velocidad " +"volumétrica máxima del filamento es inferior, se utilizará la velocidad más " +"baja.\n" +"\n" +"Al imprimir las capas dispersas, si la velocidad del perímetro interno o la " +"velocidad calculada a partir de la velocidad volumétrica máxima del " +"filamento es inferior, se utilizará la velocidad más baja.\n" +"\n" +"Aumentar esta velocidad puede afectar a la estabilidad de la torre, así como " +"aumentar la fuerza con la que la boquilla colisiona con las manchas que se " +"hayan podido formar en la torre de purga.\n" +"\n" +"Antes de aumentar este parámetro más allá del valor por defecto de 90mm/seg, " +"asegúrese de que su impresora puede puentear de forma fiable a las " +"velocidades aumentadas y que el rezume al cambiar de herramienta está bien " +"controlado.\n" +"\n" +"Para los perímetros externos de la torre de purga se utiliza la velocidad " +"del perímetro interno independientemente de este ajuste." msgid "Wipe tower extruder" msgstr "Extrusor de torre de purga" @@ -13076,7 +14066,7 @@ msgid "Classic" msgstr "Clásico" msgid "Arachne" -msgstr "Aracne" +msgstr "Arachne" msgid "Wall transition length" msgstr "Anchura de transición de perímetro" @@ -13166,17 +14156,16 @@ msgid "" "top-surface. 'One wall threshold' is only visibile if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" -"Ajuste este valor para evitar que se impriman perímetros cortas y no " -"cerradas, lo que podría aumentar el tiempo de impresión. Los valores más " +"Ajuste este valor para evitar que se impriman perímetros cortos y no " +"cerrados, lo que podría aumentar el tiempo de impresión. Los valores más " "altos eliminan más perímetros y más largos.\n" "\n" "NOTA: Las superficies inferior y superior no se verán afectadas por este " "valor para evitar huecos visuales en el exterior del modelo. Ajuste \"Umbral " -"de una perímetro\" en la configuración avanzada para ajustar la sensibilidad " -"de lo que se considera una superficie superior. El \"Umbral de una " -"perímetro\" sólo es visible si este valor es superior al valor " -"predeterminado de 0,5, o si las superficies superiores de una soel perímetro " -"están activadas." +"de perímetro\" en la configuración avanzada para ajustar la sensibilidad de " +"lo que se considera una superficie superior. El \"Umbral de un solo perímetro" +"\" sólo es visible si este valor es superior al valor predeterminado de 0,5, " +"o si las superficies superiores de un solo perímetro están activados." msgid "First layer minimum wall width" msgstr "Ancho mínimo del perímetro de la primera capa" @@ -13396,7 +14385,7 @@ msgid "" "filament_density value in Filament Settings." msgstr "" "Peso por extrusor extruido durante toda la impresión. Calculado a partir de " -"filament_density en Ajustes de Filamento" +"filament_density en Ajustes de Filamento." msgid "Total weight" msgstr "Peso total" @@ -13619,9 +14608,9 @@ msgid "" "painted.\n" "XY Size compensation can not be combined with color-painting." msgstr "" -"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." +"La compensación de tamaño XY de un objeto no se utilizará porque también " +"está pintado en color.\n" +"La compensación de tamaño XY no puede combinarse con el pintado en color." #, c-format, boost-format msgid "Support: generate toolpath at layer %d" @@ -13657,35 +14646,40 @@ msgstr "Soporte: propagar ramas en la capa %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." msgstr "" -"Unknown file format: input file must have .stl, .obj, or .amf(.xml) " -"extension." +"Formato de archivo desconocido: el archivo de entrada debe tener extensión ." +"stl, .obj o .amf(.xml)." msgid "Loading of a model file failed." -msgstr "Loading of model file failed." +msgstr "Error en la carga del fichero modelo." 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" 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." +msgstr "" +"Formato de archivo desconocido: el archivo de entrada debe tener " +"extensión .3mf o .zip.amf." msgid "Canceled" -msgstr "Canceled" +msgstr "Cancelado" msgid "load_obj: failed to parse" -msgstr "load_obj: failed to parse" +msgstr "load_obj: fallo al parsear" + +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: fallo parseando" msgid "The file contains polygons with more than 4 vertices." -msgstr "The file contains polygons with more than 4 vertices." +msgstr "El archivo contiene polígonos con más de 4 vértices." msgid "The file contains polygons with less than 2 vertices." -msgstr "The file contains polygons with less than 2 vertices." +msgstr "El archivo contiene polígonos con menos de 2 vértices." msgid "The file contains invalid vertex index." -msgstr "The file contains invalid vertex index." +msgstr "El archivo contiene un índice de vértices no válido." msgid "This OBJ file couldn't be read because it's empty." -msgstr "This OBJ file couldn't be read because it's empty." +msgstr "Este archivo OBJ no se ha podido leer porque está vacío." msgid "Flow Rate Calibration" msgstr "Calibración de Ratio de Flujo" @@ -13752,12 +14746,6 @@ msgstr "Ratio de Flujo" msgid "Max Volumetric Speed" msgstr "Velocidad Volumétrica Máxima" -msgid "Please enter the name you want to save to printer." -msgstr "Por favor, introduzca el nombre que quiera asignar a la impresora." - -msgid "The name cannot exceed 40 characters." -msgstr "El nombre no puede exceder de 40 caracteres." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13806,6 +14794,19 @@ msgstr "Por favor, seleccione el filamento para calibrar." msgid "The input value size must be 3." msgstr "El valor de tamaño de entrada debe ser 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" + msgid "Connecting to printer..." msgstr "Conectando a la impresora." @@ -13817,6 +14818,24 @@ msgstr "" "El resultado de la Calibración de Dinámicas de Flujo se ha salvado en la " "impresora" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Ya existe un resultado de calibración anterior con el mismo nombre: %s. Sólo " +"se guarda un resultado con un nombre. Está seguro de que desea sobrescribir " +"el resultado anterior?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." + msgid "Internal Error" msgstr "Error interno" @@ -13869,36 +14888,36 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Consulte los detalles de la Calibración de las Dinámicas de Flujo en nuestra " +"Consulte los detalles de la Calibración de la Dinámica de Flujo en nuestra " "wiki.\n" "\n" "Normalmente la calibración es innecesaria. Cuando se inicia una impresión de " -"un solo color/material, con la opción \"Calibración de la dinámica de " -"caudal\" marcada en el menú de inicio de impresión, la impresora seguirá el " -"método antiguo, calibrar el filamento antes de la impresión; Cuando se " -"inicia una impresión de varios colores/materiales, la impresora utilizará el " -"parámetro de compensación por defecto para el filamento durante cada cambio " -"de filamento que tendrá un buen resultado en la mayoría de los casos.\n" +"un solo color/material, con la opción \"calibración de la dinámica de flujo" +"\" marcada en el menú de inicio de impresión, la impresora seguirá el camino " +"antiguo, calibrar el filamento antes de la impresión; cuando se inicia una " +"impresión de varios colores/materiales, la impresora utilizará el parámetro " +"de compensación por defecto para el filamento durante cada cambio de " +"filamento que tendrá un buen resultado en la mayoría de los casos.\n" "\n" -"Tenga en cuenta que hay algunos casos en los que el resultado de la " -"calibración no es fiable: el uso de una placa de textura para hacer la " -"calibración; la bandeja no tiene buena adherencia (por favor, lave la " -"bandeja o aplique pegamento) ... Puede encontrar más información en nuestra " -"wiki.\n" +"Tenga en cuenta que hay algunos casos que pueden hacer que los resultados de " +"la calibración no sean fiables, como una adhesión insuficiente en la placa " +"de impresión. Se puede mejorar la adherencia lavando la placa de impresión o " +"aplicando pegamento. Para obtener más información sobre este tema, consulte " +"nuestra Wiki.\n" "\n" "Los resultados de la calibración tienen alrededor de un 10 por ciento de " "fluctuación en nuestra prueba, lo que puede causar que el resultado no sea " -"exactamente el mismo en cada calibración. Todavía estamos investigando la " -"causa raíz para hacer mejoras con nuevas actualizaciones." +"exactamente el mismo en cada calibración. Seguimos investigando la causa " +"para realizar mejoras con nuevas actualizaciones." msgid "When to use Flow Rate Calibration" msgstr "Cuando usar la Calibración de Ratio de Flujo" @@ -14023,28 +15042,24 @@ msgstr "" msgid "Failed" msgstr "Error" +msgid "Please enter the name you want to save to printer." +msgstr "Por favor, introduzca el nombre que quiera asignar a la impresora." + +msgid "The name cannot exceed 40 characters." +msgstr "El nombre no puede exceder de 40 caracteres." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" -"Solo se va a guardar uno de los resultados con el mismo nombre. ¿Está seguro " -"que desea sobrescribir el otro resultado?" - -#, 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 "" -"Hay ya un resultado histórico de calibración con el mismo nombre: %s. Solo " -"se guardará uno de los resultados con el mismo nombre. ¿·Está seguro que " -"quiere sobrescribir el resultado histórico?" +"Sólo se guardará uno de los resultados con el mismo nombre. ¿Está seguro de " +"que desea reemplazar los otros resultados?" msgid "Please find the best line on your plate" msgstr "Por favor encuentre la mejor línea en su bandeja" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "Por favor, encuentre la esquina con ángulo perfecto para la extrusión" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Encuentre la esquina con el grado de extrusión perfecto" msgid "Input Value" msgstr "Valor de entrada" @@ -14123,12 +15138,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parámetros de Impresión" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Plate Type" @@ -14178,12 +15187,6 @@ msgstr "Al valor k" msgid "Step value" msgstr "Valor del paso" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "El diámetro de la boquilla has sido sincronizado desde los ajustes de " @@ -14198,6 +15201,9 @@ msgstr "A Velocidad Volúmetrica" msgid "Flow Dynamics Calibration Result" msgstr "Resultado de Calibración de Dinámicas de Flujo" +msgid "New" +msgstr "New" + msgid "No History Result" msgstr "Sin Resultados Históricos" @@ -14211,9 +15217,22 @@ msgstr "" msgid "Action" msgstr "Acción" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." + msgid "Edit Flow Dynamics Calibration" msgstr "Editar Calibración de Dinámicas de Flujo" +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." + msgid "Network lookup" msgstr "Búsqueda de red" @@ -14302,6 +15321,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14400,6 +15422,9 @@ msgstr "" msgid "Upload to storage" msgstr "Subir a almacenamiento" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" @@ -14612,6 +15637,16 @@ msgstr "" "Aún no ha seleccionado una impresora o un perfil. Por favor, seleccione al " "menos uno." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"El nombre del filamento %s que ha creado ya existe. \n" +"Si continúa, el preajuste creado se mostrará con su nombre completo. ¿Desea " +"continuar?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" "Algunos perfiles existentes no se han podido crear, como se indica a " @@ -14625,8 +15660,8 @@ msgstr "" "¿Quieres reescribirlo?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Cambiaríamos el nombre de los preajustes a \"Número de serie del Vendedor " @@ -14675,12 +15710,6 @@ msgstr "Rectángulo" msgid "Printable Space" msgstr "Espacio Imprimible" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "Cama Caliente STL" @@ -14837,21 +15866,34 @@ msgstr "Filamento Creado" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -"Por favor, vaya a la configuración de filamento para editar sus perfiles si " -"lo necesita.\n" +"Por favor, vaya a la configuración de filamento para editar sus ajustes " +"preestablecidos si es necesario.\n" "Tenga en cuenta que la temperatura de la boquilla, la temperatura de la cama " -"caliente, y la velocidad volumétrica máxima tienen un impacto significativo " -"en la calidad de impresión. Por favor, ajústelas con cuidado." +"caliente y la velocidad volumétrica máxima tienen un impacto significativo " +"en la calidad de impresión. Por favor, configúrelos con cuidado." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Orca ha detectado que la función de sincronización de las preconfiguraciones " +"de usuario no está activada, lo que puede dar lugar a una configuración " +"incorrecta del filamento en la página Dispositivo.\n" +"Haga clic en \"Sincronizar preajustes de usuario\" para activar la función " +"de sincronización." msgid "Printer Setting" msgstr "Ajustes de Impresora" -msgid "Export Configs" -msgstr "Configuración de Exportación" - msgid "Printer config bundle(.orca_printer)" msgstr "Paquete de configuración de impresora(.orca_printer)" @@ -14901,7 +15943,7 @@ msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" -"Impresora y todos los perfiles de filamento&proceso que pertenecen a la " +"Impresora y todos los perfiles de filamento y proceso que pertenecen a la " "impresora. \n" "Se puede compartir con otros." @@ -14956,6 +15998,9 @@ msgstr "Seleccione al menos una impresora o filamento." msgid "Please select a type you want to export" msgstr "Seleccione el tipo que desea exportar" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." + msgid "Edit Filament" msgstr "Editar Filamento" @@ -15032,6 +16077,21 @@ msgstr "Colapsar" msgid "Daily Tips" msgstr "Consejos Diarios" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "boquilla memorizada: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"¿El diámetro de la boquilla en su configuración no corresponde con el " +"diámetro memorizado? ¿Hizo un cambio de boquilla?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*El material de impresión %s con %s podría causar daños en la boquilla" + msgid "Need select printer" msgstr "Necesario seleccionar impresora" @@ -15063,6 +16123,12 @@ msgstr "¿Estás seguro de cerrar la sesión?" msgid "Refresh Printers" msgstr "Refrescar Impresoras" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15234,6 +16300,278 @@ msgstr "" "Cuerpo del mensaje: \"%1%\" \n" "Error: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Tiene una altura de capa pequeña, y da como resultado unas líneas de capa " +"casi inapreciables y una alta calidad de impresión. Es adecuado para la " +"mayoría de los casos generales de impresión." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,2 mm, tiene " +"velocidades y aceleraciones más bajas, y el patrón de relleno disperso es " +"Gyroide. Esto da como resultado una calidad de impresión mucho mayor, pero " +"un tiempo de impresión mucho más largo." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Comparado con el perfil por defecto de una boquilla de 0,2 mm, tiene una " +"altura de capa ligeramente mayor, y da como resultado líneas de capa casi " +"inapreciables, y un tiempo de impresión ligeramente menor." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,2 mm, tiene " +"una mayor altura de capa. Esto se traduce en líneas de capa ligeramente " +"visibles, pero en un tiempo de impresión más corto." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,2 mm, tiene " +"una altura de capa menor. Esto da como resultado líneas de capa casi " +"invisibles y una mayor calidad de impresión, pero un tiempo de impresión más " +"largo." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,2 mm, tiene " +"unas líneas de capa más pequeñas, velocidades y aceleraciones más bajas, y " +"el patrón de relleno disperso es Gyroid. Esto da como resultado líneas de " +"capa casi invisibles y una calidad de impresión mucho mayor, pero un tiempo " +"de impresión mucho más largo." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"En comparación con el perfil predeterminado de boquilla de 0,2 mm, tiene una " +"altura de capa menor, y da como resultado líneas de capa mínimas y una mayor " +"calidad de impresión, pero un tiempo de impresión más corto." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,2 mm, tiene " +"unas líneas de capa más pequeñas, velocidades y aceleraciones más bajas, y " +"el patrón de relleno disperso es Gyroid. Por lo tanto, da como resultado " +"líneas de capa mínimas y una calidad de impresión mucho mayor, pero un " +"tiempo de impresión mucho más largo." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Tiene una altura de capa normal, y da como resultado unas líneas de capa y " +"una calidad de impresión medias. Es adecuado para la mayoría de los casos de " +"impresión." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"más bucles de pared y una mayor densidad de relleno disperso. Esto se " +"traduce en una mayor resistencia de impresión, pero un mayor consumo de " +"filamento y un tiempo de impresión más largo." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una mayor altura de capa. Esto da lugar a líneas de capa más aparentes y a " +"una menor calidad de impresión, pero a un tiempo de impresión ligeramente " +"inferior." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una mayor altura de capa, y da como resultado líneas de capa más aparentes y " +"una menor calidad de impresión, pero un tiempo de impresión más corto." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una altura de capa menor. Esto se traduce en menos líneas de capa aparentes " +"y mayor calidad de impresión, pero mayor tiempo de impresión." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una altura de capa menor, velocidades y aceleraciones más bajas, y el patrón " +"de relleno disperso es Gyroide. Por lo tanto, da como resultado menos líneas " +"de capa aparentes y una calidad de impresión mucho mayor, pero un tiempo de " +"impresión mucho más largo." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una altura de capa menor. Esto se traduce en unas líneas de capa casi " +"inapreciables y una mayor calidad de impresión, pero un tiempo de impresión " +"más largo." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una altura de capa menor, velocidades y aceleraciones más bajas, y el patrón " +"de relleno disperso es Gyroide. Por lo tanto, resulta en líneas de capa casi " +"insignificantes y una calidad de impresión mucho mayor, pero un tiempo de " +"impresión mucho más largo." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,4 mm, tiene " +"una altura de capa menor. Esto se traduce en unas líneas de capa casi " +"inapreciables y un mayor tiempo de impresión." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Tiene una gran altura de capa, y da lugar a líneas de capa aparentes y a una " +"calidad y tiempo de impresión ordinarios." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,6 mm, tiene " +"más bucles de pared y una mayor densidad de relleno disperso. Esto se " +"traduce en una mayor resistencia de impresión, pero un mayor consumo de " +"filamento y un tiempo de impresión más largo." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,6 mm, tiene " +"una mayor altura de capa. Esto da lugar a líneas de capa más aparentes y a " +"una menor calidad de impresión, pero a un menor tiempo de impresión en " +"algunos casos." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,6 mm, tiene " +"una mayor altura de capa. Esto da lugar a líneas de capa mucho más aparentes " +"y a una calidad de impresión mucho menor, pero a un tiempo de impresión más " +"corto en algunos casos." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,6 mm, tiene " +"una altura de capa menor. Esto se traduce en menos líneas de capa aparentes " +"y una calidad de impresión ligeramente superior, pero un tiempo de impresión " +"más largo." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,6 mm, tiene " +"una altura de capa menor, y da como resultado líneas de capa menos aparentes " +"y una mayor calidad de impresión, pero un tiempo de impresión más largo." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Tiene una altura de capa muy grande, y da lugar a líneas de capa muy " +"aparentes, baja calidad de impresión y menor tiempo de impresión." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,8 mm, tiene " +"una mayor altura de capa. Esto da lugar a líneas de capa muy aparentes y a " +"una calidad de impresión mucho menor, pero a un tiempo de impresión más " +"corto en algunos casos." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,8 mm, tiene " +"una altura de capa mucho mayor. Esto da lugar a líneas de capa " +"extremadamente aparentes y a una calidad de impresión mucho menor, pero a un " +"tiempo de impresión mucho más corto en algunos casos." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,8 mm, tiene " +"una altura de capa ligeramente menor. Esto se traduce en líneas de capa " +"ligeramente menores pero aún aparentes y en una calidad de impresión " +"ligeramente superior, pero mayor tiempo de impresión en algunos casos." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"En comparación con el perfil predeterminado de una boquilla de 0,8 mm, tiene " +"una altura de capa menor. Esto se traduce en menos líneas de capa, aunque " +"aparentes, y en una calidad de impresión ligeramente superior, pero con un " +"tiempo de impresión más largo en algunos casos." + msgid "Connected to Obico successfully!" msgstr "¡Conectado a Obico con éxito!" @@ -15241,26 +16579,22 @@ msgid "Could not connect to Obico" msgstr "No es posible conectarse a Obico" msgid "Connected to SimplyPrint successfully!" -msgstr "¡Se ha conectado correctamente a SimplyPrint." +msgstr "¡Se ha conectado correctamente a SimplyPrint!" msgid "Could not connect to SimplyPrint" msgstr "No se ha podido conectar con SimplyPrint" +msgid "Internel error" +msgstr "" + +msgid "Unknown error" +msgstr "Error desconocido" + msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" "La cuenta SimplyPrint no está vinculada. Vaya a Opciones de conexión para " "configurarla." -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." -msgstr "" -"El tamaño del archivo supera el límite de carga de 100 MB. Por favor, cargue " -"su archivo a través del panel." - -msgid "Unknown error" -msgstr "Error desconocido" - msgid "Connection to Flashforge works correctly." msgstr "La conexión con Flashforge funciona correctamente." @@ -15670,6 +17004,335 @@ msgstr "" "aumentar adecuadamente la temperatura del lecho térmico puede reducir la " "probabilidad de deformaciones." +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "El tamaño del archivo supera el límite de carga de 100 MB. Por favor, " +#~ "cargue su archivo a través del panel." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Por favor, introduzca un valor válido (K en 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Por favor, introduzca un valor válido (K en 0~0.3, N en 0.6~2.0))" + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "Seleccionar impresoras conectadas (0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "Seleccionar impresoras conectadas (%d/6)" + +#~ msgid "PrintingPause" +#~ msgstr "Impresión Pausada" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Printer local connection failed; please try again." + +#~ 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 "" +#~ "Consulte los detalles de la Calibración de las Dinámicas de Flujo en " +#~ "nuestra wiki.\n" +#~ "\n" +#~ "Normalmente la calibración es innecesaria. Cuando se inicia una impresión " +#~ "de un solo color/material, con la opción \"Calibración de la dinámica de " +#~ "caudal\" marcada en el menú de inicio de impresión, la impresora seguirá " +#~ "el método antiguo, calibrar el filamento antes de la impresión; Cuando se " +#~ "inicia una impresión de varios colores/materiales, la impresora utilizará " +#~ "el parámetro de compensación por defecto para el filamento durante cada " +#~ "cambio de filamento que tendrá un buen resultado en la mayoría de los " +#~ "casos.\n" +#~ "\n" +#~ "Tenga en cuenta que hay algunos casos en los que el resultado de la " +#~ "calibración no es fiable: el uso de una placa de textura para hacer la " +#~ "calibración; la bandeja no tiene buena adherencia (por favor, lave la " +#~ "bandeja o aplique pegamento) ... Puede encontrar más información en " +#~ "nuestra wiki.\n" +#~ "\n" +#~ "Los resultados de la calibración tienen alrededor de un 10 por ciento de " +#~ "fluctuación en nuestra prueba, lo que puede causar que el resultado no " +#~ "sea exactamente el mismo en cada calibración. Todavía estamos " +#~ "investigando la causa raíz para hacer mejoras con nuevas actualizaciones." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Solo se va a guardar uno de los resultados con el mismo nombre. ¿Está " +#~ "seguro que desea sobrescribir el otro resultado?" + +#, 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 "" +#~ "Hay ya un resultado histórico de calibración con el mismo nombre: %s. " +#~ "Solo se guardará uno de los resultados con el mismo nombre. ¿·Está seguro " +#~ "que quiere sobrescribir el resultado histórico?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "" +#~ "Por favor, encuentre la esquina con ángulo perfecto para la extrusión" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Orden de los perímetros/relleno. Cuando la casilla no está marcada, los " +#~ "muros se imprimen primero, lo que funciona mejor en la mayoría de los " +#~ "casos.\n" +#~ "\n" +#~ "Imprimir primero los muros puede ayudar con salientes extremos ya que los " +#~ "muros tienen el relleno vecino al que adherirse. Sin embargo, el relleno " +#~ "empujará ligeramente hacia fuera los perímetros impresas donde se une a " +#~ "ellos, lo que resulta en un peor acabado de la superficie exterior. " +#~ "También puede hacer que el relleno brille a través de las superficies " +#~ "externas de la pieza." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ 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" + +#~ msgid "Export &Configs" +#~ msgstr "Exportar &Configuraciones" + +#~ msgid "Infill direction" +#~ msgstr "Ángulo del relleno" + +#~ 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 G3. Y la tolerancia de ajuste es la misma con la resolución" + +#~ 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 la línea del relleno de baja densidad" + +#~ msgid "Export Configs" +#~ msgstr "Configuración de Exportación" + +#~ msgid "Unload Filament" +#~ msgstr "Descargar" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Elija una ranura AMS y pulse el botón \"Cargar\" o \"Descargar\" para " +#~ "cargar o descargar automáticamente el filamento." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa Base" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "active" +#~ msgstr "activo" + +#~ msgid "Jump to layer" +#~ msgstr "Salta a la capa" + +#~ msgid "Cabin humidity" +#~ msgstr "Humedad de cabina" + +#~ 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.)" + +#~ msgid "Desiccant status" +#~ msgstr "Estado del secante" + +#~ 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)" + +#~ 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 "" +#~ "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." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Nota: si se inserta un nuevo filamento durante la impresión, el AMS no " +#~ "leerá automáticamente ninguna información hasta que la impresión haya " +#~ "finalizado." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Exportación de G-Code a %1% con éxito" + +#~ 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 "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "La impresora está ocupada descargando. Por favor, espere a que finalice." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Fallo inicializando (No soportado en la actual versión de la impresora)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Inicialización fallida (No accesible en el modo solo Red Local)" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "Inicialización fallida (Perdida la IP de red de la impresora)" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Parado [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "¡La carga ha fallado [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "No files [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Load failed [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Failed to fetch model infomation from printer." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "Fallo al analizar la información de modelado." + +#~ msgid "Connection lost. Please retry." +#~ msgstr "Conexión perdida. Por favor, reinténtelo." + +#~ msgid "File not exists." +#~ msgstr "El archivo no existe." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." + +#, 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 "" +#~ "Has modificado algunos ajustes del perfil \"%1%\". \n" +#~ "¿Deseas mantener estas modificaciones en los ajustes (nuevo valor) " +#~ "después de cambiar de perfil?" + +#~ 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?" + +#~ msgid " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "Por favor, vaya a la configuración de filamento para editar sus perfiles " +#~ "si lo necesita.\n" +#~ "Tenga en cuenta que la temperatura de la boquilla, la temperatura de la " +#~ "cama caliente, y la velocidad volumétrica máxima tienen un impacto " +#~ "significativo en la calidad de impresión. Por favor, ajústelas con " +#~ "cuidado." + #~ msgid "Studio Version:" #~ msgstr "Versión de Orca:" @@ -15786,8 +17449,8 @@ msgstr "" #~ msgstr "Capas de baja densidad (EXPERIMENTAL)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" +#~ "\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "Cambiaremos el nombre de los perfiles a \"Tipo Número de Serie @impresora " @@ -16625,9 +18288,6 @@ msgstr "" #~ msgid "Not supported by this model of printer!" #~ msgstr "¡No soportado por este modelo de impresora!" -#~ msgid "No files" -#~ msgstr "No hay archivos" - #~ msgid "Not accessible in LAN-only mode!" #~ msgstr "¡No accesible en modelo de solo red local!" @@ -16969,9 +18629,11 @@ msgstr "" #~ 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?" +# "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?" +# "¿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" @@ -17457,9 +19119,6 @@ msgstr "" #~ 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" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 8d9de157dd..55472db5c7 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "Peindre les supports" @@ -158,7 +158,7 @@ msgid "Height range" msgstr "Plage de hauteur" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Entrée" msgid "Toggle Wireframe" msgstr "Activer Maillage" @@ -260,6 +260,9 @@ msgstr "Réinitialiser la Rotation" msgid "World coordinates" msgstr "Coordonnées" +msgid "Object coordinates" +msgstr "Coordonnées de l’objet" + msgid "°" msgstr "°" @@ -371,7 +374,7 @@ msgid "Move cut plane" msgstr "Déplacer le plan de coupe" msgid "Mode" -msgstr "" +msgstr "Mode" msgid "Change cut mode" msgstr "Changer le mode de coupe" @@ -701,7 +704,7 @@ msgid "Emboss" msgstr "Embosser" msgid "NORMAL" -msgstr "" +msgstr "NORMAL" msgid "SMALL" msgstr "PETIT" @@ -1309,7 +1312,7 @@ msgid "Center of circle" msgstr "Centrer du cercle" msgid "ShiftLeft mouse button" -msgstr "" +msgstr "ShiftLeft mouse button" msgid "Select feature" msgstr "Sélectionner une fonctionnalité" @@ -1358,13 +1361,13 @@ msgid "Perpendicular distance" msgstr "Distance perpendiculaire" msgid "Distance" -msgstr "" +msgstr "Distance" msgid "Direct distance" msgstr "Distance directe" msgid "Distance XYZ" -msgstr "" +msgstr "Distance XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1408,9 +1411,6 @@ msgstr "" "Le fichier de configuration \"%1%\" a été chargé, mais certaines valeurs " "n'ont pas été reconnues." -msgid "V" -msgstr "V" - 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." @@ -1524,6 +1524,9 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/svg/obj/amf) :" +msgid "Choose ZIP file" +msgstr "Choisissez un fichier ZIP" + msgid "Choose one file (gcode/3mf):" msgstr "Choisissez un fichier (gcode/3mf):" @@ -1567,7 +1570,7 @@ msgstr "" "nouvellement créés ne peuvent être utilisés que localement." msgid "Sync user presets" -msgstr "Synchronisation des préréglages de l'utilisateur" +msgstr "Synchroniser les réglages prédéfinis de l’utilisateur" msgid "Loading user preset" msgstr "Chargement du préréglage utilisateur" @@ -1596,6 +1599,14 @@ msgstr "Téléversements en cours" msgid "Select a G-code file:" msgstr "Sélectionnez un fichier G-code :" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Impossible de lancer le téléchargement de l’URL. Le dossier de destination " +"n’est pas défini. Veuillez choisir le dossier de destination dans " +"l’assistant de configuration." + msgid "Import File" msgstr "Importer un Fichier" @@ -1751,7 +1762,7 @@ msgid "Stanford Bunny" msgstr "Lapin de Stanford" msgid "Orca String Hell" -msgstr "" +msgstr "Orca String Hell" msgid "" "This model features text embossment on the top surface. For optimal results, " @@ -1829,8 +1840,8 @@ msgstr "Défaut" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "actif" +msgid "current" +msgstr "courant" msgid "Scale to build volume" msgstr "Adapter la taille au volume d’impression" @@ -1923,6 +1934,9 @@ msgstr "Ajouter une primitive" msgid "Add Handy models" msgstr "Ajouter des modèles pratiques" +msgid "Add Models" +msgstr "Ajouter des modèles" + msgid "Show Labels" msgstr "Afficher les étiquettes" @@ -1975,6 +1989,12 @@ msgstr "Organiser" msgid "arrange current plate" msgstr "organiser la plaque actuelle" +msgid "Reload All" +msgstr "Tout recharger" + +msgid "reload all from disk" +msgstr "tout recharger à partir du disque" + msgid "Auto Rotate" msgstr "Rotation automatique" @@ -1994,7 +2014,7 @@ msgid "Simplify Model" msgstr "Simplifier le Modèle" msgid "Center" -msgstr "Centre" +msgstr "Centrer" msgid "Edit Process Settings" msgstr "Modifier les paramètres du traitement" @@ -2008,9 +2028,6 @@ msgstr "Changer de filament" msgid "Set Filament for selected items" msgstr "Définir le filament pour les éléments sélectionnés" -msgid "current" -msgstr "courant" - msgid "Unlock" msgstr "Déverrouiller" @@ -2350,9 +2367,6 @@ msgstr "Entrez le G-code personnalisé a utiliser sur la couche actuelle :" msgid "Jump to Layer" msgstr "Aller à la couche" -msgid "Jump to layer" -msgstr "Aller à la couche" - msgid "Please enter the layer number" msgstr "Veuillez entrer le numéro de la couche" @@ -2422,7 +2436,7 @@ 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." +msgid "Please check the network connection of the printer and Orca." msgstr "Vérifiez la connexion réseau entre l'imprimante et Studio." msgid "Connecting..." @@ -2446,11 +2460,11 @@ msgstr "Recharge Automatique" msgid "AMS not connected" msgstr "AMS non connecté" -msgid "Load Filament" +msgid "Load" msgstr "Charger" -msgid "Unload Filament" -msgstr "Déchargement" +msgid "Unload" +msgstr "Décharger" msgid "Ext Spool" msgstr "Bobine Ext" @@ -2467,7 +2481,7 @@ msgstr "Réessayer" msgid "Calibrating AMS..." msgstr "Étalonnage de l'AMS…" -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Un problème est survenu lors de la calibration. Cliquez pour voir la " "solution." @@ -2510,10 +2524,10 @@ msgstr "Saisir un nouveau filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Choisissez un emplacement AMS puis appuyez sur le bouton correspondant pour " -"Charger ou Décharger le filament." +"Choisissez un emplacement AMS puis appuyez sur le bouton «  Charger «  ou «  " +"Décharger «  pour charger ou décharger automatiquement les filaments." msgid "Edit" msgstr "Éditer" @@ -2785,14 +2799,8 @@ msgstr "Orca Slicer est sous licence " msgid "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" -msgstr "" -"Orca Slicer est basé sur Bambu Studio 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer est basé sur PrusaSlicer et BambuStudio" msgid "Libraries" msgstr "Bibliothèques" @@ -2888,12 +2896,14 @@ 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.3)" -msgstr "Veuillez saisir une valeur valide (K entre 0 et 0,3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "Veuillez saisir une valeur valide (K entre %.1f~%.1f)" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" -"Veuillez saisir une valeur valide (K entre 0 et 0,3, N entre 0,6 et 2,0)." +"Veuillez saisir une valeur valide (K entre %.1f~%.1f, N entre %.1f~%.1f)" msgid "Other Color" msgstr "Autre couleur" @@ -3000,39 +3010,20 @@ msgstr "Désactiver l'AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Impression avec du filament de la bobine externe" -msgid "Cabin humidity" -msgstr "Humidité dans l'AMS" +msgid "Current Cabin humidity" +msgstr "Humidité dans le caisson" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "É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 dessicateur inférieur à deux barres indique que le dessicateur " -"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 " -"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 "" -"Remarque: Lorsque le couvercle est ouvert ou que le sachet de dessicateur " -"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 représenter l'humidité dans " -"l'AMS avec précision." +"Veuillez changer le déshydratant lorsqu’il est trop humide. L’indicateur " +"peut ne pas s’afficher correctement dans les cas suivants : lorsque le " +"couvercle est ouvert ou que le sachet de déshydratant est changé. Il faut " +"des heures pour absorber l’humidité, les basses températures ralentissent " +"également le processus." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3094,6 +3085,12 @@ msgstr "" "n'est possible qu'avec la même marque, le même type de\n" "matériau et la même couleur." +msgid "DRY" +msgstr "SEC" + +msgid "WET" +msgstr "HUMIDE" + msgid "AMS Settings" msgstr "Paramètres AMS" @@ -3109,11 +3106,12 @@ msgstr "" "20 secondes." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Remarque : si un nouveau filament est inséré pendant l'impression, l'AMS ne " -"lira automatiquement aucune information avant la fin de l'impression." +"Remarque : si un nouveau filament est inséré pendant l’impression, l’AMS ne " +"lira pas automatiquement les informations jusqu’à ce que l’impression soit " +"terminée." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3166,6 +3164,16 @@ msgstr "" "L'AMS passera automatiquement à une autre bobine avec les mêmes propriétés " "de filament lorsque la bobine actuelle est épuisé" +msgid "Air Printing Detection" +msgstr "Détection de l’impression dans l’air" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Détecte le colmatage et le grignotage du filament, interrompant " +"immédiatement l’impression pour économiser du temps et du filament." + msgid "File" msgstr "Fichier" @@ -3239,6 +3247,67 @@ msgstr "Opérande réservée flottante" msgid "Stack overflow" msgstr "Débordement de pile" +msgid "Running post-processing scripts" +msgstr "Exécution de scripts de post-traitement" + +msgid "Successfully executed post-processing script" +msgstr "Le script de post-traitement a été exécuté avec succès" + +msgid "Unknown error occured during exporting G-code." +msgstr "Une erreur inconnue s’est produite lors de l’exportation du G-code." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"La copie du G-code temporaire vers le G-code de sortie a échoué. La carte SD " +"est peut-être bloquée en écriture ?\n" +"Message d’erreur : %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"La copie du G-code temporaire vers le G-code de sortie a échoué. Il se peut " +"qu’il y ait un problème avec le dispositif cible, veuillez essayer " +"d’exporter à nouveau ou d’utiliser un autre périphérique. Le G-code de " +"sortie corrompu se trouve dans %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Le renommage du G-code après la copie dans le dossier de destination " +"sélectionné a échoué. Le chemin actuel est %1%.tmp. Veuillez réessayer " +"l’exportation." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"La copie du G-code temporaire est terminée mais le code original à %1% n’a " +"pas pu être ouvert pendant la vérification de la copie. Le G-code de sortie " +"se trouve dans %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"La copie du G-code temporaire est terminée mais le code exporté n’a pas pu " +"être ouvert lors du contrôle de la copie. Le G-code de sortie se trouve dans " +"%1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Fichier G-code exporté vers %1%." + msgid "Unknown error when export G-code." msgstr "Erreur inconnue lors de l'exportation du G-code." @@ -3251,13 +3320,6 @@ msgstr "" "É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 "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é" @@ -3267,6 +3329,228 @@ msgstr "" "Planification du téléversement vers `%1% `. Voir Fenêtre -> File d'attente " "de téléversement de l'hôte d'impression" +msgid "Device" +msgstr "Appareil" + +msgid "Task Sending" +msgstr "Envoi de la tâche" + +msgid "Task Sent" +msgstr "Tâche envoyée" + +msgid "Edit multiple printers" +msgstr "Modifier plusieurs imprimantes" + +msgid "Select connected printers (0/6)" +msgstr "Sélection des imprimantes connectées (0/6)" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "Sélection des imprimantes connectées (%d/6)" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "Le nombre maximum d’imprimantes pouvant être sélectionnées est de %d" + +msgid "Offline" +msgstr "Hors ligne" + +msgid "No task" +msgstr "Aucune tâche" + +msgid "View" +msgstr "Affichage" + +msgid "N/A" +msgstr "N / A" + +msgid "Edit Printers" +msgstr "Modifier les imprimantes" + +msgid "Device Name" +msgstr "Nom de l’appareil" + +msgid "Task Name" +msgstr "Nom de la tâche" + +msgid "Device Status" +msgstr "État de l’appareil" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Veuillez sélectionner ici les appareils que vous souhaitez gérer (jusqu’à 6 " +"appareils)." + +msgid "Add" +msgstr "Ajouter" + +msgid "Idle" +msgstr "Inactif" + +msgid "Printing" +msgstr "Impression" + +msgid "Upgrading" +msgstr "Mise à jour" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "synchronisation" + +msgid "Printing Finish" +msgstr "Impression terminée" + +msgid "Printing Failed" +msgstr "Échec de l’impression" + +msgid "Printing Pause" +msgstr "Impression en pause" + +msgid "Prepare" +msgstr "Préparer" + +msgid "Slicing" +msgstr "Découpe" + +msgid "Pending" +msgstr "En attente" + +msgid "Sending" +msgstr "Envoi" + +msgid "Sending Finish" +msgstr "Fin de l’envoi" + +msgid "Sending Cancel" +msgstr "Annulation de l’envoi" + +msgid "Sending Failed" +msgstr "Échec de l’envoi" + +msgid "Print Success" +msgstr "Succès de l’impression" + +msgid "Print Failed" +msgstr "Échec de l’impression" + +msgid "Removed" +msgstr "Supprimé" + +msgid "Resume" +msgstr "Résumer" + +msgid "Stop" +msgstr "Arrêt" + +msgid "Task Status" +msgstr "État de la tâche" + +msgid "Sent Time" +msgstr "Heure d’envoi" + +msgid "There are no tasks to be sent!" +msgstr "Il n’y a pas de tâches à envoyer !" + +msgid "No historical tasks!" +msgstr "Aucune tâche historique !" + +msgid "Loading..." +msgstr "Chargement…" + +msgid "No AMS" +msgstr "Pas d’AMS" + +msgid "Send to Multi-device" +msgstr "Envoyer à plusieurs appareils" + +msgid "Preparing print job" +msgstr "Préparation du travail d'impression" + +msgid "Abnormal print file data. Please slice again" +msgstr "" +"Données de fichier d'impression anormales. Veuillez redécouvre le fichier." + +msgid "There is no device available to send printing." +msgstr "Il n’y a pas de périphérique disponible pour envoyer l’impression." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "Le nombre d’imprimantes utilisées simultanément ne peut être égal à 0." + +msgid "Use External Spool" +msgstr "Utiliser la bobine externe" + +msgid "Use AMS" +msgstr "Utiliser l’AMS" + +msgid "Select Printers" +msgstr "Sélectionner des imprimantes" + +msgid "Ams Status" +msgstr "Statut de l’AMS" + +msgid "Printing Options" +msgstr "Options d’impression" + +msgid "Bed Leveling" +msgstr "Mise à niveau du plateau" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "Calibration dynamique du débit" + +msgid "Send Options" +msgstr "Options d’envoi" + +msgid "Send to" +msgstr "Envoyer à" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"imprimantes en même temps. (Cela dépend du nombre d’appareils qui peuvent " +"être chauffés en même temps)." + +msgid "Wait" +msgstr "Attendre" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute par lot. (Cela dépend du temps nécessaire pour terminer le chauffage.)" + +msgid "Send" +msgstr "Envoyer" + +msgid "Name is invalid;" +msgstr "Le nom n'est pas valide ;" + +msgid "illegal characters:" +msgstr "caractères illégaux :" + +msgid "illegal suffix:" +msgstr "suffixe illégal :" + +msgid "The name is not allowed to be empty." +msgstr "Le nom ne doit pas être vide." + +msgid "The name is not allowed to start with space character." +msgstr "Le nom ne doit pas commencer par un espace." + +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 length exceeds the limit." +msgstr "La longueur du nom dépasse la limite." + msgid "Origin" msgstr "Origine" @@ -3341,6 +3625,23 @@ msgstr "" msgid "Bed Shape" msgstr "Forme du plateau" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"La température minimale recommandée est inférieure à 190 degrés ou la " +"température maximale recommandée est supérieure à 300 degrés.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"La température minimale recommandée ne peut être supérieure à la température " +"maximale recommandée.\n" + +msgid "Please check.\n" +msgstr "Veuillez vérifier.\n" + 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" @@ -3371,7 +3672,7 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" -"La température actuelle de la chambre est supérieure à la température de " +"La température actuelle du caisson est supérieure à la température de " "sécurité du matériau, ce qui peut entraîner un ramollissement et un bouchage " "du filament. La température de sécurité maximale pour le matériau est %d" @@ -3414,34 +3715,11 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Une trop grande compensation du pied d'éléphant est déraisonnable. Si vous " -"avez vraiment un effet de pied d'éléphant sérieux, veuillez vérifier " +"Une trop grande compensation de la patte d'éléphant est déraisonnable. Si " +"vous avez vraiment un effet de patte d'éléphant important, veuillez vérifier " "d'autres paramètres. Par exemple, si la température du plateau est trop " "élevée. La valeur sera remise à 0." -msgid "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional." -msgstr "" -"Le mode spirale ne fonctionne que lorsque qu'il n'y a qu'une seule paroi, " -"les supports sont désactivés, que les couches supérieures de la coque sont à " -"0, qu'il n'y a pas de remplissage et que le type timelapse est traditionnel." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "" -" Mais les machines avec une structure I3 ne généreront pas de vidéos " -"timelapse." - -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 - Modifiez ces paramètres et activez automatiquement le mode spirale/" -"vase\n" -"Non - Annuler l'activation du mode spirale" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3513,6 +3791,29 @@ msgstr "" "seam_slope_start_height doit être inférieur à la hauteur de couche.\n" "Remise à 0." +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional." +msgstr "" +"Le mode spirale ne fonctionne que lorsque qu'il n'y a qu'une seule paroi, " +"les supports sont désactivés, que les couches supérieures de la coque sont à " +"0, qu'il n'y a pas de remplissage et que le type timelapse est traditionnel." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr "" +" Mais les machines avec une structure I3 ne généreront pas de vidéos " +"timelapse." + +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 - Modifiez ces paramètres et activez automatiquement le mode spirale/" +"vase\n" +"Non - Annuler l'activation du mode spirale" + msgid "Auto bed leveling" msgstr "Niveau de plateau automatique" @@ -3598,11 +3899,10 @@ msgstr "" msgid "Paused due to chamber temperature control error" msgstr "" -"Mise en pause en raison d’une erreur de contrôle de la température de la " -"chambre" +"Mise en pause en raison d’une erreur de contrôle de la température du caisson" msgid "Cooling chamber" -msgstr "Refroidissement de la chambre" +msgstr "Refroidissement du caisson" msgid "Paused by the Gcode inserted by user" msgstr "Mise en pause par le G-code inséré par l’utilisateur" @@ -3622,18 +3922,6 @@ msgstr "Pause en cas d'erreur de la première couche" msgid "Nozzle clog pause" msgstr "Pause en cas de buse bouchée" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Carte mère" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Inconnu" @@ -3663,7 +3951,7 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" -"La température actuelle de la chambre ou la température cible de la chambre " +"La température actuelle du caisson ou la température cible du caisson " "dépasse 45℃. Afin d’éviter le bouchage de l’extrudeur, un filament basse " "température (PLA/PETG/TPU) ne doit pas être chargé." @@ -3674,16 +3962,16 @@ msgid "" msgstr "" "Un filament basse température (PLA/PETG/TPU) est chargé dans l’extrudeur. " "Afin d’éviter le bouchage de l’extrudeur, il n’est pas autorisé de régler la " -"température de la chambre au-dessus de 45℃." +"température du caisson au-dessus de 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" -"Lorsque vous réglez la température de la chambre en dessous de 40℃, le " -"contrôle de la température de la chambre ne sera pas activé. Et la " -"température cible de la chambre sera automatiquement réglée sur 0℃." +"Lorsque vous réglez la température du caisson en dessous de 40℃, le contrôle " +"de la température du caisson ne sera pas activé. Et la température cible du " +"caisson sera automatiquement réglée sur 0℃." msgid "Failed to start printing job" msgstr "Échec du lancement de la tâche d'impression" @@ -3736,7 +4024,7 @@ msgstr "Modifier le G-code personnalisé (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" msgstr "" -"Placeholders intégrés (double-cliquez sur l’élément pour l’ajouter au code G)" +"Placeholders intégrés (double-cliquez sur l’élément pour l’ajouter au G-code)" msgid "Search gcode placeholders" msgstr "Rechercher les placeholders de G-code" @@ -3766,7 +4054,7 @@ msgid "Objects Info" msgstr "Informations sur les objets" msgid "Dimensions" -msgstr "" +msgstr "Dimensions" msgid "Temperatures" msgstr "Températures" @@ -3796,9 +4084,6 @@ msgstr "Paramètres de l'imprimante" msgid "parameter name" msgstr "nom du paramètre" -msgid "N/A" -msgstr "N / A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s ne peut pas être un pourcentage" @@ -3810,6 +4095,11 @@ msgstr "La valeur %s est hors plage, continuer ?" msgid "Parameter validation" msgstr "Validation du paramètre" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" +"La valeur %s est hors plage. La plage valide est comprise entre %d et %d." + msgid "Value is out of range." msgstr "La valeur est hors plage." @@ -3820,6 +4110,20 @@ msgid "" "NO for %s %s." msgstr "Est-ce %s%% ou %s %s ? OUI pour %s%%, NON pour %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Format d'entrée non valide. Vecteur de dimensions attendu dans le format " +"suivant : \"%1%\"" + +msgid "Input value is out of range" +msgstr "La valeur entrée est hors plage" + +msgid "Some extension in the input is invalid" +msgstr "Une extension dans l'entrée n'est pas valide" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format invalide. Format vectoriel attendu : \"%1%\"" @@ -3870,7 +4174,7 @@ msgid "Temperature: " msgstr "Température: " msgid "Loading G-codes" -msgstr "Chargement des codes G" +msgstr "Chargement des G-codes" msgid "Generating geometry vertex data" msgstr "Génération de données de sommet de géométrie" @@ -3887,12 +4191,12 @@ msgstr "Afficher" msgid "Flushed" msgstr "Purgé" -msgid "Total" -msgstr "Total" - msgid "Tower" msgstr "Tour" +msgid "Total" +msgstr "Total" + msgid "Total Estimation" msgstr "Estimation totale" @@ -3995,6 +4299,12 @@ msgstr "Estimation de temps" msgid "Normal mode" msgstr "Mode normal" +msgid "Total Filament" +msgstr "Filament total" + +msgid "Model Filament" +msgstr "Filament pour le modèle" + msgid "Prepare time" msgstr "Temps de préparation" @@ -4088,6 +4398,9 @@ msgstr "Options d'agencement" msgid "Spacing" msgstr "Espacement" +msgid "0 means auto spacing." +msgstr "0 signifie espacement automatique." + msgid "Auto rotate for arrangement" msgstr "Rotation automatique pour l'arrangement" @@ -4100,9 +4413,6 @@ msgstr "Éviter la région de calibration de l'extrusion" msgid "Align to Y axis" msgstr "Aligner sur l’axe Y" -msgid "Add" -msgstr "Ajouter" - msgid "Add plate" msgstr "Ajouter une plaque" @@ -4235,6 +4545,9 @@ msgstr "Surveillance de l'enregistrement automatique" msgid "Go Live" msgstr "Passer en LIVE" +msgid "Liveview Retry" +msgstr "Réessai de l’affichage en direct" + msgid "Resolution" msgstr "Résolution" @@ -4289,14 +4602,11 @@ msgstr "" msgid "Logging" msgstr "Enregistrement" -msgid "Prepare" -msgstr "Préparer" - msgid "Preview" msgstr "Aperçu" -msgid "Device" -msgstr "Appareil" +msgid "Multi-device" +msgstr "Multi-appareils" msgid "Project" msgstr "Projet" @@ -4322,9 +4632,6 @@ msgstr "Tout découper" msgid "Export G-code file" msgstr "Exporter le fichier G-code" -msgid "Send" -msgstr "Envoyer" - msgid "Export plate sliced file" msgstr "Exporter fichier découpé du plateau" @@ -4445,6 +4752,12 @@ msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Charger un modèle" +msgid "Import Zip Archive" +msgstr "Importer une archive Zip" + +msgid "Load models contained within a zip archive" +msgstr "Charger les modèles contenus dans une archive zip" + msgid "Import Configs" msgstr "Importer des Configs" @@ -4478,8 +4791,8 @@ msgstr "Exporter le G-code" msgid "Export current plate as G-code" msgstr "Exporter le plateau actuel en G-code" -msgid "Export &Configs" -msgstr "Exportation & Configs" +msgid "Export Preset Bundle" +msgstr "Exporter l’ensemble des préréglages" msgid "Export current configuration to files" msgstr "Exporter la configuration actuelle vers des fichiers" @@ -4581,9 +4894,6 @@ msgstr "Afficher la surbrillance des surplombs d'un objet dans la scène 3D" msgid "Preferences" msgstr "Préférences" -msgid "View" -msgstr "Affichage" - msgid "Help" msgstr "Aide" @@ -4650,10 +4960,10 @@ msgstr "Exporter &Toolpaths en OBJ" msgid "Export toolpaths as OBJ" msgstr "Exporter les parcours d'outils en OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Ouvrir &Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Ouvrir Studio" msgid "&Quit" @@ -4758,45 +5068,63 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisation" -msgid "Initialize failed (No Device)!" -msgstr "Échec de l'initialisation (pas de périphérique) !" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"L'initialisation a échoué (la connexion de l'appareil n'est pas prête) !" +"L'appareil ne peut pas gérer plus de conversations. Veuillez réessayer plus " +"tard." -msgid "Initialize failed (No Camera Device)!" -msgstr "L'initialisation a échoué (Pas de caméra)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"L'imprimante est occupée à télécharger, veuillez attendre la fin du " -"téléchargement." +"Le lecteur ne fonctionne pas correctement. Veuillez réinstaller le lecteur " +"système." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"Échec de l'initialisation (non pris en charge par l'imprimante actuelle) !" +"Le lecteur n’est pas chargé, veuillez cliquer sur le bouton « play » pour " +"réessayer." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "L'initialisation a échoué (Non accessible en mode LAN uniquement) !" +msgid "Please confirm if the printer is connected." +msgstr "Veuillez vérifier que l’imprimante est bien connectée." -msgid "Initialize failed (Missing LAN ip of printer)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"Échec de l'initialisation (adresse IP réseau manquante de l'imprimante) !" +"L’imprimante est actuellement occupée à télécharger. Veuillez réessayer une " +"fois le téléchargement terminé." + +msgid "Printer camera is malfunctioning." +msgstr "La caméra de l’imprimante ne fonctionne pas correctement." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Un problème s’est produit. Veuillez mettre à jour le micrologiciel de " +"l’imprimante et réessayer." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"La fonction vue en direct sur réseau local est désactivée. Veuillez activer " +"l’affichage en direct sur l’écran de l’imprimante." + +msgid "Please enter the IP of printer to connect." +msgstr "Veuillez saisir l’IP de l’imprimante à connecter." msgid "Initializing..." msgstr "Initialisation…" -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "L'initialisation a échoué (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Échec de la connexion. Veuillez vérifier le réseau et réessayer" -msgid "Network unreachable" -msgstr "Réseau inaccessible" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Veuillez vérifier le réseau et réessayer, Vous pouvez redémarrer ou mettre à " +"jour l’imprimante si le problème persiste." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Arrêté [%d] !" +msgid "The printer has been logged out and cannot connect." +msgstr "L’imprimante a été déconnectée et ne peut pas se connecter." msgid "Stopped." msgstr "Arrêté." @@ -4829,19 +5157,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "L'initialisation de la caméra virtuelle a échoué (%s) !" +msgid "Network unreachable" +msgstr "Réseau inaccessible" + msgid "Information" msgstr "Information" msgid "Playing..." msgstr "En cours…" -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Le chargement a échoué [%d] !" - -msgid "Loading..." -msgstr "Chargement…" - msgid "Year" msgstr "Année" @@ -4860,9 +5184,6 @@ msgstr "Regroupez les fichiers par mois, les plus récents en premier." msgid "Show all files, recent first." msgstr "Afficher tous les fichiers, les plus récents en premier." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Passez aux fichiers timelapse." @@ -4890,6 +5211,12 @@ msgstr "Sélectionner" msgid "Batch manage files." msgstr "Gérer les fichiers par lots." +msgid "Refresh" +msgstr "Actualiser" + +msgid "Reload file list from printer." +msgstr "Recharger la liste des fichiers de l’imprimante." + msgid "No printers." msgstr "Aucune imprimante." @@ -4900,13 +5227,41 @@ msgstr "La connexion a échoué [%d] !" msgid "Loading file list..." msgstr "Chargement de la liste des fichiers…" -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Aucun fichier [%d]" +msgid "No files" +msgstr "Aucun fichier" + +msgid "Load failed" +msgstr "Échec du chargement" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"L'initialisation a échoué (la connexion de l'appareil n'est pas prête) !" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"La navigation dans les fichiers de la carte SD n’est pas prise en charge par " +"le micrologiciel actuel. Veuillez mettre à jour le micrologiciel de " +"l’imprimante." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"Échec de l’initialisation (Stockage indisponible, insérer la carte SD.) !" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "" +"Échec de la connexion au réseau local (Échec de la visualisation de la carte " +"SD)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "" +"La navigation dans les fichiers de la carte SD n’est pas prise en charge en " +"mode LAN uniquement." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Échec du chargement [%d]" +msgid "Initialize failed (%s)!" +msgstr "L'initialisation a échoué (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4932,12 +5287,11 @@ 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 fetch model information from printer." +msgstr "Échec de la récupération des informations de modèle de l’imprimante." -msgid "Failed to parse model infomations." -msgstr "Impossible d'analyser les informations du modèle." +msgid "Failed to parse model information." +msgstr "Échec de l’analyse des informations sur le modèle." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4950,6 +5304,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Le fichier « %s » a été perdu ! Veuillez le télécharger à nouveau." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Fichier : %s\n" +"Titre : %s\n" + msgid "Download waiting..." msgstr "Téléchargement en attente…" @@ -4966,16 +5328,15 @@ msgstr "Téléchargement terminé" msgid "Downloading %d%%..." msgstr "Téléchargement %d%%..." -msgid "Connection lost. Please retry." -msgstr "Connexion perdue. Veuillez réessayer." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"L'appareil ne peut pas gérer plus de conversations. Veuillez réessayer plus " -"tard." +"Reconnexion de l’imprimante, l’opération ne peut être effectuée maintenant, " +"veuillez réessayer plus tard." -msgid "File not exists." -msgstr "Le fichier n'existe pas." +msgid "File does not exist." +msgstr "Le fichier n’existe pas." msgid "File checksum error. Please retry." msgstr "Erreur de somme de contrôle du fichier. Veuillez réessayer." @@ -5032,12 +5393,6 @@ msgstr "Inverser l’axe de roulis" msgid "Printing Progress" msgstr "Progression de l'impression" -msgid "Resume" -msgstr "Résumer" - -msgid "Stop" -msgstr "Arrêt" - msgid "0" msgstr "0" @@ -5080,6 +5435,9 @@ msgstr "Changer la vue de la caméra" msgid "Control" msgstr "Contrôle" +msgid "Printer Parts" +msgstr "Pièces détachées pour imprimantes" + msgid "Print Options" msgstr "Options d'impression" @@ -5098,9 +5456,6 @@ msgstr "Chamb" msgid "Bed" msgstr "Plateau" -msgid "Unload" -msgstr "Décharger" - msgid "Debug Info" msgstr "Les informations de débogage" @@ -5288,9 +5643,6 @@ msgstr "État" msgid "Update" msgstr "Mise à jour" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Ne plus afficher" @@ -5321,6 +5673,41 @@ msgstr "Information de %s" msgid "Skip" msgstr "Sauter" +msgid "Newer 3mf version" +msgstr "Nouvelle version 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"La version du fichier 3mf est en bêta et est plus récente que la version " +"actuelle d’OrcaSlicer." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Si vous souhaitez essayer OrcaSlicer Beta, vous pouvez cliquer sur" + +msgid "Download Beta Version" +msgstr "Télécharger la version bêta" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" +"La version du fichier 3mf est plus récente que la version actuelle " +"d’OrcaSlicer" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"La mise à jour d’OrcaSlicer permet d’activer toutes les fonctionnalités du " +"fichier 3mf." + +msgid "Current Version: " +msgstr "Version actuelle : " + +msgid "Latest Version: " +msgstr "Dernière version : " + +msgid "Not for now" +msgstr "Pas pour le moment" + msgid "3D Mouse disconnected." msgstr "Souris 3D déconnectée." @@ -5390,12 +5777,12 @@ msgstr[1] "%1$d objets ont été chargés en tant que partie de l’objet coupé msgid "ERROR" msgstr "ERREUR" -msgid "CANCELED" -msgstr "Annulé" - msgid "COMPLETED" msgstr "Terminé" +msgid "CANCELED" +msgstr "Annulé" + msgid "Cancel upload" msgstr "Annuler le téléversement" @@ -5506,6 +5893,27 @@ msgstr "Autoriser le son d’invite" msgid "Filament Tangle Detect" msgstr "Détection de filament coincé" +msgid "Nozzle Clumping Detection" +msgstr "Détection de l’encrassement de la buse" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Vérifier si la buse est encrassée par du filament ou d’autres corps " +"étrangers." + +msgid "Nozzle Type" +msgstr "Type de buse" + +msgid "Stainless Steel" +msgstr "Acier inoxydable" + +msgid "Hardened Steel" +msgstr "Acier trempé" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Global" @@ -5716,9 +6124,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Vous feriez mieux de mettre à jour votre logiciel.\n" -msgid "Newer 3mf version" -msgstr "Nouvelle version 3mf" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5735,14 +6140,14 @@ msgstr "Veuillez les corriger dans les onglets de paramètres" msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" -"Le 3mf a les codes G modifiés suivants dans le filament ou les préréglages " +"Le 3mf a les G-codes modifiés suivants dans le filament ou les préréglages " "de l'imprimante :" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" -"Veuillez vous assurer que ces codes G modifiés sont sûrs afin d'éviter tout " +"Veuillez vous assurer que ces G-codes modifiés sont sûrs afin d'éviter tout " "dommage à la machine !" msgid "Modified G-codes" @@ -5756,7 +6161,7 @@ msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" -"Veuillez vous assurer que les codes G de ces préréglages sont sûrs afin " +"Veuillez vous assurer que les G-codes de ces préréglages sont sûrs afin " "d'éviter d'endommager la machine !" msgid "Customized Preset" @@ -5770,6 +6175,9 @@ msgstr "" msgid "The name may show garbage characters!" msgstr "Le nom peut afficher des caractères inutiles !" +msgid "Remember my choice." +msgstr "Mémoriser mon choix." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5899,9 +6307,6 @@ msgstr "Impossible de recharger :" msgid "Error during reload" msgstr "Erreur lors du rechargement" -msgid "Slicing" -msgstr "Découpe" - msgid "There are warnings after slicing models:" msgstr "Il y a des avertissements après le découpage des modèles :" @@ -5964,12 +6369,20 @@ msgstr "Importation du modèle" msgid "prepare 3mf file..." msgstr "préparation du fichier 3mf..." +msgid "Download failed, unknown file format." +msgstr "Échec du téléchargement, format de fichier inconnu." + msgid "downloading project ..." msgstr "téléchargement du projet..." +msgid "Download failed, File size exception." +msgstr "Le téléchargement a échoué, exception de taille de fichier." + #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Projet téléchargé à %d%%" +msgstr "" +"Projet téléchargé à %d%%L’importation dans Bambu Studio a échoué. Veuillez " +"télécharger le fichier et l’importer manuellement." msgid "" "Importing to Orca Slicer failed. Please download the file and manually " @@ -5990,6 +6403,22 @@ msgstr "ne contient pas de G-code valide." msgid "Error occurs while loading G-code file" msgstr "Une erreur se produit lors du chargement du fichier G-code" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Le chargement d’une archive ZIP se trouvant dans %1% a échoué." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Échec de la décompression du fichier vers %1% : %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Impossible de trouver le fichier décompressé dans %1%. La décompression du " +"fichier a échoué." + msgid "Drop project file" msgstr "Déposer le fichier de projet" @@ -6015,9 +6444,6 @@ msgstr "" msgid "Can not add models when in preview mode!" msgstr "Impossible d'ajouter des modèles en mode aperçu !" -msgid "Add Models" -msgstr "Ajouter des modèles" - msgid "All objects will be removed, continue?" msgstr "Tous les objets seront supprimés, continuer ?" @@ -6026,9 +6452,6 @@ msgstr "" "Le projet en cours comporte des modifications non enregistrées, enregistrez-" "les avant de continuer ?" -msgid "Remember my choice." -msgstr "Mémoriser mon choix." - msgid "Number of copies:" msgstr "Nombre de copies:" @@ -6062,10 +6485,27 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Impossible d'effectuer une opération booléenne sur les maillages du modèle. " -"Seules les parties positives seront exportées." +"Impossible d’effectuer une opération booléenne sur les mailles du modèle. " +"Seules les parties positives seront conservées. Vous pouvez corriger les " +"mailles et réessayer." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Raison : la partie « %1% » est vide." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Raison : la partie « %1% » n’est pas liée à un volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Raison : la partie « %1% » s’est auto-introduite." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Raison : « %1% » et une autre partie n’ont pas d’intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6230,6 +6670,15 @@ msgstr "Région d'origine" msgid "Stealth Mode" msgstr "Mode privé" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" +"Cette fonction interrompt la transmission des données vers les services en " +"ligne de Bambu. Les utilisateurs qui n’utilisent pas de machines BBL ou qui " +"utilisent uniquement le mode LAN peuvent activer cette fonction en toute " +"sécurité." + msgid "Enable network plugin" msgstr "Activer le plug-in réseau" @@ -6245,6 +6694,28 @@ msgstr "Impérial" msgid "Units" msgstr "Unités" +msgid "Allow only one OrcaSlicer instance" +msgstr "Autoriser une seule instance d’OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"Sous OSX, il n’y a toujours qu’une seule instance de l’application en cours " +"d’exécution par défaut. Cependant, il est possible de lancer plusieurs " +"instances de la même application à partir de la ligne de commande. Dans ce " +"cas, ces paramètres n’autorisent qu’une seule instance." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Si cette option est activée, lorsque vous démarrez OrcaSlicer et qu’une " +"autre instance du même OrcaSlicer est déjà en cours d’exécution, cette " +"instance sera réactivée à la place." + msgid "Home" msgstr "Accueil" @@ -6254,6 +6725,23 @@ msgstr "Page par défaut" msgid "Set the page opened on startup." msgstr "Définit la page ouverte au démarrage." +msgid "Touchpad" +msgstr "Pavé tactile" + +msgid "Camera style" +msgstr "Style de caméra" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Sélectionner le style de navigation de l’appareil photo.\n" +"Par défaut : LMB+mouvement pour la rotation, RMB/MMB+mouvement pour le " +"panoramique.\n" +"Pavé tactile : Alt+mouvement pour la rotation, Shift+mouvement pour le " +"panoramique." + msgid "Zoom to mouse position" msgstr "Zoom sur la position de la souris" @@ -6272,6 +6760,14 @@ msgstr "" "Si activée, utilise la caméra libre. Si désactivée, utilise la caméra " "contrainte." +msgid "Reverse mouse zoom" +msgstr "Inverser le zoom de la souris" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" +"Si cette option est activée, elle inverse le sens du zoom avec la molette de " +"la souris." + msgid "Show splash screen" msgstr "Afficher l'écran de démarrage" @@ -6293,6 +6789,35 @@ msgstr "" "Si cette option est activée, le calcul se fera automatiquement à chaque " "changement de couleur." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Volumes de purge : Calcul automatique à chaque changement de filament." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" +"Si cette option est activée, le calcul s’effectue automatiquement à chaque " +"changement de filament." + +msgid "Remember printer configuration" +msgstr "Mémoriser la configuration de l’imprimante" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Si cette option est activée, Orca se souviendra de la configuration du " +"filament/processus pour chaque imprimante et la modifiera automatiquement." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "Gestion multi-appareils (prend effet après le redémarrage d’Orca)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Si cette option est activée, vous pouvez envoyer une tâche à plusieurs " +"appareils en même temps et gérer plusieurs appareils." + msgid "Network" msgstr "Réseau" @@ -6340,6 +6865,48 @@ msgstr "" "Si activé, définit Orca Slicer comme application par défaut pour ouvrir les " "fichiers .step/.stp" +msgid "Associate web links to OrcaSlicer" +msgstr "Associer des liens web à OrcaSlicer" + +msgid "Associate URLs to OrcaSlicer" +msgstr "Associer des URL à OrcaSlicer" + +msgid "Current association: " +msgstr "Association actuelle : " + +msgid "Associate prusaslicer://" +msgstr "Associer prusaslicer://" + +msgid "Not associated to any application" +msgstr "N’est associé à aucune application" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Associer OrcaSlicer aux liens prusaslicer:// afin qu’Orca puisse ouvrir des " +"modèles provenant de Printable.com" + +msgid "Associate bambustudio://" +msgstr "Associer bambustudio://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Associer OrcaSlicer aux liens bambustudio:// afin qu’Orca puisse ouvrir des " +"modèles provenant de makerworld.com" + +msgid "Associate cura://" +msgstr "Associer cura://" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Associer OrcaSlicer aux liens cura:// pour qu’Orca puisse ouvrir les modèles " +"de thingiverse.com" + msgid "Maximum recent projects" msgstr "Projets récents maximum" @@ -6512,12 +7079,21 @@ msgstr "Sélectionner/supprimer des imprimantes (préréglages du système)" msgid "Create printer" msgstr "Créer une imprimante" -msgid "Incompatible" -msgstr "Incompatible" - msgid "The selected preset is null!" msgstr "Le préréglage sélectionné est invalide !" +msgid "End" +msgstr "Fin" + +msgid "Customize" +msgstr "Personnaliser" + +msgid "Other layer filament sequence" +msgstr "Séquence du filament de l’autre couche" + +msgid "Please input layer value (>= 2)." +msgstr "Veuillez saisir la valeur de la couche (>= 2)." + msgid "Plate name" msgstr "Nom de la plaque" @@ -6527,8 +7103,14 @@ msgstr "Identique à la séquence d'impression globale" msgid "Print sequence" msgstr "Séquence d'impression" -msgid "Customize" -msgstr "Personnaliser" +msgid "Same as Global" +msgstr "Identique à Global" + +msgid "Disable" +msgstr "Désactiver" + +msgid "Spiral vase" +msgstr "Vase spirale" msgid "First layer filament sequence" msgstr "Séquence d’impression de la première couche" @@ -6594,15 +7176,6 @@ msgstr "Préréglage utilisateur" msgid "Preset Inside Project" msgstr "Projeter à l'intérieur du préréglage" -msgid "Name is invalid;" -msgstr "Le nom n'est pas valide ;" - -msgid "illegal characters:" -msgstr "caractères illégaux :" - -msgid "illegal suffix:" -msgstr "suffixe illégal :" - msgid "Name is unavailable." msgstr "Le nom n'est pas disponible." @@ -6622,15 +7195,6 @@ msgstr "" msgid "Please note that saving action will replace this preset" msgstr "Veuillez noter que l'action d'enregistrement remplacera ce préréglage" -msgid "The name is not allowed to be empty." -msgstr "Le nom ne doit pas être vide." - -msgid "The name is not allowed to start with space character." -msgstr "Le nom ne doit pas commencer par un espace." - -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 le même qu'un nom d'alias prédéfini." @@ -6690,9 +7254,6 @@ 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é" @@ -6717,12 +7278,6 @@ msgstr "Bambu Textured PEI Plate" msgid "Send print job to" msgstr "Envoyer le travail d'impression à" -msgid "Refresh" -msgstr "Actualiser" - -msgid "Bed Leveling" -msgstr "Mise à niveau du plateau" - msgid "Flow Dynamics Calibration" msgstr "Calibration du débit" @@ -6735,9 +7290,6 @@ msgstr "envoi terminé" msgid "Error code" msgstr "Code erreur" -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 "" "Pas de connexion au cloud, seules les imprimantes en mode LAN sont affichées" @@ -6824,10 +7376,13 @@ msgstr "" 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" -"L’imprimante sélectionnée est incompatible avec les préréglages d’imprimante " -"choisis." +"L’imprimante sélectionnée (%s) est incompatible avec le profil d’imprimante " +"choisi dans le logiciel de découpe (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "Une carte SD doit être insérée pour enregistrer un timelapse." @@ -6888,47 +7443,42 @@ msgid "nozzle in preset: %s %s" msgstr "buse dans le préréglage : %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "buse mémorisée : %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "buse mémorisée : %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"Le diamètre de la buse dans le préréglage ne correspond pas au diamètre de " -"la buse mémorisé. Avez-vous changé de buse récemment ?" +"Le diamètre de votre buse dans le fichier découpé ne correspond pas à la " +"buse mémorisée. Si vous avez changé de buse récemment, veuillez aller dans " +"Périphérique > Pièces de l’imprimante pour modifier les paramètres." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*L’impression du matériau %s avec %s peut endommager la buse." +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"L’impression d’un matériau à haute température (matériau %s) avec %s peut " +"endommager la buse." + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Veuillez corriger l’erreur ci-dessus, sinon l’impression ne pourra pas se " +"poursuivre." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Cliquez sur le bouton de confirmation si vous souhaitez continuer à imprimer." -msgid "Hardened Steel" -msgstr "Acier trempé" - -msgid "Stainless Steel" -msgstr "Acier inoxydable" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" "Connexion à l’imprimante. Impossible d’annuler pendant le processus de " "connexion." -msgid "Preparing print job" -msgstr "Préparation du travail d'impression" - -msgid "Abnormal print file data. Please slice again" -msgstr "" -"Données de fichier d'impression anormales. Veuillez redécouvre 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." @@ -6942,6 +7492,9 @@ msgstr "Calibration automatique du débit à l’aide du Micro-Lidar" msgid "Modifying the device name" msgstr "Modification du nom de l'appareil" +msgid "Bind with Pin Code" +msgstr "Relier avec le code pin" + msgid "Send to Printer SD card" msgstr "Envoyer sur la carte SD de l'imprimante" @@ -6950,6 +7503,11 @@ msgstr "" "Impossible d'envoyer la tâche d'impression lorsque la mise à niveau est en " "cours." +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"L’imprimante sélectionnée est incompatible avec les préréglages d’imprimante " +"choisis." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" "Il est nécessaire d'insérer une carte MicroSD avant d'envoyer les données " @@ -6994,6 +7552,29 @@ msgstr "Délai d'expiration du rapport de connexion" msgid "Unknown Failure" msgstr "Erreur inconnue" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Veuillez trouver le code pin dans la page Compte sur l’écran de " +"l’imprimante,\n" +" et tapez le code pin ci-dessous." + +msgid "Can't find Pin Code?" +msgstr "Vous ne trouvez pas le code pin ?" + +msgid "Pin Code" +msgstr "Code pin" + +msgid "Binding..." +msgstr "Liaison…" + +msgid "Please confirm on the printer screen" +msgstr "Veuillez confirmer sur l’écran de l’imprimante" + +msgid "Log in failed. Please check the Pin Code." +msgstr "La connexion a échoué. Veuillez vérifier le code pin." + msgid "Log in printer" msgstr "Connectez-vous à l'imprimante" @@ -7205,6 +7786,31 @@ msgstr "Ajuster" msgid "Ignore" msgstr "Ignorer" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Fonction expérimentale : Rétracter et couper le filament à une plus grande " +"distance lors des changements de filament afin de minimiser le rinçage. Bien " +"que cela puisse réduire considérablement le rinçage, cela peut également " +"augmenter le risque de bouchage des buses ou d’autres complications " +"d’impression." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Fonction expérimentale : Rétracter et couper le filament à une plus grande " +"distance lors des changements de filament afin de minimiser l’affleurement." +"Bien que cela puisse réduire sensiblement l’affleurement, cela peut " +"également augmenter le risque d’obstruction des buses ou d’autres " +"complications d’impression.Veuillez utiliser le dernier micrologiciel de " +"l’imprimante." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -7286,6 +7892,9 @@ msgstr "Filament de support" msgid "Tree supports" msgstr "Supports arborescents" +msgid "Skirt" +msgstr "Jupe" + msgid "Prime tower" msgstr "Tour de purge" @@ -7343,7 +7952,7 @@ msgstr "" "d'ensemble" msgid "Print chamber temperature" -msgstr "Température de la chambre d’impression" +msgstr "Température du caisson d’impression" msgid "Print temperature" msgstr "Température d'impression" @@ -7476,6 +8085,14 @@ msgstr "" msgid "Printable space" msgstr "Espace imprimable" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Valeur non valide fournie pour le réglage %1% : %2%" + +msgid "G-code flavor is switched" +msgstr "La version du G-code est modifiée" + msgid "Cooling Fan" msgstr "Ventilateur de refroidissement" @@ -7715,23 +8332,38 @@ msgstr "" "traitement et contient les modifications non enregistrées suivantes :" #, 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 "" -"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 settings of preset \"%1%\". " +msgstr "Vous avez modifié certains paramètres du réglage prédéfini « %1% »." msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"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 ?" +"\n" +"Vous pouvez enregistrer ou rejeter les valeurs prédéfinies que vous avez " +"modifiées." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Vous pouvez sauvegarder ou ignorer les valeurs de préréglage que vous avez " +"modifiées, ou choisir de transférer les valeurs que vous avez modifiées dans " +"le nouveau préréglage." + +msgid "You have previously modified your settings." +msgstr "Vous avez déjà modifié vos réglages." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Vous pouvez ignorer les valeurs prédéfinies que vous avez modifiées ou " +"choisir de transférer les valeurs modifiées dans le nouveau projet." msgid "Extruders count" msgstr "Nombre d'extrudeurs" @@ -7768,7 +8400,7 @@ msgid "Transfer values from left to right" msgstr "Transférer les valeurs de gauche à droite" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Si elle est activée, cette boîte de dialogue peut être utilisée pour " @@ -7854,6 +8486,60 @@ msgstr "Aucune mise à jour disponible." msgid "The configuration is up to date." msgstr "La configuration est à jour." +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + msgid "Ramming customization" msgstr "Personnalisation du pilonnage" @@ -7941,6 +8627,45 @@ msgstr "De" msgid "To" msgstr "À" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" +"Windows Media Player est nécessaire pour cette tâche ! Voulez-vous activer " +"‘Windows Media Player’ pour votre système d’exploitation ?" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" +"BambuSource n’a pas été correctement enregistré pour la lecture de médias ! " +"Appuyez sur Oui pour le réenregistrer. Vous recevrez deux fois la demande de " +"permission." + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" +"Composant BambuSource manquant enregistré pour la lecture des médias ! " +"Veuillez réinstaller OrcaSlicer ou demander de l’aide au service après-vente." + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" +"Si vous utilisez une BambuSource provenant d’une autre installation, la " +"lecture de la vidéo peut ne pas fonctionner correctement ! Appuyez sur Oui " +"pour résoudre le problème." + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" +"Il manque à votre système les codecs H.264 pour GStreamer, qui sont " +"nécessaires pour lire la vidéo. (Essayez d’installer les paquets " +"gstreamer1.0-plugins-bad ou gstreamer1.0-libav, puis redémarrez Orca Slicer)." + msgid "Bambu Network plug-in not detected." msgstr "Le plug-in Bambu Network n’a pas été détecté." @@ -8220,6 +8945,12 @@ msgstr "Déplacez le curseur 5 fois plus vite" msgid "Shift+Mouse wheel" msgstr "Maj+Molette de la souris" +msgid "Horizontal slider - Move to start position" +msgstr "Curseur horizontal - Déplacement vers la position de départ" + +msgid "Horizontal slider - Move to last position" +msgstr "Curseur horizontal - Déplacer vers la dernière position" + msgid "Release Note" msgstr "Note de version" @@ -8250,6 +8981,42 @@ msgstr "Sauter cette version" msgid "Done" msgstr "Terminé" +msgid "resume" +msgstr "reprendre" + +msgid "Resume Printing" +msgstr "Reprendre l’impression" + +msgid "Resume Printing(defects acceptable)" +msgstr "Reprendre l’impression (des défauts sont acceptables)" + +msgid "Resume Printing(problem solved)" +msgstr "Reprendre l’impression (problème résolu)" + +msgid "Stop Printing" +msgstr "Arrêter l’impression" + +msgid "Check Assistant" +msgstr "Assistant de contrôle" + +msgid "Filament Extruded, Continue" +msgstr "Filament extrudé, Continuer" + +msgid "Not Extruded Yet, Retry" +msgstr "Pas encore extrudé, réessayer" + +msgid "Finished, Continue" +msgstr "Terminé, Continuer" + +msgid "Load Filament" +msgstr "Charger" + +msgid "Filament Loaded, Resume" +msgstr "Filament chargé, Reprendre" + +msgid "View Liveview" +msgstr "Vue en direct" + msgid "Confirm and Update Nozzle" msgstr "Confirmation et mise à jour de la buse" @@ -8311,12 +9078,6 @@ msgstr "Version :" msgid "Update firmware" msgstr "Mise à jour du firmware" -msgid "Printing" -msgstr "Impression" - -msgid "Idle" -msgstr "Inactif" - msgid "Beta version" msgstr "Version Beta" @@ -8352,7 +9113,7 @@ 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." +"update next time starting Orca." msgstr "" "La version du firmware est erronée. La réparation et la mise à jour sont " "nécessaires avant l'impression. Voulez-vous effectuer la mise à jour " @@ -8497,9 +9258,6 @@ msgstr "Pont interne" msgid "Gap infill" msgstr "Remplissage d'espace" -msgid "Skirt" -msgstr "Jupe" - msgid "Support interface" msgstr "Interface de support" @@ -8940,11 +9698,11 @@ msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" msgstr "" -"Rétrécissez la couche initiale sur le plateau pour compenser l'effet de pied " -"d'éléphant" +"Rétrécissez la couche initiale sur le plateau pour compenser l'effet de " +"patte d'éléphant" msgid "Elephant foot compensation layers" -msgstr "Couches de compensation du pied d'éléphant" +msgstr "Couches de compensation de la patte d'éléphant" msgid "" "The number of layers on which the elephant foot compensation will be active. " @@ -8952,10 +9710,10 @@ msgid "" "the next layers will be linearly shrunk less, up to the layer indicated by " "this value." msgstr "" -"Nombre de couches sur lesquelles la compensation du pied d'éléphant sera " -"active. La première couche sera réduite de la valeur de compensation du pied " -"d'éléphant, puis les couches suivantes seront réduites linéairement moins, " -"jusqu'à la couche indiquée par cette valeur." +"Nombre de couches sur lesquelles la compensation de la patte d'éléphant sera " +"active. La première couche sera réduite de la valeur de compensation de la " +"patte d'éléphant, puis les couches suivantes seront réduites linéairement " +"moins, jusqu'à la couche indiquée par cette valeur." msgid "layers" msgstr "couches" @@ -9185,6 +9943,15 @@ msgstr "Plaque Engineering" msgid "First layer print sequence" msgstr "Séquence d’impression de la première couche" +msgid "Other layers print sequence" +msgstr "Séquence d’impression des autres couches" + +msgid "The number of other layers print sequence" +msgstr "Le nombre d’autres couches de la séquence d’impression" + +msgid "Other layers filament sequence" +msgstr "Séquence de filament des autres couches" + 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 le levage du Z" @@ -9886,7 +10653,7 @@ msgstr "" "parois.\n" "Modéré : Ajouter un remplissage plein uniquement pour les surfaces fortement " "inclinées\n" -"Tout : ajouter un remplissage plein pour toutes les surfaces inclinées " +"Tous : ajouter un remplissage plein pour toutes les surfaces inclinées " "appropriées.\n" "La valeur par défaut est Tous." @@ -10054,7 +10821,7 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -10064,12 +10831,12 @@ msgstr "" "sont imprimées en premier, ce qui fonctionne le mieux dans la plupart des " "cas.\n" "\n" -"L’impression des parois en premier peut s’avérer utile en cas de surplombs " -"extrêmes, car les parois ont le remplissage voisin auquel adhérer. " -"Cependant, le remplissage repoussera légèrement les parois imprimées à " -"l’endroit où il est fixé, ce qui se traduira par une moins bonne finition de " -"la surface extérieure. Cela peut également faire briller le remplissage à " -"travers les surfaces externes de la pièce." +"L’impression du remplissage en premier peut aider dans le cas de parois en " +"surplomb importantes, car les parois ont le remplissage adjacent auquel " +"adhérer. Cependant, le remplissage repoussera légèrement les parois " +"imprimées à l’endroit où il est fixé, ce qui se traduira par une moins bonne " +"finition de la surface extérieure. Cela peut également faire ressortir le " +"remplissage à travers les surfaces externes de la pièce." msgid "Wall loop direction" msgstr "Direction de la paroi" @@ -10127,6 +10894,12 @@ msgstr "" "Rayon de dégagement autour de l'extrudeuse : utilisé pour éviter les " "collisions lors de l'impression par objets." +msgid "Nozzle height" +msgstr "Hauteur de la buse" + +msgid "The height of nozzle tip." +msgstr "Hauteur de l’extrémité de la buse." + msgid "Bed mesh min" msgstr "Maillage du plateau min" @@ -10253,6 +11026,32 @@ msgstr "" "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 "Don't slow down outer walls" +msgstr "Ne pas ralentir sur les parois extérieures" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"S’il est activé, ce paramètre garantit que les périmètres externes ne sont " +"pas ralentis pour respecter la durée minimale de la couche. Ceci est " +"particulièrement utile dans les scénarios suivants :\n" +"\n" +" 1. Pour éviter les changements de brillance lors de l’impression de " +"filaments brillants \n" +"2. Pour éviter les changements de vitesse des parois externes qui peuvent " +"créer de légers artefacts de paroi qui apparaissent comme des bandes en z. \n" +"3. Pour éviter d’imprimer à des vitesses qui provoquent des VFA (artefacts " +"fins) sur les parois externes.\n" + msgid "Layer time" msgstr "Temps de couche" @@ -10547,8 +11346,8 @@ msgstr "Fabriquant du filament." msgid "(Undefined)" msgstr "(Indéfini)" -msgid "Infill direction" -msgstr "Sens de remplissage" +msgid "Sparse infill direction" +msgstr "Direction du remplissage" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10557,6 +11356,23 @@ msgstr "" "Angle pour le motif de remplissage qui contrôle le début ou la direction " "principale de la ligne" +msgid "Solid infill direction" +msgstr "Direction du remplissage" + +msgid "" +"Angle for solid 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 " +"principale de la ligne" + +msgid "Rotate solid infill direction" +msgstr "Faire pivoter la direction du remplissage solide" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" +"Faire pivoter la direction du remplissage solide de 90° pour chaque couche." + msgid "Sparse infill density" msgstr "Densité de remplissage" @@ -10604,6 +11420,9 @@ msgstr "Support Cubique" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "Quadrillage" + msgid "Sparse infill anchor length" msgstr "Longueur de l’ancrage de remplissage interne" @@ -10823,6 +11642,9 @@ msgstr "" "fonctionnera à la vitesse maximale autorisée à la couche " "\"close_fan_the_first_x_layers\" + 1." +msgid "layer" +msgstr "couche" + msgid "Support interface fan speed" msgstr "Vitesse du ventilateur" @@ -10896,15 +11718,40 @@ msgstr "" "Vitesse de remplissage des espaces. L’espace a généralement une largeur de " "ligne irrégulière et doit être imprimé plus lentement" +msgid "Precise Z height" +msgstr "Hauteur précise du Z" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Activez cette option pour obtenir une hauteur z précise de l’objet après la " +"découpe. La hauteur précise de l’objet sera obtenue en affinant les hauteurs " +"des dernières couches. Notez qu’il s’agit d’un paramètre expérimental." + msgid "Arc fitting" msgstr "Tracer des arcs" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"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" +"Activez cette option pour obtenir un fichier G-code contenant les " +"déplacements G2 et G3. La tolérance d’ajustement est la même que la " +"résolution. \n" +"\n" +"Note : Pour les machines Klipper, il est recommandé de désactiver cette " +"option. Klipper ne bénéficie pas des commandes d’arc car celles-ci sont à " +"nouveau divisées en segments de ligne par le micrologiciel. Il en résulte " +"une réduction de la qualité de la surface, car les segments de ligne sont " +"convertis en arcs par le slicer, puis à nouveau en segments par le firmware." msgid "Add line number" msgstr "Ajouter un numéro de ligne" @@ -11048,14 +11895,14 @@ msgid "money/h" msgstr "€/heure" msgid "Support control chamber temperature" -msgstr "Contrôle de température de la chambre" +msgstr "Contrôle de température du caisson" msgid "" "This option is enabled if machine support controlling chamber temperature\n" "G-code command: M141 S(0-255)" msgstr "" "Activez cette option si la machine prend en charge le contrôle de la " -"température de la chambre\n" +"température du caisson\n" "Commande de G-code : M141 S(0-255)" msgid "Support air filtration" @@ -11142,13 +11989,36 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Chevauchement de remplissage/paroi" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"La zone de remplissage est légèrement agrandie pour chevaucher la paroi afin " -"d'améliorer l'adhérence. La valeur en pourcentage est relative à la largeur " -"de ligne de remplissage." +"La zone de remplissage est légèrement élargie pour chevaucher la paroi afin " +"d’améliorer l’adhérence. La valeur du pourcentage est relative à la largeur " +"de la ligne de remplissage. Réglez cette valeur à ~10-15% pour minimiser le " +"risque de sur-extrusion et d’accumulation de matériau, ce qui rendrait les " +"surfaces supérieures rugueuses." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Chevauchement du remplissage ou de la paroi supérieur(e)/inférieur(e)" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"La zone de remplissage solide supérieure est légèrement élargie pour " +"chevaucher la paroi afin d’améliorer l’adhérence et de minimiser " +"l’apparition de trous d’épingle à l’endroit où le remplissage supérieur " +"rencontre les parois. Une valeur de 25-30% est un bon point de départ, " +"minimisant l’apparition de trous d’épingle. La valeur en pourcentage est " +"relative à la largeur de ligne du remplissage." msgid "Speed of internal sparse infill" msgstr "Vitesse de remplissage interne" @@ -11853,6 +12723,30 @@ msgstr "" "le suintement pendant les longs trajets. Définir zéro pour désactiver la " "rétraction" +msgid "Long retraction when cut(experimental)" +msgstr "Longue rétraction lors de la coupe (expérimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Fonction expérimentale : rétracter et couper le filament à une plus grande " +"distance pendant les changements pour minimiser la purge. Bien que cela " +"réduise considérablement la purge, cela peut également augmenter le risque " +"de bouchage des buses ou d’autres problèmes d’impression." + +msgid "Retraction distance when cut" +msgstr "Distance de rétraction lors de la coupe" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Fonction expérimentale : longueur de rétraction avant la coupure lors du " +"changement de filament." + msgid "Z hop when retract" msgstr "Décalage du Z lors de la rétraction" @@ -11992,6 +12886,8 @@ msgstr "Désactiver le réglage du temps d’impression restant" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" +"Désactiver la génération du M73 : Définir le temps d’impression restant dans " +"le gcode final" msgid "Seam position" msgstr "Position de la couture" @@ -12072,7 +12968,7 @@ msgstr "" "utilisée. La valeur par défaut est de 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Seuil de dépassement conditionnel" #, no-c-format, no-boost-format msgid "" @@ -12082,6 +12978,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"Cette option détermine le seuil de surplomb pour l’application des coutures " +"en écharpe. Si la partie non soutenue du périmètre est inférieure à ce " +"seuil, des coutures en biseau seront appliquées. Le seuil par défaut est " +"fixé à 40 % de la largeur de la paroi extérieure. Pour des raisons de " +"performance, le degré de surplomb est estimé." msgid "Scarf joint speed" msgstr "Vitesse de la couture en biseau" @@ -12230,6 +13131,44 @@ msgstr "Hauteur de la jupe" msgid "How many layers of skirt. Usually only one layer" msgstr "Nombre de couches de jupe, généralement une seule." +msgid "Draft shield" +msgstr "Paravent" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Un paravent est utile pour protéger une impression ABS ou ASA contre les " +"risques de déformation et de détachement du plateau d’impression en raison " +"des courants d’air. Il n’est généralement nécessaire que pour les " +"imprimantes à cadre ouvert, c’est-à-dire sans caisson. \n" +"\n" +"Options :\n" +"Activé = la hauteur de la jupe est égale à celle de l’objet imprimé le plus " +"haut.\n" +"Limité = la hauteur de la jupe est celle spécifiée par la hauteur de la " +"jupe.\n" +"\n" +"Remarque : lorsque le paravent est actif, la jupe est imprimée à la distance " +"de la jupe par rapport à l’objet. Par conséquent, si des bordures sont " +"actives, elle risque de les croiser. Pour éviter cela, augmentez la valeur " +"de la distance de la jupe.\n" + +msgid "Limited" +msgstr "Limité" + +msgid "Enabled" +msgstr "Activé" + msgid "Skirt loops" msgstr "Boucles de la jupe" @@ -12244,6 +13183,22 @@ msgstr "" "Vitesse de la jupe, en mm/s. Une valeur à 0 signifie que la vitesse " "d’extrusion par défaut est utilisée." +msgid "Skirt minimum extrusion length" +msgstr "Longueur minimale d’extrusion de la jupe" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Longueur minimale d’extrusion du filament en mm lors de l’impression de la " +"jupe. Zéro signifie que cette fonction est désactivée.\n" +"\n" +"L’utilisation d’une valeur non nulle est utile si l’imprimante est " +"configurée pour imprimer sans ligne d’amorce." + 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" @@ -12274,9 +13229,6 @@ msgstr "" "Vitesse du remplissage plein interne, pas de la surface supérieure et " "inférieure" -msgid "Spiral 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 " @@ -12845,12 +13797,12 @@ msgid "" "added before \"machine_start_gcode\"\n" "G-code commands: M141/M191 S(0-255)" msgstr "" -"Activez cette option pour le contrôle de la température de la chambre. Une " +"Activez cette option pour le contrôle de la température du caisson. Une " "commande M191 sera ajoutée avant \"machine_start_gcode\"\n" "Commandes G-code : M141/M191 S(0-255)" msgid "Chamber temperature" -msgstr "Température de la chambre" +msgstr "Température du caisson" msgid "" "Higher chamber temperature can help suppress or reduce warping and " @@ -12861,13 +13813,13 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" -"Une température de chambre plus élevée peut aider à supprimer ou à réduire " +"Une température de caisson plus élevée peut aider à supprimer ou à réduire " "la déformation et potentiellement conduire à une force de liaison " "intercouche plus élevée pour les matériaux à haute température comme l’ABS, " "l’ASA, le PC, le PA, etc. Dans le même temps, la filtration de l’air de " "l’ABS et de l’ASA s’aggravera. Pour le PLA, le PETG, le TPU, le PVA et " -"d’autres matériaux à basse température, la température réelle de la chambre " -"ne doit pas être élevée pour éviter les bouchages, donc la valeur 0 qui " +"d’autres matériaux à basse température, la température réelle du caisson ne " +"doit pas être élevée pour éviter les bouchages, donc la valeur 0 qui " "signifie éteindre est fortement recommandé." msgid "Nozzle temperature for layers after the initial one" @@ -12982,8 +13934,8 @@ msgid "" "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'apparence lors de l'impression d'objets." +"stabiliser la pression du caisson à 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" @@ -13029,6 +13981,52 @@ msgstr "Espacement des lignes de purge de la tour d’essuyage" msgid "Spacing of purge lines on the wipe tower." msgstr "Espacement des lignes de purge sur la tour d’essuyage." +msgid "Maximum wipe tower print speed" +msgstr "Vitesse maximale d’impression de la tour d’essuyage" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"Vitesse d'impression maximale lors de la purge dans la tour de raclage et de " +"l'impression des couches éparses de la tour d'essuyage. Lors de la purge, si " +"la vitesse de remplissage ou la vitesse calculée à partir de la vitesse " +"volumétrique maximale du filament est inférieure, c'est la vitesse la plus " +"faible qui sera utilisée.\n" +"\n" +"Lors de l’impression des couches éparses, si la vitesse du périmètre interne " +"ou la vitesse calculée à partir de la vitesse volumétrique maximale du " +"filament est inférieure, c’est la vitesse la plus faible qui sera utilisée.\n" +"\n" +"L’augmentation de cette vitesse peut affecter la stabilité de la tour et " +"augmenter la force avec laquelle la buse entre en collision avec les blobs " +"qui peuvent s’être formés sur la tour d’essuyage.\n" +"\n" +"Avant d’augmenter ce paramètre au-delà de la valeur par défaut de 90 mm/sec, " +"assurez-vous que votre imprimante peut effectuer un pontage fiable à des " +"vitesses élevées et que le suintement lors du changement d’outil est bien " +"contrôlé.\n" +"\n" +"Pour les périmètres externes de la tour d’essuyage, la vitesse du périmètre " +"interne est utilisée indépendamment de ce paramètre." + msgid "Wipe tower extruder" msgstr "Extrudeur de tour d’essuyage" @@ -13634,7 +14632,7 @@ msgid "Hour" msgstr "Heure" msgid "Minute" -msgstr "" +msgstr "Minute" msgid "Print preset name" msgstr "Imprimer le nom de la présélection" @@ -13809,6 +14807,9 @@ msgstr "Annulé" msgid "load_obj: failed to parse" msgstr "load_obj : échec de l'analyse" +msgid "load mtl in obj: failed to parse" +msgstr "charger mtl dans obj : échec de l’analyse" + msgid "The file contains polygons with more than 4 vertices." msgstr "Le fichier contient des polygones comportant plus de 4 sommets." @@ -13889,13 +14890,6 @@ msgstr "Débit" msgid "Max Volumetric Speed" msgstr "Vitesse volumétrique maximale" -msgid "Please enter the name you want to save to printer." -msgstr "" -"Veuillez saisir le nom que vous souhaitez enregistrer sur l’imprimante." - -msgid "The name cannot exceed 40 characters." -msgstr "Le nom ne peut pas dépasser 40 caractères." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13944,6 +14938,19 @@ msgstr "Veuillez sélectionner le filament à calibrer." msgid "The input value size must be 3." msgstr "La valeur saisie doit être 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Ce type de machine ne peut contenir que 16 résultats historiques par buse. " +"Vous pouvez supprimer les résultats historiques existants, puis lancer " +"l’étalonnage. Vous pouvez également poursuivre l’étalonnage, mais vous ne " +"pouvez pas créer de nouveaux résultats historiques d’étalonnage. \n" +"Souhaitez-vous toujours poursuivre le calibrage ?" + msgid "Connecting to printer..." msgstr "Connexion à l’imprimante…" @@ -13955,6 +14962,24 @@ msgstr "" "Le résultat de la calibration dynamique du débit a été enregistré sur " "l’imprimante" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Il existe déjà un résultat d’étalonnage antérieur portant le même nom : %s. " +"Un seul des résultats portant le même nom est sauvegardé. Êtes-vous sûr de " +"vouloir remplacer le résultat antérieur ?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Ce type de machine ne peut contenir que %d résultats historiques par buse. " +"Ce résultat ne sera pas enregistré." + msgid "Internal Error" msgstr "Erreur interne" @@ -14006,46 +15031,37 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Veuillez trouver les détails de la calibration dynamique du débit sur notre " -"Wiki.\n" +"Vous trouverez les détails de l'étalonnage de la dynamique des flux dans " +"notre wiki.\n" "\n" -"Habituellement, la calibration est inutile. Lorsque vous démarrez une " -"impression d'une seule couleur/matériau, avec l'option \"Calibration du débit" -"\" cochée dans le menu de démarrage de l'impression, l'imprimante suivra " -"l'ancienne méthode de calibration du filament avant l'impression.\n" -"Lorsque vous démarrez une impression multi-couleurs/matériaux, l'imprimante " -"utilise le paramètre de compensation par défaut pour le filament lors de " -"chaque changement de filament, ce qui donne un bon résultat dans la plupart " -"des cas.\n" +"En général, la calibration n’est pas nécessaire. Lorsque vous démarrez une " +"impression mono-couleur/matériau, avec l’option « calibration de la " +"dynamique de flux » cochée dans le menu de démarrage de l’impression, " +"l’imprimante suivra l’ancienne méthode, en calibrant le filament avant " +"l’impression ; Lorsque vous démarrez une impression multi-couleur/matériau, " +"l’imprimante utilisera le paramètre de compensation par défaut pour le " +"filament lors de chaque changement de filament, ce qui donnera un bon " +"résultat dans la plupart des cas.\n" "\n" -"Veuillez noter qu'il y a quelques cas qui rendront le résultat de " -"calibration non fiable : utiliser un plateau texturé pour faire la " -"calibration, utiliser un plateau qui n'a pas une bonne adhérence (veuillez " -"dans ce cas laver la plaque de construction ou appliquer de la colle)… Vous " -"pouvez trouver d'autres cas sur notre Wiki.\n" -"Veuillez noter qu'il y a quelques cas qui rendront le résultat de " -"calibration non fiable : utiliser un plateau texturé pour faire la " -"calibration, utiliser un plateau qui n'a pas une bonne adhérence (veuillez " -"dans ce cas laver la plaque de construction ou appliquer de la colle)… Vous " -"pouvez trouver d'autres cas sur notre Wiki.\n" +"Veuillez noter qu’il existe quelques cas qui peuvent rendre les résultats de " +"la calibration peu fiables, tels qu’une adhérence insuffisante sur le " +"plateau. Il est possible d’améliorer l’adhérence en lavant la plaque de " +"construction ou en appliquant de la colle. Pour plus d’informations à ce " +"sujet, veuillez consulter notre Wiki.\n" "\n" -"Les résultats de calibration ont environ 10 % d'écart dans nos tests, ce qui " -"peut faire en sorte que le résultat ne soit pas exactement le même à chaque " -"calibration. Nous enquêtons toujours sur la cause première pour apporter des " -"améliorations avec de nouvelles mises à jour.Les résultats de calibration " -"ont environ 10 % d'écart dans nos tests, ce qui peut faire en sorte que le " -"résultat ne soit pas exactement le même à chaque calibration. Nous enquêtons " -"toujours sur la cause première pour apporter des améliorations avec de " -"nouvelles mises à jour." +"Les résultats de la calibration présentent une fluctuation d’environ 10 % " +"dans notre test, ce qui peut entraîner une différence entre les résultats de " +"chaque calibration. Nous continuons d’étudier la cause première afin " +"d’apporter des améliorations lors des nouvelles mises à jour." msgid "When to use Flow Rate Calibration" msgstr "Nécessité de la calibration du débit" @@ -14175,28 +15191,25 @@ msgstr "" msgid "Failed" msgstr "Échoué" +msgid "Please enter the name you want to save to printer." +msgstr "" +"Veuillez saisir le nom que vous souhaitez enregistrer sur l’imprimante." + +msgid "The name cannot exceed 40 characters." +msgstr "Le nom ne peut pas dépasser 40 caractères." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" -"Un seul des résultats portant le même nom sera enregistré. Voulez-vous " -"vraiment remplacer les autres résultats ?" - -#, 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 "" -"Il existe déjà un résultat de calibration portant le même nom : %s. Un seul " -"des résultats portant le même nom est enregistré. Voulez-vous vraiment " -"remplacer le résultat précédent ?" +"Seul un des résultats portant le même nom sera enregistré. Êtes-vous sûr de " +"vouloir annuler les autres résultats ?" msgid "Please find the best line on your plate" msgstr "Veuillez trouver la meilleure ligne sur votre plateau" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "Veuillez trouver le coin avec un degré d’extrusion parfait" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Veuillez trouver l'angle avec le degré d'extrusion parfait" msgid "Input Value" msgstr "Valeur d’entrée" @@ -14275,12 +15288,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Paramètres d’impression" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Type de plaque" @@ -14328,12 +15335,6 @@ msgstr "À la valeur K" msgid "Step value" msgstr "Intervalle" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "Le diamètre de la buse a été synchronisé à partir des paramètres de " @@ -14348,6 +15349,9 @@ msgstr "Vers la vitesse volumétrique" msgid "Flow Dynamics Calibration Result" msgstr "Résultat de la calibration dynamique du débit" +msgid "New" +msgstr "Nouveau" + msgid "No History Result" msgstr "Aucun historique" @@ -14360,9 +15364,23 @@ msgstr "Actualisation de historique des calibrations dynamiques du débit" msgid "Action" msgstr "Action" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"Ce type de machine ne peut contenir que %d résultats historiques par buse." + msgid "Edit Flow Dynamics Calibration" msgstr "Editer la calibration dynamique du débit" +msgid "New Flow Dynamic Calibration" +msgstr "Nouveau calibrage dynamique du débit" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "Le filament doit être sélectionné." + msgid "Network lookup" msgstr "Recherche de réseau" @@ -14451,6 +15469,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14549,6 +15570,9 @@ msgstr "" msgid "Upload to storage" msgstr "Envoyer vers le stockage" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" @@ -14767,6 +15791,16 @@ msgstr "" "Vous n’avez pas encore sélectionné d’imprimante ou de préréglage. Veuillez " "en sélectionner au moins un." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Le nom de filament %s que vous avez créé existe déjà. \n" +"Si vous continuez la création, le réglage créé sera affiché avec son nom " +"complet. Voulez-vous continuer ?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Certains préréglages existants n’ont pas été créés, comme suit :\n" @@ -14824,17 +15858,11 @@ msgid "Can't find my printer model" msgstr "Impossible de trouver le modèle de mon imprimante" msgid "Rectangle" -msgstr "" +msgstr "Rectangle" msgid "Printable Space" msgstr "Espace imprimable" -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" - msgid "Hot Bed STL" msgstr "STL du plateau" @@ -14993,21 +16021,34 @@ msgstr "Filament créé" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "Si vous le souhaitez, vous pouvez modifier vos préréglages dans les " "paramètres du filament.\n" -"Veuillez noter que la température de la buse, la température du plateau et " -"la vitesse volumétrique maximale ont un impact significatif sur la qualité " -"de l’impression. Veuillez les régler avec soin." +"Veuillez noter que la température de la buse, la température du plateau " +"chaud et la vitesse volumétrique maximale ont un impact significatif sur la " +"qualité d’impression. Veuillez les régler avec soin." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Studio a détecté que la fonction de synchronisation des réglages utilisateur " +"n’est pas activée, ce qui peut entraîner l’échec des réglages du filament " +"sur la page Device. \n" +"Cliquez sur «  Synchroniser les réglages prédéfinis de l’utilisateur «  pour " +"activer la fonction de synchronisation." msgid "Printer Setting" msgstr "Réglage de l’imprimante" -msgid "Export Configs" -msgstr "Exporter les configurations" - msgid "Printer config bundle(.orca_printer)" msgstr "Paquet de configuration de l’imprimante (.orca_printer)" @@ -15114,6 +16155,11 @@ msgstr "Veuillez sélectionner au moins une imprimante ou un filament." msgid "Please select a type you want to export" msgstr "Veuillez sélectionner le type de produit que vous souhaitez exporter" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"Échec de la création d’un dossier temporaire, veuillez réessayer d’exporter " +"les configurations." + msgid "Edit Filament" msgstr "Modifier le filament" @@ -15193,6 +16239,21 @@ msgstr "Réduire" msgid "Daily Tips" msgstr "Astuces quotidiennes" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "buse mémorisée : %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"Le diamètre de la buse dans le préréglage ne correspond pas au diamètre de " +"la buse mémorisé. Avez-vous changé de buse récemment ?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*L’impression du matériau %s avec %s peut endommager la buse." + msgid "Need select printer" msgstr "Nécessité de sélectionner une imprimante" @@ -15224,6 +16285,12 @@ msgstr "Êtes-vous sûr de pouvoir vous déconnecter ?" msgid "Refresh Printers" msgstr "Actualiser les imprimantes" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15396,46 +16463,330 @@ msgstr "" "Corps du message : « %1% »\n" "Erreur : « %2% »" -msgid "Connected to Obico successfully!" -msgstr "" - -msgid "Could not connect to Obico" -msgstr "" - -msgid "Connected to SimplyPrint successfully!" -msgstr "" - -msgid "Could not connect to SimplyPrint" -msgstr "" - -msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." msgstr "" +"Sa faible hauteur de couche permet d’obtenir des lignes de couche presque " +"négligeables et une grande qualité d’impression. Il convient à la plupart " +"des cas d’impression générale." msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,2 mm, la vitesse et " +"l’accélération sont plus faibles, et le motif de remplissage épars est " +"gyroïde. Il en résulte donc une qualité d’impression nettement supérieure, " +"mais un temps d’impression beaucoup plus long." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,2 mm, il présente une " +"hauteur de couche légèrement supérieure, ce qui se traduit par des lignes de " +"couche presque négligeables et un temps d’impression légèrement plus court." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,2 mm, il présente une " +"hauteur de couche plus importante, ce qui se traduit par des lignes de " +"couche légèrement visibles, mais un temps d’impression plus court." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,2 mm, il présente une " +"hauteur de couche plus petite, ce qui permet d’obtenir des lignes de couche " +"presque invisibles et une qualité d’impression supérieure, mais aussi un " +"temps d’impression plus court." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,2 mm, il présente des " +"lignes de couche plus petites, des vitesses et des accélérations plus " +"faibles, et le motif de remplissage clairsemé est gyroïde. Il en résulte " +"donc des lignes de couche presque invisibles et une qualité d’impression " +"bien supérieure, mais un temps d’impression bien plus long." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Par rapport au profil par défaut de la buse de 0,2 mm, il présente une " +"hauteur de couche plus petite, ce qui se traduit par des lignes de couche " +"minimales et une qualité d’impression supérieure, mais aussi par un temps " +"d’impression plus court." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,2 mm, il présente des " +"lignes de couche plus petites, des vitesses et des accélérations plus " +"faibles, et le motif de remplissage clairsemé est gyroïde. Il en résulte " +"donc des lignes de couche minimales et une qualité d’impression nettement " +"supérieure, mais un temps d’impression beaucoup plus long." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Il présente une hauteur de couche générale, ce qui se traduit par des lignes " +"de couche et une qualité d’impression générales. Il convient à la plupart " +"des cas d’impression générale." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente plus de " +"boucles de paroi et une densité de remplissage clairsemée plus élevée. Il en " +"résulte donc une plus grande solidité des impressions, mais une plus grande " +"consommation de filament et un temps d’impression plus long." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus importante, ce qui se traduit par des lignes de " +"couche plus apparentes et une qualité d’impression moindre, mais un temps " +"d’impression légèrement plus court." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus importante, ce qui se traduit par des lignes de " +"couche plus apparentes et une qualité d’impression moindre, mais un temps " +"d’impression plus court." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus petite, ce qui se traduit par des lignes de couche " +"moins apparentes et une meilleure qualité d’impression, mais un temps " +"d’impression plus long." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus petite, des vitesses et des accélérations plus " +"faibles, et le motif de remplissage clairsemé est gyroïde. Il en résulte " +"donc des lignes de couche moins apparentes et une qualité d’impression " +"beaucoup plus élevée, mais un temps d’impression beaucoup plus long." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus petite, ce qui permet d’obtenir des lignes de couche " +"presque négligeables et une meilleure qualité d’impression, mais un temps " +"d’impression plus long." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus petite, des vitesses et des accélérations plus " +"faibles, et le motif de remplissage clairsemé est gyroïde. Il en résulte " +"donc des lignes de couche presque négligeables et une qualité d’impression " +"bien supérieure, mais un temps d’impression bien plus long." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,4 mm, il présente une " +"hauteur de couche plus petite, ce qui se traduit par des lignes de couche " +"presque négligeables et un temps d’impression plus long." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"La hauteur de couche est importante, ce qui se traduit par des lignes de " +"couche apparentes et une qualité et un temps d’impression ordinaires." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,6 mm, il présente plus de " +"boucles de paroi et une densité de remplissage clairsemée plus élevée. Il en " +"résulte donc une plus grande solidité des impressions, mais une plus grande " +"consommation de filament et un temps d’impression plus long." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,6 mm, il présente une " +"hauteur de couche plus importante, ce qui se traduit par des lignes de " +"couche plus apparentes et une qualité d’impression moindre, mais un temps " +"d’impression plus court dans certains cas d’impression." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,6 mm, il présente une " +"hauteur de couche plus importante, ce qui se traduit par des lignes de " +"couche beaucoup plus apparentes et une qualité d’impression beaucoup plus " +"faible, mais un temps d’impression plus court dans certains cas d’impression." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,6 mm, il présente une " +"hauteur de couche plus petite, ce qui se traduit par des lignes de couche " +"moins apparentes et une qualité d’impression légèrement supérieure, mais un " +"temps d’impression plus long." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,6 mm, il présente une " +"hauteur de couche plus petite, ce qui se traduit par des lignes de couche " +"moins apparentes et une meilleure qualité d’impression, mais un temps " +"d’impression plus long." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"La hauteur des couches est très importante, ce qui se traduit par des lignes " +"de couche très apparentes, une qualité d’impression médiocre et un temps " +"d’impression général." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,8 mm, il présente une " +"hauteur de couche plus importante, ce qui se traduit par des lignes de " +"couche très apparentes et une qualité d’impression nettement inférieure, " +"mais un temps d’impression plus court dans certains cas d’impression." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,8 mm, il présente une " +"hauteur de couche beaucoup plus importante, ce qui se traduit par des lignes " +"de couche extrêmement apparentes et une qualité d’impression beaucoup plus " +"faible, mais un temps d’impression beaucoup plus court dans certains cas " +"d’impression." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,8 mm, il présente une " +"hauteur de couche légèrement inférieure, ce qui se traduit par des lignes de " +"couche légèrement moins nombreuses mais toujours apparentes et par une " +"qualité d’impression légèrement supérieure, mais par un temps d’impression " +"plus long dans certains cas d’impression." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Par rapport au profil par défaut d’une buse de 0,8 mm, il présente une " +"hauteur de couche plus petite, ce qui se traduit par des lignes de couche " +"moins nombreuses mais toujours apparentes et une qualité d’impression " +"légèrement supérieure, mais un temps d’impression plus long dans certains " +"cas d’impression." + +msgid "Connected to Obico successfully!" +msgstr "Connexion à Obico réussie !" + +msgid "Could not connect to Obico" +msgstr "Impossible de se connecter à Obico" + +msgid "Connected to SimplyPrint successfully!" +msgstr "Connexion à SimplyPrint réussie !" + +msgid "Could not connect to SimplyPrint" +msgstr "Impossible de se connecter à SimplyPrint" + +msgid "Internel error" msgstr "" msgid "Unknown error" +msgstr "Erreur inconnue" + +msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" +"Le compte SimplyPrint n’est pas lié. Allez dans les options de connexion " +"pour le configurer." msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "La connexion à Flashforge fonctionne correctement." msgid "Could not connect to Flashforge" -msgstr "" +msgstr "Impossible de se connecter à Flashforge" msgid "The provided state is not correct." -msgstr "" +msgstr "L’état communiqué n’est pas correct." msgid "Please give the required permissions when authorizing this application." msgstr "" +"Veuillez donner les autorisations nécessaires lorsque vous autorisez cette " +"application." msgid "Something unexpected happened when trying to log in, please try again." msgstr "" +"Un événement inattendu s’est produit lors de la connexion, veuillez " +"réessayer." msgid "User cancelled." -msgstr "" +msgstr "L’utilisateur a annulé." #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -15464,8 +16815,8 @@ msgid "" "Chamber temperature\n" "Did you know that OrcaSlicer supports chamber temperature?" msgstr "" -"Température de la chambre\n" -"Saviez-vous qu’OrcaSlicer prend en charge la température de la chambre ?" +"Température du caisson\n" +"Saviez-vous qu’OrcaSlicer prend en charge la température du caisson ?" #: resources/data/hints.ini: [hint:Calibration] msgid "" @@ -15833,6 +17184,477 @@ msgstr "" "déformer, tels que l’ABS, une augmentation appropriée de la température du " "plateau chauffant peut réduire la probabilité de déformation." +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "La taille du fichier dépasse la limite de téléchargement de 100 Mo. " +#~ "Veuillez télécharger votre fichier via le panneau." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Veuillez saisir une valeur valide (K entre 0 et 0,3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "" +#~ "Veuillez saisir une valeur valide (K entre 0 et 0,3, N entre 0,6 et 2,0)." + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "Sélectionner les imprimantes connectées (0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "Sélectionner les imprimantes connectées (%d/6)" + +#~ msgid "PrintingPause" +#~ msgstr "Pause de l’impression" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "La connexion locale de l'imprimante a échoué, veuillez réessayer." + +#~ 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 "" +#~ "Veuillez trouver les détails de la calibration dynamique du débit sur " +#~ "notre Wiki.\n" +#~ "\n" +#~ "Habituellement, la calibration est inutile. Lorsque vous démarrez une " +#~ "impression d'une seule couleur/matériau, avec l'option \"Calibration du " +#~ "débit\" cochée dans le menu de démarrage de l'impression, l'imprimante " +#~ "suivra l'ancienne méthode de calibration du filament avant l'impression.\n" +#~ "Lorsque vous démarrez une impression multi-couleurs/matériaux, " +#~ "l'imprimante utilise le paramètre de compensation par défaut pour le " +#~ "filament lors de chaque changement de filament, ce qui donne un bon " +#~ "résultat dans la plupart des cas.\n" +#~ "\n" +#~ "Veuillez noter qu'il y a quelques cas qui rendront le résultat de " +#~ "calibration non fiable : utiliser un plateau texturé pour faire la " +#~ "calibration, utiliser un plateau qui n'a pas une bonne adhérence " +#~ "(veuillez dans ce cas laver la plaque de construction ou appliquer de la " +#~ "colle)… Vous pouvez trouver d'autres cas sur notre Wiki.\n" +#~ "Veuillez noter qu'il y a quelques cas qui rendront le résultat de " +#~ "calibration non fiable : utiliser un plateau texturé pour faire la " +#~ "calibration, utiliser un plateau qui n'a pas une bonne adhérence " +#~ "(veuillez dans ce cas laver la plaque de construction ou appliquer de la " +#~ "colle)… Vous pouvez trouver d'autres cas sur notre Wiki.\n" +#~ "\n" +#~ "Les résultats de calibration ont environ 10 % d'écart dans nos tests, ce " +#~ "qui peut faire en sorte que le résultat ne soit pas exactement le même à " +#~ "chaque calibration. Nous enquêtons toujours sur la cause première pour " +#~ "apporter des améliorations avec de nouvelles mises à jour.Les résultats " +#~ "de calibration ont environ 10 % d'écart dans nos tests, ce qui peut faire " +#~ "en sorte que le résultat ne soit pas exactement le même à chaque " +#~ "calibration. Nous enquêtons toujours sur la cause première pour apporter " +#~ "des améliorations avec de nouvelles mises à jour." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Un seul des résultats portant le même nom sera enregistré. Voulez-vous " +#~ "vraiment remplacer les autres résultats ?" + +#, 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 "" +#~ "Il existe déjà un résultat de calibration portant le même nom : %s. Un " +#~ "seul des résultats portant le même nom est enregistré. Voulez-vous " +#~ "vraiment remplacer le résultat précédent ?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Veuillez trouver le coin avec un degré d’extrusion parfait" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " +#~ "PrusaSlicer links from Printable.com" +#~ msgstr "" +#~ "Associer OrcaSlicer aux liens prusaslicer:// pour qu’Orca puisse ouvrir " +#~ "les liens PrusaSlicer de Printable.com" + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Ordre des parois/remplissages. Lorsque la case n’est pas cochée, les " +#~ "parois sont imprimées en premier, ce qui fonctionne le mieux dans la " +#~ "plupart des cas.\n" +#~ "\n" +#~ "L’impression des parois en premier peut s’avérer utile en cas de " +#~ "surplombs extrêmes, car les parois ont le remplissage voisin auquel " +#~ "adhérer. Cependant, le remplissage repoussera légèrement les parois " +#~ "imprimées à l’endroit où il est fixé, ce qui se traduira par une moins " +#~ "bonne finition de la surface extérieure. Cela peut également faire " +#~ "briller le remplissage à travers les surfaces externes de la pièce." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Maximum print speed when purging" +#~ msgstr "Vitesse d’impression maximale lors de la purge" + +#~ msgid "" +#~ "The maximum print speed when purging in the wipe tower. If the sparse " +#~ "infill speed or calculated speed from the filament max volumetric speed " +#~ "is lower, the lowest speed will be used instead.\n" +#~ "Increasing this speed may affect the tower's stability, as purging can be " +#~ "performed over sparse layers. Before increasing this parameter beyond the " +#~ "default of 90mm/sec, make sure your printer can reliably bridge at the " +#~ "increased speeds." +#~ msgstr "" +#~ "Vitesse d’impression maximale lors de la purge dans la tour d’essuyage. " +#~ "Si la vitesse de remplissage ou la vitesse calculée à partir de la " +#~ "vitesse volumétrique maximale du filament est inférieure, c’est la " +#~ "vitesse la plus basse qui sera utilisée.\n" +#~ "L’augmentation de cette vitesse peut affecter la stabilité de la tour, " +#~ "car la purge peut être effectuée sur des couches peu épaisses. Avant " +#~ "d’augmenter ce paramètre au-delà de la valeur par défaut de 90 mm/sec, " +#~ "assurez-vous que votre imprimante peut effectuer un pontage fiable aux " +#~ "vitesses accrues." + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer est basé sur Bambu Studio 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" + +#~ msgid "Export &Configs" +#~ msgstr "Exportation & Configs" + +#~ msgid "" +#~ "Over 4 systems/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "Plus de 4 orca/handy utilisent l’accès à distance, vous pouvez en fermer " +#~ "certains et réessayer." + +#, c-format, boost-format +#~ msgid "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill. Set this " +#~ "value to ~10-15%% to minimize potential over extrusion and accumulation " +#~ "of material resulting in rough top surfaces." +#~ msgstr "" +#~ "La zone de remplissage est légèrement élargie pour chevaucher la paroi " +#~ "afin d’améliorer l’adhérence. La valeur du pourcentage est relative à la " +#~ "largeur de la ligne de remplissage clairsemée. Réglez cette valeur à " +#~ "~10-15%% pour minimiser le risque de sur-extrusion et d’accumulation de " +#~ "matériau, ce qui rendrait les surfaces supérieures rugueuses." + +#~ msgid "" +#~ "Top solid infill area is enlarged slightly to overlap with wall for " +#~ "better bonding and to minimize the appearance of pinholes where the top " +#~ "infill meets the walls. A value of 25-30%% is a good starting point, " +#~ "minimising the appearance of pinholes. The percentage value is relative " +#~ "to line width of sparse infill" +#~ msgstr "" +#~ "La zone de remplissage solide supérieure est légèrement élargie pour " +#~ "chevaucher la paroi afin d’améliorer l’adhérence et de minimiser " +#~ "l’apparition de trous d’épingle à l’endroit où le remplissage supérieur " +#~ "rencontre les parois. Une valeur de 25-30%% est un bon point de départ, " +#~ "minimisant l’apparition de trous d’épingle. La valeur en pourcentage est " +#~ "relative à la largeur de ligne d’un remplissage peu dense." + +#~ msgid "Export Configs" +#~ msgstr "Exporter les configurations" + +#~ msgid "Infill direction" +#~ msgstr "Sens de remplissage" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "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 "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill" +#~ msgstr "" +#~ "La zone de remplissage est légèrement agrandie pour chevaucher la paroi " +#~ "afin d'améliorer l'adhérence. La valeur en pourcentage est relative à la " +#~ "largeur de ligne de remplissage." + +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Actions pour les changements non enregistrés" + +#~ msgid "Preset Value" +#~ msgstr "Valeur prédéfinie" + +#~ msgid "Modified Value" +#~ msgstr "Valeur modifiée" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Transfert de la valeur modifiée" + +#~ msgid "Use Preset Value" +#~ msgstr "Utiliser la valeur prédéfinie" + +#~ msgid "Save Modified Value" +#~ msgstr "Enregistrer la valeur modifiée" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous enregistrer les paramètres modifiés (valeur modifiée) ?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous conserver ces paramètres modifiés (valeur modifiée) après " +#~ "avoir changé de préréglage ?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Vous avez précédemment modifié vos paramètres et vous êtes sur le point " +#~ "de les remplacer par de nouveaux." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous conserver vos paramètres modifiés actuels ou utiliser des " +#~ "paramètres prédéfinis ?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous sauvegarder vos paramètres modifiés actuels ?" + +#~ msgid "Unload Filament" +#~ msgstr "Déchargement" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Choisissez un emplacement AMS puis appuyez sur le bouton correspondant " +#~ "pour Charger ou Décharger le filament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Carte mère" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Nouvelle calibration de la dynamique du flux" + +#~ msgid "" +#~ "The 3mf file version is in Beta and it is newer than the current " +#~ "OrcaSlicer version." +#~ msgstr "" +#~ "La version du fichier 3mf est en Beta et est plus récente que la version " +#~ "actuelle d’OrcaSlicer." + +#~ msgid "active" +#~ msgstr "actif" + +#~ msgid "Jump to layer" +#~ msgstr "Aller à la couche" + +#~ msgid "Cabin humidity" +#~ 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 "" +#~ "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 "É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 dessicateur inférieur à deux barres indique que le dessicateur " +#~ "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 " +#~ "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 "" +#~ "Remarque: Lorsque le couvercle est ouvert ou que le sachet de dessicateur " +#~ "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 représenter l'humidité " +#~ "dans l'AMS avec précision." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Remarque : si un nouveau filament est inséré pendant l'impression, l'AMS " +#~ "ne lira automatiquement aucune information avant la fin de l'impression." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Succès! G-code exporté vers %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Échec de l'initialisation (pas de périphérique) !" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "L'initialisation a échoué (Pas de caméra)!" + +#~ 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 "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Échec de l'initialisation (non pris en charge par l'imprimante actuelle) !" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "L'initialisation a échoué (Non accessible en mode LAN uniquement) !" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "" +#~ "Échec de l'initialisation (adresse IP réseau manquante de l'imprimante) !" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Arrêté [%d] !" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Le chargement a échoué [%d] !" + +#, 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]" + +#~ 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 "Connection lost. Please retry." +#~ msgstr "Connexion perdue. Veuillez réessayer." + +#~ msgid "File not exists." +#~ msgstr "Le fichier n'existe pas." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Impossible d'effectuer une opération booléenne sur les maillages du " +#~ "modèle. Seules les parties positives seront exportées." + +#, 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 "" +#~ "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) après " +#~ "avoir changé de préréglage ?" + +#~ msgid " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "Si vous le souhaitez, vous pouvez modifier vos préréglages dans les " +#~ "paramètres du filament.\n" +#~ "Veuillez noter que la température de la buse, la température du plateau " +#~ "et la vitesse volumétrique maximale ont un impact significatif sur la " +#~ "qualité de l’impression. Veuillez les régler avec soin." + #~ msgid "Studio Version:" #~ msgstr "Version de Studio :" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 8e52307406..b9a85cc64e 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -1,14 +1,15 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\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: Localazy (https://localazy.com)\n" msgid "Supports Painting" msgstr "Támaszok festése" @@ -99,7 +100,7 @@ msgid "Support Generated" msgstr "Támasz legenerálva" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "Gizmo- Felület Tárgyasztalra Illesztése" msgid "Lay on face" msgstr "Felületre fektetés" @@ -149,7 +150,7 @@ msgid "Height range" msgstr "Magasságtartomány" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Enter" msgid "Toggle Wireframe" msgstr "Drótváz-megjelenítés váltása" @@ -164,10 +165,10 @@ msgid "Height Range" msgstr "Magasságtartomány" msgid "Vertical" -msgstr "" +msgstr "Függőleges" msgid "Horizontal" -msgstr "" +msgstr "Vízszintes" msgid "Remove painted color" msgstr "Festett szín eltávolítása" @@ -180,13 +181,13 @@ msgid "Move" msgstr "Mozgatás" msgid "Gizmo-Move" -msgstr "" +msgstr "Gizmo-Mozgatása" msgid "Rotate" msgstr "Forgatás" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Gizmo-Forgatása" msgid "Optimize orientation" msgstr "Orientáció optimalizálása" @@ -198,7 +199,7 @@ msgid "Scale" msgstr "Átméretezés" msgid "Gizmo-Scale" -msgstr "" +msgstr "Gizmo-Skála" msgid "Error: Please close all toolbar menus first" msgstr "Hiba: Kérjük, először zárd be az összes eszköztár menüt" @@ -251,6 +252,9 @@ msgstr "Forgatás visszaállítása" msgid "World coordinates" msgstr "Világkoordináták" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -265,16 +269,16 @@ msgid "uniform scale" msgstr "egységes méretarány" msgid "Planar" -msgstr "" +msgstr "Sík" msgid "Dovetail" -msgstr "" +msgstr "Fecskefarok" msgid "Auto" msgstr "Auto" msgid "Manual" -msgstr "" +msgstr "Manuális" msgid "Plug" msgstr "Plug" @@ -283,7 +287,7 @@ msgid "Dowel" msgstr "Dowel" msgid "Snap" -msgstr "" +msgstr "Csatlakoztatás" msgid "Prism" msgstr "" @@ -298,7 +302,7 @@ msgid "Hexagon" msgstr "Hexagon" msgid "Keep orientation" -msgstr "" +msgstr "Tájolás megtartása" msgid "Place on cut" msgstr "Place on cut" @@ -322,19 +326,19 @@ msgstr "Forma" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Mélység" msgid "Groove" -msgstr "" +msgstr "Horony" msgid "Width" msgstr "Szélesség" msgid "Flap Angle" -msgstr "" +msgstr "Fedélszög" msgid "Groove Angle" -msgstr "" +msgstr "Horonyszög" msgid "Part" msgstr "Tárgy" @@ -357,7 +361,7 @@ msgid "Move cut plane" msgstr "" msgid "Mode" -msgstr "" +msgstr "Mód" msgid "Change cut mode" msgstr "" @@ -405,7 +409,7 @@ msgid "Remove connectors" msgstr "Remove connectors" msgid "Bulge" -msgstr "" +msgstr "Kidudorodás" msgid "Bulge proportion related to radius" msgstr "" @@ -511,10 +515,10 @@ msgid "Connector" msgstr "Connector" msgid "Cut by Plane" -msgstr "" +msgstr "Vágás Síkkal" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgstr "A vágás után hibás élek keletkeztek, szeretnéd most javítani őket?" msgid "Repairing model object" msgstr "Modell javítása" @@ -614,13 +618,13 @@ msgid "Remove selection" msgstr "Kijelölés törlése" msgid "Entering Seam painting" -msgstr "" +msgstr "Belépés varratfestő módba" msgid "Leaving Seam painting" -msgstr "" +msgstr "Kilépés varratfestő módból" msgid "Paint-on seam editing" -msgstr "" +msgstr "Festett varrat szerkesztése" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -668,7 +672,7 @@ msgid "Text move" msgstr "" msgid "Set Mirror" -msgstr "" +msgstr "Tükrözés beállítása" msgid "Embossed text" msgstr "" @@ -704,7 +708,7 @@ msgid "First font" msgstr "" msgid "Default font" -msgstr "" +msgstr "Az alapértelmezett nyomtató" msgid "Advanced" msgstr "Haladó" @@ -755,11 +759,11 @@ msgid "Click to change text into object part." msgstr "" msgid "You can't change a type of the last solid part of the object." -msgstr "" +msgstr "Az objektum utolsó tömör részének típusát nem lehet megváltoztatni." msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "Vágás" msgid "Click to change part type into negative volume." msgstr "" @@ -901,19 +905,19 @@ msgstr "" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "Bal" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "Közép" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "Jobb" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "Felső" msgctxt "Alignment" msgid "Middle" @@ -921,7 +925,7 @@ msgstr "" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "Alsó" msgid "Revert alignment." msgstr "" @@ -1016,7 +1020,7 @@ msgstr "" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right msgid "Alignment" -msgstr "" +msgstr "Balra igazítsd" #. TRN - Input label. Be short as possible msgid "Char gap" @@ -1072,7 +1076,7 @@ msgid "SVG actions" msgstr "" msgid "SVG" -msgstr "" +msgstr "SVG" #, boost-format msgid "Opacity (%1%)" @@ -1159,7 +1163,7 @@ msgid "Bake into model as uneditable part" msgstr "" msgid "Save as" -msgstr "" +msgstr "Mentés Másként" msgid "Save SVG file" msgstr "" @@ -1185,7 +1189,7 @@ msgid "Lock/unlock the aspect ratio of the SVG." msgstr "" msgid "Reset scale" -msgstr "" +msgstr "Skála visszaállítása" msgid "Distance of the center of the SVG to the model surface." msgstr "" @@ -1194,16 +1198,16 @@ msgid "Reset distance" msgstr "" msgid "Reset rotation" -msgstr "" +msgstr "Forgatás visszaállítása" msgid "Lock/unlock rotation angle when dragging above the surface." msgstr "" msgid "Mirror vertically" -msgstr "" +msgstr "Tükrözés függőlegesen" msgid "Mirror horizontally" -msgstr "" +msgstr "Tükrözés vízszintesen" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" @@ -1233,43 +1237,43 @@ msgid "SVG file does NOT contain a single path to be embossed (%1%)." msgstr "" msgid "Vertex" -msgstr "" +msgstr "Vertex" msgid "Edge" -msgstr "" +msgstr "Edge" msgid "Plane" -msgstr "" +msgstr "Plane" msgid "Point on edge" -msgstr "" +msgstr "Point on edge" msgid "Point on circle" -msgstr "" +msgstr "Point on circle" msgid "Point on plane" -msgstr "" +msgstr "Point on plane" msgid "Center of edge" -msgstr "" +msgstr "Center of edge" msgid "Center of circle" -msgstr "" +msgstr "Center of circle" msgid "ShiftLeft mouse button" msgstr "" msgid "Select feature" -msgstr "" +msgstr "Select feature" msgid "Select point" -msgstr "" +msgstr "Select point" msgid "Delete" msgstr "Törlés" msgid "Restart selection" -msgstr "" +msgstr "Restart selection" msgid "Esc" msgstr "Esc" @@ -1278,14 +1282,14 @@ msgid "Unselect" msgstr "" msgid "Measure" -msgstr "" +msgstr "Measure" msgid "Edit to scale" -msgstr "" +msgstr "Edit to scale" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "Átméretezés" msgid "None" msgstr "Sehol" @@ -1297,22 +1301,22 @@ msgid "Length" msgstr "Hossz" msgid "Selection" -msgstr "" +msgstr "Selection" msgid "Copy to clipboard" msgstr "Másolás a vágólapra" msgid "Perpendicular distance" -msgstr "" +msgstr "Perpendicular distance" msgid "Distance" -msgstr "" +msgstr "Distance" msgid "Direct distance" -msgstr "" +msgstr "Direct distance" msgid "Distance XYZ" -msgstr "" +msgstr "Distance XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1354,9 +1358,6 @@ msgstr "" "A(z) \"%1%\" konfigurációs csomag betöltődött, de néhány értéket nem " "sikerült felismerni." -msgid "V" -msgstr "V" - 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." @@ -1450,10 +1451,14 @@ msgstr "Válassz ki egy fájlt (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgstr "" +"Válassz ki egy vagy több fájlt (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" 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 ZIP file" +msgstr "" + msgid "Choose one file (gcode/3mf):" msgstr "" @@ -1491,9 +1496,11 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"A felhőben tárolt felhasználói beállítások száma elérte a limitet, az " +"újonnan létrehozott felhasználói beállítások csak helyben lesznek tárolva." msgid "Sync user presets" -msgstr "" +msgstr "Felhasználói beállítások szinkronizálása" msgid "Loading user preset" msgstr "Felhasználói beállítás betöltése" @@ -1522,6 +1529,11 @@ msgstr "Folyamatban lévő feltöltések" msgid "Select a G-code file:" msgstr "Válassz egy G-code fájlt:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" + msgid "Import File" msgstr "Import File" @@ -1656,16 +1668,16 @@ msgid "Cone" msgstr "Kúp" msgid "Disc" -msgstr "" +msgstr "Lemez" msgid "Torus" -msgstr "" +msgstr "Tórusz" msgid "Orca Cube" msgstr "" msgid "3DBenchy" -msgstr "" +msgstr "3DBenchy" msgid "Autodesk FDM Test" msgstr "" @@ -1718,10 +1730,10 @@ msgid "Fix model" msgstr "Model javítása" msgid "Export as one STL" -msgstr "" +msgstr "Exportálás egy STL-ként" msgid "Export as STLs" -msgstr "" +msgstr "Exportálás STL-ként" msgid "Reload from disk" msgstr "Újratöltés lemezről" @@ -1748,8 +1760,8 @@ msgstr "Alapértelmezett" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "aktív" +msgid "current" +msgstr "jelenlegi" msgid "Scale to build volume" msgstr "Átméretezés a nyomtatótérhez" @@ -1795,10 +1807,12 @@ msgstr "" "Összeállítja a kijelölt objektumokat egy egyetlen részből álló objektummá" msgid "Mesh boolean" -msgstr "" +msgstr "Mesh boolean" msgid "Mesh boolean operations including union and subtraction" msgstr "" +"Olyan modellhálóval kapcsolatos logikai műveletek, mint például az egyesítés " +"és kivonás" msgid "Along X axis" msgstr "X-tengely mentén" @@ -1842,6 +1856,9 @@ msgstr "Primitív hozzáadása" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "Modellek hozzáadása" + msgid "Show Labels" msgstr "Címkék megjelenítése" @@ -1894,6 +1911,12 @@ msgstr "Elrendezés" msgid "arrange current plate" msgstr "aktuális tálca elrendezése" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Automatikus forgatás" @@ -1927,9 +1950,6 @@ msgstr "Filament csere" msgid "Set Filament for selected items" msgstr "Filament beállítása a kiválasztott tárgyakhoz" -msgid "current" -msgstr "jelenlegi" - msgid "Unlock" msgstr "Feloldás" @@ -1937,7 +1957,7 @@ msgid "Lock" msgstr "Lezárás" msgid "Edit Plate Name" -msgstr "" +msgstr "Tálca nevének szerkesztése" msgid "Name" msgstr "Név" @@ -2000,7 +2020,7 @@ msgid "Error!" msgstr "Hiba!" msgid "Failed to get the model data in the current file." -msgstr "" +msgstr "Nem sikerült beolvasni a modelladatokat az aktuális fájlba." msgid "Generic" msgstr "Általános" @@ -2245,7 +2265,7 @@ msgid "Pause" msgstr "Szünet" msgid "Template" -msgstr "" +msgstr "Sablon" msgid "Custom" msgstr "Egyéni" @@ -2268,9 +2288,6 @@ msgstr "Add meg az aktuális rétegnél használandó egyedi G-kódot:" msgid "Jump to Layer" msgstr "Ugrás a rétegre" -msgid "Jump to layer" -msgstr "Ugrás a rétegre" - msgid "Please enter the layer number" msgstr "Kérjük, add meg a réteg számát." @@ -2299,7 +2316,7 @@ msgid "Change filament at the beginning of this layer." msgstr "Change filament at the beginning of this layer." msgid "Delete Pause" -msgstr "" +msgstr "Szünet törlése" msgid "Delete Custom Template" msgstr "Delete Custom Template" @@ -2317,7 +2334,7 @@ msgid "No printer" msgstr "Nincs nyomtató" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "Nem sikerült csatlakozni a szerverhez" @@ -2340,8 +2357,8 @@ 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 "Please check the network connection of the printer and Orca." +msgstr "Please check the network connection of the printer and Orca." msgid "Connecting..." msgstr "Csatlakozás..." @@ -2350,7 +2367,7 @@ msgid "?" msgstr "?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "Üres" @@ -2359,16 +2376,16 @@ msgid "AMS" msgstr "AMS" msgid "Auto Refill" -msgstr "" +msgstr "Auto Refill" msgid "AMS not connected" msgstr "Az AMS nincs csatlakoztatva" -msgid "Load Filament" -msgstr "Filament betöltés" +msgid "Load" +msgstr "Load" -msgid "Unload Filament" -msgstr "Filament kitöltése" +msgid "Unload" +msgstr "Kitöltés" msgid "Ext Spool" msgstr "Kül. tekercs" @@ -2385,7 +2402,7 @@ msgstr "Újra" msgid "Calibrating AMS..." msgstr "AMS kalibrálása..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "A kalibráció során probléma merült fel. Kattintson a megoldás " "megtekintéséhez." @@ -2397,7 +2414,7 @@ msgid "Cancel calibration" msgstr "Kalibrálás megszakítása" msgid "Idling..." -msgstr "" +msgstr "Tétlen..." msgid "Heat the nozzle" msgstr "Fűtsd fel a fúvókát" @@ -2415,23 +2432,23 @@ msgid "Purge old filament" msgstr "Régi filament kiöblítése" msgid "Feed Filament" -msgstr "" +msgstr "Filament betöltése" msgid "Confirm extruded" -msgstr "" +msgstr "Extrudálás megerősítése" msgid "Check filament location" -msgstr "" +msgstr "Ellenőrizd a filament helyzetét" msgid "Grab new filament" msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Válassz egy AMS rekeszt, majd nyomd meg a \"Load\" vagy \"Unload\" gombot a " -"filament automatikus be- vagy kitöltéséhez." +"Válassz ki egy AMS-helyet, majd nyomd meg a „Betöltés” vagy a „Kitöltés” " +"gombot az filament automatikus betöltéséhez vagy eltávolításához." msgid "Edit" msgstr "Szerkesztés" @@ -2511,7 +2528,7 @@ msgid "Orienting canceled." msgstr "" msgid "Filling" -msgstr "" +msgstr "Kitöltés" msgid "Bed filling canceled." msgstr "Bed filling canceled." @@ -2520,13 +2537,13 @@ msgid "Bed filling done." msgstr "Bed filling done." msgid "Searching for optimal orientation" -msgstr "" +msgstr "Az optimális tájolás keresése" msgid "Orientation search canceled." -msgstr "" +msgstr "Tájolás keresés visszavonva." msgid "Orientation found." -msgstr "" +msgstr "Tájolás megtalálva." msgid "Logging in" msgstr "Bejelentkezés" @@ -2596,7 +2613,7 @@ msgid "Sending print job through cloud service" msgstr "Nyomtatási munka küldése felhőszolgáltatáson keresztül" msgid "Print task sending times out." -msgstr "" +msgstr "Időtúllépés a nyomtatási feladat küldése során." msgid "Service Unavailable" msgstr "Szolgáltatás nem elérhető" @@ -2615,6 +2632,7 @@ msgstr "" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the next page in %ss" msgstr "" +"Sikeresen elküldve. Ugrás automatikusan a következő oldalra %s mp-en belül" 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." @@ -2697,10 +2715,7 @@ msgstr "A Orca Slicer 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2777,10 +2792,10 @@ 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 Flow Dynamics Calibration" -msgstr "" +msgstr "Anyagáramlás kalibrálásának faktorai" msgid "PA Profile" -msgstr "" +msgstr "PA-profil" msgid "Factor K" msgstr "K-tényező" @@ -2797,10 +2812,12 @@ 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.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2908,37 +2925,19 @@ msgstr "AMS kikapcsolása" msgid "Print with the filament mounted on the back of chassis" msgstr "Nyomtatás külső tartón lévő filamenttel" -msgid "Cabin humidity" -msgstr "Kamra páratartalma" +msgid "Current Cabin humidity" +msgstr "Current Cabin humidity" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"A zöld azt jelenti, hogy az AMS páratartalma normális, a narancs és a piros " -"pedig azt jelenti, hogy a páratartalom túl magas (Higrométer: minél " -"alacsonyabb, annál jobb)." - -msgid "Desiccant status" -msgstr "Páramegkötő állapota" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"A két sávnál alacsonyabb páramegkötő-állapot azt jelzi, hogy a páramegkötő " -"nem működik. Cseréld ki a páramegkötő tasakokat (minél magasabb, annál jobb)." - -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 "" -"Megjegyzés: Ha a fedél nyitva van, vagy nemrég cserélted ki a tasakokat, " -"órákig vagy egy éjszakáig tarthat a nedvesség felszívódása. Az alacsony " -"hőmérséklet szintén lelassítja a folyamatot. Ez idő alatt előfordulhat, hogy " -"a visszajelző nem a pontos értéket mutatja." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases: when the lid is open or the " +"desiccant pack is changed. It takes a few hours to absorb the moisture, and " +"low temperatures also slow down the process." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2971,16 +2970,19 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" +"Amikor az aktuális filament elfogy, a nyomtató a következő sorrendben " +"folytatja a nyomtatást." msgid "Group" msgstr "Group" msgid "The printer does not currently support auto refill." -msgstr "" +msgstr "A nyomtató jelenleg nem támogatja az automatikus újratöltést." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" +"AMS filament backup is not enabled; please enable it in the AMS settings." msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -2988,6 +2990,16 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"If there are two identical filaments in an AMS, AMS filament backup will be " +"enabled. \n" +"(This currently supports automatic supply of consumables with the same " +"brand, material type, and color)" + +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" msgid "AMS Settings" msgstr "AMS beállítások" @@ -3003,10 +3015,10 @@ msgstr "" "filament tekercs behelyezésekor. Ez körülbelül 20 másodpercet vesz igénybe." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Megjegyzés: ha az új tekercs nyomtatás során kerül behelyezésre, az AMS nem " +"Megjegyzés: ha nyomtatás során új filament kerül behelyezésre, az AMS nem " "fogja automatikusan kiolvasni az információkat a nyomtatás végéig." msgid "" @@ -3059,6 +3071,16 @@ msgstr "" "Az AMS automatikusan egy másik, azonos tulajdonságú filamentre vált, ha az " "aktuális filament kifogy." +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "Fájl" @@ -3131,6 +3153,63 @@ msgstr "Lebegőpontos foglalt operandus" msgid "Stack overflow" msgstr "Verem túlcsordulás" +msgid "Running post-processing scripts" +msgstr "Utófeldolgozási szkriptek futtatása" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "Ismeretlen hiba történt a G-kód exportálása közben." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Az ideiglenes G-kód másolása a kimeneti G-kódba nem sikerült. Lehet, hogy az " +"SD kártya írásvédett?\n" +"Hibaüzenet: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Az ideiglenes G-kód másolása a kimeneti G-kódba nem sikerült. Probléma lehet " +"a céleszközzel. Kérjük, próbálkozzon újra az exportálással, vagy használjon " +"másik eszközt. A sérült kimeneti G-kód %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"A G-kód átnevezése a kiválasztott célmappába másolás után nem sikerült. A " +"jelenlegi elérési út %1%.tmp. Kérjük, próbálja meg újra az exportálást." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Az ideiglenes G-kód másolása befejeződött, de az eredeti, %1% kódot nem " +"lehetett megnyitni a másolásellenőrzés során. A kimeneti G-kód %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Az ideiglenes G-kód másolása befejeződött, de az exportált kódot nem " +"lehetett megnyitni a másolásellenőrzés során. A kimeneti G-kód %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G-kód fájl exportálva ide: %1%" + msgid "Unknown error when export G-code." msgstr "Ismeretlen hiba a G-kód exportálásakor." @@ -3144,13 +3223,6 @@ msgstr "" "Hibaüzenet: %1%.\n" "Forrás fájl: %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "G-kód sikeresen exportálva ide: %1%" - -msgid "Running post-processing scripts" -msgstr "Utófeldolgozási szkriptek futtatása" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni." @@ -3159,6 +3231,225 @@ msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" "Feltöltés ütemezése ide: „%1%“. Lásd: Ablak -> Nyomtató feltöltési várólista" +msgid "Device" +msgstr "Nyomtató" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "Nézet" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "Device Name" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Device Status" +msgstr "Device Status" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Hozzáadás" + +msgid "Idle" +msgstr "Tétlen" + +msgid "Printing" +msgstr "Nyomtatás" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Előkészítés" + +msgid "Slicing" +msgstr "Szeletelés" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "Küldés" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Folytatás" + +msgid "Stop" +msgstr "Állj" + +msgid "Task Status" +msgstr "Task Status" + +msgid "Sent Time" +msgstr "Sent Time" + +msgid "There are no tasks to be sent!" +msgstr "There are no tasks to be sent!" + +msgid "No historical tasks!" +msgstr "No historical tasks!" + +msgid "Loading..." +msgstr "Betöltés…" + +msgid "No AMS" +msgstr "No AMS" + +msgid "Send to Multi-device" +msgstr "Send to Multi-device" + +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 "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "Use External Spool" + +msgid "Use AMS" +msgstr "Use AMS" + +msgid "Select Printers" +msgstr "Select Printers" + +msgid "Ams Status" +msgstr "AMS Status" + +msgid "Printing Options" +msgstr "Printing Options" + +msgid "Bed Leveling" +msgstr "Asztalszintezés" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "Send Options" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "Küldés" + +msgid "Name is invalid;" +msgstr "A név érvénytelen;" + +msgid "illegal characters:" +msgstr "tiltott karakterek:" + +msgid "illegal suffix:" +msgstr "tiltott utótag:" + +msgid "The name is not allowed to be empty." +msgstr "A név mező nem lehet üres." + +msgid "The name is not allowed to start with space character." +msgstr "A név nem kezdődhet szóközzel." + +msgid "The name is not allowed to end with space character." +msgstr "A név nem végződhet szóközzel." + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + msgid "Origin" msgstr "Origó" @@ -3227,6 +3518,23 @@ msgstr "Válassz egy STL fájlt az asztal textúrájának importálásához:" msgid "Bed Shape" msgstr "Asztal alakja" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Az ajánlott minimum hőmérséklet kevesebb, mint 190 fok, vagy az ajánlott " +"maximális hőmérséklet nagyobb, mint 300 fok.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" + +msgid "Please check.\n" +msgstr "Kérjük, ellenőrizd.\n" + 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" @@ -3257,6 +3565,9 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"Current chamber temperature is higher than the material's safe temperature; " +"this may result in material softening and nozzle clogs.The maximum safe " +"temperature for the material is %d" msgid "" "Too small layer height.\n" @@ -3309,26 +3620,6 @@ msgstr "" "\n" "Az érték 0-ra áll vissza." -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 "" -"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 " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" -"Automatikusan megváltoztatod ezeket a beállításokat?\n" -"Igen - Módosítsa ezeket a beállításokat, és automatikusan engedélyezze a " -"spirál mód használatát\n" -"Nem - Ne használja a spirál módot ez alkalommal" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3389,6 +3680,27 @@ msgid "" "Reset to 0." msgstr "" +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 "" +"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 " But machines with I3 structure will not generate timelapse videos." +msgstr "" +" Az I3-szerkezetű gépek azonban nem fognak timelapse videókat készíteni." + +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 "" +"Automatikusan megváltoztatod ezeket a beállításokat?\n" +"Igen - Módosítsa ezeket a beállításokat, és automatikusan engedélyezze a " +"spirál mód használatát\n" +"Nem - Ne használja a spirál módot ez alkalommal" + msgid "Auto bed leveling" msgstr "Automatikus asztalszintezés" @@ -3453,58 +3765,46 @@ msgid "Paused due to heat bed temperature malfunction" msgstr "Szüneteltetve a tárgyasztal hőmérsékletének rendellenessége miatt" msgid "Filament unloading" -msgstr "" +msgstr "Filament kitöltése" msgid "Skip step pause" -msgstr "" +msgstr "Lépésvesztés miatti szünet" msgid "Filament loading" -msgstr "" +msgstr "Filament betöltése" msgid "Motor noise calibration" -msgstr "" +msgstr "Motorzaj-kalibrálás" msgid "Paused due to AMS lost" -msgstr "" +msgstr "Szüneteltetve az AMS elvesztése miatt" msgid "Paused due to low speed of the heat break fan" -msgstr "" +msgstr "Szüneteltetve a heat break ventilátor alacsony fordulatszáma miatt" msgid "Paused due to chamber temperature control error" -msgstr "" +msgstr "Szüneteltetve a kamra hőmérséklet-szabályzó hibája miatt" msgid "Cooling chamber" -msgstr "" +msgstr "Kamra hűtése" msgid "Paused by the Gcode inserted by user" -msgstr "" +msgstr "Szüneteltetve a felhasználó által beillesztett G-kód miatt" msgid "Motor noise showoff" -msgstr "" +msgstr "Motorzaj bemutató" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Szüneteltetve a fúvókára került filament miatt" msgid "Cutter error pause" -msgstr "" +msgstr "Szüneteltetve a filamentvágó meghibásodása miatt" msgid "First layer error pause" -msgstr "" +msgstr "Szüneteltetve a kezdőrétegen található hiba miatt" msgid "Nozzle clog pause" -msgstr "" - -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" +msgstr "Szüneteltetve a fúvóka eltömődése miatt" msgid "Unknown" msgstr "Ismeretlen" @@ -3535,53 +3835,66 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃. In order to avoid extruder clogging, low temperature filament (PLA/PETG/" +"TPU) is not allowed to be loaded." msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"Low temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order " +"to avoid extruder clogging, it is not allowed to set the chamber temperature " +"above 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated, and the target chamber temperature will " +"automatically be set to 0℃." msgid "Failed to start printing job" msgstr "Nem sikerült elindítani a nyomtatási feladatot" msgid "" "This calibration does not support the currently selected nozzle diameter" -msgstr "" +msgstr "Ezt a kalibrálást nem lehet elvégezni a kiválasztott fúvókaátmérővel" msgid "Current flowrate cali param is invalid" -msgstr "" +msgstr "Az anyagáramlás kalibrációs paramétere érvénytelen" msgid "Selected diameter and machine diameter do not match" -msgstr "" +msgstr "A kiválasztott átmérő és a nyomtatóban megadott átmérő nem egyezik" msgid "Failed to generate cali gcode" -msgstr "" +msgstr "Nem sikerült létrehozni a kalibrációs G-kódot" msgid "Calibration error" -msgstr "" +msgstr "Kalibrációs hiba" msgid "TPU is not supported by AMS." -msgstr "" +msgstr "Az AMS nem támogatja a TPU-t." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -msgstr "" +msgstr "A Bambu PET-CF/PA6-CF filament nem használható az AMS-sel." msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" +"A nedves PVA rugalmassá válik és elakadhat az AMS belsejében; kérjük, " +"használat előtt alaposan szárítsd ki." msgid "" "CF/GF filaments are hard and brittle, It's easy to break or get stuck in " "AMS, please use with caution." msgstr "" +"A CF/GF filament rideg és törékeny, ezért könnyen eltörhet vagy elakadhat az " +"AMS-ben; kérjük, légy körültekintő a használatakor." msgid "default" msgstr "alapértelmezett" @@ -3624,7 +3937,7 @@ msgid "Dimensions" msgstr "" msgid "Temperatures" -msgstr "" +msgstr "Hőmérséklet(ek)" msgid "Timestamps" msgstr "" @@ -3651,9 +3964,6 @@ msgstr "Nyomtató beállítások" msgid "parameter name" msgstr "paraméter neve" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s nem lehet százalék" @@ -3665,6 +3975,10 @@ msgstr "%s érték tartományon kívül esik, folytatod?" msgid "Parameter validation" msgstr "Paraméter validáció" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Value %s is out of range. The valid range is from %d to %d." + msgid "Value is out of range." msgstr "Az érték tartományon kívül esik." @@ -3678,6 +3992,20 @@ msgstr "" "IGEN %s%%, \n" "NEM %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Érvénytelen bemeneti formátum. A méretek vektora a következő formátumban " +"lenne érvényes: \"%1%\"" + +msgid "Input value is out of range" +msgstr "A bemeneti érték kívül esik a tartományon" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Érvénytelen formátum. Elvárt vektor formátum: \"%1%\"" @@ -3745,12 +4073,12 @@ msgstr "Megjelenítés" msgid "Flushed" msgstr "Öblített" +msgid "Tower" +msgstr "Torony" + msgid "Total" msgstr "Összesen" -msgid "Tower" -msgstr "" - msgid "Total Estimation" msgstr "Összesített becslés" @@ -3758,7 +4086,7 @@ msgid "Total time" msgstr "Teljes idő" msgid "Total cost" -msgstr "" +msgstr "Total cost" msgid "up to" msgstr "legfeljebb" @@ -3853,6 +4181,12 @@ msgstr "Időbecslés" msgid "Normal mode" msgstr "Normál mód" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "Előkészítési idő" @@ -3946,6 +4280,9 @@ msgstr "Elrendezési lehetőségek" msgid "Spacing" msgstr "Térköz" +msgid "0 means auto spacing." +msgstr "0 means auto spacing." + msgid "Auto rotate for arrangement" msgstr "Automatikus forgatás az elrendezéshez" @@ -3956,10 +4293,7 @@ msgid "Avoid extrusion calibration region" msgstr "Extrudáláskalibráció környékének elkerülése" msgid "Align to Y axis" -msgstr "" - -msgid "Add" -msgstr "Hozzáadás" +msgstr "Igazítás az Y-tengelyhez" msgid "Add plate" msgstr "Tálca hozzáadása" @@ -4025,7 +4359,7 @@ msgid "An object is layed over the boundary of plate." msgstr "Egy objektum a tálca határvonalán túlra került." msgid "A G-code path goes beyond the max print height." -msgstr "" +msgstr "A G-kód útvonala túlmegy a maximális nyomtatási magasságon." msgid "A G-code path goes beyond the boundary of plate." msgstr "A G-kód útvonala túlmegy a tálca peremén." @@ -4053,10 +4387,10 @@ msgid "Bed leveling" msgstr "Asztalszintezés" msgid "Vibration compensation" -msgstr "" +msgstr "Rezgés-kompenzáció" msgid "Motor noise cancellation" -msgstr "" +msgstr "Motorzajszűrés" msgid "Calibration program" msgstr "Kalibrációs program" @@ -4083,7 +4417,7 @@ msgid "Calibrating" msgstr "Kalibrálás" msgid "No step selected" -msgstr "" +msgstr "Nincs kiválasztva lépés" msgid "Auto-record Monitoring" msgstr "Automatikus felügyelet" @@ -4091,6 +4425,9 @@ msgstr "Automatikus felügyelet" msgid "Go Live" msgstr "Streamelés indítása" +msgid "Liveview Retry" +msgstr "Élő nézet újra próbálása" + msgid "Resolution" msgstr "Felbontás" @@ -4143,14 +4480,11 @@ msgstr "Alkalmazás bezárása egyes beállítások módosítása közben." msgid "Logging" msgstr "Naplózás" -msgid "Prepare" -msgstr "Előkészítés" - msgid "Preview" msgstr "Előnézet" -msgid "Device" -msgstr "Nyomtató" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "Projekt" @@ -4176,9 +4510,6 @@ msgstr "Összes szeletelése" msgid "Export G-code file" msgstr "G-kód fájl exportálása" -msgid "Send" -msgstr "Küldés" - msgid "Export plate sliced file" msgstr "Szeletelt tálca exportálása" @@ -4299,6 +4630,12 @@ msgstr "Importálás 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Modell betöltése" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Import Configs" @@ -4309,10 +4646,10 @@ msgid "Import" msgstr "Import" msgid "Export all objects as one STL" -msgstr "" +msgstr "Az összes objektum exportálása egy STL-ként" msgid "Export all objects as STLs" -msgstr "" +msgstr "Az összes objektum exportálása STL-ként" msgid "Export Generic 3MF" msgstr "Export Generic 3MF" @@ -4332,8 +4669,8 @@ msgstr "G-kód exportálása" msgid "Export current plate as G-code" msgstr "Jelenlegi tálca exportálása G-kódként" -msgid "Export &Configs" -msgstr "Export &Configs" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Aktuális konfiguráció exportálása fájlokba" @@ -4434,56 +4771,53 @@ msgstr "Show object overhang highlight in 3D scene" msgid "Preferences" msgstr "Beállítások" -msgid "View" -msgstr "Nézet" - msgid "Help" msgstr "Segítség" msgid "Temperature Calibration" -msgstr "" +msgstr "Hőmérséklet kalibrálás" msgid "Pass 1" -msgstr "" +msgstr "1. menet" msgid "Flow rate test - Pass 1" -msgstr "" +msgstr "Anyagáramlás teszt - 1. menet" msgid "Pass 2" -msgstr "" +msgstr "2. menet" msgid "Flow rate test - Pass 2" -msgstr "" +msgstr "Anyagáramlás teszt - 2. menet" msgid "Flow rate" -msgstr "" +msgstr "Anyagáramlás" msgid "Pressure advance" -msgstr "" +msgstr "Nyomáselőtolás (PA)" msgid "Retraction test" -msgstr "" +msgstr "Visszahúzás teszt" msgid "Orca Tolerance Test" -msgstr "" +msgstr "Orca Tolerance Test" msgid "Max flowrate" -msgstr "" +msgstr "Max. anyagáramlás" msgid "VFA" -msgstr "" +msgstr "VFA" msgid "More..." -msgstr "" +msgstr "Több..." msgid "Tutorial" -msgstr "" +msgstr "Útmutató" msgid "Calibration help" -msgstr "" +msgstr "Kalibrálási segítség" msgid "More calibrations" -msgstr "" +msgstr "További kalibrációk" msgid "&Open G-code" msgstr "&G-kód megnyitása" @@ -4503,10 +4837,10 @@ msgstr "Szerszámút exportálása OBJ-ként" msgid "Export toolpaths as OBJ" msgstr "Szerszámút exportálása OBJ-ként" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Studio megnyitása" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Studio megnyitása" msgid "&Quit" @@ -4598,42 +4932,59 @@ msgstr "" msgid "Synchronization" msgstr "Szinkronizálás" -msgid "Initialize failed (No Device)!" -msgstr "Sikertelen inicializálás (Nincs eszköz)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "Az eszköz nem tud több kapcsolatot kezelni. Kérjük, próbálkozz később." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "A lejátszó hibásan működik. Kérjük, telepítsd újra." -msgid "Initialize failed (No Camera Device)!" -msgstr "Sikertelen inicializálás (nem található kamera)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"A nyomtató a letöltéssel van elfoglalva; kérjük, várd meg, amíg a letöltés " +"A lejátszó nem töltődött be; kérjük, kattints a „lejátszás” gombra az újra " +"próbálkozáshoz." + +msgid "Please confirm if the printer is connected." +msgstr "Kérjük, ellenőrizd, hogy a nyomtató csatlakoztatva van." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"A nyomtató a letöltéssel van elfoglalva. Kérjük, várd meg, amíg a letöltés " "befejeződik." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Printer camera is malfunctioning." +msgstr "A nyomtató kamerája hibásan működik." + +msgid "Problem occured. Please update the printer firmware and try again." msgstr "" +"Probléma merült fel. Kérjük, frissítsd a nyomtató firmware-ét, és próbáld " +"meg újra." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Sikertelen inicializálás (nem elérhető LAN-módban)!" +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Az inicializálás sikertelen (hiányzó nyomtató LAN IP-cím)!" +msgid "Please enter the IP of printer to connect." +msgstr "A csatlakozáshoz add meg a nyomtató IP-címét." msgid "Initializing..." msgstr "Inicializálás…" -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Sikertelen inicializálás (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"Csatlakozás sikertelen. Kérjük, ellenőrizd a hálózatot, és próbáld újra" -msgid "Network unreachable" -msgstr "A hálózat nem elérhető" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Kérjük, ellenőrizd a hálózatot, és próbáld újra. Ha a probléma továbbra is " +"fennáll, indítsd újra vagy frissítsd a nyomtatót." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Megállítva [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "A nyomtató ki van jelentkezve, és nem tud csatlakozni." msgid "Stopped." msgstr "Megállítva." @@ -4664,19 +5015,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "A virtuális kamera inicializálása sikertelen (%s)!" +msgid "Network unreachable" +msgstr "A hálózat nem elérhető" + msgid "Information" msgstr "Információ" msgid "Playing..." msgstr "Lejátszás..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "A betöltés sikertelen [%d]!" - -msgid "Loading..." -msgstr "Betöltés…" - msgid "Year" msgstr "Year" @@ -4695,9 +5042,6 @@ msgstr "Fájlok csoportosítása hónap szerint, elöl a legújabb." msgid "Show all files, recent first." msgstr "Minden fájl megjelenítése, elöl a legújabb." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Váltás timelapse fájlokra." @@ -4725,6 +5069,12 @@ msgstr "Kiválasztás" msgid "Batch manage files." msgstr "Fájlok kötegelt kezelése." +msgid "Refresh" +msgstr "Frissítés" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "No printers." @@ -4735,13 +5085,34 @@ msgstr "Connection failed [%d]!" msgid "Loading file list..." msgstr "Loading file list..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "No files [%d]" +msgid "No files" +msgstr "Nincs fájl" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Load failed [%d]" +msgid "Initialize failed (%s)!" +msgstr "Sikertelen inicializálás (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4763,11 +5134,11 @@ 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 fetch model information from printer." +msgstr "Nem sikerült letölteni a modellinfomációt a nyomtatóról." -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "Nem sikerült feldolgozni a modellinformációkat" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4778,6 +5149,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "A (z) '%s' fájl elveszett! Kérjük, töltsd le újra." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "Várakozás letöltésre..." @@ -4794,27 +5173,28 @@ msgstr "A letöltés kész" msgid "Downloading %d%%..." msgstr "Letöltés %d%%..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." -msgstr "" +msgid "File does not exist." +msgstr "A fájl nem létezik." msgid "File checksum error. Please retry." -msgstr "" +msgstr "Fájl checksum hiba. Kérjük, próbáld újra." msgid "Not supported on the current printer version." -msgstr "" +msgstr "A nyomtató jelenlegi szoftvere nem támogatja." msgid "Storage unavailable, insert SD card." -msgstr "" +msgstr "A tárhely nem elérhető; kérjük helyezz be egy MicroSD-kártyát." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Hibakód: %d" msgid "Speed:" msgstr "Sebesség:" @@ -4858,12 +5238,6 @@ msgstr "" msgid "Printing Progress" msgstr "Nyomtatás folyamata" -msgid "Resume" -msgstr "Folytatás" - -msgid "Stop" -msgstr "Állj" - msgid "0" msgstr "0" @@ -4877,17 +5251,19 @@ msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." msgstr "" +"You have completed printing the mall model, \n" +"but synchronizing rating information has failed." msgid "How do you like this printing file?" -msgstr "" +msgstr "Hogy tetszik ez a nyomtatási fájl?" msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" -msgstr "" +msgstr "(Már értékelted ezt a modellt. Az új értékelésed felülírja az előzőt.)" msgid "Rate" -msgstr "" +msgstr "Értékelés" msgid "Camera" msgstr "Kamera" @@ -4904,6 +5280,9 @@ msgstr "" msgid "Control" msgstr "Vezérlés" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "Nyomtatási lehetőségek" @@ -4922,9 +5301,6 @@ msgstr "Cham" msgid "Bed" msgstr "Asztal" -msgid "Unload" -msgstr "Kitöltés" - msgid "Debug Info" msgstr "Hibakeresési infó" @@ -4962,6 +5338,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Kérjük, melegítsd a fúvókát 170 fok fölé a filament betöltése vagy kihúzása " +"előtt." msgid "Still unload" msgstr "Még kitöltődik" @@ -4998,95 +5376,108 @@ msgid "Can't start this without SD card." msgstr "MicroSD kártya nélkül nem indítható." msgid "Rate the Print Profile" -msgstr "" +msgstr "Értékeld a nyomtatási profilt" msgid "Comment" -msgstr "" +msgstr "Megjegyzés" msgid "Rate this print" -msgstr "" +msgstr "Értékeld ezt a nyomtatást" msgid "Add Photo" -msgstr "" +msgstr "Fénykép hozzáadása" msgid "Delete Photo" -msgstr "" +msgstr "Fénykép törlése" msgid "Submit" -msgstr "" +msgstr "Elküldés" msgid "Please click on the star first." -msgstr "" +msgstr "Kérjük, először kattints a csillagokra." msgid "InFo" -msgstr "" +msgstr "Infó" msgid "Get oss config failed." -msgstr "" +msgstr "OSS-konfiguráció letöltése sikertelen." msgid "Upload Pictrues" -msgstr "" +msgstr "Upload Pictures" msgid "Number of images successfully uploaded" -msgstr "" +msgstr "Sikeresen feltöltött képek száma" msgid " upload failed" -msgstr "" +msgstr " feltöltés sikertelen" msgid " upload config prase failed\n" -msgstr "" +msgstr " upload config prase failed\n" msgid " No corresponding storage bucket\n" -msgstr "" +msgstr " Nincs megfelelő tárolóhely\n" msgid " can not be opened\n" -msgstr "" +msgstr " cannot be opened\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" msgstr "" +"A képek feltöltése során a következő problémák merültek fel. Szeretnéd " +"figyelmen kívül hagyni őket?\n" +"\n" msgid "info" msgstr "infó" msgid "Synchronizing the printing results. Please retry a few seconds later." -msgstr "" +msgstr "Nyomtatási eredmények szinkronizálása. Kérjük, próbáld újra később." msgid "Upload failed\n" -msgstr "" +msgstr "Feltöltés sikertelen\n" msgid "obtaining instance_id failed\n" -msgstr "" +msgstr "Az instance_id beszerzése sikertelen\n" msgid "" "Your comment result cannot be uploaded due to some reasons. As follows:\n" "\n" " error code: " msgstr "" +"Your comment result cannot be uploaded due to the following reasons:\n" +"\n" +" error code: " msgid "error message: " -msgstr "" +msgstr "hibaüzenet: " msgid "" "\n" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"Would you like to redirect to the webpage to give a rating?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" msgstr "" +"Néhány képet nem sikerült feltölteni. Szeretnéd, ha átirányítanánk a " +"weboldalra az értékelés beküldéséhez?" msgid "You can select up to 16 images." -msgstr "" +msgstr "Legfeljebb 16 képet választhatsz ki." msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" +"At least one successful print record of this print profile is required \n" +"to give a positive rating (4 or 5 stars)." msgid "Status" msgstr "Állapot" @@ -5094,9 +5485,6 @@ msgstr "Állapot" msgid "Update" msgstr "Frissítés" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Ne mutasd újra" @@ -5127,6 +5515,35 @@ msgstr "%s információ" msgid "Skip" msgstr "Kihagyás" +msgid "Newer 3mf version" +msgstr "Újabb 3mf verzió" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Béta verzió letöltése" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Jelenlegi verzió: " + +msgid "Latest Version: " +msgstr "Legújabb verzió: " + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "3D Mouse csatlakoztatva." @@ -5152,10 +5569,10 @@ msgid "Details" msgstr "Részletek" msgid "New printer config available." -msgstr "" +msgstr "Új nyomtatókonfiguráció érhető el." msgid "Wiki" -msgstr "" +msgstr "Wiki" msgid "Undo integration failed." msgstr "Az integráció visszavonása nem sikerült." @@ -5196,12 +5613,12 @@ msgstr[1] "" msgid "ERROR" msgstr "HIBA" -msgid "CANCELED" -msgstr "MEGSZAKÍTVA" - msgid "COMPLETED" msgstr "KÉSZ" +msgid "CANCELED" +msgstr "MEGSZAKÍTVA" + msgid "Cancel upload" msgstr "Feltöltés megszakítása" @@ -5218,10 +5635,10 @@ msgid "Export successfully." msgstr "Sikeresen exportálva" msgid "Model file downloaded." -msgstr "" +msgstr "Modellfájl letöltve." msgid "Serious warning:" -msgstr "" +msgstr "Súlyos figyelmeztetés:" msgid " (Repair)" msgstr " (Javítás)" @@ -5309,10 +5726,29 @@ msgid "Auto-recovery from step loss" msgstr "Automatikus helyreállítás lépésvesztésből" msgid "Allow Prompt Sound" -msgstr "" +msgstr "Hangjelzés engedélyezése" msgid "Filament Tangle Detect" -msgstr "" +msgstr "Filament Tangle Detection" + +msgid "Nozzle Clumping Detection" +msgstr "Nozzle Clumping Detection" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Check if the nozzle is clumping by filament or other foreign objects." + +msgid "Nozzle Type" +msgstr "Nozzle Type" + +msgid "Stainless Steel" +msgstr "Rozsdamentes acél" + +msgid "Hardened Steel" +msgstr "Edzett acél" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" msgid "Global" msgstr "Globális" @@ -5403,7 +5839,7 @@ msgid "Set filaments to use" msgstr "Használni kívánt filament beállítása" msgid "Search plate, object and part." -msgstr "" +msgstr "Tálca, objektum és tárgy keresése." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -5470,6 +5906,9 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"The current heatbed temperature is relatively high. The nozzle may clog when " +"printing this filament in a closed environment. Please open the front door " +"and/or remove the upper glass." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5484,12 +5923,14 @@ msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." msgstr "" +"A hagyományos timelapse engedélyezése felületi hibákat okozhat. Javasoljuk, " +"hogy válts a sima módra." msgid "Expand sidebar" -msgstr "" +msgstr "Az oldalsáv kibontása" msgid "Collapse sidebar" -msgstr "" +msgstr "&Az oldalsáv összecsukása" #, c-format, boost-format msgid "Loading file: %s" @@ -5512,9 +5953,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Jobb lenne, ha frissítenéd a szoftvert.\n" -msgid "Newer 3mf version" -msgstr "Újabb 3mf verzió" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5530,26 +5968,31 @@ msgid "Please correct them in the param tabs" msgstr "Please correct them in the Param tabs" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" +msgstr "The 3mf has following modified G-code in filament or printer presets:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"Kérjük, győződj meg arról, hogy ezek a módosított G-kódok biztonságosak, " +"hogy elkerüld a nyomtató esetleges károsodását!" msgid "Modified G-codes" -msgstr "" +msgstr "Modified G-code" msgid "The 3mf has following customized filament or printer presets:" msgstr "" +"A 3mf a következő egyedi filament- vagy nyomtatóbeállításokat tartalmazza:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"Kérjük, győződj meg arról, hogy a beállításokban található G-kódok " +"biztonságosak, hogy elkerüld a nyomtató esetleges károsodását!" msgid "Customized Preset" -msgstr "" +msgstr "Egyedi beállítás" msgid "Name of components inside step file is not UTF8 format!" msgstr "A STEP fájlon belüli komponens neve nem UTF-8 formátumban van!" @@ -5558,6 +6001,9 @@ msgid "The name may show garbage characters!" msgstr "" "A nem támogatott szövegkódolás miatt helytelen karakterek jelenhetnek meg!" +msgid "Remember my choice." +msgstr "Remember my choice." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "Nem sikerült betölteni \"%1%\" fájlt. Érvénytelen konfiguráció." @@ -5613,22 +6059,24 @@ msgid "Export STL file:" msgstr "STL fájl exportálása:" msgid "Export AMF file:" -msgstr "" +msgstr "AMF fájl exportálása:" msgid "Save file as:" msgstr "Fájl mentése mint:" msgid "Export OBJ file:" -msgstr "" +msgstr "OBJ fájl exportálása:" #, c-format, boost-format msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"The file %s already exists.\n" +"Do you want to replace it?" msgid "Comfirm Save As" -msgstr "" +msgstr "Mentés másként megerősítése" msgid "Delete object which is a part of cut object" msgstr "Delete object which is a part of cut object" @@ -5649,13 +6097,13 @@ msgid "Another export job is running." msgstr "Egy másik exportálási feladat is fut." msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "Nem lehet egynél több kötetre cserélni" msgid "Error during replace" msgstr "Hiba a csere során" msgid "Replace from:" -msgstr "" +msgstr "Csere innen:" msgid "Select a new file" msgstr "Válassz egy új fájlt" @@ -5667,22 +6115,19 @@ msgid "Please select a file" msgstr "Kérjük, válassz egy fájlt" msgid "Do you want to replace it" -msgstr "" +msgstr "Do you want to replace it?" msgid "Message" -msgstr "" +msgstr "Üzenet" msgid "Reload from:" -msgstr "" +msgstr "Újratöltés innen:" msgid "Unable to reload:" -msgstr "" +msgstr "Nem sikerült újratölteni:" msgid "Error during reload" -msgstr "" - -msgid "Slicing" -msgstr "Szeletelés" +msgstr "Hiba az újratöltés során" msgid "There are warnings after slicing models:" msgstr "A modellek szeletelése a következő figyelmeztetéseket generálta:" @@ -5745,9 +6190,15 @@ msgstr "Modell importálása" msgid "prepare 3mf file..." msgstr "3mf fájl előkészítése..." +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "projekt letöltése ..." +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt letöltve %d%%" @@ -5758,7 +6209,7 @@ msgid "" msgstr "" msgid "Import SLA archive" -msgstr "" +msgstr "SLA archívum importálása" msgid "The selected file" msgstr "A kiválasztott fájl" @@ -5769,6 +6220,20 @@ msgstr "nem tartalmaz érvényes G-kódot." msgid "Error occurs while loading G-code file" msgstr "Hiba a G-kód betöltésének során" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" + msgid "Drop project file" msgstr "Projekt fájl elvetése" @@ -5793,9 +6258,6 @@ msgstr "A G-code fájlokat nem lehet a modellekkel együtt betölteni!" msgid "Can not add models when in preview mode!" msgstr "Előnézeti módban nem lehet modelleket hozzáadni!" -msgid "Add Models" -msgstr "Modellek hozzáadása" - msgid "All objects will be removed, continue?" msgstr "Minden tárgyat eltávolítunk, folytatod?" @@ -5804,9 +6266,6 @@ msgstr "" "Az aktuális projektben el nem mentett módosítások vannak, mentsük el a " "folytatás előtt?" -msgid "Remember my choice." -msgstr "Remember my choice." - msgid "Number of copies:" msgstr "Másolatok száma:" @@ -5817,13 +6276,13 @@ msgid "Save G-code file as:" msgstr "G-kód fájl mentése mint:" msgid "Save SLA file as:" -msgstr "" +msgstr "SLA fájl mentése mint:" msgid "The provided file name is not valid." -msgstr "" +msgstr "A megadott fájlnév érvénytelen." msgid "The following characters are not allowed by a FAT file system:" -msgstr "" +msgstr "A következő karakterek nem engedélyezettek a FAT fájlrendszerben:" msgid "Save Sliced file as:" msgstr "Szeletelt fájl mentése mint:" @@ -5837,10 +6296,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5855,7 +6330,7 @@ msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "" msgid "Upload and Print" -msgstr "" +msgstr "Feltöltés és Nyomtatás" msgid "" "Print By Object: \n" @@ -5890,7 +6365,7 @@ msgstr "Number of currently selected parts: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "" +msgstr "Kijelölt objektumok száma: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -5992,6 +6467,11 @@ msgstr "Régió" msgid "Stealth Mode" msgstr "" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -6007,15 +6487,46 @@ msgstr "Angolszász" msgid "Units" msgstr "Mértékegység" -msgid "Home" +msgid "Allow only one OrcaSlicer instance" msgstr "" +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"OSX rendszeren alapértelmezés szerint mindig csak egy példány fut az " +"alkalmazásból. Ugyanakkor ugyanaz az alkalmazás több példánya is futtatható " +"a parancssorból. Ebben az esetben ez a beállítás csak egy példányt " +"engedélyez." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + +msgid "Home" +msgstr "Haza" + msgid "Default Page" msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Zoom to mouse position" @@ -6027,13 +6538,21 @@ msgstr "" "2D window center." msgid "Use free camera" -msgstr "" +msgstr "Szabad kamera használata" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +"Ha engedélyezve van, szabad kamerát használ. Ha nincs engedélyezve, akkor " +"kötött kamerát használ." + +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" msgid "Show splash screen" -msgstr "" +msgstr "Splash screen meglenítése" msgid "Show the splash screen during startup." msgstr "" @@ -6046,9 +6565,37 @@ msgstr "Ha engedélyezve van, hasznos tippek jelennek meg indításkor." msgid "Flushing volumes: Auto-calculate everytime the color changed." msgstr "" +"Öblítési mennyiség: Automatikus kiszámításra kerül minden színcserekor." msgid "If enabled, auto-calculate everytime the color changed." msgstr "" +"Ha engedélyezve van, automatikusan kiszámításra kerül minden színcsere " +"alkalmával." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Flushing volumes: Auto-calculate every time the filament is changed." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "If enabled, auto-calculate every time filament is changed" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." msgid "Network" msgstr "" @@ -6097,6 +6644,42 @@ msgstr "" "Ha engedélyezve van, a OrcaSlicer-t állítja be alapértelmezett " "alkalmazásként a .step fájlok megnyitásához" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -6107,7 +6690,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Clear my choice on the unsaved projects." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "No warnings when loading 3MF with modified G-code" msgid "Auto-Backup" msgstr "Automatikus biztonsági mentés" @@ -6263,16 +6846,25 @@ msgid "Add/Remove materials" msgstr "Anyagok hozzáadása/eltávolítása" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Nyomtatók kiválasztása/eltávolítása (rendszerbeállítások)" msgid "Create printer" -msgstr "" - -msgid "Incompatible" -msgstr "Incompatible" +msgstr "Nyomtató létrehozása" msgid "The selected preset is null!" -msgstr "" +msgstr "A kiválasztott beállítás nulla!" + +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "Testreszabás" + +msgid "Other layer filament sequence" +msgstr "Other layer filament sequence" + +msgid "Please input layer value (>= 2)." +msgstr "Please input layer value (>= 2)." msgid "Plate name" msgstr "Plate name" @@ -6283,11 +6875,17 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Nyomtatás sorrendje" -msgid "Customize" -msgstr "" +msgid "Same as Global" +msgstr "Same as Global" + +msgid "Disable" +msgstr "Disable" + +msgid "Spiral vase" +msgstr "Spirál (váza)" msgid "First layer filament sequence" -msgstr "" +msgstr "Kezdőréteg filament sorrendje" msgid "Same as Global Plate Type" msgstr "Same as Global Plate Type" @@ -6347,15 +6945,6 @@ msgstr "Felhasználói beállítás" msgid "Preset Inside Project" msgstr "Projekt a beállításon belül" -msgid "Name is invalid;" -msgstr "A név érvénytelen;" - -msgid "illegal characters:" -msgstr "tiltott karakterek:" - -msgid "illegal suffix:" -msgstr "tiltott utótag:" - msgid "Name is unavailable." msgstr "A név nem elérhető." @@ -6373,15 +6962,6 @@ msgstr "A(z) \"%1%\" már létezik és nem kompatibilis a jelenlegi nyomtatóval msgid "Please note that saving action will replace this preset" msgstr "Figyelem, a mentési művelet lecseréli ezt a beállítást" -msgid "The name is not allowed to be empty." -msgstr "A név mező nem lehet üres." - -msgid "The name is not allowed to start with space character." -msgstr "A név nem kezdődhet szóközzel." - -msgid "The name is not allowed to end with space character." -msgstr "A név nem végződhet szóközzel." - msgid "The name cannot be the same as a preset alias name." msgstr "A név nem lehet azonos egy beállítás alias névvel." @@ -6419,7 +6999,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Keresés" msgid "My Device" msgstr "Saját eszköz" @@ -6439,9 +7019,6 @@ msgstr "Nem találod az eszközöket?" msgid "Log out successful." msgstr "Sikeres kijelentkezés." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Elfoglalt" @@ -6458,7 +7035,7 @@ msgid "Bambu Smooth PEI Plate" msgstr "" msgid "High temperature Plate" -msgstr "" +msgstr "High Temperature Plate" msgid "Bambu Textured PEI Plate" msgstr "" @@ -6466,17 +7043,11 @@ msgstr "" msgid "Send print job to" msgstr "Nyomtatási feladat küldése" -msgid "Refresh" -msgstr "Frissítés" - -msgid "Bed Leveling" -msgstr "Asztalszintezés" - msgid "Flow Dynamics Calibration" -msgstr "" +msgstr "Áramlásdinamikai kalibrálás" msgid "Click here if you can't connect to the printer" -msgstr "" +msgstr "Kattints ide, ha nem tudsz csatlakozni a nyomtatóhoz" msgid "send completed" msgstr "küldés befejezve" @@ -6484,9 +7055,6 @@ msgstr "küldés befejezve" msgid "Error code" msgstr "Error code" -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" @@ -6568,8 +7136,13 @@ 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." 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." @@ -6591,10 +7164,14 @@ msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." msgstr "" +"When spiral vase mode is enabled, machines with I3 structure will not " +"generate timelapse videos." msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"A timelapse nem támogatott ebben a módban, mert a nyomtatási sorrend " +"„Tárgyanként” értékre van állítva." msgid "Errors" msgstr "Hibák" @@ -6622,56 +7199,59 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "fúvóka a beállításban: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "" +msgid "nozzle memorized: %.2f %s" +msgstr "eltárolt fúvóka: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" +"Your nozzle diameter in sliced file is not consistent with the saved nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Please fix the error above, otherwise printing cannot continue." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - 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." +"Csatlakozás a nyomtatóhoz. A csatlakozási folyamatot nem lehetett " +"megszakítani." msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." msgstr "" +"Figyelem! A „Textured PEI“ tálcán való áramláskalibrálás a durva felület " +"miatt hamis eredményeket adhat." msgid "Automatic flow calibration using Micro Lidar" -msgstr "" +msgstr "Automatic flow calibration using the Micro Lidar" msgid "Modifying the device name" msgstr "Eszköz nevének módosítása" +msgid "Bind with Pin Code" +msgstr "Bind with Pin Code" + msgid "Send to Printer SD card" msgstr "Küldés a nyomtatóban lévő MicroSD kártyára" @@ -6680,6 +7260,9 @@ msgstr "" "Nem küldhetsz nyomtatási feladatot a nyomtatóra, amikor frissítés van " "folyamatban" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "A nyomtató nem kompatibilis a kiválasztott nyomtatóbeállításokkal." + 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." @@ -6695,7 +7278,7 @@ msgid "Slice ok." msgstr "Szeletelés kész." msgid "View all Daily tips" -msgstr "" +msgstr "Napi tippek megtekintése" msgid "Failed to create socket" msgstr "Failed to create socket" @@ -6724,6 +7307,28 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Ismeretlen hiba" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." + +msgid "Can't find Pin Code?" +msgstr "Can't find Pin Code?" + +msgid "Pin Code" +msgstr "Pin Code" + +msgid "Binding..." +msgstr "Binding..." + +msgid "Please confirm on the printer screen" +msgstr "Please confirm on the printer screen" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Log in failed. Please check the Pin Code." + msgid "Log in printer" msgstr "Bejelentkezés a nyomtatóra" @@ -6841,7 +7446,7 @@ msgstr "" "hibák a nyomtatott tárgyon. Engedélyezed a törlőtornyot?" msgid "Still print by object?" -msgstr "" +msgstr "Továbbra is tárgyanként szeretnél nyomtatni?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6900,15 +7505,41 @@ msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"A rétegmagasság meghaladja a Nyomtatóbeállítások -> Extruder -> " +"Rétegmagasság limitek menüpontban megadott értéket, ez minőségbeli " +"problémákat okozhat a nyomtatás során." msgid "Adjust to the set range automatically? \n" msgstr "" +"Szeretnéd az értéket automatikusan a beállított tartományhoz igazítani? \n" msgid "Adjust" -msgstr "" +msgstr "Módosítás" msgid "Ignore" +msgstr "Mellőzés" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications. Please use with the latest printer firmware." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -6979,7 +7610,7 @@ msgid "Acceleration" msgstr "Gyorsulás" msgid "Jerk(XY)" -msgstr "" +msgstr "Jerk(XY)" msgid "Raft" msgstr "Tutaj" @@ -6990,6 +7621,9 @@ msgstr "Filament a támaszhoz" msgid "Tree supports" msgstr "" +msgid "Skirt" +msgstr "Szoknya" + msgid "Prime tower" msgstr "Törlő torony" @@ -7003,7 +7637,7 @@ msgid "Post-processing Scripts" msgstr "Post-processing Scripts" msgid "Notes" -msgstr "" +msgstr "Notes" msgid "Frequent" msgstr "Gyakori" @@ -7079,13 +7713,16 @@ msgstr "" "a filament nem támogatja az Engineering Plate-re történő nyomtatást" msgid "Smooth PEI Plate / High Temp Plate" -msgstr "" +msgstr "Smooth PEI Plate / High Temp Plate" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" +"Az asztal hőmérséklete Smooth PEI / High Temperature tálca használatakor. A " +"0 érték azt jelenti, hogy a filament nem támogatja Smooth PEI / High " +"Temperature tálcára történő nyomtatást" msgid "Textured PEI Plate" msgstr "Textured PEI Plate" @@ -7139,13 +7776,13 @@ msgid "Auxiliary part cooling fan" msgstr "Kiegészítő tárgyhűtő ventilátor" msgid "Exhaust fan" -msgstr "" +msgstr "Elszívóventilátor" msgid "During print" -msgstr "" +msgstr "Nyomtatás közben" msgid "Complete print" -msgstr "" +msgstr "Teljes nyomtatás" msgid "Filament start G-code" msgstr "Filament kezdő G-kód" @@ -7157,13 +7794,14 @@ msgid "Multimaterial" msgstr "" msgid "Wipe tower parameters" -msgstr "" +msgstr "Törlőtorony paraméterek" msgid "Toolchange parameters with single extruder MM printers" msgstr "" +"Szerszámváltási paraméterek egy extruderes Több Anyagos (MM) nyomtatónál" msgid "Ramming settings" -msgstr "" +msgstr "Tömörítési beállítások" msgid "Toolchange parameters with multi extruder MM printers" msgstr "" @@ -7171,6 +7809,14 @@ msgstr "" msgid "Printable space" msgstr "Nyomtatási terület" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "" @@ -7196,7 +7842,7 @@ msgid "Machine end G-code" msgstr "Gép befejező G-kód" msgid "Printing by object G-code" -msgstr "" +msgstr "Nyomtatás objektumonként G-kód" msgid "Before layer change G-code" msgstr "Rétegváltás előtti G-kód" @@ -7205,7 +7851,7 @@ msgid "Layer change G-code" msgstr "Rétegváltás G-kód" msgid "Time lapse G-code" -msgstr "" +msgstr "Timelapse G-kód" msgid "Change filament G-code" msgstr "Filament csere G-kód" @@ -7238,10 +7884,10 @@ msgid "Single extruder multimaterial setup" msgstr "" msgid "Wipe tower" -msgstr "" +msgstr "Törlőtorony" msgid "Single extruder multimaterial parameters" -msgstr "" +msgstr "Egyetlen extruder többanyagú paraméterei" msgid "Layer height limits" msgstr "Rétegmagasság limitek" @@ -7257,9 +7903,12 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Disable it in order to enable Firmware Retraction?" msgid "Firmware Retraction" -msgstr "" +msgstr "Firmware-ben megadott visszahúzás" msgid "Detached" msgstr "Különálló" @@ -7269,9 +7918,11 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"A(z) %d filamentbeállítás és a(z) %d folyamatbeállítás ehhez a nyomtatóhoz " +"kapcsolódik. Ha törlöd a nyomtatót, akkor ezek a beállítások is törlődnek." msgid "Presets inherited by other presets can not be deleted!" -msgstr "" +msgstr "A más beállítások által örökölt beállítások nem törölhetők!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." @@ -7293,6 +7944,9 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"Biztosan törlöd a kiválasztott beállítást? \n" +"Ha ez a filament jelenleg használatban van a nyomtatón, kérjük, töröld az " +"adott férőhelyen a filamentadatokat." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7396,22 +8050,30 @@ msgstr "" "következő elmentetlen változásokat tartalmazza:" #, 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 "" -"Megváltoztattad a(z) \"%1%\" beállítás néhány beállítását.\n" -"Szeretnéd ezeket a módosított beállításokat (új értéket) megtartani a másik " -"beállításra való váltás után?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "You have changed some settings of preset \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"You can save or discard the preset values you have modified." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "You have previously modified your settings." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Megváltoztattál néhány beállítást.\n" -"Szeretnéd ezeket megtartani a másik beállításra való váltás után?" msgid "Extruders count" msgstr "Extruderek száma" @@ -7442,7 +8104,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7524,8 +8186,62 @@ msgstr "Nincs elérhető frissítés." msgid "The configuration is up to date." msgstr "A konfiguráció naprakész." -msgid "Ramming customization" +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + +msgid "Ramming customization" +msgstr "Tömörítés testreszabása" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" @@ -7538,27 +8254,37 @@ msgid "" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." msgstr "" +"A tömörítés az egy extruderes Többféle Anyaggal (MM) dolgozó nyomtatókban a " +"szerszámcsere előtti gyors extrudálást jelenti. Célja, hogy megfelelően " +"alakítsa a visszahúzott filament végét, hogy az ne akadályozza az új " +"filament betöltését, és később újra betölthető legyen. Ez a fázis fontos, és " +"a különböző anyagok különböző extrudálási sebességet igényelhetnek a " +"megfelelő forma eléréséhez. Ezért a tömörítés során alkalmazott extrudálási " +"sebességek állíthatóak.\n" +"\n" +"Ez egy szakértői szintű beállítás, a helytelen beállítás elakadásokhoz, az " +"extruder kerék filamentbe marásához stb. vezethet." msgid "Total ramming time" -msgstr "" +msgstr "Teljes tömörítési idő" msgid "s" msgstr "mp" msgid "Total rammed volume" -msgstr "" +msgstr "Teljes tömörített térfogat" msgid "Ramming line width" -msgstr "" +msgstr "Tömörítési vonal szélessége" msgid "Ramming line spacing" -msgstr "" +msgstr "Tömörítési vonal térköze" msgid "Auto-Calc" msgstr "Automatikus számítás" msgid "Re-calculate" -msgstr "" +msgstr "Újraszámítás" msgid "Flushing volumes for filament change" msgstr "Filament csere tiszítási mennyisége" @@ -7597,12 +8323,38 @@ msgstr "Ettől:" msgid "To" msgstr "Eddig:" -msgid "Bambu Network plug-in not detected." +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" msgstr "" -msgid "Click here to download it." +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" msgstr "" +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "A Bambu Network plug-in nem található." + +msgid "Click here to download it." +msgstr "Kattints ide a letöltéshez." + msgid "Login" msgstr "Bejelentkezés" @@ -7634,7 +8386,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "3Dconnexion-eszközbeállítások párbeszédablak megjelenítése/elrejtése" msgid "Switch table page" -msgstr "" +msgstr "Váltás táblázatra" msgid "Show keyboard shortcuts list" msgstr "Gyorsgombok listájának megjelenítése" @@ -7790,10 +8542,10 @@ msgid "Gizmo Text emboss / engrave" msgstr "" msgid "Zoom in" -msgstr "" +msgstr "Zoom közelítés" msgid "Zoom out" -msgstr "" +msgstr "Zoom távolítás" msgid "Switch between Prepare/Preview" msgstr "" @@ -7871,6 +8623,12 @@ msgstr "Csúszka 5x gyorsabb mozgatása" msgid "Shift+Mouse wheel" msgstr "Shift+Egérgörgő" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Verzióinformáció" @@ -7895,13 +8653,49 @@ msgid "New version of Orca Slicer" msgstr "A Orca Slicer új verziója" msgid "Skip this Version" -msgstr "" +msgstr "Verzió kihagyása" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "resume" + +msgid "Resume Printing" +msgstr "Resume Printing" + +msgid "Resume Printing(defects acceptable)" +msgstr "Resume Printing (defects acceptable)" + +msgid "Resume Printing(problem solved)" +msgstr "Resume Printing (problem solved)" + +msgid "Stop Printing" +msgstr "Stop Printing" + +msgid "Check Assistant" +msgstr "Check Assistant" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruded, Continue" + +msgid "Not Extruded Yet, Retry" +msgstr "Not Extruded Yet, Retry" + +msgid "Finished, Continue" +msgstr "Finished, Continue" + +msgid "Load Filament" +msgstr "Filament betöltés" + +msgid "Filament Loaded, Resume" +msgstr "Filament Loaded, Resume" + +msgid "View Liveview" +msgstr "View Liveview" + msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Fúvóka lecserélésének megerősítése" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN kapcsolódás sikertelen (nyomtatási fájl küldése)" @@ -7930,20 +8724,25 @@ msgstr "Hol találom a nyomtató IP címét és a hozzáférési kódot?" msgid "Step 3: Ping the IP address to check for packet loss and latency." msgstr "" +"3. lépés: Pingeld meg az IP-címet a csomagveszteség és késleltetés " +"ellenőrzéséhez." msgid "Test" -msgstr "" +msgstr "Teszt" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP és hozzáférési kód leellenőrizve! Bezárhatod az ablakot" msgid "Connection failed, please double check IP and Access Code" msgstr "" +"Sikertelen kapcsolódás, kérjük, ellenőrizd az IP-t és a hozzáférési kódot" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"Sikertelen kapcsolódás! Ha az IP-cím és a hozzáférési kód helyes,\n" +"folytasd a 3. lépéssel a hálózati problémák elhárításához" msgid "Model:" msgstr "Modell:" @@ -7957,14 +8756,8 @@ msgstr "Verzió:" msgid "Update firmware" msgstr "Firmware frissítése" -msgid "Printing" -msgstr "Nyomtatás" - -msgid "Idle" -msgstr "Tétlen" - msgid "Beta version" -msgstr "" +msgstr "Béta verzió" msgid "Latest version" msgstr "Legfrissebb verzió" @@ -7997,7 +8790,7 @@ 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." +"update next time starting Orca." msgstr "" "A firmware verziója rendellenes. A nyomtatás előtt javításra és frissítésre " "van szükség. Szeretnél frissíteni most? A frissítés később is elvégezhető a " @@ -8141,9 +8934,6 @@ msgstr "" msgid "Gap infill" msgstr "Réskitöltés" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Támasz érintkező felület" @@ -8343,26 +9133,33 @@ msgid "" msgstr "" msgid "Variable layer height is not supported with Organic supports." -msgstr "" +msgstr "A változó rétegmagasság nem működik az organikus támaszokkal." msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Nem használhatsz különböző fúvókaátmérőt és filamentátmérőt, ha a " +"törlőtorony engedélyezve van." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"A törlőtorony jelenleg csak relatív extruder címzéssel használható " +"(use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"A szivárgás elleni védelem nem működik, ha a törlőtorony engedélyezve van." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"A törlőtorony jelenleg csak a Marlin, RepRap/Sprinter, RepRapFirmware és " +"Repetier G-kód szoftverekkel használható." msgid "The prime tower is not supported in \"By object\" print." msgstr "A prime tower is not supported in “By object” print." @@ -8591,11 +9388,13 @@ msgstr "" "https://username:password@your-octopi-address/" msgid "Device UI" -msgstr "" +msgstr "Eszköz UI" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" +"Add meg az eszköz felhasználói felületének URL-címét, ha az nem azonos a " +"print_host címével." msgid "API Key / Password" msgstr "API kulcs / jelszó" @@ -8755,7 +9554,16 @@ msgid "Engineering Plate" msgstr "Engineering Plate" msgid "First layer print sequence" -msgstr "" +msgstr "Az első réteg nyomtatási sorrendje" + +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" msgid "This G-code is inserted at every layer change before lifting z" msgstr "Ez a G-kód minden rétegváltáshoz bekerül a Z tengely emelése előtt." @@ -8803,7 +9611,7 @@ msgid "" msgstr "" msgid "Everywhere" -msgstr "" +msgstr "Mindenhol" msgid "Top and bottom surfaces" msgstr "" @@ -8889,12 +9697,14 @@ msgid "" msgstr "" msgid "Top surface flow ratio" -msgstr "" +msgstr "Felső felület anyagáramlása" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" +"Ez a beállítás a felső szilárd kitöltésnél használt anyag mennyiségét " +"befolyásolja. Kis mértékben csökkentve simább felület érhető el vele." msgid "Bottom surface flow ratio" msgstr "" @@ -9039,7 +9849,7 @@ msgid "" msgstr "" msgid "mm/s or %" -msgstr "" +msgstr "mm/s vagy %" msgid "External" msgstr "" @@ -9182,7 +9992,7 @@ msgid "Default process profile when switch to this machine profile" msgstr "Alapértelmezett folyamat profil, ha erre a gép profilra váltasz" msgid "Activate air filtration" -msgstr "" +msgstr "Activate air filtration" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" @@ -9194,6 +10004,8 @@ msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" msgstr "" +"Az elszívó ventilátor sebessége nyomtatás közben: ez a sebesség felülírja a " +"sebességet a filament egyéni G-kódjában." msgid "Speed of exhaust fan after printing completes" msgstr "" @@ -9273,7 +10085,7 @@ msgid "" msgstr "" msgid "Disabled" -msgstr "" +msgstr "Letiltva" msgid "Limited filtering" msgstr "" @@ -9301,12 +10113,14 @@ msgid "End G-code when finish the whole printing" msgstr "Befejező G-kód az egész nyomtatás befejezésekor" msgid "Between Object Gcode" -msgstr "" +msgstr "Objektumok közötti G-kód" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"A tárgyak nyomtatása között használt G-kód. Ez a paraméter csak akkor " +"működik, ha a nyomtatás tárgyankénti sorrendben történik." msgid "End G-code when finish the printing of this filament" msgstr "Befejező G-kód a filament nyomtatásának befejezésekor" @@ -9368,7 +10182,7 @@ msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "Ez az alsó felület kitöltésének mintája, kivéve az áthidalásokat." msgid "Internal solid infill pattern" -msgstr "" +msgstr "Belső tömör kitöltés mintája" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " @@ -9388,7 +10202,7 @@ msgstr "" "a belső fal sebessége." msgid "Small perimeters" -msgstr "" +msgstr "Kis peremek" msgid "" "This separate setting will affect the speed of perimeters having radius <= " @@ -9403,6 +10217,8 @@ msgstr "" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm" msgstr "" +"A kis peremek hosszának küszöbértékét határozza meg. Az alapértelmezett " +"érték 0 mm" msgid "Walls printing order" msgstr "" @@ -9442,13 +10258,13 @@ msgid "Inner/Outer/Inner" msgstr "" msgid "Print infill first" -msgstr "" +msgstr "Kitöltés a falak előtt" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9502,6 +10318,12 @@ 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 "Nozzle height" +msgstr "Fúvóka magassága" + +msgid "The height of nozzle tip." +msgstr "A fúvókacsúcs magassága." + msgid "Bed mesh min" msgstr "" @@ -9572,7 +10394,7 @@ msgstr "" "hogy túl sok vagy kevés az anyagáramlás." msgid "Enable pressure advance" -msgstr "" +msgstr "Nyomáselőtolás engedélyezése" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " @@ -9598,6 +10420,22 @@ msgstr "" "és legalább a minimális fordulatszámon fog járni, hogy csökkentse az indítás " "és leállítás gyakoriságát" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Rétegidő" @@ -9618,10 +10456,10 @@ msgid "Default filament color" msgstr "Alapértelmezett filament szín" msgid "Filament notes" -msgstr "" +msgstr "Filament notes" msgid "You can put your notes regarding the filament here." -msgstr "" +msgstr "You can put your notes regarding the filament here." msgid "Required nozzle HRC" msgstr "Szükséges fúvóka HRC-érték" @@ -9682,54 +10520,61 @@ msgid "" msgstr "" msgid "Loading speed" -msgstr "" +msgstr "Betöltési sebesség" msgid "Speed used for loading the filament on the wipe tower." -msgstr "" +msgstr "A filament törlőtoronyra való betöltéséhez használt sebesség." msgid "Loading speed at the start" -msgstr "" +msgstr "Betöltési sebesség kezdéskor" msgid "Speed used at the very beginning of loading phase." -msgstr "" +msgstr "A betöltési fázis legelején használt sebesség." msgid "Unloading speed" -msgstr "" +msgstr "Kiürítési sebesség" msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" +"A filament törlőtoronynál való kiürítéséhez használt sebesség (nem " +"befolyásolja a kiürítés kezdeti részét közvetlenül a tömörítés után)." msgid "Unloading speed at the start" -msgstr "" +msgstr "Kiürítési sebesség kezdéskor" msgid "" "Speed used for unloading the tip of the filament immediately after ramming." -msgstr "" +msgstr "A filament kiürítésének sebessége közvetlenül a tömörítés után." msgid "Delay after unloading" -msgstr "" +msgstr "Várakozás a kiürítés után" msgid "" "Time to wait after the filament is unloaded. May help to get reliable " "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" +"A várakozási idő az filament kiürítése után. Segíthet megbízható " +"szerszámcserét elérni rugalmas anyagok esetén, amelyeknek több időre lehet " +"szükségük ahhoz, hogy az eredeti méretükre zsugorodjanak." msgid "Number of cooling moves" -msgstr "" +msgstr "Hűtési lépések száma" msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" +"A filament hűtése úgy történik, hogy oda-vissza mozgatják a hűtőcsőben. Adja " +"meg a kívánt lépések számát." msgid "Speed of the first cooling move" -msgstr "" +msgstr "Az első hűtési lépés sebessége" msgid "Cooling moves are gradually accelerating beginning at this speed." -msgstr "" +msgstr "A hűtési lépések fokozatosan felgyorsulnak ettől a sebességtől kezdve." msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" @@ -9743,30 +10588,39 @@ msgid "" msgstr "" msgid "Speed of the last cooling move" -msgstr "" +msgstr "Az utolsó hűtési lépés sebessége" msgid "Cooling moves are gradually accelerating towards this speed." -msgstr "" +msgstr "A hűtési lépések fokozatosan felgyorsulnak erre a sebességre." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"Az az idő, amíg a nyomtató vezérlő szoftvere (vagy a Multi Material Unit " +"2.0) új filamentet tölt be a szerszámcsere során (a T kód végrehajtásakor). " +"Ezt az időt a G-kód időbecslő hozzáadja a teljes nyomtatási időhöz." msgid "Ramming parameters" -msgstr "" +msgstr "Tömörítési paraméterek" msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." msgstr "" +"Ez a karakterlánc a TömörítésPárbeszéd ablakban szerkeszthető, és a " +"tömörítéssel kapcsolatos paramétereket tartalmaz." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"Az az idő, amíg a nyomtató vezérlő szoftvere (vagy a Multi Material Unit " +"2.0) az előző Filamenet kiüríti a szerszámcsere során (a T kód " +"végrehajtásakor). Ezt az időt a G-kód időbecslő hozzáadja a teljes " +"nyomtatási időhöz." msgid "Enable ramming for multitool setups" msgstr "" @@ -9821,13 +10675,16 @@ msgstr "" "van használva." msgid "Softening temperature" -msgstr "" +msgstr "Lágyulási hőmérséklet" msgid "" "The material softens at this temperature, so when the bed temperature is " "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than this, it's highly recommended to open the front " +"door and/or remove the upper glass to avoid clogs." msgid "Price" msgstr "Költség" @@ -9839,16 +10696,16 @@ msgid "money/kg" msgstr "pénz/kg" msgid "Vendor" -msgstr "" +msgstr "Gyártó" msgid "Vendor of filament. For show only" -msgstr "" +msgstr "Filamentgyártó." msgid "(Undefined)" msgstr "(Undefined)" -msgid "Infill direction" -msgstr "Kitöltés iránya" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -9857,6 +10714,20 @@ msgstr "" "A ritkás kitöltési minta szöge, amely a vonal kezdő- vagy fő irányát " "szabályozza" +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Kitöltés sűrűsége" @@ -9902,6 +10773,9 @@ msgstr "Támasz kocka" msgid "Lightning" msgstr "Világítás" +msgid "Cross Hatch" +msgstr "Cross Hatch" + msgid "Sparse infill anchor length" msgstr "" @@ -9925,7 +10799,7 @@ msgid "1000 (unlimited)" msgstr "1000 (unlimited)" msgid "Maximum length of the infill anchor" -msgstr "" +msgstr "A kitöltőhorgony maximális hossza" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " @@ -9970,12 +10844,14 @@ msgid "" msgstr "" msgid "mm/s² or %" -msgstr "" +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 "" +"Gyorsulás a ritkás kitöltéseknél. Ha az érték százalékban van megadva (pl. " +"100%), akkor az alapértelmezett gyorsulás alapján kerül kiszámításra." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -9991,13 +10867,14 @@ msgstr "" "tárgyasztalhoz való tapadást" msgid "Enable accel_to_decel" -msgstr "" +msgstr "accel_to_decel engedélyezése" msgid "Klipper's max_accel_to_decel will be adjusted automatically" msgstr "" +"A Klipper max_accel_to_decel értékét a rendszer automatikusan beállítja" msgid "accel_to_decel" -msgstr "" +msgstr "accel_to_decel" #, c-format, boost-format msgid "" @@ -10005,10 +10882,10 @@ msgid "" msgstr "" msgid "Jerk of outer walls" -msgstr "" +msgstr "Jerk a külső falaknál" msgid "Jerk of inner walls" -msgstr "" +msgstr "Jerk a belső falaknál" msgid "Jerk for top surface" msgstr "" @@ -10077,6 +10954,9 @@ msgid "" "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "" @@ -10129,7 +11009,7 @@ msgid "Whether to apply fuzzy skin on the first layer" msgstr "" msgid "Filter out tiny gaps" -msgstr "" +msgstr "Apró rések szűrése" msgid "Layers and Perimeters" msgstr "Rétegek és peremek" @@ -10144,15 +11024,31 @@ msgstr "" "A hézagkitöltés nyomtatási sebessége. A rés általában szabálytalan " "vonalszélességű, és lassabban kell nyomtatni" +msgid "Precise Z height" +msgstr "Precise Z height" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." + msgid "Arc fitting" msgstr "Íves illesztés" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Engedélyezd ezt az opciót, hogy olyan G-kódot kapj, amiben G2 és G3 mozgások " -"vannak" msgid "Add line number" msgstr "Vonalszám hozzáadása" @@ -10208,10 +11104,10 @@ msgid "HRC" msgstr "HRC" msgid "Printer structure" -msgstr "" +msgstr "Nyomtató szerkezete" msgid "The physical arrangement and components of a printing device" -msgstr "" +msgstr "A nyomtató fizikai felépítése és alkatrészei" msgid "CoreXY" msgstr "" @@ -10226,10 +11122,12 @@ msgid "Delta" msgstr "" msgid "Best object position" -msgstr "" +msgstr "Legjobb tárgypozíció" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "" +"A legjobb automatikus elrendezés tartománya [0,1] a tárgyasztal alakja " +"szerint." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " @@ -10275,7 +11173,7 @@ msgid "money/h" msgstr "" msgid "Support control chamber temperature" -msgstr "" +msgstr "Kamrahőmérséklet-szabályozás engedélyezése" msgid "" "This option is enabled if machine support controlling chamber temperature\n" @@ -10283,7 +11181,7 @@ msgid "" msgstr "" msgid "Support air filtration" -msgstr "" +msgstr "Légszűrés támogatása" msgid "" "Enable this if printer support air filtration\n" @@ -10306,7 +11204,7 @@ msgid "Enable this option if you want to use multiple bed types" msgstr "" msgid "Label objects" -msgstr "" +msgstr "Objektumok címkézése" msgid "" "Enable this to add comments into the G-Code labeling print moves with what " @@ -10316,19 +11214,23 @@ msgid "" msgstr "" msgid "Exclude objects" -msgstr "" +msgstr "Tárgyak kizárása" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" msgid "Verbose G-code" -msgstr "" +msgstr "Bővebb G-kód" 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 "" +"Ha engedélyezi ezt a funkciót, akkor egy kommentezett G-kód fájlt kap, " +"amelynek minden egyes sorát egy leíró szöveg magyarázza. Ha SD-kártyáról " +"nyomtat, a fájl nagyobb mérete miatt a nyomtató vezérlő szoftvere " +"lelassulhat." msgid "Infill combination" msgstr "Kitöltés összevonása" @@ -10352,37 +11254,55 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Kitöltés/fal átfedés" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"Ez lehetővé teszi, hogy a kitöltési terület kissé nagyobb legyen, nagyobb " -"átfedést biztosítva a falakkal a jobb kapcsolódás érdekében. A százalékos " -"érték a ritkás kitöltés vonalszélességéhez viszonyított érték." msgid "Speed of internal sparse infill" msgstr "A belső ritkás kitöltés sebessége" msgid "Interface shells" -msgstr "" +msgstr "Interface shells" 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 "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Szegmentált régió maximális szélessége" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" +"Szegmentált régió maximális szélessége. A 0 érték letiltja ezt a funkciót." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Szegmentált régió összekapcsolódási mélysége" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" +"Szegmentált régió összekapcsolódási mélysége. A 0 érték letiltja ezt a " +"funkciót." msgid "Ironing Type" msgstr "Vasalás típusa" @@ -10647,7 +11567,7 @@ msgid "" msgstr "" msgid "mm³/s²" -msgstr "" +msgstr "mm³/s²" msgid "Smoothing segment length" msgstr "" @@ -10701,12 +11621,14 @@ msgid "Diameter of nozzle" msgstr "Fúvóka átmérője" msgid "Configuration notes" -msgstr "" +msgstr "Konfiguráció megjegyzések" msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." msgstr "" +"Itt elhelyezheti személyes jegyzeteit. Ez a szöveg hozzá lesz fűzve a G-kód " +"fejlécének megjegyzéseihez." msgid "Host Type" msgstr "Host típusa" @@ -10725,36 +11647,43 @@ msgid "Volume of nozzle between the cutter and the end of nozzle" msgstr "A fúvóka térfogata a filamentvágó és a fúvóka vége között" msgid "Cooling tube position" -msgstr "" +msgstr "Hűtőcső helyzete" msgid "Distance of the center-point of the cooling tube from the extruder tip." -msgstr "" +msgstr "A hűtőcső középpontjának távolsága az extruder csúcsától." msgid "Cooling tube length" -msgstr "" +msgstr "Hűtőcső hossza" msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" +"A hűtőcső hossza, ami limitálja a hűtéshez használható helyet annak a " +"belsejében." msgid "High extruder current on filament swap" -msgstr "" +msgstr "Magas extruderáram a szálcserénél" msgid "" "It may be beneficial to increase the extruder motor current during the " "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" +"Előnyös lehet az extrudermotor áramának növelése a filamentcsere során, hogy " +"elérhetővé tegye a tömörítéshez szükséges magas előtolási sebességet és az " +"ellenállás leküzdését deformált hegyű filament betöltésekor." msgid "Filament parking position" -msgstr "" +msgstr "Filament parkolási pozíció" msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" +"Az extruder hegyének távolsága attól a helyzettől, ahol a szál betöltetlenül " +"parkol. Ennek meg kell egyeznie a nyomtató firmware-ében megadott értékkel." msgid "Extra loading distance" -msgstr "" +msgstr "Extra betöltési hossz" msgid "" "When set to zero, the distance the filament is moved from parking position " @@ -10762,6 +11691,10 @@ msgid "" "positive, it is loaded further, if negative, the loading move is shorter " "than unloading." msgstr "" +"Ha nullára van állítva, akkor a filamentet a betöltés során a " +"parkolóhelyzetből pontosan ugyanannyira kerül előtolásra, mint amennyire a " +"kiürítéskor vissza lett húzva. Ha pozitív, akkor tovább töltődik, ha " +"negatív, akkor a betöltési mozgás rövidebb, mint a kiürítési." msgid "Start end points" msgstr "Kezdő- és végpontok" @@ -10861,10 +11794,10 @@ msgid "" msgstr "" msgid "Printer notes" -msgstr "" +msgstr "Printer notes" msgid "You can put your notes regarding the printer here." -msgstr "" +msgstr "You can put your notes regarding the printer here." msgid "Raft contact Z distance" msgstr "Tutaj érintkezés Z távolság" @@ -10947,6 +11880,30 @@ msgstr "" "hosszabb mozgás során történő szivárgást. A visszahúzás kikapcsolásához " "állítsd nullára" +msgid "Long retraction when cut(experimental)" +msgstr "Long retraction when cut (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." + +msgid "Retraction distance when cut" +msgstr "Retraction distance when cut" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimental feature. Retraction length before cutting off during filament " +"change" + msgid "Z hop when retract" msgstr "Z-tengely emelés visszahúzáskor" @@ -10961,20 +11918,24 @@ msgstr "" "körkörös mozgás megelőzheti a szálazást." msgid "Z hop lower boundary" -msgstr "" +msgstr "Z-emelés alsó határa" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"A Z-tengely emelése csak akkor történik meg, ha az emelés mértéke nagyobb " +"ennél az értéknél, de kisebb a „Z-emelés felső határánál“" msgid "Z hop upper boundary" -msgstr "" +msgstr "Z-emelés felső határa" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"Ha ez az érték pozitív, a Z-emelés csak akkor történik meg, ha az emelés " +"mértéke a „Z-emelés alsó határánál“ nagyobb, de kisebb ennél az értéknél" msgid "Z hop type" msgstr "" @@ -10986,7 +11947,7 @@ msgid "Spiral" msgstr "Spirál" msgid "Only lift Z above" -msgstr "" +msgstr "Z emelés csak efelett" msgid "" "If you set this to a positive value, Z lift will only take place above the " @@ -10994,7 +11955,7 @@ msgid "" msgstr "" msgid "Only lift Z below" -msgstr "" +msgstr "Z emelés csak ezalatt" msgid "" "If you set this to a positive value, Z lift will only take place below the " @@ -11022,17 +11983,22 @@ msgid "Top and Bottom" msgstr "" msgid "Extra length on restart" -msgstr "" +msgstr "Extra hossz újraindításkor" 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 "" +"Amikor a visszahúzás kompenzálásra kerül utazási mozgás után, az extruder " +"ezt a további szálmennyiséget nyomja előre. Erre a beállításra ritkán van " +"szükség." msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" +"Amikor a visszahúzás kompenzálásra kerül szerszámváltás után, az extruder " +"ezt a további szálmennyiséget nyomja előre." msgid "Retraction Speed" msgstr "Visszahúzás sebessége" @@ -11051,7 +12017,7 @@ msgstr "" "sebességet jelent a visszahúzással" msgid "Use firmware retraction" -msgstr "" +msgstr "Firmware-ben megadott visszahúzás használata" msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " @@ -11095,7 +12061,7 @@ msgid "" msgstr "" msgid "Seam gap" -msgstr "" +msgstr "Varrat hézag" msgid "" "In order to reduce the visibility of the seam in a closed loop extrusion, " @@ -11109,17 +12075,20 @@ msgstr "" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" +"Use scarf joint to minimize seam visibility and increase seam strength." msgid "Conditional scarf joint" -msgstr "" +msgstr "Conditional scarf joint" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." msgid "Conditional angle threshold" -msgstr "" +msgstr "Conditional angle threshold" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -11162,39 +12131,44 @@ msgid "This factor affects the amount of material for scarf joints." msgstr "" msgid "Scarf start height" -msgstr "" +msgstr "Scarf start height" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"Start height of the scarf.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." msgid "Scarf around entire wall" -msgstr "" +msgstr "Scarf around entire wall" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "The scarf extends to the entire length of the wall." msgid "Scarf length" -msgstr "" +msgstr "Scarf length" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." msgid "Scarf steps" -msgstr "" +msgstr "Scarf steps" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "Minimum number of segments of each scarf." msgid "Scarf joint for inner walls" -msgstr "" +msgstr "Scarf joint for inner walls" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "Use scarf joint for inner walls as well." msgid "Role base wipe speed" msgstr "" @@ -11229,7 +12203,7 @@ msgid "" msgstr "" msgid "Wipe speed" -msgstr "" +msgstr "Törlés sebessége" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -11237,6 +12211,10 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" +"A törlés sebességét az itt megadott beállítás határozza meg. Ha az érték " +"százalékban van megadva (pl. 80%), akkor azt a rendszer a mozgási " +"sebességbeállítás alapján számítja ki. Ennek a paraméternek az " +"alapértelmezett értéke 80%" msgid "Skirt distance" msgstr "Szoknya távolsága" @@ -11250,6 +12228,29 @@ msgstr "Skirt height" msgid "How many layers of skirt. Usually only one layer" msgstr "Number of skirt layers: usually only one" +msgid "Draft shield" +msgstr "Huzatvédő" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "Korlátozott" + +msgid "Enabled" +msgstr "Engedélyezve" + msgid "Skirt loops" msgstr "Szoknya hurkok száma" @@ -11268,6 +12269,17 @@ msgstr "" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -11296,9 +12308,6 @@ msgstr "" "A belső szilárd kitöltés sebessége, de az az érték nem vonatkozik a felső és " "alsó felületre" -msgid "Spiral vase" -msgstr "Spirál (váza)" - 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 " @@ -11309,20 +12318,24 @@ msgstr "" "varratok" msgid "Smooth Spiral" -msgstr "" +msgstr "Smooth Spiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" msgid "Max XY Smoothing" -msgstr "" +msgstr "Max XY Smoothing" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Maximum distance to move points in XY to try to achieve a smooth spiral. If " +"expressed as a %, it will be computed over nozzle diameter" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -11359,7 +12372,7 @@ msgid "Start G-code when start the printing of this filament" msgstr "Kezdő G-kód a filament nyomtatásának megkezdésekor" msgid "Single Extruder Multi Material" -msgstr "" +msgstr "Egyetlen Extruder Többféle Anyag" msgid "Use single nozzle to print multi filament" msgstr "" @@ -11393,14 +12406,20 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" +"Ha engedélyezve van, akkor törlőtorony nem kerül kinyomtatásra " +"szerszámváltás nélküli rétegeken. A szerszámcserével rendelkező rétegeken az " +"extruder az aktuális magasság alá süllyed a törlőtorony nyomtatásához. A " +"felhasználó felelős azért, hogy ez ne okozzon ütközést a nyomtatás során." msgid "Prime all printing extruders" -msgstr "" +msgstr "Az összes nyomtató extruder előkészítése" msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." msgstr "" +"Ha engedélyezve van, akkor a nyomtatás kezdetén az összes nyomtató extruder " +"előkészítésre kerül a tárgyasztal elülső szélénél." msgid "Slice gap closing radius" msgstr "Szeletelési hézag lezárási sugara" @@ -11435,7 +12454,7 @@ msgid "Close holes" msgstr "Hézagok lezárása" msgid "Z offset" -msgstr "" +msgstr "Z ofszet" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -11443,6 +12462,11 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" +"Ez az érték hozzáadódik (vagy kivonásra kerül) az összes Z koordinátához a " +"kimeneti G-kódban. A Z tengely végállás pozíciójának kompenzálására szolgál: " +"például ha a végállás nullája valójában 0,3 mm-re hagyja a fúvókát a " +"tárgyasztal felett, akkor állítsa ezt az értéke -0,3-ra (vagy javítsa meg a " +"végállást)." msgid "Enable support" msgstr "Támasz engedélyezése" @@ -11501,10 +12525,12 @@ msgstr "" "vagy egyéb kiálló részek." msgid "Remove small overhangs" -msgstr "" +msgstr "Kis túlnyúlások eltávolítása" msgid "Remove small overhangs that possibly need no supports." msgstr "" +"Eltávolítja a kis túlnyúlásokat, amelyek esetleg nem igényelnek " +"alátámasztást." msgid "Top Z distance" msgstr "Z távolság" @@ -11532,11 +12558,13 @@ msgstr "" "felhasználásra." msgid "Avoid interface filament for base" -msgstr "" +msgstr "Kerülje a támaszanyag használatát az alaphoz" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Ha lehetséges, kerüli a dedikált támaszanyag (filament) használatát a " +"támaszalap nyomtatásához." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -11572,10 +12600,10 @@ msgid "Bottom interface layers" msgstr "Alsó érintkező rétegek" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Alsó érintkezőrétegek száma" msgid "Same as top" -msgstr "" +msgstr "Ugyanaz, mint a felső" msgid "Top interface spacing" msgstr "Felső érintkező felület térköze" @@ -11784,10 +12812,10 @@ msgid "" msgstr "" msgid "Support wall loops" -msgstr "" +msgstr "Támaszfalak száma" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "A támasz körüli falak száma" msgid "Tree support with infill" msgstr "Fa támasz kitöltéssel" @@ -11809,7 +12837,7 @@ msgid "" msgstr "" msgid "Chamber temperature" -msgstr "" +msgstr "Kamra hőmérséklete" msgid "" "Higher chamber temperature can help suppress or reduce warping and " @@ -11820,6 +12848,12 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on. At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials, the actual chamber temperature should not " +"be high to avoid clogs, so 0 (turned off) is highly recommended." msgid "Nozzle temperature for layers after the initial one" msgstr "Fúvóka hőmérséklete az első réteg után" @@ -11945,10 +12979,10 @@ msgid "Width of prime tower" msgstr "Ez a törlő torony szélessége." msgid "Wipe tower rotation angle" -msgstr "" +msgstr "Törlőtorony forgatási szöge" msgid "Wipe tower rotation angle with respect to x-axis." -msgstr "" +msgstr "Törlőtorony forgatási szöge az x-tengelyhez képest." msgid "Stabilization cone apex angle" msgstr "" @@ -11964,6 +12998,31 @@ msgstr "" msgid "Spacing of purge lines on the wipe tower." msgstr "" +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "" @@ -12012,10 +13071,10 @@ msgstr "" "akkor működik, ha a törlőtorony engedélyezve van." msgid "Maximal bridging distance" -msgstr "" +msgstr "Maximális áthidalási távolság" msgid "Maximal distance between supports on sparse infill sections." -msgstr "" +msgstr "A támaszok közötti maximális távolság a ritkás kitöltésű részeken." msgid "X-Y hole compensation" msgstr "X-Y furatkompenzáció" @@ -12074,7 +13133,7 @@ msgid "Rotate the polyhole every layer." msgstr "" msgid "G-code thumbnails" -msgstr "" +msgstr "G-kód miniatűrök" msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " @@ -12090,7 +13149,7 @@ msgid "" msgstr "" msgid "Use relative E distances" -msgstr "" +msgstr "Relatív E távolságok használata" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " @@ -12261,7 +13320,7 @@ msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "Do not run any validity checks, such as G-code path conflicts check." msgid "Ensure on bed" -msgstr "" +msgstr "Ágyra igazítás" msgid "" "Lift the object above the bed when it is partially below. Disabled by default" @@ -12274,22 +13333,25 @@ msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "" msgid "Rotation angle around the Z axis in degrees." -msgstr "" +msgstr "Az Z tengely körüli forgatási szög fokban." msgid "Rotate around Y" -msgstr "" +msgstr "Forgatás Y körül" msgid "Rotation angle around the Y axis in degrees." -msgstr "" +msgstr "Az Y tengely körüli forgatási szög fokban." msgid "Data directory" -msgstr "" +msgstr "Adatkönyvtár" msgid "" "Load and store settings at the given directory. This is useful for " "maintaining different profiles or including configurations from a network " "storage." msgstr "" +"A beállítások betöltése és tárolása a megadott könyvtárban. Ez hasznos a " +"különböző profilok karbantartásához vagy a hálózaton tárolt konfigurációk " +"beviteléhez." msgid "Load custom gcode" msgstr "" @@ -12645,6 +13707,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: failed to parse" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12658,73 +13723,69 @@ 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 "Flow Rate Calibration" -msgstr "" +msgstr "Anyagáramlás kalibrálása" msgid "Max Volumetric Speed Calibration" -msgstr "" +msgstr "Max. volumetrikus sebesség kalibrálása" msgid "Manage Result" -msgstr "" +msgstr "Eredmények kezelése" msgid "Manual Calibration" -msgstr "" +msgstr "Kézi kalibrálás" msgid "Result can be read by human eyes." -msgstr "" +msgstr "Az eredmények könnyen átláthatóak és megérthetőek." msgid "Auto-Calibration" -msgstr "" +msgstr "Auto-Calibration" msgid "We would use Lidar to read the calibration result" -msgstr "" +msgstr "A Lidar segítségével olvassuk le a kalibrálás eredményét" msgid "Prev" -msgstr "" +msgstr "Előző" msgid "Recalibration" -msgstr "" +msgstr "Újrakalibrálás" msgid "Calibrate" -msgstr "" +msgstr "Kalibrálás" msgid "Finish" msgstr "Kész" msgid "How to use calibration result?" -msgstr "" +msgstr "Hogyan használjam a kalibrálási eredményeket?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" -msgstr "" +msgstr "Az anyag beállításaiban módosíthatod az áramlásdinamikai értékeket" msgid "" "The current firmware version of the printer does not support calibration.\n" "Please upgrade the printer firmware." msgstr "" +"A nyomtató jelenlegi firmware-verziója nem támogatja a kalibrálást.\n" +"Kérjük, frissítsd a nyomtató firmware-jét." msgid "Calibration not supported" -msgstr "" +msgstr "Kalibrálás nem támogatott" msgid "Error desc" -msgstr "" +msgstr "Hibaleírás" msgid "Extra info" -msgstr "" +msgstr "Extra infó" msgid "Flow Dynamics" -msgstr "" +msgstr "Áramlásdinamika" msgid "Flow Rate" -msgstr "" +msgstr "Anyagáramlás" 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 "" +msgstr "Max. volumetrikus sebesség" #, c-format, boost-format msgid "" @@ -12734,62 +13795,102 @@ msgid "" "End value: > Start value\n" "Value step: >= %.3f)" msgstr "" +"Kérjük, érvényes értékeket adj meg:\n" +"Kezdő érték: >= %.1f\n" +"Végérték: <= %.1f\n" +"Végérték: > Kezdő érték\n" +"Lépésköz: >=) %.3f" msgid "The name cannot be empty." -msgstr "" +msgstr "A név nem lehet üres." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "A kiválasztott beállítás: %s nem található." msgid "The name cannot be the same as the system preset name." -msgstr "" +msgstr "A név nem lehet azonos egy rendszerbeállítás nevével." msgid "The name is the same as another existing preset name" -msgstr "" +msgstr "A név megegyezik egy másik meglévő beállítás nevével" msgid "create new preset failed." -msgstr "" +msgstr "Új beállítás létrehozása sikertelen." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" +"Are you sure you want to cancel the current calibration and return to the " +"home page?" msgid "No Printer Connected!" -msgstr "" +msgstr "Nincs nyomtató csatlakoztatva!" msgid "Printer is not connected yet." -msgstr "" +msgstr "Még nincs csatlakoztatva nyomtató." msgid "Please select filament to calibrate." -msgstr "" +msgstr "Kérjük, válaszd ki a kalibrálandó filamenteket." msgid "The input value size must be 3." +msgstr "A bemeneti értéknek 3-nak kell lennie." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgid "Connecting to printer..." -msgstr "" +msgstr "Csatlakozás a nyomtatóhoz..." msgid "The failed test result has been dropped." -msgstr "" +msgstr "A sikertelen teszteredményt eltávolítottuk." msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "Az áramlásdinamikai kalibráció eredményeit elmentette a nyomtató" + +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" msgstr "" +"Már létezik egy ugyanilyen nevű, korábbi kalibrálási eredmény: %s. Csak egy " +"azonos nevű eredményt lehet elmenteni. Biztos, hogy felül akarod írni a " +"korábbi eredményeket?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." msgid "Internal Error" -msgstr "" +msgstr "Belső hiba" msgid "Please select at least one filament for calibration" -msgstr "" +msgstr "Kérjük, válassz ki legalább egy filamentet a kalibráláshoz." msgid "Flow rate calibration result has been saved to preset" -msgstr "" +msgstr "Az anyagáramlás kalibrálásának eredményeit elmentettük a beállításokba" msgid "Max volumetric speed calibration result has been saved to preset" msgstr "" +"A maximális volumetrikus sebesség kalibrálásának eredményét elmentettük a " +"beállításokban" msgid "When do you need Flow Dynamics Calibration" -msgstr "" +msgstr "Mikor van szükség az áramlásdinamika kalibrálására?" msgid "" "We now have added the auto-calibration for different filaments, which is " @@ -12801,9 +13902,17 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" +"Mostantól elérhető a különböző filamentek automatikus kalibrálása, amely " +"teljesen automatizált, és az eredményt a nyomtató elmenti. A kalibrálást " +"csak a következő esetekben kell elvégezned:\n" +"1. Ha új, különböző márkájú filamenteket töltesz be, vagy a filament " +"nedves.\n" +"2. Ha a fúvóka elhasználódott vagy kicserélted egy újra.\n" +"3. Ha a maximális volumetrikus sebesség vagy a nyomtatási hőmérséklet " +"megváltozott a filamentbeállításokban." msgid "About this calibration" -msgstr "" +msgstr "Információ a kalibrálásról" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -12815,10 +13924,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12826,7 +13935,7 @@ msgid "" msgstr "" msgid "When to use Flow Rate Calibration" -msgstr "" +msgstr "Mikor van szükség az anyagáramlás kalibrálására?" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -12839,12 +13948,25 @@ msgid "" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." msgstr "" +"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." 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 "" +"Ezenkívül az anyagáramlás kalibrálása létfontosságú az olyan habzó anyagok " +"esetében, mint az RC repülőkben használt LW-PLA. Ezek az anyagok " +"melegítéskor nagymértékben tágulnak, és a kalibrálás hasznos referencia-" +"anyagáramlást biztosít." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -12854,6 +13976,12 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" +"Az anyagáramlás kalibrálása a várt és a tényleges extrudált mennyiségek " +"arányát méri. Az alapértelmezett érték jól működik a Bambu Lab nyomtatókkal " +"és gyári filamentekkel, mivel azokat előre kalibráltuk és finomhangoltuk. " +"Egy hagyományos filament esetében általában nem kell anyagáramlás " +"kalibrálását elvégezni, kivéve, ha más kalibrálások után még mindig látod a " +"felsorolt hibákat. További részletekért kérjük, olvasd el a wiki cikkünket." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -12873,227 +14001,262 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" +"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 performing it." msgid "When you need Max Volumetric Speed Calibration" -msgstr "" +msgstr "Mikor van szükség a max. volumetrikus sebesség kalibrálására" msgid "Over-extrusion or under extrusion" -msgstr "" +msgstr "Túlextrudálás vagy alulextrudálás" msgid "Max Volumetric Speed calibration is recommended when you print with:" msgstr "" +"A maximális volumetrikus sebesség kalibrálása ajánlott, ha a következővel " +"nyomtatsz:" msgid "material with significant thermal shrinkage/expansion, such as..." msgstr "" +"jelentős termikus zsugorodással/tágulással rendelkező anyagok, mint pl." msgid "materials with inaccurate filament diameter" -msgstr "" +msgstr "pontatlan átmérőjű anyagok" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "" +msgstr "Megtaláltuk a legjobb áramlásdinamikai kalibrációs tényezőt" msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." msgstr "" +"A kalibrálás egy része nem sikerült! Segíthet, ha megtisztítod a tálcát és " +"újrapróbálod. A sikertelen teszt eredményét töröljük." msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" msgstr "" +"* Javasoljuk, hogy a névhez add hozzá a márkát, az anyagot, a típust, " +"illetve a páratartalmat is" msgid "Failed" msgstr "Sikertelen" +msgid "Please enter the name you want to save to printer." +msgstr "Kérjük, add meg a nevet." + +msgid "The name cannot exceed 40 characters." +msgstr "A név nem haladhatja meg a 40 karaktert." + 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?" +"want to override the other results?" msgstr "" +"Az azonos nevű eredmények közül csak az egyik kerül elmentésre. Biztos, hogy " +"felül akarod írni a többi eredményt?" msgid "Please find the best line on your plate" -msgstr "" +msgstr "Keresd meg a legjobb vonalat a tálcán" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Keresd meg a tökéletesen extrudált sarkot" msgid "Input Value" -msgstr "" +msgstr "Bemeneti érték" msgid "Save to Filament Preset" -msgstr "" +msgstr "Mentés a filamentbeállításokba" msgid "Preset" -msgstr "" +msgstr "Beállítás" msgid "Record Factor" -msgstr "" +msgstr "Record Factor" msgid "We found the best flow ratio for you" -msgstr "" +msgstr "Megtaláltuk a legjobb anyagáramlást" msgid "Flow Ratio" -msgstr "" +msgstr "Anyagáramlás" msgid "Please input a valid value (0.0 < flow ratio < 2.0)" -msgstr "" +msgstr "Kérjük, adj meg egy érvényes értéket (0.0 < anyagáramlás < 2.0)." msgid "Please enter the name of the preset you want to save." -msgstr "" +msgstr "Kérjük, add meg az elmenteni kívánt beállítás nevét." msgid "Calibration1" -msgstr "" +msgstr "Kalibrálás 1" msgid "Calibration2" -msgstr "" +msgstr "Kalibrálás 2" msgid "Please find the best object on your plate" -msgstr "" +msgstr "Keresd meg a legjobb tárgyat a tálcán" msgid "Fill in the value above the block with smoothest top surface" -msgstr "" +msgstr "Töltsd ki az értéket a legsimább felső felületű blokkból" msgid "Skip Calibration2" -msgstr "" +msgstr "Kalibrálás 2 kihagyása" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "" +msgstr "anyagáramlás: %s " msgid "Please choose a block with smoothest top surface" -msgstr "" +msgstr "Kérjük, válaszd a legsimább felülettel rendelkező blokkot" msgid "Please choose a block with smoothest top surface." -msgstr "" +msgstr "Kérjük, válaszd ki a legsimább felülettel rendelkező blokkot." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" msgstr "" +"Kérjük, adj meg egy érvényes értéket (0 <= Max. volumetrikus sebesség <= 60)" msgid "Calibration Type" -msgstr "" +msgstr "Kalibrálás típusa" msgid "Complete Calibration" -msgstr "" +msgstr "Teljes kalibrálás" msgid "Fine Calibration based on flow ratio" -msgstr "" +msgstr "Finom kalibrálás az anyagáramlás alapján" msgid "Title" -msgstr "" +msgstr "Cím" msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." msgstr "" +"Egy tesztmodell kerül kinyomtatásra. Kérjük, tisztítsd meg a tálcát, és " +"helyezd vissza az asztalra a kalibrálás előtt." msgid "Printing Parameters" -msgstr "" - -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" +msgstr "Nyomtatási paraméterek" msgid "Plate Type" msgstr "Plate Type" msgid "filament position" -msgstr "" +msgstr "filamentpozíció" msgid "External Spool" -msgstr "" +msgstr "Külső tekercs" msgid "Filament For Calibration" -msgstr "" +msgstr "Filament a kalibráláshoz" 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 "" +"Tippek a kalibrációs anyaghoz:\n" +"- Anyagok megegyező asztalhőmérséklettel\n" +"- Különböző márkájú és típusú filamentek (Márka = Bambu, Típus = Basic, " +"Matte stb.)" msgid "Pattern" -msgstr "" +msgstr "Mintázat" msgid "Method" -msgstr "" +msgstr "Módszer" #, c-format, boost-format msgid "%s is not compatible with %s" -msgstr "" +msgstr "%s nem kompatibilis ezzel: %s" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -msgstr "" +msgstr "Nem használhatsz TPU-t az áramlásdinamika kalibrálásához." msgid "Connecting to printer" -msgstr "" +msgstr "Csatlakozás a nyomtatóhoz" msgid "From k Value" -msgstr "" +msgstr "K értéktől" msgid "To k Value" -msgstr "" +msgstr "K értékig" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" -msgstr "" +msgstr "A fúvóka átmérője a nyomtató beállításaiból került szinkronizálásra" msgid "From Volumetric Speed" -msgstr "" +msgstr "Ettől a volumetrikus sebességtől" msgid "To Volumetric Speed" -msgstr "" +msgstr "Eddig a volumetrikus sebességig" msgid "Flow Dynamics Calibration Result" -msgstr "" +msgstr "Áramlásdinamikai kalibrációs eredmény" + +msgid "New" +msgstr "New" msgid "No History Result" -msgstr "" +msgstr "Nincs előzmény" msgid "Success to get history result" -msgstr "" +msgstr "Előzmények sikeresen lekérdezve" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "" +msgstr "Az előző anyagáramlás-dinamikai kalibrációs rekordok frissítése" msgid "Action" -msgstr "" +msgstr "Művelet" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." msgid "Edit Flow Dynamics Calibration" -msgstr "" +msgstr "Áramlásdinamikai kalibráció szerkesztése" + +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." msgid "Network lookup" -msgstr "" +msgstr "Hálózati keresés" msgid "Address" -msgstr "" +msgstr "Address" msgid "Hostname" -msgstr "" +msgstr "Host név:" msgid "Service name" -msgstr "" +msgstr "Szolgáltatás neve" msgid "OctoPrint version" -msgstr "" +msgstr "OctoPrint verzió" msgid "Searching for devices" -msgstr "" +msgstr "Eszközök keresése" msgid "Finished" msgstr "Kész" @@ -13108,37 +14271,37 @@ msgid "" msgstr "" msgid "PA Calibration" -msgstr "" +msgstr "PA kalibrálás" msgid "DDE" msgstr "" msgid "Bowden" -msgstr "" +msgstr "Bowden" msgid "Extruder type" msgstr "" msgid "PA Tower" -msgstr "" +msgstr "PA-torony" msgid "PA Line" -msgstr "" +msgstr "PA vonal" msgid "PA Pattern" -msgstr "" +msgstr "PA-minta" msgid "Start PA: " -msgstr "" +msgstr "Kezdő PA: " msgid "End PA: " -msgstr "" +msgstr "Befejező PA:" msgid "PA step: " -msgstr "" +msgstr "PA lépcső: " msgid "Print numbers" -msgstr "" +msgstr "Számok nyomtatása" msgid "" "Please input valid values:\n" @@ -13146,39 +14309,46 @@ msgid "" "End PA: > Start PA\n" "PA step: >= 0.001)" msgstr "" +"Kérjük, adj meg érvényes értékeket:\n" +"Kezdő PA: >= 0.0\n" +"Befejező PA: > Start PA\n" +"PA lépcső: >= 0.001)" msgid "Temperature calibration" -msgstr "" +msgstr "Hőmérséklet kalibrálás" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" +msgstr "PETG" + +msgid "PCTG" msgstr "" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" -msgstr "" +msgstr "Filament típusa" msgid "Start temp: " -msgstr "" +msgstr "Kezdőhőmérséklet: " msgid "End temp: " -msgstr "" +msgstr "Befejező hőmérséklet: " msgid "Temp step: " -msgstr "" +msgstr "Hőmérséklet lépcső: " msgid "" "Please input valid values:\n" @@ -13188,16 +14358,16 @@ msgid "" msgstr "" msgid "Max volumetric speed test" -msgstr "" +msgstr "Maximális volumetrikus sebesség teszt" msgid "Start volumetric speed: " -msgstr "" +msgstr "Kezdő volumetrikus sebesség: " msgid "End volumetric speed: " -msgstr "" +msgstr "Befejező volumetrikus sebesség: " msgid "step: " -msgstr "" +msgstr "lépcső: " msgid "" "Please input valid values:\n" @@ -13207,13 +14377,13 @@ msgid "" msgstr "" msgid "VFA test" -msgstr "" +msgstr "VFA teszt" msgid "Start speed: " -msgstr "" +msgstr "Kezdősebesség: " msgid "End speed: " -msgstr "" +msgstr "Befejező sebesség: " msgid "" "Please input valid values:\n" @@ -13223,129 +14393,132 @@ msgid "" msgstr "" msgid "Start retraction length: " -msgstr "" +msgstr "Kezdő visszahúzás hossza: " msgid "End retraction length: " -msgstr "" +msgstr "Befejező visszahúzási hossz:" msgid "mm/mm" -msgstr "" +msgstr "mm/mm" msgid "Send G-Code to printer host" -msgstr "" +msgstr "G-kód küldése a nyomtató gazdagépének" msgid "Upload to Printer Host with the following filename:" -msgstr "" +msgstr "Feltöltés a nyomtatóra a következő fájlnévvel:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "" +msgstr "Ha szükséges, használj perjeleket ( / ) könyvtárelválasztóként." msgid "Upload to storage" msgstr "" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "" +msgstr "A feltöltendő fájlnév nem végződik „%s”-ra. Folytatod?" msgid "Upload" -msgstr "" +msgstr "Feltöltés" msgid "Print host upload queue" -msgstr "" +msgstr "Feltöltési sor nyomtatása" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" -msgstr "" +msgstr "Folyamat" msgid "Host" -msgstr "" +msgstr "Kiszolgáló" msgctxt "OfFile" msgid "Size" -msgstr "" +msgstr "Méret" msgid "Filename" -msgstr "" +msgstr "Fájlnév" msgid "Cancel selected" -msgstr "" +msgstr "Kiválasztott törlése" msgid "Show error message" -msgstr "" +msgstr "Hibaüzenet megjelenítése" msgid "Enqueued" -msgstr "" +msgstr "Sorban áll" msgid "Uploading" msgstr "Feltöltés" msgid "Cancelling" -msgstr "" +msgstr "Megszakítás" msgid "Error uploading to print host" msgstr "" msgid "Unable to perform boolean operation on selected parts" -msgstr "" +msgstr "Nem lehet logikai műveletet végrehajtani a kiválasztott tárgyakon" msgid "Mesh Boolean" -msgstr "" +msgstr "Mesh Boolean" msgid "Union" -msgstr "" +msgstr "Egyesítés" msgid "Difference" -msgstr "" +msgstr "Különbség" msgid "Intersection" -msgstr "" +msgstr "Metszéspont" msgid "Source Volume" -msgstr "" +msgstr "Forrás térfogat" msgid "Tool Volume" -msgstr "" +msgstr "Eszköz térfogat" msgid "Subtract from" -msgstr "" +msgstr "Kivonás ebből" msgid "Subtract with" -msgstr "" +msgstr "Kivonás ezzel" msgid "selected" -msgstr "" +msgstr "kiválasztva" msgid "Part 1" -msgstr "" +msgstr "1. tárgy" msgid "Part 2" -msgstr "" +msgstr "2. tárgy" msgid "Delete input" -msgstr "" +msgstr "Bemenet törlése" msgid "Network Test" -msgstr "" +msgstr "Hálózati teszt" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Teszt indítása több szálon" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Teszt indítása egy szálon" msgid "Export Log" -msgstr "" +msgstr "Napló exportálása" msgid "OrcaSlicer Version:" msgstr "" msgid "System Version:" -msgstr "" +msgstr "Rendszerverzió:" msgid "DNS Server:" -msgstr "" +msgstr "DNS kiszolgáló:" msgid "Test OrcaSlicer(GitHub)" msgstr "" @@ -13354,100 +14527,117 @@ msgid "Test OrcaSlicer(GitHub):" msgstr "" msgid "Test Bing.com" -msgstr "" +msgstr "Bing.com tesztelése" msgid "Test bing.com:" -msgstr "" +msgstr "Bing.com tesztelése:" msgid "Log Info" -msgstr "" +msgstr "Napló adatok" msgid "Select filament preset" -msgstr "" +msgstr "Válassz ki filamentbeállítást" msgid "Create Filament" -msgstr "" +msgstr "Filament létrehozása" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Létrehozás a jelenlegi filament alapján" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Jelenlegi filamentbeállítás másolása" msgid "Basic Information" -msgstr "" +msgstr "Alapinformációk" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Filamentbeállítás hozzáadása ehhez a filamenthez" msgid "We could create the filament presets for your following printer:" -msgstr "" +msgstr "Létrehozhatjuk a filamentbeállításokat a következő nyomtatóhoz:" msgid "Select Vendor" -msgstr "" +msgstr "Válassz gyártót" msgid "Input Custom Vendor" -msgstr "" +msgstr "Egyedi gyártó megadása" msgid "Can't find vendor I want" -msgstr "" +msgstr "Nem találom a kívánt gyártót" msgid "Select Type" -msgstr "" +msgstr "Válassz típust" msgid "Select Filament Preset" -msgstr "" +msgstr "Válassz filamentbeállítást" msgid "Serial" -msgstr "" +msgstr "Sorozatszám" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "pl.: Basic, Matt, Silk, Marble" msgid "Filament Preset" -msgstr "" +msgstr "Filamentbeállítás" msgid "Create" -msgstr "" +msgstr "Létrehoz" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "Vendor is not selected; please reselect vendor." msgid "Custom vendor is not input, please input custom vendor." -msgstr "" +msgstr "Custom vendor missing; please input custom vendor." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"A „Bambu” vagy „Generic” nem használható gyártóként egyedi filamentek " +"esetében." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "A filament típusa nem lett kiválasztva, kérjük, válaszd ki a típust." msgid "Filament serial is not inputed, please input serial." -msgstr "" +msgstr "Filament serial missing; please input serial." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"There may be disallowed characters in the vendor or serial input of the " +"filament. Please delete and re-enter." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." -msgstr "" +msgstr "Az egyedi gyártó vagy sorozat értéke üres. Kérjük, írd be újra." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "The vendor can not be a number; please re-enter." msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +"Még nem választottál nyomtatót vagy beállítást. Kérjük, válassz ki legalább " +"egyet." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"A(z) %s filamentnév már létezik.\n" +"Ha folytatod, az új beállítás a teljes nevével fog megjelenni. Folytatod?" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "Nem sikerült létrehozni a következő beállításokat:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"Szeretnéd felülírni?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" @@ -13456,114 +14646,115 @@ msgid "" msgstr "" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Nyomtató/fúvóka létrehozása" msgid "Create Printer" -msgstr "" +msgstr "Nyomtató létrehozása" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Fúvóka létrehozása meglévő nyomtatóhoz" msgid "Create from Template" -msgstr "" +msgstr "Létrehozás sablonból" msgid "Create Based on Current Printer" -msgstr "" +msgstr "Létrehozás az aktuális nyomtató alapján" msgid "Import Preset" -msgstr "" +msgstr "Beállítás importálása" msgid "Create Type" -msgstr "" +msgstr "Típus létrehozása" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "The model was not found; please reselect vendor." msgid "Select Model" -msgstr "" +msgstr "Válassz modellt" msgid "Select Printer" -msgstr "" +msgstr "Válassz nyomtatót" msgid "Input Custom Model" -msgstr "" +msgstr "Egyedi modell megadása" msgid "Can't find my printer model" -msgstr "" +msgstr "Nem találom a nyomtató modelljét" msgid "Rectangle" -msgstr "" +msgstr "Négyzet" msgid "Printable Space" -msgstr "" - -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" +msgstr "Nyomtatási terület" msgid "Hot Bed STL" -msgstr "" +msgstr "Tárgyasztal STL" msgid "Load stl" -msgstr "" +msgstr "STL betöltése" msgid "Hot Bed SVG" -msgstr "" +msgstr "Tárgyasztal SVG" msgid "Load svg" -msgstr "" +msgstr "SVG betöltése" msgid "Max Print Height" -msgstr "" +msgstr "Maximális nyomtatási magasság" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." msgstr "" +"A fájl mérete meghaladja a(z) %d MB-ot, kérjük ismételd meg az importálást." msgid "Exception in obtaining file size, please import again." msgstr "" +"Kivétel történt a fájlméret megállapításakor, kérjük ismételd meg az " +"importálást." msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "Útvonal nem található. Kérjük, válaszd ki újra a gyártót." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "A nyomtató modellje nem található, kérjük, válaszd ki újra." msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "The nozzle diameter was not found; please reselect." msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "The printer preset was not found; please reselect." msgid "Printer Preset" -msgstr "" +msgstr "Nyomtatóbeállítás" msgid "Filament Preset Template" -msgstr "" +msgstr "Filamentbeállítás sablon" msgid "Deselect All" -msgstr "" +msgstr "Kijelölés megszüntetése" msgid "Process Preset Template" -msgstr "" +msgstr "Folyamatbeállítás sablon" msgid "Back Page 1" -msgstr "" +msgstr "Vissza az 1. oldalra" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"Még nem választottad ki, hogy melyik nyomtató beállításai alapján készüljön " +"az új. Kérjük, válaszd ki a nyomtató gyártóját és modelljét" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"Tiltott karakter került be az első oldalon a nyomtatási terület részbe. " +"Kérjük, csak számokat használj." msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "The custom printer or model missing; please input." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -13574,73 +14765,95 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserved.\n" +"\tCancel: Do not create a preset; return to the creation interface." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "Ki kell választanod legalább egy filamentbeállítást." msgid "You need to select at least one process preset." -msgstr "" +msgstr "Ki kell választanod legalább egy folyamatbeállítást." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "A következő filamentbeállítások létrehozása nem sikerült:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "A következő folyamatbeállítások létrehozása nem sikerült:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Gyártó nem található. Kérjük, válaszd ki újból." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "A kiválasztott gyártónak nincsenek modelljei. Kérjük, válassz másikat." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"Nem választottad ki a gyártót és modellt, vagy nem adtál meg egy egyedi " +"gyártót és modellt." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"Érvénytelen karakter(ek) az egyedi gyártó vagy modell mezőjében. Kérjük, írd " +"be őket újra." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." -msgstr "" +msgstr "Az egyedi gyártó vagy modell értéke üres. Kérjük, írd be újra." msgid "Please check bed printable shape and origin input." -msgstr "" +msgstr "Kérjük, ellenőrizd az asztal alakját és a kezdőpont koordinátáit." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"Nem választottál nyomtatót a fúvókacseréhez. Kérjük, válassz egy nyomtatót." msgid "Create Printer Successful" -msgstr "" +msgstr "Nyomtató sikeresen létrehozva" msgid "Create Filament Successful" -msgstr "" +msgstr "Filament Created Successfully" msgid "Printer Created" -msgstr "" +msgstr "Nyomtató létrehozva" msgid "Please go to printer settings to edit your presets" msgstr "" +"Kérjük, a beállítások szerkesztéséhez lépj be a nyomtató beállításaiba." msgid "Filament Created" -msgstr "" +msgstr "Filament létrehozva" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Ha szükséges, lépj be az filamentbeállításokhoz az értékek szerkesztéséhez.\n" +"Figyelem: a fúvóka hőmérséklete, a tárgyasztal hőmérséklete és a maximális " +"volumetrikus sebesség jelentős hatással van a nyomtatási minőségre." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" -msgstr "" - -msgid "Export Configs" -msgstr "" +msgstr "Nyomtatóbeállítás" msgid "Printer config bundle(.orca_printer)" msgstr "" @@ -13649,31 +14862,31 @@ msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Nyomtatóbeállítások (.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Filamentbeállítások (.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Folyamatbeállítások (.zip)" msgid "initialize fail" -msgstr "" +msgstr "inicializálás sikertelen" msgid "add file fail" -msgstr "" +msgstr "fájl hozzáadása sikertelen" msgid "add bundle structure file fail" -msgstr "" +msgstr "kötegstruktúra fájl hozzáadása sikertelen" msgid "finalize fail" -msgstr "" +msgstr "véglegesítés sikertelen" msgid "open zip written fail" -msgstr "" +msgstr "ZIP-fájl írása sikertelen" msgid "Export successful" -msgstr "" +msgstr "Sikeres exportálás!" #, c-format, boost-format msgid "" @@ -13682,6 +14895,10 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it?\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" @@ -13692,51 +14909,68 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"Felhasználói filamentbeállítások.\n" +"Megosztható másokkal." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Csak azok a nyomtatók jelennek meg, amelyeknél változtak a nyomtató-, " +"filament- és folyamatbeállítások." msgid "Only display the filament names with changes to filament presets." msgstr "" +"Csak azok a filamentnevek jelennek meg, ahol változtak a filamentbeállítások." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Csak azok a nyomtatónevek jelennek meg, amelyekhez tartoznak felhasználói " +"beállítások. A kiválasztott beállítások ZIP fájlként kerülnek exportálásra." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Csak azok a nyomtatónevek jelennek meg, amelyekhez tartoznak felhasználói " +"beállítások. A kiválasztott beállítások ZIP fájlként kerülnek exportálásra." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Csak azok a nyomtatónevek jelennek meg, amelyeknél változtak a " +"folyamatbeállítások. A kiválasztott beállítások ZIP fájlként kerülnek " +"exportálásra." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Kérjük, válassz ki legalább egy nyomtatót vagy filamentet." msgid "Please select a type you want to export" -msgstr "" +msgstr "Válaszd ki az exportálandó beállítás típusát" + +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." msgid "Edit Filament" -msgstr "" +msgstr "Filament szerkesztése" msgid "Filament presets under this filament" -msgstr "" +msgstr "A filamenthez tartozó beállítások" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Megjegyzés: Ha a filamenthez tartozó utolsó beállítás is törlődik, akkor a " +"filament szintén törlésre kerül a párbeszédablak bezárása után." msgid "Presets inherited by other presets can not be deleted" -msgstr "" +msgstr "A más beállítások által örökölt beállítások nem törölhetők" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." @@ -13744,181 +14978,217 @@ msgstr[0] "" msgstr[1] "" msgid "Delete Preset" -msgstr "" +msgstr "Beállítás törlése" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "Biztosan törlöd a kiválasztott beállítást?" msgid "Delete preset" -msgstr "" +msgstr "Beállítás törlése" msgid "+ Add Preset" -msgstr "" +msgstr "+ Beállítás hozzáadása" msgid "Delete Filament" -msgstr "" +msgstr "Filament törlése" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"A filamenthez tartozó összes beállítás törölve lesz. \n" +"Ha ez a filament jelenleg használatban van a nyomtatón, kérjük, töröld az " +"adott férőhelyen a filamentadatokat." msgid "Delete filament" -msgstr "" +msgstr "Filament törlése" msgid "Add Preset" -msgstr "" +msgstr "Beállítás hozzáadása" msgid "Add preset for new printer" -msgstr "" +msgstr "Beállítás hozzáadása új nyomtatóhoz" msgid "Copy preset from filament" -msgstr "" +msgstr "Beállítás másolása filamentről" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "A filamenthez nem található beállítás. Kérjük, válassz ki másikat." msgid "[Delete Required]" -msgstr "" +msgstr "[Törlés szükséges]" msgid "Edit Preset" -msgstr "" +msgstr "Beállítás módosítása" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "For more information, please check out our Wiki" msgid "Collapse" -msgstr "" +msgstr "Összecsuk" msgid "Daily Tips" +msgstr "Napi tippek" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "eltárolt fúvóka: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" msgstr "" +"Your nozzle diameter in preset is not consistent with the saved nozzle " +"diameter. Have you changed your nozzle?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "* %s anyag nyomtatása ezzel: %s a fúvóka eltömődéséhez vezethet" msgid "Need select printer" -msgstr "" +msgstr "Ki kell választanod a nyomtatót" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "A kezdő-, vég- vagy lépésérték nem érvényes." msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" msgstr "" +"Nem lehet kalibrálni: előfordulhat, hogy a beállított kalibrációs " +"értéktartomány túl nagy, vagy a lépésköz túl kicsi" msgid "Physical Printer" -msgstr "" +msgstr "Fizikai nyomtató" msgid "Print Host upload" -msgstr "" +msgstr "Feltöltés a nyomtatóra" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "Nem sikerült érvényes nyomtató hivatkozást lekérni" msgid "Success!" -msgstr "" +msgstr "Sikerült!" msgid "Are you sure to log out?" msgstr "" msgid "Refresh Printers" +msgstr "Nyomtatók frissítése" + +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" msgstr "" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" +"A HTTPS CA-fájl nem kötelező. Csak akkor szükséges, ha a HTTPS-t saját " +"aláírású tanúsítvánnyal használod." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" +msgstr "Tanúsítványfájlok (*.crt, *.pem) |*.crt; *.pem|Minden fájl|* . *" msgid "Open CA certificate file" -msgstr "" +msgstr "CA tanúsítványfájl megnyitása" #, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" +"Ezen a rendszeren %s HTTPS-tanúsítványokat használ a rendszer " +"tanúsítványtárolójából vagy kulcstárolójából." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." msgstr "" +"Egyéni CA-fájl használatához importáld azt a tanúsítványtárolóba / " +"kulcstárolóba." msgid "Login/Test" msgstr "" msgid "Connection to printers connected via the print host failed." msgstr "" +"A nyomtatóállomáson keresztül csatlakoztatott nyomtatókhoz való csatlakozás " +"sikertelen." #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "A nyomtatóállomás típusa nem egyezik: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "Connection to AstroBox is working correctly." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Nem sikerült csatlakozni az AstroBoxhoz" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Note: AstroBox version 1.1.0 or higher is required." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "Connection to Duet is working correctly." msgid "Could not connect to Duet" -msgstr "" +msgstr "Nem sikerült csatlakozni a Duethez" msgid "Unknown error occured" -msgstr "" +msgstr "Ismeretlen hiba történt" msgid "Wrong password" -msgstr "" +msgstr "Hibás jelszó" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Nem sikerült erőforrásokat szerezni új kapcsolat létrehozásához" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "A feltöltés nincs engedélyezve a FlashAir kártyán." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "Connection to FlashAir is working correctly and upload is enabled." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Nem sikerült csatlakozni a FlashAirhez" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Megjegyzés: FlashAir 2.00.02 vagy újabb firmware és bekapcsolt feltöltési " +"funkció szükséges." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "Connection to MKS is working correctly." msgid "Could not connect to MKS" -msgstr "" +msgstr "Nem sikerült csatlakozni az MKS-hez" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Connection to OctoPrint is working correctly." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Nem sikerült csatlakozni az OctoPrinthez" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Note: OctoPrint version 1.1.0 or higher is required." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Connection to Prusa SL1 / SL1S is working correctly." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Nem sikerült csatlakozni a Prusa SLA-hoz" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Connection to PrusaLink is working correctly." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Nem sikerült csatlakozni a PrusaLinkhez" msgid "Storages found" msgstr "" @@ -13945,19 +15215,21 @@ msgid "Could not connect to Prusa Connect" msgstr "" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Connection to Repetier is working correctly." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Nem sikerült csatlakozni a Repetierhez" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Note: Repetier version 0.90.0 or higher is required." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP állapot: %1%\n" +"Üzenet törzse: „%2%“" #, boost-format msgid "" @@ -13965,6 +15237,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"A válasz feldolgozása sikertelen.\n" +"Üzenet törzse: „%1%“\n" +"Hiba: „%2%“" #, boost-format msgid "" @@ -13972,6 +15247,260 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"A nyomtató lekérdezése sikertelen.\n" +"Üzenet törzse: „%1%“\n" +"Hiba: „%2%”" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a small layer height, and results in almost negligible layer lines " +"and high print quality. It is suitable for most general printing cases." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. This results in " +"much higher print quality but a much longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height. This results in almost negligible layer lines and " +"slightly longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height. This results in slightly visible layer lines but shorter print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height. This results in almost invisible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost invisible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height. This results in minimal layer lines and higher print quality but " +"longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in minimal layer lines and much higher print quality " +"but much longer print time." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a normal layer height, and results in average layer lines and print " +"quality. It is suitable for most printing cases." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but slightly shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in less apparent layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost negligible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and longer print time." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in much more apparent layer lines and much lower print " +"quality, but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and slightly higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"It has a very big layer height, and results in very apparent layer lines, " +"low print quality and shorter printing time." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height. This results in very apparent layer lines and much lower print " +"quality but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height. This results in extremely apparent layer lines and much lower " +"print quality but much shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height. This results in slightly less but still apparent layer " +"lines and slightly higher print quality, but longer print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height. This results in less but still apparent layer lines and slightly " +"higher print quality, but longer print time in some cases." msgid "Connected to Obico successfully!" msgstr "" @@ -13985,17 +15514,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14097,6 +15624,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Modell javítása\n" +"Tudtad, hogy Windows rendszeren a sérült 3D-modelleket kijavíthatod, hogy " +"elkerüld a szeletelési problémákat?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -14336,6 +15866,10 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"Mikor nyomtass nyitott ajtóval\n" +"Tudtad, hogy a nyomtató ajtajának kinyitásával csökkentheted az extruder/" +"hotend eltömődésének valószínűségét, ha alacsonyabb hőmérsékletű filamentet " +"nyomtatsz? További információ a Wikiben olvashatsz erről." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -14344,6 +15878,242 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Vetemedés elkerülése\n" +"Tudtad, hogy a vetemedésre hajlamos anyagok (például ABS) nyomtatásakor a " +"tárgyasztal hőmérsékletének növelése csökkentheti a vetemedés valószínűségét?" + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Kérjük, adj meg egy érvényes értéket (K 0-0,3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Kérjük, adj meg egy érvényes értéket (K 0-0,3; N 0,6-2,0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Printer local connection failed; please try again." + +#~ 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 "" +#~ "Az áramlásdinamikai kalibráció részleteit a wikiben találod.\n" +#~ "\n" +#~ "Általában nincs szükség a kalibrálásra. Ha egyszínű / egy anyagból álló " +#~ "nyomtatást indítasz, és a nyomtatás indítása menüben be van jelölve az " +#~ "„Áramlásdinamika kalibrálás“ opció, a nyomtató a nyomtatás előtt " +#~ "kalibrálja a filamenteket. Ha többszínű / több anyagból álló nyomtatást " +#~ "indítasz, a nyomtató minden filamentváltáskor az alapértelmezett " +#~ "kompenzációs paramétert használja a filamentekhez, ami a legtöbb esetben " +#~ "jó eredményt ad.\n" +#~ "\n" +#~ "Felhívjuk a figyelmed, hogy néhány esetben a kalibrálás eredménye " +#~ "megbízhatatlan lehet: texturált tálcát / rossz tapadású tálcát használsz " +#~ "a kalibráláshoz. (Kérjük, mosd le a tálcát vagy használj ragasztót!) " +#~ "További információkat a wikiben találhatsz.\n" +#~ "\n" +#~ "A kalibrációs eredmények körülbelül 10 százalékos szórást mutatnak a " +#~ "tesztjeinkben, ami miatt előfordulhat, hogy az eredmények nem azonosak " +#~ "minden kalibrációnál. Még vizsgáljuk a kiváltó okot, hogy a jövőbeni " +#~ "frissítésekkel tovább javíthassuk ezt a funkciót." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Az azonos nevű eredmények közül csak az egyik kerül elmentésre. Biztos, " +#~ "hogy felül akarod írni a többi eredményt?" + +#, 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 "" +#~ "Már létezik egy ugyanilyen nevű, korábbi kalibrálási eredmény: %s. Csak " +#~ "egy azonos nevű eredményt lehet elmenteni. Biztos, hogy felül akarod írni " +#~ "a korábbi eredményeket?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Keresd meg a tökéletesen extrudált sarkot" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Export &Configs" +#~ msgstr "Export &Configs" + +#~ msgid "Infill direction" +#~ msgstr "Kitöltés iránya" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Engedélyezd ezt az opciót, hogy olyan G-kódot kapj, amiben G2 és G3 " +#~ "mozgások vannak" + +#~ 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 "" +#~ "Ez lehetővé teszi, hogy a kitöltési terület kissé nagyobb legyen, nagyobb " +#~ "átfedést biztosítva a falakkal a jobb kapcsolódás érdekében. A százalékos " +#~ "érték a ritkás kitöltés vonalszélességéhez viszonyított érték." + +#~ msgid "Unload Filament" +#~ msgstr "Filament kitöltése" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Válassz egy AMS rekeszt, majd nyomd meg a \"Load\" vagy \"Unload\" gombot " +#~ "a filament automatikus be- vagy kitöltéséhez." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "active" +#~ msgstr "aktív" + +#~ msgid "Jump to layer" +#~ msgstr "Ugrás a rétegre" + +#~ msgid "Cabin humidity" +#~ msgstr "Kamra páratartalma" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "A zöld azt jelenti, hogy az AMS páratartalma normális, a narancs és a " +#~ "piros pedig azt jelenti, hogy a páratartalom túl magas (Higrométer: minél " +#~ "alacsonyabb, annál jobb)." + +#~ msgid "Desiccant status" +#~ msgstr "Páramegkötő állapota" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "A két sávnál alacsonyabb páramegkötő-állapot azt jelzi, hogy a " +#~ "páramegkötő nem működik. Cseréld ki a páramegkötő tasakokat (minél " +#~ "magasabb, annál jobb)." + +#~ 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 "" +#~ "Megjegyzés: Ha a fedél nyitva van, vagy nemrég cserélted ki a tasakokat, " +#~ "órákig vagy egy éjszakáig tarthat a nedvesség felszívódása. Az alacsony " +#~ "hőmérséklet szintén lelassítja a folyamatot. Ez idő alatt előfordulhat, " +#~ "hogy a visszajelző nem a pontos értéket mutatja." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Megjegyzés: ha az új tekercs nyomtatás során kerül behelyezésre, az AMS " +#~ "nem fogja automatikusan kiolvasni az információkat a nyomtatás végéig." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "G-kód sikeresen exportálva ide: %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Sikertelen inicializálás (Nincs eszköz)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Sikertelen inicializálás (nem található kamera)!" + +#~ 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 "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)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Megállítva [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "A betöltés sikertelen [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "No files [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Load failed [%d]" + +#~ 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 "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." + +#, 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 "" +#~ "Megváltoztattad a(z) \"%1%\" beállítás néhány beállítását.\n" +#~ "Szeretnéd ezeket a módosított beállításokat (új értéket) megtartani a " +#~ "másik beállításra való váltás után?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Megváltoztattál néhány beállítást.\n" +#~ "Szeretnéd ezeket megtartani a másik beállításra való váltás után?" #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 7227cb2d0e..b7e6566662 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -255,6 +256,9 @@ msgstr "Reimposta rotazione" msgid "World coordinates" msgstr "Coordinate reali" +msgid "Object coordinates" +msgstr "Coordinate oggetto" + msgid "°" msgstr "°" @@ -1402,9 +1406,6 @@ msgstr "" "Il file di configurazione \"%1%\" è stato caricato, ma alcuni valori non " "sono stati riconosciuti." -msgid "V" -msgstr "V" - 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." @@ -1513,6 +1514,9 @@ msgstr "Scegli uno o più file (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" 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 ZIP file" +msgstr "Seleziona il file ZIP" + msgid "Choose one file (gcode/3mf):" msgstr "Scegli file (gcode/3mf):" @@ -1583,6 +1587,14 @@ msgstr "Caricamenti in corso" msgid "Select a G-code file:" msgstr "Seleziona file G-code:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Impossibile avviare il download dell'URL. La cartella di destinazione non è " +"impostata. Scegliere la cartella di destinazione nella Configurazione " +"guidata." + msgid "Import File" msgstr "Importa File" @@ -1815,8 +1827,8 @@ msgstr "Predefinito" msgid "Filament %d" msgstr "Filamento %d" -msgid "active" -msgstr "attivo" +msgid "current" +msgstr "Attuale" msgid "Scale to build volume" msgstr "Scala per creare volume" @@ -1908,6 +1920,9 @@ msgstr "Aggiungi primitiva" msgid "Add Handy models" msgstr "Aggiungi modelli Handy" +msgid "Add Models" +msgstr "Aggiungi modelli" + msgid "Show Labels" msgstr "Mostra Etichette" @@ -1959,6 +1974,12 @@ msgstr "Disponi" msgid "arrange current plate" msgstr "Disponi sul piatto corrente" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rotazione automatica" @@ -1992,9 +2013,6 @@ msgstr "Cambia filamento" msgid "Set Filament for selected items" msgstr "Imposta filamento per gli elementi selezionati" -msgid "current" -msgstr "Attuale" - msgid "Unlock" msgstr "Sblocca" @@ -2337,9 +2355,6 @@ msgstr "Inserisci G-code personalizzato utilizzato nel layer corrente:" msgid "Jump to Layer" msgstr "Vai al layer" -msgid "Jump to layer" -msgstr "Vai al layer" - msgid "Please enter the layer number" msgstr "Inserisci numero del layer" @@ -2410,7 +2425,7 @@ 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." +msgid "Please check the network connection of the printer and Orca." msgstr "Controlla la connessione di rete della stampante e di Studio." msgid "Connecting..." @@ -2434,11 +2449,11 @@ msgstr "Ricarica automatica" msgid "AMS not connected" msgstr "AMS non collegato" -msgid "Load Filament" -msgstr "Carica" +msgid "Load" +msgstr "Load" -msgid "Unload Filament" -msgstr "Scarica Filamento" +msgid "Unload" +msgstr "Scarica" msgid "Ext Spool" msgstr "Bobina esterna" @@ -2455,7 +2470,7 @@ msgstr "Riprova" msgid "Calibrating AMS..." msgstr "Calibrazione AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Si è verificato un problema durante la calibrazione. Clicca per visualizzare " "la soluzione." @@ -2498,10 +2513,10 @@ msgstr "Prendo un nuovo filamento" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Seleziona uno slot AMS, premi \"Carica\" o \"Scarica\" per caricare o " -"scaricare automaticamente il filamento." +"Scegliere uno slot AMS, quindi premi il pulsante \"Carica\" o \"Scarica\" " +"per caricare o scaricare automaticamente il filamento." msgid "Edit" msgstr "Modifica" @@ -2771,14 +2786,8 @@ msgstr "Orca Slicer è concesso in licenza con " 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" -"Orca Slicer è basato su BambuStudio di Bambulab, che è di PrusaSlicer di " -"Prusa Research. PrusaSlicer è di Slic3r di Alessandro Ranellucci e della " -"comunità RepRap" msgid "Libraries" msgstr "Librerie" @@ -2876,11 +2885,13 @@ 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.3)" -msgstr "Immettere un valore valido (K in 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "Immettere un valore valido (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "" msgid "Other Color" msgstr "Altro colore" @@ -2987,38 +2998,19 @@ msgstr "Disabilita AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Stampa filamento con bobina esterna" -msgid "Cabin humidity" -msgstr "Umidità della cabina" +msgid "Current Cabin humidity" +msgstr "Current Cabin humidity" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Il verde indica che l'umidità dell'AMS è normale, l'arancione che l'umidità " -"è elevata, il rosso rappresenta un'umidità troppo elevata (igrometro: più " -"basso è, meglio è)." - -msgid "Desiccant status" -msgstr "Stato dell'essiccante" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Uno stato dell'essiccante inferiore a due barre indica che l'essiccante " -"potrebbe essere inattivo. Si prega di sostituire l'essiccante. (Le barre: " -"più sono alte, meglio è)." - -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 "" -"Nota: quando il coperchio è aperto o la confezione di essiccante viene " -"cambiata, possono essere necessarie ore o una notte per assorbire l'umidità. " -"Anche le basse temperature rallentano il processo. Durante questo periodo, " -"l'indicatore potrebbe non rappresentare la camera con precisione." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases: when the lid is open or the " +"desiccant pack is changed. It takes a few hours to absorb the moisture, and " +"low temperatures also slow down the process." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3077,6 +3069,12 @@ msgstr "" "(Attualmente supporta la fornitura automatica di materiali di consumo con lo " "stesso marchio, tipo di materiale e colore)" +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" + msgid "AMS Settings" msgstr "Impostazioni AMS" @@ -3092,7 +3090,7 @@ msgstr "" "secondi." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" "Nota: se durante la stampa viene inserito un nuovo filamento, l'AMS non " @@ -3148,6 +3146,16 @@ msgstr "" "L'AMS passerà automaticamente a un altro filamento con stesse proprietà " "quando il filamento corrente si esaurisce" +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "File" @@ -3222,6 +3230,68 @@ msgstr "Floating reserved operand" msgid "Stack overflow" msgstr "Stack overflow" +msgid "Running post-processing scripts" +msgstr "Esecuzione script di post-elaborazione" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "" +"Si è verificato un errore sconosciuto durante l'esportazione del G-code." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Copia del G-code temporaneo sul G-code di uscita non riuscita. Forse la " +"scheda SD è bloccata in scrittura?\n" +"Messaggio di errore: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Copia del G-code temporaneo nel G-code di output non riuscita. Potrebbe " +"esserci un problema nel dispositivo di destinazione, prova una nuova " +"esportazione con un dispositivo diverso. Il file G-code corrotto è su %1%." +"tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Non è stato possibile rinominare il G-code dopo la copia nella cartella di " +"destinazione selezionata. Il percorso corrente è %1%.tmp. Prova a esportare " +"di nuovo." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Copia del G-code temporaneo completata ma non è stato possibile aprire il " +"codice originale su %1% durante il controllo copia. Il G-code di output è su " +"%2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Copia del G-code temporaneo completata ma non è stato possibile aprire il " +"codice esportato durante il controllo copia. Il G-code di output è su %1%." +"tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G-code esportato in %1%" + msgid "Unknown error when export G-code." msgstr "Errore sconosciuto nell'esportazione del G-code." @@ -3235,13 +3305,6 @@ msgstr "" "Messaggio di errore: %1%.\n" "File sorgente %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Successo! G-code esportato in %1%" - -msgid "Running post-processing scripts" -msgstr "Esecuzione script di post-elaborazione" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Copia del G-code temporaneo nel G-code di output non riuscita." @@ -3251,6 +3314,225 @@ msgstr "" "Programmazione del caricamento su `%1%`. Vedere finestra -> Coda di " "caricamento Host di Stampa" +msgid "Device" +msgstr "Dispositivo" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "Vista" + +msgid "N/A" +msgstr "N/D" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "Device Name" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Device Status" +msgstr "Device Status" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Aggiungi" + +msgid "Idle" +msgstr "Inattivo" + +msgid "Printing" +msgstr "Stampa" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Non compatibile" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Prepara" + +msgid "Slicing" +msgstr "Slicing" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "Invio…" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Continua" + +msgid "Stop" +msgstr "Ferma" + +msgid "Task Status" +msgstr "Task Status" + +msgid "Sent Time" +msgstr "Sent Time" + +msgid "There are no tasks to be sent!" +msgstr "There are no tasks to be sent!" + +msgid "No historical tasks!" +msgstr "No historical tasks!" + +msgid "Loading..." +msgstr "Caricamento…" + +msgid "No AMS" +msgstr "No AMS" + +msgid "Send to Multi-device" +msgstr "Send to Multi-device" + +msgid "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 "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "Use External Spool" + +msgid "Use AMS" +msgstr "Use AMS" + +msgid "Select Printers" +msgstr "Select Printers" + +msgid "Ams Status" +msgstr "AMS Status" + +msgid "Printing Options" +msgstr "Printing Options" + +msgid "Bed Leveling" +msgstr "Livellamento piano" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "Send Options" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "Invia" + +msgid "Name is invalid;" +msgstr "Nome non valido;" + +msgid "illegal characters:" +msgstr "Caratteri illegali:" + +msgid "illegal suffix:" +msgstr "Suffisso illegale:" + +msgid "The name 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 "Il nome non può iniziare con uno spazio." + +msgid "The name is not allowed to end with space character." +msgstr "Il nome non può terminare con uno spazio." + +msgid "The name length exceeds the limit." +msgstr "La lunghezza del nome supera il limite." + msgid "Origin" msgstr "Origine" @@ -3322,6 +3604,23 @@ msgstr "Scegli un file STL da cui importare il modello del piano:" msgid "Bed Shape" msgstr "Forma Piano" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"La temperatura minima consigliata è inferiore a 190 gradi o la temperatura " +"massima consigliata è superiore a 300 gradi.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" + +msgid "Please check.\n" +msgstr "Controlla.\n" + 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" @@ -3410,26 +3709,6 @@ msgstr "" "\n" "Il valore viene riportato a 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 "" -"La modalità spirale funziona solo quando il valore loop parete è 1, il " -"supporto è disabilitato, i il valore dei layer superiori del guscio è 0, la " -"densità riempimento è 0 e il tipo di timelapse è tradizionale." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Ma le macchine con la struttura I3 non genereranno video timelapse." - -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 "" -"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 "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3497,6 +3776,26 @@ msgid "" msgstr "" "seam_slope_start_height deve essere inferiore a layer_heightReimpostare a 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 "" +"La modalità spirale funziona solo quando il valore loop parete è 1, il " +"supporto è disabilitato, i il valore dei layer superiori del guscio è 0, la " +"densità riempimento è 0 e il tipo di timelapse è tradizionale." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Ma le macchine con la struttura I3 non genereranno video timelapse." + +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 "" +"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 "Auto bed leveling" msgstr "Livellamento automatico piano" @@ -3602,18 +3901,6 @@ msgstr "Pausa in caso di errore nel primo layer" msgid "Nozzle clog pause" msgstr "Pausa in caso di intasamento del nozzle" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Sconosciuto" @@ -3715,15 +4002,17 @@ msgstr "Modifica G-code personalizzato (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" msgstr "" +"Placeholder incorporati (fai doppio clic sull'elemento per aggiungerlo al G-" +"code)" msgid "Search gcode placeholders" msgstr "" msgid "Add selected placeholder to G-code" -msgstr "" +msgstr "Aggiungi il placeholder selezionato al G-code" msgid "Select placeholder" -msgstr "" +msgstr "Seleziona placeholder" msgid "[Global] Slicing State" msgstr "" @@ -3750,11 +4039,11 @@ msgid "Temperatures" msgstr "Temperature" msgid "Timestamps" -msgstr "" +msgstr "Timestamp" #, boost-format msgid "Specific for %1%" -msgstr "" +msgstr "Specifico per %1%" msgid "Presets" msgstr "Preset" @@ -3774,9 +4063,6 @@ msgstr "Impostazioni stampante" msgid "parameter name" msgstr "nome parametro" -msgid "N/A" -msgstr "N/D" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s non può essere una percentuale" @@ -3788,6 +4074,10 @@ msgstr "Il valore %s non rientra nell'intervallo, continuare?" msgid "Parameter validation" msgstr "Validazione parametri" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Value %s is out of range. The valid range is from %d to %d." + msgid "Value is out of range." msgstr "Valore fuori intervallo." @@ -3801,6 +4091,20 @@ msgstr "" "YES for %s%%, \n" "NO for %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Formato di input non valido. Vettore di dimensioni previsto nel seguente " +"formato: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Valore input fuori portata" + +msgid "Some extension in the input is invalid" +msgstr "Alcune estensioni nell'input non sono valide" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\"" @@ -3868,12 +4172,12 @@ msgstr "Display" msgid "Flushed" msgstr "Spurgo" -msgid "Total" -msgstr "Totale" - msgid "Tower" msgstr "Torre" +msgid "Total" +msgstr "Totale" + msgid "Total Estimation" msgstr "Stima totale" @@ -3976,6 +4280,12 @@ msgstr "Tempo stimato" msgid "Normal mode" msgstr "Modalità normale" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "Tempo preparazione" @@ -4069,6 +4379,9 @@ msgstr "Opzioni di disposizione" msgid "Spacing" msgstr "Spaziatura" +msgid "0 means auto spacing." +msgstr "0 means auto spacing." + msgid "Auto rotate for arrangement" msgstr "Ruota automaticamente per disporre" @@ -4081,9 +4394,6 @@ msgstr "Evitare la regione di calibrazione dell'estrusione" msgid "Align to Y axis" msgstr "Allinea all'asse Y" -msgid "Add" -msgstr "Aggiungi" - msgid "Add plate" msgstr "Aggiungi piatto" @@ -4216,6 +4526,9 @@ msgstr "Monitora registrazione automatica" msgid "Go Live" msgstr "Vai in diretta" +msgid "Liveview Retry" +msgstr "Riprova Liveview" + msgid "Resolution" msgstr "Risoluzione" @@ -4268,14 +4581,11 @@ msgstr "Chiusura dell'applicazione durante la modifica di alcuni preset." msgid "Logging" msgstr "Accesso" -msgid "Prepare" -msgstr "Prepara" - msgid "Preview" msgstr "Anteprima" -msgid "Device" -msgstr "Dispositivo" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "Progetto" @@ -4301,9 +4611,6 @@ msgstr "Slice tutto" msgid "Export G-code file" msgstr "Esporta file G-code" -msgid "Send" -msgstr "Invia" - msgid "Export plate sliced file" msgstr "Esporta il file del piatto elaborato" @@ -4424,6 +4731,12 @@ msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carica modello" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Importa configurazioni" @@ -4457,8 +4770,8 @@ msgstr "Esporta G-code" msgid "Export current plate as G-code" msgstr "Esporta piatto corrente come G-code" -msgid "Export &Configs" -msgstr "Esporta &Configurazioni" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Esporta la configurazione corrente in file" @@ -4559,9 +4872,6 @@ msgstr "Mostra la sporgenza dell'oggetto evidenziata nella scena 3D" msgid "Preferences" msgstr "Preferenze" -msgid "View" -msgstr "Vista" - msgid "Help" msgstr "Aiuto" @@ -4628,10 +4938,10 @@ msgstr "Esporta percorso strumen&to come OBJ" msgid "Export toolpaths as OBJ" msgstr "Esporta percorso strumento come OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Aprire &Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Apri Studio" msgid "&Quit" @@ -4732,44 +5042,55 @@ msgstr "" msgid "Synchronization" msgstr "Sincronizzazione" -msgid "Initialize failed (No Device)!" -msgstr "Inizializzazione fallita (nessun dispositivo)!" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Inizializzazione fallita (la connessione del dispositivo non è pronta)!" +"Il dispositivo non è in grado di gestire più conversazioni. Riprova più " +"tardi." -msgid "Initialize failed (No Camera Device)!" -msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Stampante in fase di caricamento; attendi il completamento del caricamento." +"Lettore non funzionante correttamente. Reinstallare il lettore di sistema." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "Player non caricato; fai clic sul pulsante «play» per riprovare." + +msgid "Please confirm if the printer is connected." +msgstr "Verifica che la stampante sia collegata." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "La stampante è in fase di download. Attendi il completamento." + +msgid "Printer camera is malfunctioning." +msgstr "La fotocamera della stampante non funziona correttamente." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "Si è verificato un problema. Aggiorna il firmware stampante e riprova." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" -"Inizializzazione non riuscita (non supportata nella versione corrente della " -"stampante)!" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." -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 "Please enter the IP of printer to connect." +msgstr "Inserisci l'IP stampante da connettere." msgid "Initializing..." msgstr "Inizializzazione ..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Inizializzazione fallita (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Connessione fallita. Controlla la rete e riprova" -msgid "Network unreachable" -msgstr "Rete non raggiungibile" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Controlla la rete e riprova. Se il problema persiste prova ad aggiornare o " +"riavviare la stampante." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Interrotto [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "La stampante è stata disconnessa e non può connettersi." msgid "Stopped." msgstr "Interrotto." @@ -4800,19 +5121,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Inizializzazione Virtual Camera fallita (%s)!" +msgid "Network unreachable" +msgstr "Rete non raggiungibile" + msgid "Information" msgstr "Informazione" msgid "Playing..." msgstr "Riproduzione..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Caricamento non riuscito [%d]!" - -msgid "Loading..." -msgstr "Caricamento…" - msgid "Year" msgstr "Anno" @@ -4831,9 +5148,6 @@ msgstr "Raggruppa i file per mese, prima i recenti." msgid "Show all files, recent first." msgstr "Mostra tutti i file, prima i recenti." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Passa ai file timelapse." @@ -4861,6 +5175,12 @@ msgstr "Seleziona" msgid "Batch manage files." msgstr "Gestione batch dei file." +msgid "Refresh" +msgstr "Aggiorna" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "Nessuna stampante." @@ -4871,13 +5191,35 @@ msgstr "Connessione non riuscita [%d]!" msgid "Loading file list..." msgstr "Caricamento elenco file..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "No files [%d]" +msgid "No files" +msgstr "Nessun file" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "" +"Inizializzazione fallita (la connessione del dispositivo non è pronta)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Caricamento non riuscito [%d]" +msgid "Initialize failed (%s)!" +msgstr "Inizializzazione fallita (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4901,11 +5243,11 @@ msgstr "Elimina file" msgid "Fetching model infomations ..." msgstr "Recupero informazioni del modello..." -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "Impossibile recuperare le informazioni del modello dalla stampante." -msgid "Failed to parse model infomations." -msgstr "Impossibile analizzare le informazioni del modello." +msgid "Failed to parse model information." +msgstr "Impossibile analizzare le informazioni del modello" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4918,6 +5260,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Il file \"%s\" è stato perso! Si prega di scaricarlo di nuovo." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "Download in attesa..." @@ -4934,16 +5284,15 @@ msgstr "Download completato" msgid "Downloading %d%%..." msgstr "Scaricamento %d%%..." -msgid "Connection lost. Please retry." -msgstr "Connessione persa. Si prega di riprovare." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Il dispositivo non è in grado di gestire più conversazioni. Riprova più " -"tardi." +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "File not exists." -msgstr "Il file non esiste." +msgid "File does not exist." +msgstr "Il file non esiste" msgid "File checksum error. Please retry." msgstr "Errore di checksum del file. Si prega di riprovare." @@ -5000,12 +5349,6 @@ msgstr "Inverti asse di rollio" msgid "Printing Progress" msgstr "Avanzamento della stampa" -msgid "Resume" -msgstr "Continua" - -msgid "Stop" -msgstr "Ferma" - msgid "0" msgstr "0" @@ -5051,6 +5394,9 @@ msgstr "Cambia inquadratura" msgid "Control" msgstr "Controllo" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "Opzioni stampa" @@ -5069,9 +5415,6 @@ msgstr "Camera" msgid "Bed" msgstr "Piano" -msgid "Unload" -msgstr "Scarica" - msgid "Debug Info" msgstr "Informazioni di debug" @@ -5258,9 +5601,6 @@ msgstr "Stato" msgid "Update" msgstr "Aggiorna" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Non mostrare più" @@ -5291,6 +5631,35 @@ msgstr "%s informazioni" msgid "Skip" msgstr "Salta" +msgid "Newer 3mf version" +msgstr "Versione 3mf più recente" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Scarica la versione beta" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Versione corrente:" + +msgid "Latest Version: " +msgstr "Ultima versione: " + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "Mouse 3D disconnesso." @@ -5360,12 +5729,12 @@ msgstr[1] "%1$d oggetti sono stati caricati come parti di un oggetto tagliato" msgid "ERROR" msgstr "ERRORE" -msgid "CANCELED" -msgstr "ANNULLATO" - msgid "COMPLETED" msgstr "COMPLETATO" +msgid "CANCELED" +msgstr "ANNULLATO" + msgid "Cancel upload" msgstr "Annulla caricamento" @@ -5477,6 +5846,25 @@ msgstr "Consenti suono di richiesta" msgid "Filament Tangle Detect" msgstr "Rilevamento del groviglio del filamento" +msgid "Nozzle Clumping Detection" +msgstr "Nozzle Clumping Detection" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Check if the nozzle is clumping by filament or other foreign objects." + +msgid "Nozzle Type" +msgstr "Nozzle Type" + +msgid "Stainless Steel" +msgstr "Acciaio inox" + +msgid "Hardened Steel" +msgstr "Acciaio temprato" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Globale" @@ -5687,9 +6075,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Devi aggiornare il software.\n" -msgid "Newer 3mf version" -msgstr "Versione 3mf più recente" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5743,6 +6128,9 @@ msgstr "" "A causa di una codifica del testo non supportata, potrebbero apparire " "caratteri inutili!" +msgid "Remember my choice." +msgstr "Ricorda la mia scelta." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5870,9 +6258,6 @@ msgstr "Impossibile ricaricare:" msgid "Error during reload" msgstr "Errore durante il ri-caricamento" -msgid "Slicing" -msgstr "Slicing" - msgid "There are warnings after slicing models:" msgstr "Ci sono avvisi dopo aver elaborato i modelli:" @@ -5933,9 +6318,15 @@ msgstr "Importazione del modello" msgid "prepare 3mf file..." msgstr "preparazione file 3mf..." +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "Download progetto..." +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Progetto scaricato %d%%" @@ -5959,6 +6350,22 @@ msgstr "non contiene un g-code valido." msgid "Error occurs while loading G-code file" msgstr "Si è verificato un errore durante il caricamento del file G-code." +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Il caricamento di un archivio zip sul percorso %1% non è riuscito." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Impossibile decomprimere il file su %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Impossibile trovare il file decompresso su %1%. La decompressione del file " +"non è riuscita." + msgid "Drop project file" msgstr "Elimina il file di progetto" @@ -5983,9 +6390,6 @@ msgstr "I file e i modelli G-code non possono essere caricati insieme!" msgid "Can not add models when in preview mode!" msgstr "Impossibile aggiungere modelli in modalità anteprima!" -msgid "Add Models" -msgstr "Aggiungi modelli" - msgid "All objects will be removed, continue?" msgstr "Saranno rimossi tutti gli oggetti, continuare?" @@ -5994,9 +6398,6 @@ msgstr "" "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 "Numero di copie:" @@ -6028,10 +6429,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Impossibile eseguire operazioni booleane sulle mesh del modello. Verranno " -"esportate solo le parti positive." +"Unable to perform boolean operation on model meshes. Only positive parts " +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6190,6 +6607,11 @@ msgstr "Regione di accesso" msgid "Stealth Mode" msgstr "Modalità invisibile" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "Abilita plugin di rete" @@ -6205,6 +6627,25 @@ msgstr "Imperiale" msgid "Units" msgstr "Unità" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"Su OSX per impostazione predefinita c'è sempre una sola istanza dell'app in " +"esecuzione. Tuttavia è consentito eseguire più istanze della stessa app da " +"riga di comando. In tal caso, questa impostazione consentirà una sola " +"istanza." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Home" @@ -6214,6 +6655,18 @@ msgstr "Pagina predefinita" msgid "Set the page opened on startup." msgstr "Imposta la pagina aperta all'avvio." +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Zoom posizione del mouse" @@ -6231,6 +6684,12 @@ msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" "Se attivo, usa la visuale libera. Se non attivo, usa la visuale vincolata." +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Mostra splash screen" @@ -6250,6 +6709,31 @@ msgstr "" msgid "If enabled, auto-calculate everytime the color changed." msgstr "Se abilitato, calcola automaticamente ogni volta che il colore cambia." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Flushing volumes: Auto-calculate every time the filament is changed." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "If enabled, auto-calculate every time filament is changed" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." + msgid "Network" msgstr "Rete" @@ -6299,6 +6783,42 @@ msgstr "" "\"\n" "\"i file .step." +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Numero massimo di progetti recenti" @@ -6470,12 +6990,21 @@ msgstr "Seleziona/Rimuovi stampanti (preimpostazioni di sistema)" msgid "Create printer" msgstr "Creare una stampante" -msgid "Incompatible" -msgstr "Non compatibile" - msgid "The selected preset is null!" msgstr "Il preset selezionato è nullo!" +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "Personalizza" + +msgid "Other layer filament sequence" +msgstr "Other layer filament sequence" + +msgid "Please input layer value (>= 2)." +msgstr "Please input layer value (>= 2)." + msgid "Plate name" msgstr "Nome Piatto" @@ -6485,8 +7014,14 @@ msgstr "Uguale a Sequenza stampa globale" msgid "Print sequence" msgstr "Sequenza di stampa" -msgid "Customize" -msgstr "Personalizza" +msgid "Same as Global" +msgstr "Same as Global" + +msgid "Disable" +msgstr "Disable" + +msgid "Spiral vase" +msgstr "Vaso a spirale" msgid "First layer filament sequence" msgstr "Sequenza di filamenti di primo Layer" @@ -6551,15 +7086,6 @@ msgstr "Preset utente" msgid "Preset Inside Project" msgstr "Preset interno al Progetto" -msgid "Name is invalid;" -msgstr "Nome non valido;" - -msgid "illegal characters:" -msgstr "Caratteri illegali:" - -msgid "illegal suffix:" -msgstr "Suffisso illegale:" - msgid "Name is unavailable." msgstr "Nome non disponibile." @@ -6578,15 +7104,6 @@ msgstr "" msgid "Please note that saving action will replace this preset" msgstr "Tieni presente che il salvataggio sovrascriverà il preset corrente" -msgid "The name 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 "Il nome non può iniziare con uno spazio." - -msgid "The name is not allowed to end with space character." -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." @@ -6644,9 +7161,6 @@ msgstr "Non riesci a trovare i dispositivi?" msgid "Log out successful." msgstr "Log out riuscito." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Occupato" @@ -6671,12 +7185,6 @@ msgstr "Piastra PEI testurizzata Bambu" msgid "Send print job to" msgstr "Invia stampa a" -msgid "Refresh" -msgstr "Aggiorna" - -msgid "Bed Leveling" -msgstr "Livellamento piano" - msgid "Flow Dynamics Calibration" msgstr "Calibrazione della dinamica del flusso" @@ -6689,9 +7197,6 @@ msgstr "Invio completo" msgid "Error code" msgstr "Codice di errore" -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 "" "Nessun account di login, vengono visualizzate solo le stampanti in modalità " @@ -6772,9 +7277,13 @@ 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" -"La stampante selezionata è incompatibile con i preset della stampante scelti." +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "È necessario inserire una scheda microSD per registrare un timelapse." @@ -6834,46 +7343,40 @@ msgid "nozzle in preset: %s %s" msgstr "Ugello in preset: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "ugello memorizzato: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "ugello memorizzato: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"Il diametro del nozzle preimpostato non è coerente con il diametro di quello " -"memorizzato. Hai cambiato l'ugello ultimamente?" +"Your nozzle diameter in sliced file is not consistent with the saved nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*La stampa del materiale %s con %s può causare danni al nozzle." +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Please fix the error above, otherwise printing cannot continue." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Fai clic sul pulsante di conferma se desideri continuare con la stampa." -msgid "Hardened Steel" -msgstr "Acciaio temprato" - -msgid "Stainless Steel" -msgstr "Acciaio inox" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" "Collegamento alla stampante. Impossibile annullare durante il processo di " "connessione." -msgid "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." @@ -6887,6 +7390,9 @@ msgstr "Calibrazione automatica del flusso tramite Micro Lidar" msgid "Modifying the device name" msgstr "Modifica nome del dispositivo" +msgid "Bind with Pin Code" +msgstr "Bind with Pin Code" + msgid "Send to Printer SD card" msgstr "Invia a microSD stampante" @@ -6894,6 +7400,10 @@ msgid "Cannot send the print task when the upgrade is in progress" msgstr "" "Impossibile inviare attività di stampa quando è in corso un aggiornamento" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"La stampante selezionata è incompatibile con i preset della stampante scelti." + 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 " @@ -6938,6 +7448,28 @@ msgstr "Timeout ricezione del rapporto di login" msgid "Unknown Failure" msgstr "Fallimento sconosciuto" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." + +msgid "Can't find Pin Code?" +msgstr "Can't find Pin Code?" + +msgid "Pin Code" +msgstr "Pin Code" + +msgid "Binding..." +msgstr "Binding..." + +msgid "Please confirm on the printer screen" +msgstr "Please confirm on the printer screen" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Log in failed. Please check the Pin Code." + msgid "Log in printer" msgstr "Log in stampante" @@ -7139,6 +7671,28 @@ msgstr "Rettifica" msgid "Ignore" msgstr "Ignora" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications. Please use with the latest printer firmware." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -7220,6 +7774,9 @@ msgstr "Filamento per supporti" msgid "Tree supports" msgstr "Supporti ad albero" +msgid "Skirt" +msgstr "Skirt" + msgid "Prime tower" msgstr "Prime tower" @@ -7403,6 +7960,14 @@ msgstr "Parametri di cambio strumento con stampanti MM multiestrusore" msgid "Printable space" msgstr "Spazio di stampa" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Valore non valido fornito per il parametro %1%: %2%" + +msgid "G-code flavor is switched" +msgstr "La variante del G-Code è stata commutata" + msgid "Cooling Fan" msgstr "Velocità minima ventola di raffreddamento" @@ -7638,21 +8203,30 @@ msgstr "" "modifiche non salvate:" #, 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 "" -"Sono state modificate alcune impostazioni del preset \"%1%\". \n" -"Vuoi mantenere le impostazioni (nuovo valore) dopo aver cambiato i preset?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "You have changed some settings of preset \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"You can save or discard the preset values you have modified." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "You have previously modified your settings." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Sono stati modificati alcuni preset preimpostati. \n" -"Vuoi mantenere le impostazioni (nuovo valore) dopo aver cambiato i preset?" msgid "Extruders count" msgstr "Conteggio estrusori" @@ -7689,7 +8263,7 @@ msgid "Transfer values from left to right" msgstr "Trasferimento dei valori da sinistra a destra" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Se abilitata, questa finestra può essere utilizzata per trasferire i valori " @@ -7776,6 +8350,60 @@ msgstr "Nessun aggiornamento disponibile." msgid "The configuration is up to date." msgstr "Configurazione aggiornata." +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + msgid "Ramming customization" msgstr "Personalizzazione del ramming" @@ -7864,6 +8492,32 @@ msgstr "Da" msgid "To" msgstr "A" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "Plug-in di rete Bambu non rilevato." @@ -8142,6 +8796,12 @@ msgstr "Sposta il cursore 5 volte più velocemente" msgid "Shift+Mouse wheel" msgstr "Shift+Rotella mouse" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Note di aggiornamento" @@ -8171,6 +8831,42 @@ msgstr "Salta questa versione" msgid "Done" msgstr "Fine" +msgid "resume" +msgstr "resume" + +msgid "Resume Printing" +msgstr "Resume Printing" + +msgid "Resume Printing(defects acceptable)" +msgstr "Resume Printing (defects acceptable)" + +msgid "Resume Printing(problem solved)" +msgstr "Resume Printing (problem solved)" + +msgid "Stop Printing" +msgstr "Stop Printing" + +msgid "Check Assistant" +msgstr "Check Assistant" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruded, Continue" + +msgid "Not Extruded Yet, Retry" +msgstr "Not Extruded Yet, Retry" + +msgid "Finished, Continue" +msgstr "Finished, Continue" + +msgid "Load Filament" +msgstr "Carica" + +msgid "Filament Loaded, Resume" +msgstr "Filament Loaded, Resume" + +msgid "View Liveview" +msgstr "View Liveview" + msgid "Confirm and Update Nozzle" msgstr "Conferma e aggiorna l'ugello" @@ -8231,12 +8927,6 @@ msgstr "Versione:" msgid "Update firmware" msgstr "Aggiorna firmware" -msgid "Printing" -msgstr "Stampa" - -msgid "Idle" -msgstr "Inattivo" - msgid "Beta version" msgstr "Versione beta" @@ -8272,7 +8962,7 @@ 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." +"update next time starting Orca." msgstr "" "La versione firmware è anomala. Prima di stampare, è necessario eseguire la " "riparazione e l'aggiornamento. Si desidera aggiornare ora? È possibile " @@ -8417,9 +9107,6 @@ msgstr "Ponte interno" msgid "Gap infill" msgstr "Riempimento gap" -msgid "Skirt" -msgstr "Skirt" - msgid "Support interface" msgstr "Interfaccia supporto" @@ -9094,6 +9781,15 @@ msgstr "Engineering Plate" msgid "First layer print sequence" msgstr "Sequenza di stampa del primo strato" +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" + msgid "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." @@ -9957,21 +10653,12 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Ordine di parete/tamponamento. Quando la casella di controllo è " -"deselezionata, i muri vengono stampati per primi, il che funziona meglio " -"nella maggior parte dei casi.\n" -"\n" -"La stampa delle pareti può aiutare con sporgenze estreme poiché le pareti " -"hanno il riempimento vicino a cui aderire. Tuttavia, il riempimento spingerà " -"leggermente fuori le pareti stampate dove è attaccato ad esse, con " -"conseguente peggioramento della finitura superficiale esterna. Può anche far " -"brillare il riempimento attraverso le superfici esterne della parte." msgid "Wall loop direction" msgstr "Direzione del loop del muro" @@ -10029,6 +10716,12 @@ msgstr "" "Raggio di sicurezza attorno all'estrusore: utilizzato per evitare collisioni " "nella stampa per oggetto." +msgid "Nozzle height" +msgstr "Altezza nozzle" + +msgid "The height of nozzle tip." +msgstr "L'altezza punta del nozzle." + msgid "Bed mesh min" msgstr "Maglia del letto min" @@ -10156,6 +10849,22 @@ msgstr "" "arresterà mai del tutto, ma funzionerà almeno alla velocità minima per " "ridurre la frequenza di avvio e arresto." +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Layer time" @@ -10449,8 +11158,8 @@ msgstr "Venditore di filamenti. Solo per lo spettacolo" msgid "(Undefined)" msgstr "(Indefinito)" -msgid "Infill direction" -msgstr "Direzione riempimento" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10459,6 +11168,20 @@ msgstr "" "Questo è l'angolo della trama di riempimento che controlla l'inizio o la " "direzione principale delle linee." +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Densità riempimento" @@ -10507,6 +11230,9 @@ msgstr "Supporto cubico" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "Cross Hatch" + msgid "Sparse infill anchor length" msgstr "Lunghezza dell'ancora di riempimento sparsa" @@ -10725,6 +11451,9 @@ msgstr "" "\"close_fan_the_first_x_layers\", nel qual caso la ventola funzionerà alla " "massima velocità consentita al livello \"close_fan_the_first_x_layers\" + 1." +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "Supporta la velocità della ventola dell'interfaccia" @@ -10798,16 +11527,31 @@ msgstr "" "Indica la velocità per il riempimento del gap. I gap hanno solitamente una " "larghezza linea irregolare e devono essere stampate più lentamente." +msgid "Precise Z height" +msgstr "Precise Z height" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." + msgid "Arc fitting" msgstr "Arc fitting" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"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 "Aggiungi numero di riga" @@ -11041,13 +11785,25 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Sovrapposizione riempimento/parete" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"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 "Indica la velocità del riempimento interno." @@ -11747,6 +12503,30 @@ msgstr "" "la trasudazione durante le lunghe distanze. Imposta su 0 per disattivare la " "retrazione." +msgid "Long retraction when cut(experimental)" +msgstr "Long retraction when cut (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." + +msgid "Retraction distance when cut" +msgstr "Retraction distance when cut" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimental feature. Retraction length before cutting off during filament " +"change" + msgid "Z hop when retract" msgstr "Z hop in fase retrazione" @@ -12126,6 +12906,29 @@ msgstr "Altezza skirt" msgid "How many layers of skirt. Usually only one layer" msgstr "Numero di layer skirt: solitamente uno" +msgid "Draft shield" +msgstr "Scudo di protezione" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "Limitato" + +msgid "Enabled" +msgstr "Abilitato" + msgid "Skirt loops" msgstr "Anelli skirt" @@ -12141,6 +12944,17 @@ msgstr "" "Velocità del gonna, in mm/s. Zero significa utilizzare la velocità di " "estrusione dello strato predefinita." +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -12171,9 +12985,6 @@ msgstr "" "Indica la velocità del riempimento solido interno, esclusa la superficie " "superiore o inferiore." -msgid "Spiral vase" -msgstr "Vaso a 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 " @@ -12924,6 +13735,31 @@ msgstr "Spaziatura delle linee di spurgo della torre di pulitura" msgid "Spacing of purge lines on the wipe tower." msgstr "Spaziatura delle linee di spurgo sulla torre di pulitura." +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "Estrusore torre di pulitura" @@ -13701,6 +14537,9 @@ msgstr "Annullato" msgid "load_obj: failed to parse" msgstr "load_obj: analisi non riuscita" +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: failed to parse" + msgid "The file contains polygons with more than 4 vertices." msgstr "Il file contiene poligoni con più di 4 vertici." @@ -13781,12 +14620,6 @@ msgstr "Flusso" msgid "Max Volumetric Speed" msgstr "Massima velocità volumetrica" -msgid "Please enter the name you want to save to printer." -msgstr "Immettere il nome che si desidera salvare nella stampante." - -msgid "The name cannot exceed 40 characters." -msgstr "Il nome non può superare i 40 caratteri." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13835,6 +14668,19 @@ msgstr "Selezionare il filamento da calibrare." msgid "The input value size must be 3." msgstr "La dimensione del valore di input deve essere 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" + msgid "Connecting to printer..." msgstr "Collegamento alla stampante..." @@ -13846,6 +14692,24 @@ msgstr "" "Il risultato della calibrazione di Flow Dynamics è stato salvato nella " "stampante" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"C'è già un risultato di calibrazione precedente con lo stesso nome: %s. Ne " +"può essere salvato solo uno. Sei sicuro di voler sovrascrivere il risultato " +"precedente?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." + msgid "Internal Error" msgstr "Errore interno" @@ -13898,36 +14762,15 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"I dettagli della calibrazione dinamica del flusso sono disponibili nel " -"nostro wiki.\n" -"\n" -"Di solito la calibrazione non è necessaria. Quando si avvia una stampa a " -"singolo colore/materiale, con l'opzione \"calibrazione dinamica del flusso\" " -"selezionata nel menu di avvio della stampa, la stampante seguirà il vecchio " -"modo, calibrando il filamento prima della stampa; Quando si avvia una stampa " -"multicolore/materiale, la stampante utilizzerà il parametro di compensazione " -"predefinito per il filamento durante ogni cambio di filamento, che avrà un " -"buon risultato nella maggior parte dei casi.\n" -"\n" -"Si prega di notare che ci sono alcuni casi che renderanno il risultato della " -"calibrazione non affidabile: utilizzo di una piastra di texture per eseguire " -"la calibrazione; Il piano di stampa non ha una buona adesione (è consigliato " -"lavarlo o applicare della colla stick!) ... Puoi trovare di più dal nostro " -"wiki.\n" -"\n" -"I risultati della calibrazione hanno un jitter di circa il 10% nel nostro " -"test, il che potrebbe causare un risultato non esattamente lo stesso in ogni " -"calibrazione. Stiamo ancora indagando sulla causa principale per apportare " -"miglioramenti con i nuovi aggiornamenti." msgid "When to use Flow Rate Calibration" msgstr "Quando utilizzare la calibrazione della portata" @@ -14056,28 +14899,24 @@ msgstr "" msgid "Failed" msgstr "Fallito" +msgid "Please enter the name you want to save to printer." +msgstr "Immettere il nome che si desidera salvare nella stampante." + +msgid "The name cannot exceed 40 characters." +msgstr "Il nome non può superare i 40 caratteri." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" -"Verrà salvato solo uno dei risultati con lo stesso nome. Si è sicuri di " -"voler sovrascrivere gli altri risultati?" - -#, 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 "" -"Esiste già un risultato di calibrazione storico con lo stesso nome: %s. " -"Viene salvato solo uno dei risultati con lo stesso nome. Si è sicuri di " -"voler eseguire l'override del risultato cronologico?" +"Verrà salvato solo uno dei risultati con lo stesso nome. Sei sicuro di voler " +"sostituire gli altri risultati?" msgid "Please find the best line on your plate" msgstr "Trova la linea migliore nel tuo piatto" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "Si prega di trovare il cornor con il perfetto grado di estrusione" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Prego Individua l'angolo con il grado di estrusione ideale" msgid "Input Value" msgstr "Valore di input" @@ -14155,12 +14994,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametri di stampa" -msgid "- ℃" -msgstr "- °C" - -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Tipo di piatto" @@ -14210,12 +15043,6 @@ msgstr "Al valore k" msgid "Step value" msgstr "Valore del passaggio" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "Il diametro del nozzle è stato sincronizzato dalle impostazioni della " @@ -14230,6 +15057,9 @@ msgstr "Velocità volumetrica" msgid "Flow Dynamics Calibration Result" msgstr "Risultato della calibrazione della dinamica del flusso" +msgid "New" +msgstr "New" + msgid "No History Result" msgstr "Nessun risultato della cronologia" @@ -14242,9 +15072,22 @@ msgstr "Aggiornamento dei record storici di calibrazione di Flow Dynamics" msgid "Action" msgstr "Azione" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." + msgid "Edit Flow Dynamics Calibration" msgstr "Modifica calibrazione dinamica flusso (Edit Flow Dynamics)" +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." + msgid "Network lookup" msgstr "Ricerca network" @@ -14333,6 +15176,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU (TPU)" @@ -14429,6 +15275,9 @@ msgstr "Usa la barra ( / ) come separatore di cartella se necessario." msgid "Upload to storage" msgstr "Carica nello spazio di archiviazione" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "Il nome del file caricato non finisce con \"%s\". Vuoi continuare?" @@ -14637,6 +15486,16 @@ msgstr "" "Non è stata ancora selezionata una stampante o un Preset. Si prega di " "selezionarne almeno uno." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Il nome del filamento %s che hai creato esiste già. \n" +"Se continui nella creazione, il preset creato verrà visualizzato con il suo " +"nome completo. Vuoi continuare?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" "Non è stato possibile creare alcuni preset esistenti, come indicato di " @@ -14703,12 +15562,6 @@ msgstr "Rettangolo" msgid "Printable Space" msgstr "Spazio di stampa" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "STL del Piano Riscaldato" @@ -14866,21 +15719,26 @@ msgstr "Filamento creato" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -"Vai alle impostazioni del filamento per modificare le tue impostazioni " -"predefinite se necessario. \n" -"Nota che la temperatura della ugello, la temperatura del piano riscaldato e " -"la velocità volumetrica massima hanno un impatto significativo sulla qualità " -"di stampa. Impostale con attenzione." +"Se necessario, vai alle impostazioni filamento per modificare i preset.\n" +"Tieni presente che la temperatura del nozzle, la temperatura del piano e la " +"massima velocità volumetrica hanno ciascuna un impatto significativo sulla " +"qualità di stampa. Impostali con attenzione." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" msgstr "Impostazione della stampante" -msgid "Export Configs" -msgstr "Esporta &Configurazioni" - msgid "Printer config bundle(.orca_printer)" msgstr "Bundle di configurazione della stampante (.orca_printer)" @@ -14987,6 +15845,9 @@ msgstr "Seleziona almeno una stampante o un filamento." msgid "Please select a type you want to export" msgstr "Seleziona il tipo che desideri esportare" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." + msgid "Edit Filament" msgstr "Modifica filamento" @@ -15065,6 +15926,21 @@ msgstr "Riduci" msgid "Daily Tips" msgstr "Consigli giornalieri" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "nozzle memorizzato: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"Il diametro del nozzle preimpostato non è coerente con il diametro di quello " +"memorizzato. Hai cambiato l'ugello ultimamente?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*La stampa del materiale %s con %s può causare danni al nozzle." + msgid "Need select printer" msgstr "Hai bisogno di selezionare la stampante" @@ -15096,6 +15972,12 @@ msgstr "Sei sicuro di voler effettuare il logout?" msgid "Refresh Printers" msgstr "Aggiorna Stampanti" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15266,6 +16148,257 @@ msgstr "" "Corpo messaggio: \"%1%\"\n" "Errore: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a small layer height, and results in almost negligible layer lines " +"and high print quality. It is suitable for most general printing cases." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. This results in " +"much higher print quality but a much longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height. This results in almost negligible layer lines and " +"slightly longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height. This results in slightly visible layer lines but shorter print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height. This results in almost invisible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost invisible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height. This results in minimal layer lines and higher print quality but " +"longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in minimal layer lines and much higher print quality " +"but much longer print time." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a normal layer height, and results in average layer lines and print " +"quality. It is suitable for most printing cases." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but slightly shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in less apparent layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost negligible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and longer print time." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in much more apparent layer lines and much lower print " +"quality, but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and slightly higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"It has a very big layer height, and results in very apparent layer lines, " +"low print quality and shorter printing time." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height. This results in very apparent layer lines and much lower print " +"quality but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height. This results in extremely apparent layer lines and much lower " +"print quality but much shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height. This results in slightly less but still apparent layer " +"lines and slightly higher print quality, but longer print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height. This results in less but still apparent layer lines and slightly " +"higher print quality, but longer print time in some cases." + msgid "Connected to Obico successfully!" msgstr "" @@ -15278,17 +16411,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -15695,6 +16826,317 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Immettere un valore valido (K in 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Immettere un valore valido (K in 0~0.3, N in 0.6~2.0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Connessione locale della stampante fallita; Si prega di riprovare." + +#~ 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 "" +#~ "I dettagli della calibrazione dinamica del flusso sono disponibili nel " +#~ "nostro wiki.\n" +#~ "\n" +#~ "Di solito la calibrazione non è necessaria. Quando si avvia una stampa a " +#~ "singolo colore/materiale, con l'opzione \"calibrazione dinamica del flusso" +#~ "\" selezionata nel menu di avvio della stampa, la stampante seguirà il " +#~ "vecchio modo, calibrando il filamento prima della stampa; Quando si avvia " +#~ "una stampa multicolore/materiale, la stampante utilizzerà il parametro di " +#~ "compensazione predefinito per il filamento durante ogni cambio di " +#~ "filamento, che avrà un buon risultato nella maggior parte dei casi.\n" +#~ "\n" +#~ "Si prega di notare che ci sono alcuni casi che renderanno il risultato " +#~ "della calibrazione non affidabile: utilizzo di una piastra di texture per " +#~ "eseguire la calibrazione; Il piano di stampa non ha una buona adesione (è " +#~ "consigliato lavarlo o applicare della colla stick!) ... Puoi trovare di " +#~ "più dal nostro wiki.\n" +#~ "\n" +#~ "I risultati della calibrazione hanno un jitter di circa il 10% nel nostro " +#~ "test, il che potrebbe causare un risultato non esattamente lo stesso in " +#~ "ogni calibrazione. Stiamo ancora indagando sulla causa principale per " +#~ "apportare miglioramenti con i nuovi aggiornamenti." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Verrà salvato solo uno dei risultati con lo stesso nome. Si è sicuri di " +#~ "voler sovrascrivere gli altri risultati?" + +#, 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 "" +#~ "Esiste già un risultato di calibrazione storico con lo stesso nome: %s. " +#~ "Viene salvato solo uno dei risultati con lo stesso nome. Si è sicuri di " +#~ "voler eseguire l'override del risultato cronologico?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Si prega di trovare il cornor con il perfetto grado di estrusione" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Ordine di parete/tamponamento. Quando la casella di controllo è " +#~ "deselezionata, i muri vengono stampati per primi, il che funziona meglio " +#~ "nella maggior parte dei casi.\n" +#~ "\n" +#~ "La stampa delle pareti può aiutare con sporgenze estreme poiché le pareti " +#~ "hanno il riempimento vicino a cui aderire. Tuttavia, il riempimento " +#~ "spingerà leggermente fuori le pareti stampate dove è attaccato ad esse, " +#~ "con conseguente peggioramento della finitura superficiale esterna. Può " +#~ "anche far brillare il riempimento attraverso le superfici esterne della " +#~ "parte." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer è basato su BambuStudio di Bambulab, che è di PrusaSlicer di " +#~ "Prusa Research. PrusaSlicer è di Slic3r di Alessandro Ranellucci e della " +#~ "comunità RepRap" + +#~ msgid "Export &Configs" +#~ msgstr "Esporta &Configurazioni" + +#~ msgid "Infill direction" +#~ msgstr "Direzione riempimento" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "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 "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill" +#~ msgstr "" +#~ "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 "Export Configs" +#~ msgstr "Esporta &Configurazioni" + +#~ msgid "Unload Filament" +#~ msgstr "Scarica Filamento" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Seleziona uno slot AMS, premi \"Carica\" o \"Scarica\" per caricare o " +#~ "scaricare automaticamente il filamento." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "active" +#~ msgstr "attivo" + +#~ msgid "Jump to layer" +#~ msgstr "Vai al layer" + +#~ msgid "Cabin humidity" +#~ msgstr "Umidità della cabina" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Il verde indica che l'umidità dell'AMS è normale, l'arancione che " +#~ "l'umidità è elevata, il rosso rappresenta un'umidità troppo elevata " +#~ "(igrometro: più basso è, meglio è)." + +#~ msgid "Desiccant status" +#~ msgstr "Stato dell'essiccante" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "Uno stato dell'essiccante inferiore a due barre indica che l'essiccante " +#~ "potrebbe essere inattivo. Si prega di sostituire l'essiccante. (Le barre: " +#~ "più sono alte, meglio è)." + +#~ 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 "" +#~ "Nota: quando il coperchio è aperto o la confezione di essiccante viene " +#~ "cambiata, possono essere necessarie ore o una notte per assorbire " +#~ "l'umidità. Anche le basse temperature rallentano il processo. Durante " +#~ "questo periodo, l'indicatore potrebbe non rappresentare la camera con " +#~ "precisione." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Nota: se durante la stampa viene inserito un nuovo filamento, l'AMS non " +#~ "leggerà automaticamente alcuna informazione fino al termine della stampa." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Successo! G-code esportato in %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Inizializzazione fallita (nessun dispositivo)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "Stampante in fase di caricamento; attendi il completamento del " +#~ "caricamento." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Inizializzazione non riuscita (non supportata nella versione corrente " +#~ "della stampante)!" + +#~ 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)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Interrotto [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Caricamento non riuscito [%d]!" + +#, 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]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Impossibile recuperare le informazioni del modello dalla stampante." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "Impossibile analizzare le informazioni del modello." + +#~ msgid "Connection lost. Please retry." +#~ msgstr "Connessione persa. Si prega di riprovare." + +#~ msgid "File not exists." +#~ msgstr "Il file non esiste." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Impossibile eseguire operazioni booleane sulle mesh del modello. Verranno " +#~ "esportate solo le parti positive." + +#, 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 "" +#~ "Sono state modificate alcune impostazioni del preset \"%1%\". \n" +#~ "Vuoi mantenere le impostazioni (nuovo valore) dopo aver cambiato i preset?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Sono stati modificati alcuni preset preimpostati. \n" +#~ "Vuoi mantenere le impostazioni (nuovo valore) dopo aver cambiato i preset?" + +#~ msgid " ℃" +#~ msgstr " °C" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "Vai alle impostazioni del filamento per modificare le tue impostazioni " +#~ "predefinite se necessario. \n" +#~ "Nota che la temperatura della ugello, la temperatura del piano riscaldato " +#~ "e la velocità volumetrica massima hanno un impatto significativo sulla " +#~ "qualità di stampa. Impostale con attenzione." + #~ msgid "Studio Version:" #~ msgstr "Versione Studio:" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 175fc21b82..e4806b5ada 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -102,7 +103,7 @@ msgid "Support Generated" msgstr "生成されたサポート" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "ギズモ-面に配置" msgid "Lay on face" msgstr "底面選択" @@ -151,7 +152,7 @@ msgid "Height range" msgstr "高さ範囲" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Enter" msgid "Toggle Wireframe" msgstr "ワイヤフレームの表示/非表示" @@ -166,10 +167,10 @@ msgid "Height Range" msgstr "高さ範囲" msgid "Vertical" -msgstr "" +msgstr "Vertical" msgid "Horizontal" -msgstr "" +msgstr "Horizontal" msgid "Remove painted color" msgstr "塗った色を消去" @@ -182,13 +183,13 @@ msgid "Move" msgstr "移動" msgid "Gizmo-Move" -msgstr "" +msgstr "ギズモ-移動" msgid "Rotate" msgstr "回転" msgid "Gizmo-Rotate" -msgstr "" +msgstr "ギズモ-回転" msgid "Optimize orientation" msgstr "向きを最適化" @@ -200,7 +201,7 @@ msgid "Scale" msgstr "スケール" msgid "Gizmo-Scale" -msgstr "" +msgstr "ギズモ-縮尺" msgid "Error: Please close all toolbar menus first" msgstr "エラー: ツールバーを閉じてください" @@ -253,6 +254,9 @@ msgstr "回転をリセット" msgid "World coordinates" msgstr "空間座標" +msgid "Object coordinates" +msgstr "オブジェクト座標" + msgid "°" msgstr "°" @@ -267,16 +271,16 @@ msgid "uniform scale" msgstr "スケール" msgid "Planar" -msgstr "" +msgstr "Planar" msgid "Dovetail" -msgstr "" +msgstr "Dovetail" msgid "Auto" msgstr "自動" msgid "Manual" -msgstr "" +msgstr "手動" msgid "Plug" msgstr "Plug" @@ -285,10 +289,10 @@ msgid "Dowel" msgstr "Dowel" msgid "Snap" -msgstr "" +msgstr "Snap" msgid "Prism" -msgstr "" +msgstr "プリズム" msgid "Frustum" msgstr "Frustum" @@ -300,13 +304,13 @@ msgid "Hexagon" msgstr "Hexagon" msgid "Keep orientation" -msgstr "" +msgstr "Keep orientation" msgid "Place on cut" msgstr "Place on cut" msgid "Flip upside down" -msgstr "" +msgstr "上下反転" msgid "Connectors" msgstr "Connectors" @@ -324,19 +328,19 @@ msgstr "形状" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Depth" msgid "Groove" -msgstr "" +msgstr "Groove" msgid "Width" msgstr "幅" msgid "Flap Angle" -msgstr "" +msgstr "Flap Angle" msgid "Groove Angle" -msgstr "" +msgstr "Groove Angle" msgid "Part" msgstr "パーツ" @@ -348,21 +352,26 @@ msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane" msgstr "" +"クリックでカット面を反転\n" +"ドラッグでカット面を移動" msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane\n" "Right-click a part to assign it to the other side" msgstr "" +"クリックでカット面を反転させる\n" +"ドラッグしてカット面を移動する\n" +"パーツを右クリックすると、他方のパーツに割り当てます" msgid "Move cut plane" -msgstr "" +msgstr "カット面の移動" msgid "Mode" -msgstr "" +msgstr "Mode" msgid "Change cut mode" -msgstr "" +msgstr "カットモード変更" msgid "Tolerance" msgstr "Tolerance" @@ -401,22 +410,22 @@ msgid "Cut" msgstr "カット" msgid "Rotate cut plane" -msgstr "" +msgstr "カット面の回転" msgid "Remove connectors" msgstr "Remove connectors" msgid "Bulge" -msgstr "" +msgstr "Bulge" msgid "Bulge proportion related to radius" -msgstr "" +msgstr "バルジの比率と半径の関係" msgid "Space" msgstr "スペース" msgid "Space proportion related to radius" -msgstr "" +msgstr "半径に関係する空間の割合" msgid "Confirm connectors" msgstr "Confirm connectors" @@ -425,26 +434,26 @@ msgid "Cancel" msgstr "取消し" msgid "Build Volume" -msgstr "" +msgstr "ビルドボリューム" msgid "Flip cut plane" -msgstr "" +msgstr "カット面の反転" msgid "Groove change" -msgstr "" +msgstr "溝変更" msgid "Reset" msgstr "リセット" #. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. msgid "Edited" -msgstr "" +msgstr "編集済み" msgid "Cut position" -msgstr "" +msgstr "カットポジション" msgid "Reset cutting plane" -msgstr "" +msgstr "カット面をリセット" msgid "Edit connectors" msgstr "Edit connectors" @@ -453,10 +462,10 @@ msgid "Add connectors" msgstr "Add connectors" msgid "Reset cut" -msgstr "" +msgstr "カットをリセット" msgid "Reset cutting plane and remove connectors" -msgstr "" +msgstr "カット面をリセットし、コネクターを削除" msgid "Upper part" msgstr "Upper part" @@ -499,31 +508,31 @@ msgid "Some connectors are overlapped" msgstr "Some connectors are overlapped" msgid "Select at least one object to keep after cutting." -msgstr "" +msgstr "カットした後に残すものを1つ以上選んでください。" msgid "Cut plane is placed out of object" -msgstr "" +msgstr "カット面はオブジェクトの外に配置される" msgid "Cut plane with groove is invalid" -msgstr "" +msgstr "溝のあるカット面は無効" msgid "Connector" msgstr "Connector" msgid "Cut by Plane" -msgstr "" +msgstr "面でカット" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgstr "Non-manifold edges be caused by cut tool: do you want to fix now?" msgid "Repairing model object" msgstr "モデルオブジェクトを修復" msgid "Cut by line" -msgstr "" +msgstr "ラインでカット" msgid "Delete connector" -msgstr "" +msgstr "コネクター削除" msgid "Mesh name" msgstr "メッシュ名" @@ -611,13 +620,13 @@ msgid "Remove selection" msgstr "選択を削除" msgid "Entering Seam painting" -msgstr "" +msgstr "継ぎ目をペイント" msgid "Leaving Seam painting" -msgstr "" +msgstr "継ぎ目ペイントを退出" msgid "Paint-on seam editing" -msgstr "" +msgstr "継ぎ目編集" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -658,50 +667,50 @@ msgstr "文字形状" #. TRN - Title in Undo/Redo stack after rotate with text around emboss axe msgid "Text rotate" -msgstr "" +msgstr "テキストの回転" #. TRN - Title in Undo/Redo stack after move with text along emboss axe - From surface msgid "Text move" -msgstr "" +msgstr "テキストの移動" msgid "Set Mirror" -msgstr "" +msgstr "ミラーリング設定" msgid "Embossed text" -msgstr "" +msgstr "エンボステキスト" msgid "Enter emboss gizmo" -msgstr "" +msgstr "エンボスギズモに入る" msgid "Leave emboss gizmo" -msgstr "" +msgstr "エンボスギズモを退出" msgid "Embossing actions" -msgstr "" +msgstr "エンボス加工" msgid "Emboss" -msgstr "" +msgstr "エンボス" msgid "NORMAL" -msgstr "" +msgstr "ノーマル" msgid "SMALL" -msgstr "" +msgstr "スモール" msgid "ITALIC" -msgstr "" +msgstr "イタリック" msgid "SWISS" -msgstr "" +msgstr "スイス" msgid "MODERN" -msgstr "" +msgstr "モダン" msgid "First font" -msgstr "" +msgstr "最初のフォント" msgid "Default font" -msgstr "" +msgstr "デフォルトフォント" msgid "Advanced" msgstr "高度な設定" @@ -710,142 +719,144 @@ msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." msgstr "" +"選択されているフォントでは、文字が書けません。別のフォントを選択してみてくだ" +"さい。" msgid "Embossed text cannot contain only white spaces." -msgstr "" +msgstr "エンボス加工されたテキストは、空白部分のみを含むことはできません。" msgid "Text contains character glyph (represented by '?') unknown by font." -msgstr "" +msgstr "テキストにフォントで不明な文字記号( '?'で表される)が含まれている。" msgid "Text input doesn't show font skew." -msgstr "" +msgstr "テキスト入力でイタリック体が表示されない。" msgid "Text input doesn't show font boldness." -msgstr "" +msgstr "文字入力でボールドフォントが表示されない。" msgid "Text input doesn't show gap between lines." -msgstr "" +msgstr "テキスト入力で、行間が表示されない。" msgid "Too tall, diminished font height inside text input." -msgstr "" +msgstr "高すぎます、テキスト入力の文字高を小さくしました。" msgid "Too small, enlarged font height inside text input." -msgstr "" +msgstr "小さすぎます、テキスト入力時のフォント高さを大きくしました。" msgid "Text doesn't show current horizontal alignment." -msgstr "" +msgstr "テキストが現在の水平アライメントを示さない。" msgid "Revert font changes." -msgstr "" +msgstr "フォント変更を元に戻す" #, boost-format msgid "Font \"%1%\" can't be selected." -msgstr "" +msgstr "フォント\"%1%\"は選択できません。" msgid "Operation" -msgstr "" +msgstr "オペレーション" msgid "Join" -msgstr "" +msgstr "結合" msgid "Click to change text into object part." -msgstr "" +msgstr "クリックすると、テキストをオブジェクトパーツに変更します。" msgid "You can't change a type of the last solid part of the object." -msgstr "" +msgstr "オブジェクトの最後のソリッドパーツのタイプを変更することはできません。" msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "カット" msgid "Click to change part type into negative volume." -msgstr "" +msgstr "クリックすると、パーツタイプをマイナスボリュームに変更します。" msgid "Modifier" msgstr "モディファイア" msgid "Click to change part type into modifier." -msgstr "" +msgstr "クリックすると、パーツタイプをモディファイアに変更します。" msgid "Change Text Type" -msgstr "" +msgstr "テキストタイプ変更" #, boost-format msgid "Rename style(%1%) for embossing text" -msgstr "" +msgstr "エンボステキスト用のスタイル(%1%) をリネームする" msgid "Name can't be empty." -msgstr "" +msgstr "名前を空にすることはできません。" msgid "Name has to be unique." -msgstr "" +msgstr "名前は一意でなければなりません。" msgid "OK" msgstr "OK" msgid "Rename style" -msgstr "" +msgstr "スタイルの名前を変更" msgid "Rename current style." -msgstr "" +msgstr "源左のスタイルの名前を変更" msgid "Can't rename temporary style." -msgstr "" +msgstr "テンポラリスタイルの名前を変更できません。" msgid "First Add style to list." -msgstr "" +msgstr "まず、スタイルをリストに追加" #, boost-format msgid "Save %1% style" -msgstr "" +msgstr "%1% スタイル保存" msgid "No changes to save." -msgstr "" +msgstr "保存する変更点はありません。" msgid "New name of style" -msgstr "" +msgstr "スタイルの新しい名前" msgid "Save as new style" -msgstr "" +msgstr "新しいスタイルとして保存します。" msgid "Only valid font can be added to style." -msgstr "" +msgstr "スタイルに追加できるのは、有効なフォントだけです。" msgid "Add style to my list." -msgstr "" +msgstr "マイリストにスタイルを追加。" msgid "Save as new style." -msgstr "" +msgstr "新しいスタイルとして保存します。" msgid "Remove style" -msgstr "" +msgstr "スタイル削除" msgid "Can't remove the last existing style." -msgstr "" +msgstr "最後に存在したスタイルを削除できません。" #, boost-format msgid "Are you sure you want to permanently remove the \"%1%\" style?" -msgstr "" +msgstr "本当に\"%1%\"スタイルを永久に削除しますか?" #, boost-format msgid "Delete \"%1%\" style." -msgstr "" +msgstr "\"%1%\"スタイル削除" #, boost-format msgid "Can't delete \"%1%\". It is last style." -msgstr "" +msgstr "\"%1%\"を削除できません。直前に使用していたスタイルです。" #, boost-format msgid "Can't delete temporary style \"%1%\"." -msgstr "" +msgstr "テンポラリスタイル\"%1%\"を削除できません。" #, boost-format msgid "Modified style \"%1%\"" -msgstr "" +msgstr "変更したスタイル\"%1%\"" #, boost-format msgid "Current style is \"%1%\"" -msgstr "" +msgstr "現在のスタイルは\"%1%\"" #, boost-format msgid "" @@ -853,145 +864,157 @@ msgid "" "\n" "Would you like to continue anyway?" msgstr "" +"スタイルを\"%1%\"に変更すると、現在のスタイル変更は破棄されます。\n" +"\n" +"それでもこのまま続けますか?" msgid "Not valid style." -msgstr "" +msgstr "有効なスタイルではありません。" #, boost-format msgid "Style \"%1%\" can't be used and will be removed from a list." -msgstr "" +msgstr "スタイル\"%1%\"は使用できないので、リストから削除されます。" msgid "Unset italic" -msgstr "" +msgstr "イタリック設定を解除" msgid "Set italic" -msgstr "" +msgstr "イタリック設定" msgid "Unset bold" -msgstr "" +msgstr "ボールド設定解除" msgid "Set bold" -msgstr "" +msgstr "ボールド設定" msgid "Revert text size." -msgstr "" +msgstr "テキストサイズを元に戻す" msgid "Revert embossed depth." -msgstr "" +msgstr "エンボス深さを元に戻す" msgid "" "Advanced options cannot be changed for the selected font.\n" "Select another font." msgstr "" +"選択されているフォントでは、高度なオプションを変更することはできません。\n" +"他のフォントを選択してください。" msgid "Revert using of model surface." -msgstr "" +msgstr "モデル面の使用を元に戻す。" msgid "Revert Transformation per glyph." -msgstr "" +msgstr "文字ごとに変換を戻す。" msgid "Set global orientation for whole text." -msgstr "" +msgstr "テキスト全体のグローバルな方向を設定する。" msgid "Set position and orientation per glyph." -msgstr "" +msgstr "文字ごとに位置と方向を設定する。" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "左面" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "センター" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "右面" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "トップ" msgctxt "Alignment" msgid "Middle" -msgstr "" +msgstr "ミドル" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "底面" msgid "Revert alignment." -msgstr "" +msgstr "アライメントを戻す。" #. TRN EmbossGizmo: font units msgid "points" -msgstr "" +msgstr "ポイント" msgid "Revert gap between characters" -msgstr "" +msgstr "文字間のズレを戻す" msgid "Distance between characters" -msgstr "" +msgstr "文字の間隔" msgid "Revert gap between lines" -msgstr "" +msgstr "ライン間のズレを戻す" msgid "Distance between lines" -msgstr "" +msgstr "ライン間距離" msgid "Undo boldness" -msgstr "" +msgstr "ボールドネス取り消し" msgid "Tiny / Wide glyphs" -msgstr "" +msgstr "小さい/広いグリフ" msgid "Undo letter's skew" -msgstr "" +msgstr "文字の傾きを取り消す" msgid "Italic strength ratio" -msgstr "" +msgstr "イタリック体の強度比" msgid "Undo translation" -msgstr "" +msgstr "移動を取り消す" msgid "Distance of the center of the text to the model surface." -msgstr "" +msgstr "テキストの中心からモデル表面までの距離。" msgid "Undo rotation" -msgstr "" +msgstr "回転を取り消す" msgid "Rotate text Clock-wise." -msgstr "" +msgstr "テキストを時計回りに回転。" msgid "Unlock the text's rotation when moving text along the object's surface." msgstr "" +"オブジェクトの表面に沿ってテキストを移動させる時に、テキストの回転ロックを解" +"除する。" msgid "Lock the text's rotation when moving text along the object's surface." msgstr "" +"オブジェクトの表面に沿ってテキストを移動させる時に、テキストの回転をロックす" +"る。" msgid "Select from True Type Collection." -msgstr "" +msgstr "True Type コレクションから選択。" msgid "Set text to face camera" -msgstr "" +msgstr "テキストをカメラに向ける" msgid "Orient the text towards the camera." -msgstr "" +msgstr "テキストの向きをカメラ側にする。" #, boost-format msgid "" "Can't load exactly same font(\"%1%\"). Aplication selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" +"全く同じフォント(\"%1%\")を読み込むことができません。アプリケーションは似たよ" +"うなもの(\"%2%\")を選択しました。編集テキストを有効にするには、フォントを指定" +"する必要があります。" msgid "No symbol" -msgstr "" +msgstr "シンボルなし" msgid "Loading" msgstr "ロード中" msgid "In queue" -msgstr "" +msgstr "キュー内" #. TRN - Input label. Be short as possible #. Height of one text line - Font Ascent @@ -1002,35 +1025,35 @@ msgstr "高度" #. Copy surface of model on surface of the embossed text #. TRN - Input label. Be short as possible msgid "Use surface" -msgstr "" +msgstr "サーフェースを使用" #. TRN - Input label. Be short as possible #. Option to change projection on curved surface #. for each character(glyph) in text separately msgid "Per glyph" -msgstr "" +msgstr "文字あたり" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right msgid "Alignment" -msgstr "" +msgstr "アライメント" #. TRN - Input label. Be short as possible msgid "Char gap" -msgstr "" +msgstr "文字間ギャップ" #. TRN - Input label. Be short as possible msgid "Line gap" -msgstr "" +msgstr "ラインギャップ" #. TRN - Input label. Be short as possible msgid "Boldness" -msgstr "" +msgstr "ボールドネス" #. TRN - Input label. Be short as possible #. Like Font italic msgid "Skew ratio" -msgstr "" +msgstr "傾斜比" #. TRN - Input label. Be short as possible #. Distance from model surface to be able @@ -1038,251 +1061,255 @@ msgstr "" #. move text as modifier fully out of not flat surface #. TRN - Input label. Be short as possible msgid "From surface" -msgstr "" +msgstr "表面から" #. TRN - Input label. Be short as possible #. Keep vector from bottom to top of text aligned with printer Y axis msgid "Keep up" -msgstr "" +msgstr "続ける" #. TRN - Input label. Be short as possible. #. Some Font file contain multiple fonts inside and #. this is numerical selector of font inside font collections msgid "Collection" -msgstr "" +msgstr "コレクション" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" -msgstr "" +msgstr "SVGの回転" #. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface msgid "SVG move" -msgstr "" +msgstr "SVGの移動" msgid "Enter SVG gizmo" -msgstr "" +msgstr "SVGギズモに入る" msgid "Leave SVG gizmo" -msgstr "" +msgstr "SVGギズモから出る" msgid "SVG actions" -msgstr "" +msgstr "SVGアクション" msgid "SVG" -msgstr "" +msgstr "SVG" #, boost-format msgid "Opacity (%1%)" -msgstr "" +msgstr "不透明度 (%1%)" #, boost-format msgid "Color gradient (%1%)" -msgstr "" +msgstr "カラーグラデーション (%1%)" msgid "Undefined fill type" -msgstr "" +msgstr "未定義のフィルタイプ" msgid "Linear gradient" -msgstr "" +msgstr "線形グラデーション" msgid "Radial gradient" -msgstr "" +msgstr "放射状グラデーション" msgid "Open filled path" -msgstr "" +msgstr "塗りつぶしパスを開く" msgid "Undefined stroke type" -msgstr "" +msgstr "未定義のストロークタイプ" msgid "Path can't be healed from selfintersection and multiple points." -msgstr "" +msgstr "自己交差および複数のポイントからパスを修復できません。" msgid "" "Final shape constains selfintersection or multiple points with same " "coordinate." -msgstr "" +msgstr "最終的な形状には、同じ座標を持つ複数の点の自己交差が含まれています。" #, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "" +msgstr "図形は非表示としてマークされています (%1%)" #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. #, boost-format msgid "Fill of shape (%1%) contains unsupported: %2%." msgstr "" +"形状の塗りつぶし(%1%) にはサポートされていないものが含まれています: %2%" #, boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "" +msgstr "形状のストローク (%1%) が細すぎます (最小幅は %2% mm)。" #, boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." msgstr "" +"形状 (%1%) のストロークにサポートされていないものが含まれています: %2%." msgid "Face the camera" -msgstr "" +msgstr "カメラに向ける" #. TRN - Preview of filename after clear local filepath. msgid "Unknown filename" -msgstr "" +msgstr "不明なファイル名" #, boost-format msgid "SVG file path is \"%1%\"" -msgstr "" +msgstr "SVGファイルパス: \"%1%\"" msgid "Reload SVG file from disk." -msgstr "" +msgstr "ディスクからSVGファイルを再読込みします。" msgid "Change file" -msgstr "" +msgstr "ファイル変更" msgid "Change to another .svg file" -msgstr "" +msgstr "別の .svg ファイルに変更します" msgid "Forget the file path" -msgstr "" +msgstr "ファイルパスを忘れる" msgid "" "Do NOT save local path to 3MF file.\n" "Also disables 'reload from disk' option." msgstr "" +"ローカルパスを3MFファイルに保存しない。\n" +"また、'reload from disk' オプションも無効にする。" #. TRN: An menu option to convert the SVG into an unmodifiable model part. msgid "Bake" -msgstr "" +msgstr "焼付け" #. TRN: Tooltip for the menu item. msgid "Bake into model as uneditable part" -msgstr "" +msgstr "編集不可パーツとしてモデルに焼付けする" msgid "Save as" -msgstr "" +msgstr "別名で保存" msgid "Save SVG file" -msgstr "" +msgstr "SVGファイルの保存" msgid "Save as '.svg' file" -msgstr "" +msgstr "'.svg' ファイルとして保存" msgid "Size in emboss direction." -msgstr "" +msgstr "エンボス方向のサイズです。" #. TRN: The placeholder contains a number. #, boost-format msgid "Scale also changes amount of curve samples (%1%)" -msgstr "" +msgstr "スケールによりカーブ サンプル量も変更されます(%1%)" msgid "Width of SVG." -msgstr "" +msgstr "SVGの幅" msgid "Height of SVG." -msgstr "" +msgstr "SVGの高さ" msgid "Lock/unlock the aspect ratio of the SVG." -msgstr "" +msgstr "SVG のアスペクト比をロック/アンロックします。" msgid "Reset scale" -msgstr "" +msgstr "縮尺をリセット" msgid "Distance of the center of the SVG to the model surface." -msgstr "" +msgstr "SVG の中心からモデル表面までの距離。" msgid "Reset distance" -msgstr "" +msgstr "距離をリセット" msgid "Reset rotation" -msgstr "" +msgstr "回転をリセット" msgid "Lock/unlock rotation angle when dragging above the surface." -msgstr "" +msgstr "表面上をドラッグするときの回転角度のロック/アンロック。" msgid "Mirror vertically" -msgstr "" +msgstr "垂直にミラーリング" msgid "Mirror horizontally" -msgstr "" +msgstr "水平にミラーリング" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" -msgstr "" +msgstr "SVGタイプ変更" #. TRN - Input label. Be short as possible msgid "Mirror" msgstr "反転" msgid "Choose SVG file for emboss:" -msgstr "" +msgstr "エンボス用の SVG ファイルを選択します:" #, boost-format msgid "File does NOT exist (%1%)." -msgstr "" +msgstr "ファイルが存在しません (%1%)。" #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" -msgstr "" +msgstr "ファイル名は\".svg\" で終わる必要がありますが、%1%を選択しました" #, boost-format msgid "Nano SVG parser can't load from file (%1%)." -msgstr "" +msgstr "Nano SVG パーサーはファイル(%1%)からロードできません。" #, boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." -msgstr "" +msgstr "SVG ファイルには、エンボスされる単一のパス(%1%)が含まれていません。" msgid "Vertex" -msgstr "" +msgstr "Vertex" msgid "Edge" -msgstr "" +msgstr "Edge" msgid "Plane" -msgstr "" +msgstr "Plane" msgid "Point on edge" -msgstr "" +msgstr "Point on edge" msgid "Point on circle" -msgstr "" +msgstr "Point on circle" msgid "Point on plane" -msgstr "" +msgstr "Point on plane" msgid "Center of edge" -msgstr "" +msgstr "Center of edge" msgid "Center of circle" -msgstr "" +msgstr "Center of circle" msgid "ShiftLeft mouse button" msgstr "" msgid "Select feature" -msgstr "" +msgstr "Select feature" msgid "Select point" -msgstr "" +msgstr "Select point" msgid "Delete" msgstr "削除" msgid "Restart selection" -msgstr "" +msgstr "Restart selection" msgid "Esc" msgstr "Esc" msgid "Unselect" -msgstr "" +msgstr "選択解除" msgid "Measure" -msgstr "" +msgstr "Measure" msgid "Edit to scale" -msgstr "" +msgstr "Edit to scale" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "スケール" msgid "None" msgstr "無し" @@ -1294,22 +1321,22 @@ msgid "Length" msgstr "長さ" msgid "Selection" -msgstr "" +msgstr "Selection" msgid "Copy to clipboard" msgstr "コピー" msgid "Perpendicular distance" -msgstr "" +msgstr "Perpendicular distance" msgid "Distance" -msgstr "" +msgstr "Distance" msgid "Direct distance" -msgstr "" +msgstr "Direct distance" msgid "Distance XYZ" -msgstr "" +msgstr "Distance XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1347,9 +1374,6 @@ msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "構成ファイル %1% がロードされましたが、一部の値が認識できませんでした" -msgid "V" -msgstr "V" - 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." @@ -1442,11 +1466,14 @@ msgid "Choose one file (3mf):" msgstr "ファイルを選択 (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" -msgstr "" +msgstr "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "ファイルを選択 (3mf/step/stl/svg/obj/amf)" +msgid "Choose ZIP file" +msgstr "ZIPファイルの選択" + msgid "Choose one file (gcode/3mf):" msgstr "" @@ -1481,9 +1508,11 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"The number of user presets cached in the cloud has exceeded the upper limit, " +"newly created user presets can only be used locally." msgid "Sync user presets" -msgstr "" +msgstr "Sync user presets" msgid "Loading user preset" msgstr "ユーザープリセットを読込み中" @@ -1512,6 +1541,13 @@ msgstr "進行中のアップロード" msgid "Select a G-code file:" msgstr "G-codeファイルを選択" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"URLのダウンロードを開始できませんでした。保存先フォルダが設定されていません。" +"設定ウィザードで保存先フォルダーを選択してください。" + msgid "Import File" msgstr "Import File" @@ -1601,22 +1637,22 @@ msgid "Add support enforcer" msgstr "サポート補強を追加" msgid "Add text" -msgstr "" +msgstr "テキストの追加" msgid "Add negative text" -msgstr "" +msgstr "切取りテキストの追加" msgid "Add text modifier" -msgstr "" +msgstr "テキストモディファイアの追加" msgid "Add SVG part" -msgstr "" +msgstr "SVGパーツ追加" msgid "Add negative SVG" -msgstr "" +msgstr "切取りSVGの追加" msgid "Add SVG modifier" -msgstr "" +msgstr "SVGモディファイアの追加" msgid "Select settings" msgstr "設定を選択" @@ -1646,16 +1682,16 @@ msgid "Cone" msgstr "コーン" msgid "Disc" -msgstr "" +msgstr "Disc" msgid "Torus" -msgstr "" +msgstr "Torus" msgid "Orca Cube" msgstr "" msgid "3DBenchy" -msgstr "" +msgstr "3DBenchy" msgid "Autodesk FDM Test" msgstr "" @@ -1678,7 +1714,7 @@ msgid "" msgstr "" msgid "Text" -msgstr "" +msgstr "テキスト" msgid "Height range Modifier" msgstr "Height Range Modifier" @@ -1708,10 +1744,10 @@ msgid "Fix model" msgstr "モデルを修復" msgid "Export as one STL" -msgstr "" +msgstr "Export as one STL" msgid "Export as STLs" -msgstr "" +msgstr "Export as STLs" msgid "Reload from disk" msgstr "ディスクから再読込み" @@ -1738,8 +1774,8 @@ msgstr "デフォルト" msgid "Filament %d" msgstr "フィラメント %d" -msgid "active" -msgstr "アクティブ" +msgid "current" +msgstr "現在" msgid "Scale to build volume" msgstr "ビルド容積に合わせる" @@ -1784,10 +1820,10 @@ msgid "Assemble the selected objects to an object with single part" msgstr "選択したオブジェクトを一つオブジェクトに組み立てます(単パーツ)" msgid "Mesh boolean" -msgstr "" +msgstr "Mesh boolean" msgid "Mesh boolean operations including union and subtraction" -msgstr "" +msgstr "Mesh boolean operations including union and subtraction" msgid "Along X axis" msgstr "X軸方向" @@ -1811,16 +1847,16 @@ msgid "Mirror object" msgstr "オブジェクトを反転" msgid "Edit text" -msgstr "" +msgstr "テキスト編集" msgid "Ability to change text, font, size, ..." -msgstr "" +msgstr "テキスト、フォント、サイズ、...を変更することが可能" msgid "Edit SVG" -msgstr "" +msgstr "SVG編集" msgid "Change SVG source file, projection, size, ..." -msgstr "" +msgstr "SVG ソース ファイル、プロジェクション、サイズなどを変更します。" msgid "Invalidate cut info" msgstr "Invalidate cut info" @@ -1831,6 +1867,9 @@ msgstr "プリミティブを追加" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "モデルを追加" + msgid "Show Labels" msgstr "ラベルを表示" @@ -1882,6 +1921,12 @@ msgstr "レイアウト" msgid "arrange current plate" msgstr "現在のプレートをレイアウト" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自動回転" @@ -1915,9 +1960,6 @@ msgstr "フィラメントを変更" msgid "Set Filament for selected items" msgstr "選択した項目のフィラメントを設定" -msgid "current" -msgstr "現在" - msgid "Unlock" msgstr "ロック解除" @@ -1925,7 +1967,7 @@ msgid "Lock" msgstr "ロック" msgid "Edit Plate Name" -msgstr "" +msgstr "Edit Plate Name" msgid "Name" msgstr "名称" @@ -1982,7 +2024,7 @@ msgid "Error!" msgstr "エラー!" msgid "Failed to get the model data in the current file." -msgstr "" +msgstr "Failed to get the model data in the current file." msgid "Generic" msgstr "一般" @@ -2217,7 +2259,7 @@ msgid "Pause" msgstr "一時停止" msgid "Template" -msgstr "" +msgstr "Template" msgid "Custom" msgstr "カスタム" @@ -2240,9 +2282,6 @@ msgstr "現在の積層にカスタムG-codeを追加" msgid "Jump to Layer" msgstr "積層に移動" -msgid "Jump to layer" -msgstr "積層に移動" - msgid "Please enter the layer number" msgstr "層の番号をご入力ください" @@ -2271,7 +2310,7 @@ msgid "Change filament at the beginning of this layer." msgstr "Change filament at the beginning of this layer." msgid "Delete Pause" -msgstr "" +msgstr "Delete Pause" msgid "Delete Custom Template" msgstr "Delete Custom Template" @@ -2289,7 +2328,7 @@ msgid "No printer" msgstr "プリンタ無し" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "サーバーに接続できませんでした" @@ -2312,8 +2351,8 @@ 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 "Please check the network connection of the printer and Orca." +msgstr "Please check the network connection of the printer and Orca." msgid "Connecting..." msgstr "接続中…" @@ -2322,7 +2361,7 @@ msgid "?" msgstr "?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "空" @@ -2331,16 +2370,16 @@ msgid "AMS" msgstr "AMS" msgid "Auto Refill" -msgstr "" +msgstr "Auto Refill" msgid "AMS not connected" msgstr "AMS が接続されていません" -msgid "Load Filament" -msgstr "ロード" +msgid "Load" +msgstr "Load" -msgid "Unload Filament" -msgstr "アンロード" +msgid "Unload" +msgstr "アンロード" msgid "Ext Spool" msgstr "外部スプールホルダー" @@ -2357,7 +2396,7 @@ msgstr "再試行" msgid "Calibrating AMS..." msgstr "AMS キャリブレーション" -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "キャリブレーション中に問題が発生しました。クリックして解決策をご確認くださ" "い。" @@ -2369,7 +2408,7 @@ msgid "Cancel calibration" msgstr "キャリブレーションを取消し" msgid "Idling..." -msgstr "" +msgstr "Idling..." msgid "Heat the nozzle" msgstr "ノズルを加熱" @@ -2387,23 +2426,23 @@ msgid "Purge old filament" msgstr "古いフィラメントを排出" msgid "Feed Filament" -msgstr "" +msgstr "Feed Filament" msgid "Confirm extruded" -msgstr "" +msgstr "Confirm that filament has been extruded" msgid "Check filament location" -msgstr "" +msgstr "Check filament location" msgid "Grab new filament" msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"AMS スロットを選択し、[ロード] または [アンロード] をタップすると、フィラメン" -"トが自動的にロードまたはアンロードされます。" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filament." msgid "Edit" msgstr "編集" @@ -2478,7 +2517,7 @@ msgid "Orienting canceled." msgstr "" msgid "Filling" -msgstr "" +msgstr "Filling" msgid "Bed filling canceled." msgstr "Bed filling canceled." @@ -2487,13 +2526,13 @@ msgid "Bed filling done." msgstr "Bed filling done." msgid "Searching for optimal orientation" -msgstr "" +msgstr "最適方向を探す" msgid "Orientation search canceled." -msgstr "" +msgstr "オリエンテーション検索がキャンセルされました。" msgid "Orientation found." -msgstr "" +msgstr "オリエンテーションが見つかりました。" msgid "Logging in" msgstr "サインイン中" @@ -2562,7 +2601,7 @@ msgid "Sending print job through cloud service" msgstr "クラウド経由で造形タスクを送信" msgid "Print task sending times out." -msgstr "" +msgstr "Print task sending times out." msgid "Service Unavailable" msgstr "サービスは利用できません" @@ -2579,7 +2618,7 @@ msgstr "送信しました、%s秒後デバイスページへ移動します" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the next page in %ss" -msgstr "" +msgstr "Successfully sent. Automatically jumping to the next page in %ss" msgid "An SD card needs to be inserted before printing via LAN." msgstr "SDカードが必要です" @@ -2662,10 +2701,7 @@ msgstr "Orca Slicerのライセンス" 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2739,10 +2775,10 @@ msgid "Setting AMS slot information while printing is not supported" msgstr "造形中に、AMSスロットを設定できません。" msgid "Factors of Flow Dynamics Calibration" -msgstr "" +msgstr "Factors of Flow Dynamics Calibration" msgid "PA Profile" -msgstr "" +msgstr "PA Profile" msgid "Factor K" msgstr "係数K" @@ -2759,10 +2795,12 @@ 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.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2863,33 +2901,19 @@ msgstr "AMSを無効" msgid "Print with the filament mounted on the back of chassis" msgstr "外部スプールホルダーのフィラメントで造形します" -msgid "Cabin humidity" -msgstr "湿度" +msgid "Current Cabin humidity" +msgstr "Current Cabin humidity" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" -msgstr "湿度インジケータ (緑色: 正常 オレンジ\": やや高い 赤色: 高い)" - -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.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." 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 "" -"注意:蓋を開けたり、乾燥剤を交換したりすると、湿気を完全に吸収するのに数時間" -"かかるとこがあります。また、温度が低い時、更に時間が要する場合があります。こ" -"の時に、インジケータが筐体内の湿度を精確に反映できない可能性があります。" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases: when the lid is open or the " +"desiccant pack is changed. It takes a few hours to absorb the moisture, and " +"low temperatures also slow down the process." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2920,16 +2944,19 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" +"When the current material runs out, the printer will continue to print " +"materials in the following order." msgid "Group" msgstr "Group" msgid "The printer does not currently support auto refill." -msgstr "" +msgstr "The printer does not currently support auto refill." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" +"AMS filament backup is not enabled; please enable it in the AMS settings." msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -2937,6 +2964,16 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"If there are two identical filaments in an AMS, AMS filament backup will be " +"enabled. \n" +"(This currently supports automatic supply of consumables with the same " +"brand, material type, and color)" + +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" msgid "AMS Settings" msgstr "AMS 設定" @@ -2952,9 +2989,11 @@ msgstr "" "秒ほどかかります)" msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." +msgstr "" +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." -msgstr "注意:造形時に入れる場合、造形が完成したから読込みます。" msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -2997,6 +3036,16 @@ msgid "" "automatically when current filament runs out" msgstr "使用中のフィラメントが切れた時に、同じ属性のフィラメントに切り替えます" +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "ファイル" @@ -3066,6 +3115,63 @@ msgstr "Floating reserved operand" msgid "Stack overflow" msgstr "Stack Overflow" +msgid "Running post-processing scripts" +msgstr "後処理スクリプトを実行" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "Gコードのエクスポート中に不明なエラーが発生しました。" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"一時的なGコードの出力Gコードへのコピーに失敗しました。 もしかしたらSDカードが" +"書き込みロックされていませんか?\n" +"エラーメッセージ:%1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"一時Gコードの出力Gコードへのコピーに失敗しました。 ターゲットデバイスに問題が" +"ある可能性があります。もう一度エクスポートするか、別のデバイスを使用してみて" +"ください。 破損した出力Gコードは%1%.tmpにあります。" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"選択した宛先フォルダーにコピーした後、Gコードの名前を変更できませんでした。 " +"現在のパスは%1%.tmpです。 もう一度やり直してください。" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"一時的なGコードのコピーは完了しましたが、コピーチェック中に元のGコードの%1%を" +"開くことができませんでした。 出力Gコードは、%2%.tmpです。" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"一時的なGコードのコピーは完了しましたが、コピーチェック中にエクスポートされた" +"Gコードを開くことができませんでした。 出力Gコードは、%1%.tmpです。" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Gコードファイルを%1%にエクスポートしました" + msgid "Unknown error when export G-code." msgstr "不明なエラー: G-codeエクスポート" @@ -3079,13 +3185,6 @@ msgstr "" "エラーメッセージ:%1%\n" "ソース ファイル %2%" -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "G-codeは %1%にエクスポートしました" - -msgid "Running post-processing scripts" -msgstr "後処理スクリプトを実行" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "G-codeの出力が失敗しました" @@ -3095,6 +3194,225 @@ msgstr "" "%1%にタスクをスケジューリングしました、詳細は「ウインドウ→タスクキュー」にて" "ご確認ください。" +msgid "Device" +msgstr "デバイス" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "オフライン" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "表示" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "Device Name" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Device Status" +msgstr "Device Status" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "追加" + +msgid "Idle" +msgstr "待機中" + +msgid "Printing" +msgstr "造形中" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "準備" + +msgid "Slicing" +msgstr "スライス中" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "送信中" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "再開" + +msgid "Stop" +msgstr "中止" + +msgid "Task Status" +msgstr "Task Status" + +msgid "Sent Time" +msgstr "Sent Time" + +msgid "There are no tasks to be sent!" +msgstr "There are no tasks to be sent!" + +msgid "No historical tasks!" +msgstr "No historical tasks!" + +msgid "Loading..." +msgstr "読込み中" + +msgid "No AMS" +msgstr "No AMS" + +msgid "Send to Multi-device" +msgstr "Send to Multi-device" + +msgid "Preparing print job" +msgstr "造形タスクを準備" + +msgid "Abnormal print file data. Please slice again" +msgstr "ファイルに異常があります、もう一度スライスしてください" + +msgid "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "Use External Spool" + +msgid "Use AMS" +msgstr "Use AMS" + +msgid "Select Printers" +msgstr "Select Printers" + +msgid "Ams Status" +msgstr "AMS Status" + +msgid "Printing Options" +msgstr "Printing Options" + +msgid "Bed Leveling" +msgstr "ベッドレベリング" + +msgid "Timelapse" +msgstr "タイムラプス" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "Send Options" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "送信" + +msgid "Name is invalid;" +msgstr "名称が無効です" + +msgid "illegal characters:" +msgstr "無効な文字:" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "The name length exceeds the limit." + msgid "Origin" msgstr "原点" @@ -3160,6 +3478,23 @@ msgstr "STLファイル(ベッドモデル)をインポート" msgid "Bed Shape" msgstr "ベッド形状" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" + +msgid "Please check.\n" +msgstr "Please check.\n" + 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" @@ -3185,6 +3520,9 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"Current chamber temperature is higher than the material's safe temperature; " +"this may result in material softening and nozzle clogs.The maximum safe " +"temperature for the material is %d" msgid "" "Too small layer height.\n" @@ -3228,25 +3566,6 @@ msgstr "" "\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 "" -"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 " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3306,6 +3625,25 @@ msgid "" "Reset to 0." msgstr "" +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 "" +"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 " But machines with I3 structure will not generate timelapse videos." +msgstr " But machines with I3 structure will not generate timelapse videos." + +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 "Auto bed leveling" msgstr "自動ベッドレベリング" @@ -3370,58 +3708,46 @@ msgid "Paused due to heat bed temperature malfunction" msgstr "ベッド温度異常により一時停止" msgid "Filament unloading" -msgstr "" +msgstr "Filament unloading" msgid "Skip step pause" -msgstr "" +msgstr "Skip step pause" msgid "Filament loading" -msgstr "" +msgstr "Filament loading" msgid "Motor noise calibration" -msgstr "" +msgstr "Motor noise calibration" msgid "Paused due to AMS lost" -msgstr "" +msgstr "Paused due to AMS lost" msgid "Paused due to low speed of the heat break fan" -msgstr "" +msgstr "Paused due to low speed of the heat break fan" msgid "Paused due to chamber temperature control error" -msgstr "" +msgstr "Paused due to chamber temperature control error" msgid "Cooling chamber" -msgstr "" +msgstr "Cooling chamber" msgid "Paused by the Gcode inserted by user" -msgstr "" +msgstr "Paused by the Gcode inserted by user" msgid "Motor noise showoff" -msgstr "" +msgstr "Motor noise showoff" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Nozzle filament covered detected pause" msgid "Cutter error pause" -msgstr "" +msgstr "Cutter error pause" msgid "First layer error pause" -msgstr "" +msgstr "First layer error pause" msgid "Nozzle clog pause" -msgstr "" - -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "メインボード" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" +msgstr "Nozzle clog pause" msgid "Unknown" msgstr "不明" @@ -3452,18 +3778,27 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃. In order to avoid extruder clogging, low temperature filament (PLA/PETG/" +"TPU) is not allowed to be loaded." msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"Low temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order " +"to avoid extruder clogging, it is not allowed to set the chamber temperature " +"above 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated, and the target chamber temperature will " +"automatically be set to 0℃." msgid "Failed to start printing job" msgstr "造形タスクを開始できませんでした" @@ -3471,53 +3806,58 @@ msgstr "造形タスクを開始できませんでした" msgid "" "This calibration does not support the currently selected nozzle diameter" msgstr "" +"This calibration does not support the currently selected nozzle diameter" msgid "Current flowrate cali param is invalid" -msgstr "" +msgstr "Current flowrate cali param is invalid" msgid "Selected diameter and machine diameter do not match" -msgstr "" +msgstr "Selected diameter and machine diameter do not match" msgid "Failed to generate cali gcode" -msgstr "" +msgstr "Failed to generate cali gcode" msgid "Calibration error" -msgstr "" +msgstr "Calibration error" msgid "TPU is not supported by AMS." -msgstr "" +msgstr "TPU is not supported by the AMS." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -msgstr "" +msgstr "Bambu PET-CF/PA6-CF is not supported by the AMS." msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" +"Damp PVA will become flexible and get stuck inside the AMS; please take care " +"to dry it well before use." 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 filaments are hard and brittle, so they can easily break or get stuck " +"in an AMS; please use with caution." msgid "default" msgstr "デフォルト" #, boost-format msgid "Edit Custom G-code (%1%)" -msgstr "" +msgstr "カスタムG-コードの編集(%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" -msgstr "" +msgstr "組込みプレースホルダー (アイテムをダブルクリックして G コードに追加)" msgid "Search gcode placeholders" msgstr "" msgid "Add selected placeholder to G-code" -msgstr "" +msgstr "選択したプレースホルダーをGコードに追加する" msgid "Select placeholder" -msgstr "" +msgstr "プレースホルダーを選択" msgid "[Global] Slicing State" msgstr "" @@ -3538,17 +3878,17 @@ msgid "Objects Info" msgstr "" msgid "Dimensions" -msgstr "" +msgstr "寸法" msgid "Temperatures" -msgstr "" +msgstr "温度" msgid "Timestamps" -msgstr "" +msgstr "タイムスタンプ" #, boost-format msgid "Specific for %1%" -msgstr "" +msgstr "%1%に固有" msgid "Presets" msgstr "Presets" @@ -3560,7 +3900,7 @@ msgid "Filament settings" msgstr "フィラメント設定" msgid "SLA Materials settings" -msgstr "" +msgstr "SLAマテリアル設定" msgid "Printer settings" msgstr "プリンター設定" @@ -3568,9 +3908,6 @@ msgstr "プリンター設定" msgid "parameter name" msgstr "パラメータ名" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s をパーセンテージにすることはできません" @@ -3582,6 +3919,10 @@ msgstr "%s の値が範囲外です、続行しますか?" msgid "Parameter validation" msgstr "パラメータ検証" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Value %s is out of range. The valid range is from %d to %d." + msgid "Value is out of range." msgstr "値が範囲外です。" @@ -3594,6 +3935,18 @@ msgstr "" "%s%% か、それとも %s %sですか?\n" "%s%% の場合ははい、 %s %s はいいえ。" +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "入力形式が無効です。 次の形式の次元の予想されるベクトル:\"%1%\"" + +msgid "Input value is out of range" +msgstr "入力値が範囲を超えています" + +msgid "Some extension in the input is invalid" +msgstr "入力の一部の拡張子が無効" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無効なフォーマット、%1%であるはずです。" @@ -3661,12 +4014,12 @@ msgstr "表示" msgid "Flushed" msgstr "フラッシュ" +msgid "Tower" +msgstr "Tower" + msgid "Total" msgstr "合計" -msgid "Tower" -msgstr "" - msgid "Total Estimation" msgstr "予測合計" @@ -3674,7 +4027,7 @@ msgid "Total time" msgstr "総時間" msgid "Total cost" -msgstr "" +msgstr "Total cost" msgid "up to" msgstr "最大" @@ -3769,6 +4122,12 @@ msgstr "予測時間" msgid "Normal mode" msgstr "通常モード" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "準備時間" @@ -3862,6 +4221,9 @@ msgstr "レイアウト設定" msgid "Spacing" msgstr "間隔" +msgid "0 means auto spacing." +msgstr "0 means auto spacing." + msgid "Auto rotate for arrangement" msgstr "自動回転" @@ -3872,10 +4234,7 @@ msgid "Avoid extrusion calibration region" msgstr "押出しキャリブレーション領域を避ける" msgid "Align to Y axis" -msgstr "" - -msgid "Add" -msgstr "追加" +msgstr "Align to Y axis" msgid "Add plate" msgstr "プレートを追加" @@ -3941,7 +4300,7 @@ msgid "An object is layed over the boundary of plate." msgstr "プレートの境界を超えるオブジェクトがあります" msgid "A G-code path goes beyond the max print height." -msgstr "" +msgstr "A G-code path goes beyond the max print height." msgid "A G-code path goes beyond the boundary of plate." msgstr "G-codeはプレートの境界を超えています。" @@ -3967,10 +4326,10 @@ msgid "Bed leveling" msgstr "ベッドレベリング" msgid "Vibration compensation" -msgstr "" +msgstr "Vibration compensation" msgid "Motor noise cancellation" -msgstr "" +msgstr "Motor noise cancellation" msgid "Calibration program" msgstr "キャリブレーション項目" @@ -3996,7 +4355,7 @@ msgid "Calibrating" msgstr "キャリブレーション中" msgid "No step selected" -msgstr "" +msgstr "No step selected" msgid "Auto-record Monitoring" msgstr "自動録画モニタリング" @@ -4004,6 +4363,9 @@ msgstr "自動録画モニタリング" msgid "Go Live" msgstr "公開" +msgid "Liveview Retry" +msgstr "Liveview Retry" + msgid "Resolution" msgstr "分解能" @@ -4055,14 +4417,11 @@ msgstr "プリセットが変更されたが終了します" msgid "Logging" msgstr "ログ" -msgid "Prepare" -msgstr "準備" - msgid "Preview" msgstr "プレビュー" -msgid "Device" -msgstr "デバイス" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "プロジェクト" @@ -4088,9 +4447,6 @@ msgstr "スライス (全プレート)" msgid "Export G-code file" msgstr "G-codeをエクスポート" -msgid "Send" -msgstr "送信" - msgid "Export plate sliced file" msgstr "エクスポート" @@ -4211,6 +4567,12 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" msgid "Load a model" msgstr "モデルを読み込む" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "構成データ" @@ -4221,10 +4583,10 @@ msgid "Import" msgstr "インポート" msgid "Export all objects as one STL" -msgstr "" +msgstr "Export all objects as one STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "Export all objects as STLs" msgid "Export Generic 3MF" msgstr "汎用3MF" @@ -4244,8 +4606,8 @@ msgstr "G-codeをエクスポート" msgid "Export current plate as G-code" msgstr "現在のプレートをG-codeでエクスポート" -msgid "Export &Configs" -msgstr "構成データ" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "現在の構成をエクスポート" @@ -4346,56 +4708,53 @@ msgstr "Show object overhang highlight in 3D scene" msgid "Preferences" msgstr "設定" -msgid "View" -msgstr "表示" - msgid "Help" msgstr "ヘルプ" msgid "Temperature Calibration" -msgstr "" +msgstr "Temperature Calibration" msgid "Pass 1" -msgstr "" +msgstr "Pass 1" msgid "Flow rate test - Pass 1" -msgstr "" +msgstr "Flow rate test - Pass 1" msgid "Pass 2" -msgstr "" +msgstr "Pass 2" msgid "Flow rate test - Pass 2" -msgstr "" +msgstr "Flow rate test - Pass 2" msgid "Flow rate" -msgstr "" +msgstr "Flow rate" msgid "Pressure advance" -msgstr "" +msgstr "Pressure advance" msgid "Retraction test" -msgstr "" +msgstr "Retraction test" msgid "Orca Tolerance Test" -msgstr "" +msgstr "Orca Tolerance Test" msgid "Max flowrate" -msgstr "" +msgstr "Max flowrate" msgid "VFA" -msgstr "" +msgstr "VFA" msgid "More..." -msgstr "" +msgstr "More..." msgid "Tutorial" -msgstr "" +msgstr "Tutorial" msgid "Calibration help" -msgstr "" +msgstr "Calibration help" msgid "More calibrations" -msgstr "" +msgstr "More calibrations" msgid "&Open G-code" msgstr "G-codeを開く" @@ -4415,10 +4774,10 @@ msgstr "Export &Toolpaths as OBJ" msgid "Export toolpaths as OBJ" msgstr "Export toolpaths as OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Studioを開く" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Studioを開く" msgid "&Quit" @@ -4507,40 +4866,54 @@ msgstr "" msgid "Synchronization" msgstr "同期" -msgid "Initialize failed (No Device)!" -msgstr "初期化失敗 (デバイス無し)" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "The device cannot handle more conversations. Please retry later." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "Player is malfunctioning. Please reinstall the system player." -msgid "Initialize failed (No Camera Device)!" -msgstr "初期化失敗 (カメラ無し)" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "The player is not loaded; please click the \"play\" button to retry." -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "プリンターがダウンロード中、完了までお待ちください" +msgid "Please confirm if the printer is connected." +msgstr "Please confirm if the printer is connected." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" +"The printer is currently busy downloading. Please try again after it " +"finishes." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初期化失敗 (ローカルモードではアクセスできません)" +msgid "Printer camera is malfunctioning." +msgstr "Printer camera is malfunctioning." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "初期化失敗 (プリンターIP無効)" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "A problem occurred. Please update the printer firmware and try again." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." + +msgid "Please enter the IP of printer to connect." +msgstr "Please enter the IP of the printer to connect." msgid "Initializing..." msgstr "初期化中..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "初期化失敗 (%s)" +msgid "Connection Failed. Please check the network and try again" +msgstr "Connection Failed. Please check the network and try again" -msgid "Network unreachable" -msgstr "ネットワークにアクセスできません" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Please check the network and try again. You can restart or update the " +"printer if the issue persists." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "停止した [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "The printer has been logged out and cannot connect." msgid "Stopped." msgstr "中止しました" @@ -4568,19 +4941,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "バーチャルカメラの初期化が失敗しました!(%s)" +msgid "Network unreachable" +msgstr "ネットワークにアクセスできません" + msgid "Information" msgstr "情報" msgid "Playing..." msgstr "再生中..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "ロード失敗 [%d]!" - -msgid "Loading..." -msgstr "読込み中" - msgid "Year" msgstr "年" @@ -4599,9 +4968,6 @@ msgstr "月でグループ化、新しい順で並べ替え" msgid "Show all files, recent first." msgstr "全てのファイルを表示" -msgid "Timelapse" -msgstr "タイムラプス" - msgid "Switch to timelapse files." msgstr "タイムラプスに切替え" @@ -4629,6 +4995,12 @@ msgstr "選択" msgid "Batch manage files." msgstr "ファイルのバッチ処理" +msgid "Refresh" +msgstr "再読込" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "プリンタなし" @@ -4639,13 +5011,34 @@ msgstr "接続に失敗しました (%d)" msgid "Loading file list..." msgstr "ファイルリストを読込み中" -#, c-format, boost-format -msgid "No files [%d]" -msgstr "No files [%d]" +msgid "No files" +msgstr "ファイル無し" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Load failed [%d]" +msgid "Initialize failed (%s)!" +msgstr "初期化失敗 (%s)" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4666,11 +5059,11 @@ 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 fetch model information from printer." +msgstr "Failed to fetch model information from printer." -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "Failed to parse model information." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4681,6 +5074,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "ファイル %s が見つかりませんでした、もう一度ダウンロードしてください。" +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "ダウンロード待ち" @@ -4697,27 +5098,28 @@ msgstr "ダウンロード完了" msgid "Downloading %d%%..." msgstr "ダウンロード中 %d%%" -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." -msgstr "" +msgid "File does not exist." +msgstr "File does not exist." msgid "File checksum error. Please retry." -msgstr "" +msgstr "File checksum error. Please retry." msgid "Not supported on the current printer version." -msgstr "" +msgstr "Not supported on the current printer version." msgid "Storage unavailable, insert SD card." -msgstr "" +msgstr "Storage unavailable; please insert MicroSD card." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Error code: %d" msgid "Speed:" msgstr "速度" @@ -4761,12 +5163,6 @@ msgstr "" msgid "Printing Progress" msgstr "進捗" -msgid "Resume" -msgstr "再開" - -msgid "Stop" -msgstr "中止" - msgid "0" msgstr "0" @@ -4780,17 +5176,21 @@ msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." msgstr "" +"You have completed printing the mall model, \n" +"but synchronizing rating information has failed." msgid "How do you like this printing file?" -msgstr "" +msgstr "How do you like this printing file?" msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" +"(The model has already been rated. Your rating will overwrite the previous " +"rating.)" msgid "Rate" -msgstr "" +msgstr "Rate" msgid "Camera" msgstr "カメラ" @@ -4807,6 +5207,9 @@ msgstr "" msgid "Control" msgstr "コントロール" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "造型オプション" @@ -4825,9 +5228,6 @@ msgstr "筐体" msgid "Bed" msgstr "ベッド" -msgid "Unload" -msgstr "アンロード" - msgid "Debug Info" msgstr "デバッグ情報" @@ -4865,6 +5265,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Please heat the nozzle to above 170 degree before loading or unloading " +"filament." msgid "Still unload" msgstr "アンロード" @@ -4901,95 +5303,108 @@ msgid "Can't start this without SD card." msgstr "起動するのにSDカードが必要です。" msgid "Rate the Print Profile" -msgstr "" +msgstr "Rate the Print Profile" msgid "Comment" -msgstr "" +msgstr "Comment" msgid "Rate this print" -msgstr "" +msgstr "Rate this print" msgid "Add Photo" -msgstr "" +msgstr "Add Photo" msgid "Delete Photo" -msgstr "" +msgstr "Delete Photo" msgid "Submit" -msgstr "" +msgstr "Submit" msgid "Please click on the star first." -msgstr "" +msgstr "Please click on the star first." msgid "InFo" -msgstr "" +msgstr "Info" msgid "Get oss config failed." -msgstr "" +msgstr "Get oss config failed." msgid "Upload Pictrues" -msgstr "" +msgstr "Upload Pictures" msgid "Number of images successfully uploaded" -msgstr "" +msgstr "Number of images successfully uploaded" msgid " upload failed" -msgstr "" +msgstr " upload failed" msgid " upload config prase failed\n" -msgstr "" +msgstr " upload config prase failed\n" msgid " No corresponding storage bucket\n" -msgstr "" +msgstr " No corresponding storage bucket\n" msgid " can not be opened\n" -msgstr "" +msgstr " cannot be opened\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" msgstr "" +"The following issues occurred during the process of uploading images. Do you " +"want to ignore them?\n" +"\n" msgid "info" msgstr "情報" msgid "Synchronizing the printing results. Please retry a few seconds later." -msgstr "" +msgstr "Synchronizing the printing results. Please retry a few seconds later." msgid "Upload failed\n" -msgstr "" +msgstr "Upload failed\n" msgid "obtaining instance_id failed\n" -msgstr "" +msgstr "obtaining instance_id failed\n" msgid "" "Your comment result cannot be uploaded due to some reasons. As follows:\n" "\n" " error code: " msgstr "" +"Your comment result cannot be uploaded due to the following reasons:\n" +"\n" +" error code: " msgid "error message: " -msgstr "" +msgstr "error message: " msgid "" "\n" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"Would you like to redirect to the webpage to give a rating?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" msgstr "" +"Some of your images failed to upload. Would you like to redirect to the " +"webpage for rating?" msgid "You can select up to 16 images." -msgstr "" +msgstr "You can select up to 16 images." msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" +"At least one successful print record of this print profile is required \n" +"to give a positive rating (4 or 5 stars)." msgid "Status" msgstr "デバイス状態" @@ -4997,9 +5412,6 @@ msgstr "デバイス状態" msgid "Update" msgstr "更新" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "次回から表示しない" @@ -5030,6 +5442,35 @@ msgstr "%s 情報" msgid "Skip" msgstr "スキップ" +msgid "Newer 3mf version" +msgstr "新3mfバージョン" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Download Beta Version" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Current Version: " + +msgid "Latest Version: " +msgstr "Latest Version: " + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "3D Mouseが切断されました。" @@ -5055,10 +5496,10 @@ msgid "Details" msgstr "詳細" msgid "New printer config available." -msgstr "" +msgstr "New printer config available." msgid "Wiki" -msgstr "" +msgstr "Wiki" msgid "Undo integration failed." msgstr "統合の取り消しに失敗しました。" @@ -5096,12 +5537,12 @@ msgstr[0] "" msgid "ERROR" msgstr "エラー" -msgid "CANCELED" -msgstr "取消し済" - msgid "COMPLETED" msgstr "完了" +msgid "CANCELED" +msgstr "取消し済" + msgid "Cancel upload" msgstr "アップロードを取消し" @@ -5118,10 +5559,10 @@ msgid "Export successfully." msgstr "エクスポートが成功しました。" msgid "Model file downloaded." -msgstr "" +msgstr "Model file downloaded." msgid "Serious warning:" -msgstr "" +msgstr "Serious warning:" msgid " (Repair)" msgstr " (修復)" @@ -5205,10 +5646,29 @@ msgid "Auto-recovery from step loss" msgstr "自動回復" msgid "Allow Prompt Sound" -msgstr "" +msgstr "Allow Prompt Sound" msgid "Filament Tangle Detect" -msgstr "" +msgstr "Filament Tangle Detection" + +msgid "Nozzle Clumping Detection" +msgstr "Nozzle Clumping Detection" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Check if the nozzle is clumping by filament or other foreign objects." + +msgid "Nozzle Type" +msgstr "Nozzle Type" + +msgid "Stainless Steel" +msgstr "Stainless Steel" + +msgid "Hardened Steel" +msgstr "Hardened Steel" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" msgid "Global" msgstr "全般" @@ -5299,7 +5759,7 @@ msgid "Set filaments to use" msgstr "フィラメントを選択" msgid "Search plate, object and part." -msgstr "" +msgstr "Search plate, object and part." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -5363,6 +5823,9 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"The current heatbed temperature is relatively high. The nozzle may clog when " +"printing this filament in a closed environment. Please open the front door " +"and/or remove the upper glass." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5376,12 +5839,14 @@ msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." msgstr "" +"Enabling traditional timelapse photography may cause surface imperfections. " +"It is recommended to change to smooth mode." msgid "Expand sidebar" -msgstr "" +msgstr "サイドバーを展開" msgid "Collapse sidebar" -msgstr "" +msgstr "サイドバーを折りたたむ" #, c-format, boost-format msgid "Loading file: %s" @@ -5405,9 +5870,6 @@ msgstr "" 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 " @@ -5422,26 +5884,30 @@ msgid "Please correct them in the param tabs" msgstr "Please correct them in the Param tabs" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" +msgstr "The 3mf has following modified G-code in filament or printer presets:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"Please confirm that these modified G-codes are safe to prevent any damage to " +"the machine!" msgid "Modified G-codes" -msgstr "" +msgstr "Modified G-code" msgid "The 3mf has following customized filament or printer presets:" -msgstr "" +msgstr "The 3mf has following customized filament or printer presets:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"Please confirm that the G-codes within these presets are safe to prevent any " +"damage to the machine!" msgid "Customized Preset" -msgstr "" +msgstr "Customized Preset" msgid "Name of components inside step file is not UTF8 format!" msgstr "ファイルのエンコーディング方式はUTF8形式ではありません" @@ -5449,6 +5915,9 @@ msgstr "ファイルのエンコーディング方式はUTF8形式ではあり msgid "The name may show garbage characters!" msgstr "文字化けがあるようです、ご確認ください" +msgid "Remember my choice." +msgstr "Remember my choice." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "ファイル %1% を読み込めませんでした。" @@ -5503,22 +5972,24 @@ msgid "Export STL file:" msgstr "STLファイルをエクスポート:" msgid "Export AMF file:" -msgstr "" +msgstr "Export AMF file:" msgid "Save file as:" msgstr "名前を付けて保存" msgid "Export OBJ file:" -msgstr "" +msgstr "Export OBJ file:" #, c-format, boost-format msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"The file %s already exists.\n" +"Do you want to replace it?" msgid "Comfirm Save As" -msgstr "" +msgstr "Confirm Save As" msgid "Delete object which is a part of cut object" msgstr "Delete object which is a part of cut object" @@ -5539,13 +6010,13 @@ msgid "Another export job is running." msgstr "エクスポート中です" msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "Unable to replace with more than one volume" msgid "Error during replace" msgstr "交換時のエラー" msgid "Replace from:" -msgstr "" +msgstr "Replace from:" msgid "Select a new file" msgstr "ファイルを選択" @@ -5557,22 +6028,19 @@ msgid "Please select a file" msgstr "ファイルを選択してください" msgid "Do you want to replace it" -msgstr "" +msgstr "Do you want to replace it?" msgid "Message" -msgstr "" +msgstr "Message" msgid "Reload from:" -msgstr "" +msgstr "Reload from:" msgid "Unable to reload:" -msgstr "" +msgstr "Unable to reload:" msgid "Error during reload" -msgstr "" - -msgid "Slicing" -msgstr "スライス中" +msgstr "Error during reload" msgid "There are warnings after slicing models:" msgstr "スライスの警告:" @@ -5632,9 +6100,15 @@ msgstr "モデルをインポート" msgid "prepare 3mf file..." msgstr "3mfファイルを準備" +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "プロジェクトをダウンロード中" +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "プロジェクトをダウンロード %d%%" @@ -5645,7 +6119,7 @@ msgid "" msgstr "" msgid "Import SLA archive" -msgstr "" +msgstr "SLAアーカイブをインポート" msgid "The selected file" msgstr "選択したファイル" @@ -5656,6 +6130,21 @@ msgstr "有効なG-codeが含まれていません。" msgid "Error occurs while loading G-code file" msgstr "G-codeファイルの読込みにエラーが発生しました" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "パス %1% の ZIP ファイルの読み込みに失敗しました。" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "ファイルを %1%に解凍できませんでした: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"%1%で解凍されたファイルが見つかりません。ファイルの解凍に失敗しました。" + msgid "Drop project file" msgstr "プロジェクトをドロップ" @@ -5680,9 +6169,6 @@ msgstr "G-codeファイルとモデルを一緒にロードできません" msgid "Can not add models when in preview mode!" msgstr "プレビューモードではモデルを追加できません" -msgid "Add Models" -msgstr "モデルを追加" - msgid "All objects will be removed, continue?" msgstr "すべてのオブジェクトが削除されます。続行しますか?" @@ -5690,9 +6176,6 @@ msgid "The current project has unsaved changes, save it before continue?" msgstr "" "現在のプロジェクトには未保存の変更があります。続行する前に保存しますか?" -msgid "Remember my choice." -msgstr "Remember my choice." - msgid "Number of copies:" msgstr "複製数" @@ -5703,13 +6186,13 @@ msgid "Save G-code file as:" msgstr "名前を付けて保存" msgid "Save SLA file as:" -msgstr "" +msgstr "Save SLA file as:" msgid "The provided file name is not valid." -msgstr "" +msgstr "The provided file name is not valid." msgid "The following characters are not allowed by a FAT file system:" -msgstr "" +msgstr "The following characters are not allowed by a FAT file system:" msgid "Save Sliced file as:" msgstr "名前を付けて保存:" @@ -5722,25 +6205,46 @@ msgstr "%sを送信しました、プリンターにて確認できます" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" +"オリジナルの SVG をローカル パスとともに 3MF ファイルに保存してもよろしいです" +"か?\n" +"「いいえ」を押すと、プロジェクト内のすべての SVG は編集できなくなります。" msgid "Private protection" -msgstr "" +msgstr "プライベートプロテクション" msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "" +"プリンター準備はできていますか?プリントシートの上は空で、きれいな状態で装着" +"されていますか?" msgid "Upload and Print" -msgstr "" +msgstr "アップロードとプリント" msgid "" "Print By Object: \n" @@ -5774,7 +6278,7 @@ msgstr "Number of currently selected parts: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "" +msgstr "Number of currently selected objects: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -5878,6 +6382,11 @@ msgstr "地域" msgid "Stealth Mode" msgstr "" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -5893,15 +6402,45 @@ msgstr "インチ" msgid "Units" msgstr "単位" -msgid "Home" +msgid "Allow only one OrcaSlicer instance" msgstr "" +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this setting will allow only one instance." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + +msgid "Home" +msgstr "ホーム" + msgid "Default Page" msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Zoom to mouse position" @@ -5913,13 +6452,21 @@ msgstr "" "2D window center." msgid "Use free camera" -msgstr "" +msgstr "フリーカメラを使用" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +"チェックすると、フリーカメラが使用されます。 そうでない場合は、拘束カメラを使" +"用します。" + +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" msgid "Show splash screen" -msgstr "" +msgstr "スプラッシュ画面を表示する" msgid "Show the splash screen during startup." msgstr "" @@ -5931,14 +6478,39 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "有効になる場合、起動時にヒントを表示されます。" msgid "Flushing volumes: Auto-calculate everytime the color changed." -msgstr "" +msgstr "Flushing volumes: Auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed." +msgstr "If enabled, auto-calculate every time the color changes." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Flushing volumes: Auto-calculate every time the filament is changed." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "If enabled, auto-calculate every time filament is changed" + +msgid "Remember printer configuration" msgstr "" -msgid "Network" +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." + +msgid "Network" +msgstr "ネットワーク (&N)" + msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "ユーザープリセットの自動同期 (プリンター/フィラメント/プロセス)" @@ -5975,6 +6547,42 @@ msgstr ".step/.stpファイルをOrca Slicerに関連付けます。" msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "デフォルトで.step/.stpファイルをOrca Slicerで開く" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -5985,7 +6593,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Clear my choice on the unsaved projects." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "No warnings when loading 3MF with modified G-code" msgid "Auto-Backup" msgstr "自動バックアップ" @@ -6141,16 +6749,25 @@ msgid "Add/Remove materials" msgstr "素材を追加/削除" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Select/Remove printers(system presets)" msgid "Create printer" -msgstr "" - -msgid "Incompatible" -msgstr "Incompatible" +msgstr "Create printer" msgid "The selected preset is null!" -msgstr "" +msgstr "The selected preset is null!" + +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "Customize" + +msgid "Other layer filament sequence" +msgstr "Other layer filament sequence" + +msgid "Please input layer value (>= 2)." +msgstr "Please input layer value (>= 2)." msgid "Plate name" msgstr "Plate name" @@ -6161,11 +6778,17 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "造形シーケンス" -msgid "Customize" -msgstr "" +msgid "Same as Global" +msgstr "Same as Global" + +msgid "Disable" +msgstr "Disable" + +msgid "Spiral vase" +msgstr "スパイラル" msgid "First layer filament sequence" -msgstr "" +msgstr "First layer filament sequence" msgid "Same as Global Plate Type" msgstr "Same as Global Plate Type" @@ -6225,15 +6848,6 @@ msgstr "ユーザープリセット" msgid "Preset Inside Project" msgstr "プロジェクト プリセット" -msgid "Name is invalid;" -msgstr "名称が無効です" - -msgid "illegal characters:" -msgstr "無効な文字:" - -msgid "illegal suffix:" -msgstr "無効なサフィックス" - msgid "Name is unavailable." msgstr "名称は使用できません" @@ -6251,15 +6865,6 @@ 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 "プリセット名と同じの為、設定できません。" @@ -6297,7 +6902,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Search" msgid "My Device" msgstr "私のデバイス" @@ -6317,9 +6922,6 @@ msgstr "デバイスが見つからない?" msgid "Log out successful." msgstr "サインアウトしました" -msgid "Offline" -msgstr "オフライン" - msgid "Busy" msgstr "ビジー状態" @@ -6336,7 +6938,7 @@ msgid "Bambu Smooth PEI Plate" msgstr "" msgid "High temperature Plate" -msgstr "" +msgstr "High temperature Plate" msgid "Bambu Textured PEI Plate" msgstr "" @@ -6344,17 +6946,11 @@ msgstr "" msgid "Send print job to" msgstr "造形タスクを送信" -msgid "Refresh" -msgstr "再読込" - -msgid "Bed Leveling" -msgstr "ベッドレベリング" - msgid "Flow Dynamics Calibration" -msgstr "" +msgstr "Flow Dynamics Calibration" msgid "Click here if you can't connect to the printer" -msgstr "" +msgstr "Click here if you can't connect to the printer" msgid "send completed" msgstr "送信完了" @@ -6362,9 +6958,6 @@ msgstr "送信完了" msgid "Error code" msgstr "Error code" -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 "アカウント無し、ローカルモードのプリンターのみが表示されます" @@ -6428,8 +7021,13 @@ 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "SDカードが必要です" @@ -6449,10 +7047,13 @@ msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." msgstr "" +"When spiral vase mode is enabled, machines with I3 structure will not " +"generate timelapse videos." msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"Timelapse is not supported because Print sequence is set to \"By object\"." msgid "Errors" msgstr "エラー" @@ -6479,62 +7080,67 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "nozzle in preset: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "" +msgid "nozzle memorized: %.2f %s" +msgstr "nozzle memorized: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" +"Your nozzle diameter in sliced file is not consistent with the saved nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Please fix the error above, otherwise printing cannot continue." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -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 "The name length exceeds the limit." +"Connecting to the printer. Unable to cancel during the connection process." msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." msgstr "" +"Caution! Flow calibration on Textured PEI Plates may fail due to the " +"scattered surface." msgid "Automatic flow calibration using Micro Lidar" -msgstr "" +msgstr "Automatic flow calibration using the Micro Lidar" msgid "Modifying the device name" msgstr "デバイス名を変更" +msgid "Bind with Pin Code" +msgstr "Bind with Pin Code" + msgid "Send to Printer SD card" msgstr "プリンターのSDカードに送信" msgid "Cannot send the print task when the upgrade is in progress" msgstr "アップデート中では造形タスクを送信できません" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "The selected printer is incompatible with the chosen printer presets." + 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." @@ -6550,7 +7156,7 @@ msgid "Slice ok." msgstr "スライス完了" msgid "View all Daily tips" -msgstr "" +msgstr "View all Daily tips" msgid "Failed to create socket" msgstr "Failed to create socket" @@ -6579,6 +7185,28 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "不明な失敗" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." + +msgid "Can't find Pin Code?" +msgstr "Can't find Pin Code?" + +msgid "Pin Code" +msgstr "Pin Code" + +msgid "Binding..." +msgstr "Binding..." + +msgid "Please confirm on the printer screen" +msgstr "Please confirm on the printer screen" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Log in failed. Please check the Pin Code." + msgid "Log in printer" msgstr "プリンターを登録" @@ -6695,7 +7323,7 @@ msgstr "" "ワーを有効にしますか?" msgid "Still print by object?" -msgstr "" +msgstr "Still print by object?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6749,15 +7377,39 @@ msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " +"height limits ,this may cause printing quality issues." msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "Adjust to the set range automatically? \n" msgid "Adjust" -msgstr "" +msgstr "Adjust" msgid "Ignore" +msgstr "Ignore" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications. Please use with the latest printer firmware." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -6826,7 +7478,7 @@ msgid "Acceleration" msgstr "加速度" msgid "Jerk(XY)" -msgstr "" +msgstr "Jerk(XY)" msgid "Raft" msgstr "ラフト" @@ -6837,6 +7489,9 @@ msgstr "サポート用フィラメント" msgid "Tree supports" msgstr "" +msgid "Skirt" +msgstr "スカート" + msgid "Prime tower" msgstr "プライムタワー" @@ -6850,7 +7505,7 @@ msgid "Post-processing Scripts" msgstr "Post-processing Scripts" msgid "Notes" -msgstr "" +msgstr "Notes" msgid "Frequent" msgstr "よく使う" @@ -6919,13 +7574,16 @@ msgstr "" "エンジニアリングプレートに使用できない意味です。" msgid "Smooth PEI Plate / High Temp Plate" -msgstr "" +msgstr "Smooth PEI Plate / High Temp Plate" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" +"Bed temperature when Smooth PEI Plate/High temperature plate is installed. " +"Value 0 means the filament does not support to print on the Smooth PEI Plate/" +"High Temp Plate" msgid "Textured PEI Plate" msgstr "PEIプレート" @@ -6975,13 +7633,13 @@ msgid "Auxiliary part cooling fan" msgstr "パーツ補助冷却ファン" msgid "Exhaust fan" -msgstr "" +msgstr "Exhaust fan" msgid "During print" -msgstr "" +msgstr "During print" msgid "Complete print" -msgstr "" +msgstr "Complete print" msgid "Filament start G-code" msgstr "フィラメント開始G-code" @@ -6993,20 +7651,28 @@ msgid "Multimaterial" msgstr "" msgid "Wipe tower parameters" -msgstr "" +msgstr "ワイプタワーのパラメータ" msgid "Toolchange parameters with single extruder MM printers" -msgstr "" +msgstr "単一エクストルーダーMMプリンターのツールチェンジパラメーター" msgid "Ramming settings" -msgstr "" +msgstr "ラミング設定" msgid "Toolchange parameters with multi extruder MM printers" -msgstr "" +msgstr "マルチエクストルーダーMMプリンターのツールチェンジパラメータ" msgid "Printable space" msgstr "造形可能領域" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "パラメータ %1% に無効な値が指定されました: %2%" + +msgid "G-code flavor is switched" +msgstr "Gコードフレーバーが切り替わる" + msgid "Cooling Fan" msgstr "" @@ -7032,7 +7698,7 @@ msgid "Machine end G-code" msgstr "プリンター終了G-code" msgid "Printing by object G-code" -msgstr "" +msgstr "Printing by object G-code" msgid "Before layer change G-code" msgstr "積層変更前のG-code" @@ -7041,7 +7707,7 @@ msgid "Layer change G-code" msgstr "積層変更時のG-code" msgid "Time lapse G-code" -msgstr "" +msgstr "Time lapse G-code" msgid "Change filament G-code" msgstr "フィラメント変更G-code" @@ -7074,10 +7740,10 @@ msgid "Single extruder multimaterial setup" msgstr "" msgid "Wipe tower" -msgstr "" +msgstr "ワイプタワー" msgid "Single extruder multimaterial parameters" -msgstr "" +msgstr "単一エクストルーダーのマルチマテリアルパラメーター" msgid "Layer height limits" msgstr "積層ピッチの制限" @@ -7093,9 +7759,12 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Disable it in order to enable Firmware Retraction?" msgid "Firmware Retraction" -msgstr "" +msgstr "Firmware Retraction" msgid "Detached" msgstr "分離的" @@ -7105,9 +7774,11 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"%d Filament Preset and %d Process Preset is attached to this printer. Those " +"presets would be deleted if the printer is deleted." msgid "Presets inherited by other presets can not be deleted!" -msgstr "" +msgstr "Presets inherited by other presets can not be deleted!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." @@ -7127,6 +7798,9 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"Are you sure to delete the selected preset? \n" +"If the preset corresponds to a filament currently in use on your printer, " +"please reset the filament information for that slot." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7222,19 +7896,30 @@ msgstr "" "存の変更があります" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "" -"プリセット %1% に変更があります。\n" -"それらの変更を選択したプリセットに引き継ぎますか?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "You have changed some settings of preset \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "プリセットに変更がありあす。これらの変更を流用しますか?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"You can save or discard the preset values you have modified." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "You have previously modified your settings." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" msgid "Extruders count" msgstr "押出機台数" @@ -7260,12 +7945,14 @@ msgid "" "Note: New modified presets will be selected in settings tabs after close " "this dialog." msgstr "" +"選択したオプションを左のプリセットから右に転送します。\n" +"注意:このダイアログを閉じた後、新しいプリセットが設定タブで選択されます。" msgid "Transfer values from left to right" -msgstr "" +msgstr "左から右へ値を移す" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7346,8 +8033,62 @@ msgstr "利用可能なアップデートはありません" msgid "The configuration is up to date." msgstr "構成データが最新です" -msgid "Ramming customization" +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + +msgid "Ramming customization" +msgstr "ラミングのカスタマイズ" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" @@ -7360,27 +8101,36 @@ msgid "" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." msgstr "" +"ラミングとは、単一エクストルーダーMMプリンターでツールを交換する直前の急速吐" +"出動作を指します。 その目的は、フィラメントを抜く時に新しいフィラメントの挿入" +"を妨げないようにすることと、再挿入のときにエラーにならないよう、フィラメント" +"の先端部を適切なシェイプにすることです。 この処理は重要であり、材料が変わる" +"と、良好な先端形状が得られるラミング条件の変更が必要となったりします。 このた" +"め、ラミング中の吐出速度は調整できるようになっています。\n" +"\n" +"これはエキスパートレベルの設定です。不適切な調整は、ジャムや、ドライブギアが" +"フィラメントを削ったりする可能性があります。" msgid "Total ramming time" -msgstr "" +msgstr "トータルラミング時間" msgid "s" msgstr "s" msgid "Total rammed volume" -msgstr "" +msgstr "合計ラミング容積" msgid "Ramming line width" -msgstr "" +msgstr "ラミング線幅" msgid "Ramming line spacing" -msgstr "" +msgstr "ラミング線間距離" msgid "Auto-Calc" msgstr "自動計算" msgid "Re-calculate" -msgstr "" +msgstr "Re-calculate" msgid "Flushing volumes for filament change" msgstr "フィラメントを入替える為のフラッシュ量" @@ -7419,12 +8169,38 @@ msgstr "From" msgid "To" msgstr "→" -msgid "Bambu Network plug-in not detected." +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" msgstr "" -msgid "Click here to download it." +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" msgstr "" +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "Bambu Network plug-in not detected." + +msgid "Click here to download it." +msgstr "Click here to download it." + msgid "Login" msgstr "サインイン" @@ -7456,7 +8232,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "3Dconnexion設定を表示/非表示" msgid "Switch table page" -msgstr "" +msgstr "Switch table page" msgid "Show keyboard shortcuts list" msgstr "ショートカット一覧を表示" @@ -7606,13 +8382,13 @@ msgid "Gizmo FDM paint-on seam" msgstr "継ぎ目ペイント" msgid "Gizmo Text emboss / engrave" -msgstr "" +msgstr "ギズモ・テキストのエンボス/エングレーブ" msgid "Zoom in" -msgstr "" +msgstr "ズームイン" msgid "Zoom out" -msgstr "" +msgstr "縮小" msgid "Switch between Prepare/Preview" msgstr "" @@ -7686,6 +8462,12 @@ msgstr "5x" msgid "Shift+Mouse wheel" msgstr "Shift + マウスホイール" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "リリースノート" @@ -7710,13 +8492,49 @@ msgid "New version of Orca Slicer" msgstr "新バージョン" msgid "Skip this Version" -msgstr "" +msgstr "Skip this Version" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "resume" + +msgid "Resume Printing" +msgstr "Resume Printing" + +msgid "Resume Printing(defects acceptable)" +msgstr "Resume Printing (defects acceptable)" + +msgid "Resume Printing(problem solved)" +msgstr "Resume Printing (problem solved)" + +msgid "Stop Printing" +msgstr "Stop Printing" + +msgid "Check Assistant" +msgstr "Check Assistant" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruded, Continue" + +msgid "Not Extruded Yet, Retry" +msgstr "Not Extruded Yet, Retry" + +msgid "Finished, Continue" +msgstr "Finished, Continue" + +msgid "Load Filament" +msgstr "ロード" + +msgid "Filament Loaded, Resume" +msgstr "Filament Loaded, Resume" + +msgid "View Liveview" +msgstr "View Liveview" + msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Confirm and Update Nozzle" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN接続失敗 (造形ファイル送信)" @@ -7740,21 +8558,23 @@ msgid "Where to find your printer's IP and Access Code?" msgstr "どこでプリンターのIPアドレスとアクセスコードを確認できますか?" msgid "Step 3: Ping the IP address to check for packet loss and latency." -msgstr "" +msgstr "Step 3: Ping the IP address to check for packet loss and latency." msgid "Test" -msgstr "" +msgstr "Test" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP and Access Code Verified! You may close the window" msgid "Connection failed, please double check IP and Access Code" -msgstr "" +msgstr "Connection failed, please double check IP and Access Code" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"Connection failed! If your IP and Access Code is correct, \n" +"please move to step 3 for troubleshooting network issues" msgid "Model:" msgstr "モデル" @@ -7768,14 +8588,8 @@ msgstr "バージョン" msgid "Update firmware" msgstr "ファームウェアを更新" -msgid "Printing" -msgstr "造形中" - -msgid "Idle" -msgstr "待機中" - msgid "Beta version" -msgstr "" +msgstr "Beta version" msgid "Latest version" msgstr "最新バージョン" @@ -7807,7 +8621,7 @@ 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." +"update next time starting Orca." msgstr "" "ファームウェアのバージョンに異常があります。印刷する前に修復と更新が必要で" "す。今すぐ更新しますか?" @@ -7942,9 +8756,6 @@ msgstr "" msgid "Gap infill" msgstr "隙間インフィル" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "サポート接触面" @@ -8113,40 +8924,51 @@ msgstr "複数の素材の場合、スパイラルモードを使用できませ #, boost-format msgid "The object %1% exceeds the maximum build volume height." -msgstr "" +msgstr "オブジェクト %1% がビルドボリュームの最大高さを超えています。" #, boost-format msgid "" "While the object %1% itself fits the build volume, its last layer exceeds " "the maximum build volume height." msgstr "" +"オブジェクト %1% 自体はビルドボリュームに適合していますが、その最後のレイヤー" +"はビルドボリュームの最大高さを超えてしまいます。" msgid "" "You might want to reduce the size of your model or change current print " "settings and retry." msgstr "" +"モデルのサイズを小さくするか、現在のプリント設定を変更してリトライしてくださ" +"い。" msgid "Variable layer height is not supported with Organic supports." -msgstr "" +msgstr "Variable layer height is not supported with Organic supports." msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Different nozzle diameters and different filament diameters is not allowed " +"when prime tower is enabled." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"Ooze prevention is currently not supported with the prime tower enabled." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." msgid "The prime tower is not supported in \"By object\" print." msgstr "オブジェクト順で造形する場合、プライムタワーを利用できません" @@ -8203,16 +9025,22 @@ msgid "" "Organic support tree tip diameter must not be smaller than support material " "extrusion width." msgstr "" +"有機サポート枝の先端の直径は、サポート材の押し出し幅よりも小さくする必要があ" +"ります。" msgid "" "Organic support branch diameter must not be smaller than 2x support material " "extrusion width." msgstr "" +"有機サポート枝の直径は、サポート材の押し出し幅の2倍よりも小さくする必要があり" +"ます。" msgid "" "Organic support branch diameter must not be smaller than support tree tip " "diameter." msgstr "" +"有機サポートの枝の直径は、サポートの幹の先端直径よりも小さい値である必要があ" +"ります。" msgid "" "Support enforcers are used but support is not enabled. Please enable support." @@ -8228,16 +9056,23 @@ msgid "" "each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" +"相対的なエクストルーダーアドレッシングは、浮動小数点精度による損失を防ぐため" +"に、各レイヤーでエクストルーダー位置をリセットする必要があります。layer_gcode" +"に \"G92 E0 \"を追加する。" msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" +"before_layer_gcode に \"G92 E0\" が見つかりましたが、これはエクストルーダーの" +"絶対アドレッシングと互換性がありません。" msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." msgstr "" +"layer_gcode に \"G92 E0\" が見つかりましたが、これはエクストルーダーの絶対ア" +"ドレッシングと互換性がありません。" #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" @@ -8366,11 +9201,13 @@ msgstr "" "下記形式を参照してください https://username:password@your-octopi-address/" msgid "Device UI" -msgstr "" +msgstr "Device UI" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" +"Specify the URL of your device user interface if it's not the same as " +"print_host" msgid "API Key / Password" msgstr "APIキー/パスワード" @@ -8518,7 +9355,16 @@ msgid "Engineering Plate" msgstr "エンジニアリングプレート" msgid "First layer print sequence" -msgstr "" +msgstr "First layer print sequence" + +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" msgid "This G-code is inserted at every layer change before lifting z" msgstr "積層が変わる直前に実行するG-codeです。" @@ -8562,7 +9408,7 @@ msgid "" msgstr "" msgid "Everywhere" -msgstr "" +msgstr "どこでも" msgid "Top and bottom surfaces" msgstr "" @@ -8643,12 +9489,14 @@ msgid "" msgstr "" msgid "Top surface flow ratio" -msgstr "" +msgstr "Top surface flow ratio" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" +"This factor affects the amount of material for top solid infill. You can " +"decrease it slightly to have a smooth surface finish." msgid "Bottom surface flow ratio" msgstr "" @@ -8791,7 +9639,7 @@ msgid "" msgstr "" msgid "mm/s or %" -msgstr "" +msgstr "mm/s or %" msgid "External" msgstr "" @@ -8929,7 +9777,7 @@ msgid "Default process profile when switch to this machine profile" msgstr "デバイスを切替える時のデフォルト プロセス プロファイル" msgid "Activate air filtration" -msgstr "" +msgstr "Activate air filtration" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" @@ -8941,6 +9789,8 @@ msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" msgstr "" +"Speed of exhaust fan during printing.This speed will override the speed in " +"filament custom g-code" msgid "Speed of exhaust fan after printing completes" msgstr "" @@ -9017,7 +9867,7 @@ msgid "" msgstr "" msgid "Disabled" -msgstr "" +msgstr "無効" msgid "Limited filtering" msgstr "" @@ -9044,12 +9894,14 @@ msgid "End G-code when finish the whole printing" msgstr "造形完了時のG-codeを追加" msgid "Between Object Gcode" -msgstr "" +msgstr "Between Object Gcode" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"Insert G-code between objects. This parameter will only come into effect " +"when you print your models object by object." msgid "End G-code when finish the printing of this filament" msgstr "このフィラメントを使用終わった時のG-codeを追加" @@ -9111,7 +9963,7 @@ msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "底面のインフィル パターンです、ブリッジインフィルが含まれていません。" msgid "Internal solid infill pattern" -msgstr "" +msgstr "Internal solid infill pattern" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " @@ -9130,7 +9982,7 @@ msgstr "" "外壁の造形速度です。普段は内壁より遅い速度を指定し、仕上がりが良くなります。" msgid "Small perimeters" -msgstr "" +msgstr "Small perimeters" msgid "" "This separate setting will affect the speed of perimeters having radius <= " @@ -9145,6 +9997,7 @@ msgstr "" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm" msgstr "" +"This sets the threshold for small perimeter length. Default threshold is 0mm" msgid "Walls printing order" msgstr "" @@ -9184,13 +10037,13 @@ msgid "Inner/Outer/Inner" msgstr "" msgid "Print infill first" -msgstr "" +msgstr "Print infill first" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9243,6 +10096,12 @@ msgstr "" "押出機のクリアランス(半径):オブジェクト順で造形する時にこのパラメータでオ" "ブジェクトの間隔を計算します。" +msgid "Nozzle height" +msgstr "Nozzle height" + +msgid "The height of nozzle tip." +msgstr "The height of nozzle tip." + msgid "Bed mesh min" msgstr "" @@ -9310,7 +10169,7 @@ msgstr "" "ます。 0.95 ~ 1.05の間で設定していください。" msgid "Enable pressure advance" -msgstr "" +msgstr "Enable pressure advance" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " @@ -9335,6 +10194,22 @@ msgstr "" "この設定により、パーツ冷却ファンを停止しなく、最低速度で回転します。頻繁に回" "転・停止の頻度を減らします。" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "積層時間" @@ -9351,10 +10226,10 @@ msgid "Default filament color" msgstr "フィラメントのデフォルト色" msgid "Filament notes" -msgstr "" +msgstr "Filament notes" msgid "You can put your notes regarding the filament here." -msgstr "" +msgstr "You can put your notes regarding the filament here." msgid "Required nozzle HRC" msgstr "ノズルHRC" @@ -9413,54 +10288,61 @@ msgid "" msgstr "" msgid "Loading speed" -msgstr "" +msgstr "ローディング速度" msgid "Speed used for loading the filament on the wipe tower." -msgstr "" +msgstr "フィラメントをワイプタワー上でロードする際のスピード。" msgid "Loading speed at the start" -msgstr "" +msgstr "ローディング開始時の速度" msgid "Speed used at the very beginning of loading phase." -msgstr "" +msgstr "ロードし始めの最初のスピード。" msgid "Unloading speed" -msgstr "" +msgstr "アップロードスピード" msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" +"ワイプタワー上でアンロードするときのスピード(ラミング直後のアンロードスピー" +"ドには影響しません)" msgid "Unloading speed at the start" -msgstr "" +msgstr "最初のアンロードスピード" msgid "" "Speed used for unloading the tip of the filament immediately after ramming." -msgstr "" +msgstr "ラミング直後にフィラメントの先端を引き抜く速度。" msgid "Delay after unloading" -msgstr "" +msgstr "アンロードした後の待ち時間" msgid "" "Time to wait after the filament is unloaded. May help to get reliable " "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" +"フィラメントがアンロードされた後に停止する時間。 軟らかい材料などで元の寸法に" +"縮小するのに時間を必要とすると考えられる場合で、信頼性の高いツール交換を行う" +"のに役立ちます。" msgid "Number of cooling moves" -msgstr "" +msgstr "冷却移動回数" msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" +"フィラメントは、冷却チューブ内で上下に移動することにより冷却されます。 これら" +"の上下移動の必要な回数を指定します。" msgid "Speed of the first cooling move" -msgstr "" +msgstr "冷却移動の最初の速度" msgid "Cooling moves are gradually accelerating beginning at this speed." -msgstr "" +msgstr "クーリング動作はこのスピードから徐々に加速します。" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" @@ -9474,33 +10356,41 @@ msgid "" msgstr "" msgid "Speed of the last cooling move" -msgstr "" +msgstr "最後の冷却移動の速度" msgid "Cooling moves are gradually accelerating towards this speed." -msgstr "" +msgstr "冷却動作は、この速度に向かって徐々に加速しています。" msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"ツールの変更中(Tコードの実行時)にプリンターファームウェア(またはMulti " +"Material Unit 2.0)が新しいフィラメントをロードする時間。 この時間は、Gコード" +"時間推定プログラムによって合計プリント時間に追加されます。" msgid "Ramming parameters" -msgstr "" +msgstr "ラミングパラメーター" msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." msgstr "" +"この文字列はラミングダイアログで編集され、ラミング固有のパラメーターが含まれ" +"ています。" msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"ツールチェンジ中(Tコードの実行時)にプリンターファームウェア(またはMulti " +"Material Unit 2.0)がフィラメントをアンロードする時間。 この時間は、Gコード時" +"間予測プログラムによって合計プリント予測時間に追加されます。" msgid "Enable ramming for multitool setups" -msgstr "" +msgstr "マルチツールのセットアップでラミングを有効にする" msgid "" "Perform ramming when using multitool printer (i.e. when the 'Single Extruder " @@ -9508,18 +10398,23 @@ msgid "" "amount of filament is rapidly extruded on the wipe tower just before the " "toolchange. This option is only used when the wipe tower is enabled." msgstr "" +"マルチツールプリンターを使用しているとき(つまり、プリンター設定の「シングル" +"エクストルーダーマルチマテリアル」のチェックが外れているとき)に、ラミングを" +"実行します。チェックすると、ツール交換の直前に少量のフィラメントがワイプタ" +"ワー上で急速に押し出されます。このオプションは、ワイプタワーが有効な場合にの" +"み使用されます。" msgid "Multitool ramming volume" -msgstr "" +msgstr "マルチツールラミング量" msgid "The volume to be rammed before the toolchange." -msgstr "" +msgstr "ツールチェンジ前にラミングで使用する量" msgid "Multitool ramming flow" -msgstr "" +msgstr "マルチツールラミングフロー" msgid "Flow used for ramming the filament before the toolchange." -msgstr "" +msgstr "ツールチェンジ前のフィラメントのラミングに使うフロー。" msgid "Density" msgstr "密度" @@ -9548,13 +10443,16 @@ msgid "" msgstr "サポート素材は、サポート又はサポート接触面の造形によく使われます。" msgid "Softening temperature" -msgstr "" +msgstr "Softening temperature" msgid "" "The material softens at this temperature, so when the bed temperature is " "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than this, it's highly recommended to open the front " +"door and/or remove the upper glass to avoid clogs." msgid "Price" msgstr "価格" @@ -9566,22 +10464,36 @@ msgid "money/kg" msgstr "USD/kg" msgid "Vendor" -msgstr "" +msgstr "Vendor" msgid "Vendor of filament. For show only" -msgstr "" +msgstr "Filament Vendor (Only for show)" msgid "(Undefined)" msgstr "(未定義)" -msgid "Infill direction" -msgstr "インフィル方向" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "スパース インフィル パターンの角度です" +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "充填密度" @@ -9627,6 +10539,9 @@ msgstr "キュービックサポート" msgid "Lightning" msgstr "ライトニング" +msgid "Cross Hatch" +msgstr "Cross Hatch" + msgid "Sparse infill anchor length" msgstr "" @@ -9650,7 +10565,7 @@ msgid "1000 (unlimited)" msgstr "1000 (unlimited)" msgid "Maximum length of the infill anchor" -msgstr "" +msgstr "最長インフィルアンカー" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " @@ -9693,12 +10608,14 @@ msgid "" msgstr "" msgid "mm/s² or %" -msgstr "" +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 "" +"Acceleration of sparse infill. If the value is expressed as a percentage (e." +"g. 100%), it will be calculated based on the default acceleration." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -9713,13 +10630,13 @@ msgstr "" "1層目の造形加速度です。遅くするとプレートとの接着を向上させることができます" msgid "Enable accel_to_decel" -msgstr "" +msgstr "Enable accel_to_decel" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "" +msgstr "Klipper's max_accel_to_decel will be adjusted automatically" msgid "accel_to_decel" -msgstr "" +msgstr "accel_to_decel" #, c-format, boost-format msgid "" @@ -9727,10 +10644,10 @@ msgid "" msgstr "" msgid "Jerk of outer walls" -msgstr "" +msgstr "Jerk of outer walls" msgid "Jerk of inner walls" -msgstr "" +msgstr "Jerk of inner walls" msgid "Jerk for top surface" msgstr "" @@ -9797,6 +10714,9 @@ msgid "" "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "" @@ -9846,7 +10766,7 @@ msgid "Whether to apply fuzzy skin on the first layer" msgstr "" msgid "Filter out tiny gaps" -msgstr "" +msgstr "Filter out tiny gaps" msgid "Layers and Perimeters" msgstr "積層と境界" @@ -9861,13 +10781,31 @@ msgstr "" "ギャップを充填時の速度です。ギャップの幅が不規則なので、遅くするのが推奨で" "す。" +msgid "Precise Z height" +msgstr "Precise Z height" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." + 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 "この設定で出力のG-codeファイルにG2/G3コードを有効します。" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." +msgstr "" msgid "Add line number" msgstr "行番号を追加" @@ -9917,10 +10855,10 @@ msgid "HRC" msgstr "HRC" msgid "Printer structure" -msgstr "" +msgstr "Printer structure" msgid "The physical arrangement and components of a printing device" -msgstr "" +msgstr "The physical arrangement and components of a printing device" msgid "CoreXY" msgstr "" @@ -9935,10 +10873,10 @@ msgid "Delta" msgstr "" msgid "Best object position" -msgstr "" +msgstr "Best object position" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." -msgstr "" +msgstr "Best auto arranging position in range [0,1] w.r.t. bed shape." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " @@ -9984,7 +10922,7 @@ msgid "money/h" msgstr "" msgid "Support control chamber temperature" -msgstr "" +msgstr "Support controlling chamber temperature" msgid "" "This option is enabled if machine support controlling chamber temperature\n" @@ -9992,7 +10930,7 @@ msgid "" msgstr "" msgid "Support air filtration" -msgstr "" +msgstr "Support air filtration" msgid "" "Enable this if printer support air filtration\n" @@ -10015,7 +10953,7 @@ msgid "Enable this option if you want to use multiple bed types" msgstr "" msgid "Label objects" -msgstr "" +msgstr "オブジェクトにラベルを付ける" msgid "" "Enable this to add comments into the G-Code labeling print moves with what " @@ -10025,19 +10963,22 @@ msgid "" msgstr "" msgid "Exclude objects" -msgstr "" +msgstr "Exclude objects" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" msgid "Verbose G-code" -msgstr "" +msgstr "コメント付きGコード" 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 "" +"これを有効にすると、コメント化されたGコードファイルが生成され、各行に説明テキ" +"ストが追加されます。 ただし、SDカードからプリントする場合、ファイルサイズ増大" +"が原因で処理が間に合わずプリント速度が低下する可能性があります。" msgid "Infill combination" msgstr "インフィル マージ" @@ -10060,36 +11001,53 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "インフィル/壁面 オーバーラップ" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"インフィルの領域を少し壁面を重ねるために拡大します。これにより壁面との接着性" -"が向上させます。値はスパース インフィルの線幅の割合です。" msgid "Speed of internal sparse infill" msgstr "スパース インフィルの造形速度です。" msgid "Interface shells" -msgstr "" +msgstr "Interface shells" 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 "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Maximum width of a segmented region" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" +"Maximum width of a segmented region. A value of 0 disables this feature." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Interlocking depth of a segmented region" msgid "Interlocking depth of a segmented region. Zero disables this feature." -msgstr "" +msgstr "Interlocking depth of a segmented region. Zero disables this feature." msgid "Ironing Type" msgstr "アイロン面" @@ -10345,7 +11303,7 @@ msgid "" msgstr "" msgid "mm³/s²" -msgstr "" +msgstr "mm³/s²" msgid "Smoothing segment length" msgstr "" @@ -10398,12 +11356,14 @@ msgid "Diameter of nozzle" msgstr "ノズル直径" msgid "Configuration notes" -msgstr "" +msgstr "設定上の注意" msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." msgstr "" +"ここにメモを書いておくことができます。 このテキストは、Gコードヘッダーのコメ" +"ントに追加されます。" msgid "Host Type" msgstr "ホストタイプ" @@ -10420,36 +11380,43 @@ msgid "Volume of nozzle between the cutter and the end of nozzle" msgstr "ノズル先端とフィラメントカッターの間の体積" msgid "Cooling tube position" -msgstr "" +msgstr "冷却チューブ位置" msgid "Distance of the center-point of the cooling tube from the extruder tip." -msgstr "" +msgstr "ノズル先端から冷却チューブの中心までの距離。" msgid "Cooling tube length" -msgstr "" +msgstr "冷却チューブの長さ" msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" +"ノズルからの溶融樹脂を引抜いた後にフィラメントを凝固させるための冷却用チュー" +"ブの長さ。" msgid "High extruder current on filament swap" -msgstr "" +msgstr "フィラメント交換時の高いエクストルーダー電流" msgid "" "It may be beneficial to increase the extruder motor current during the " "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" +"フィラメント交換シーケンス中にエクストルーダーモーター電流を増やして、フィラ" +"メント押出し力を高められます。フィラメントの先端シェイプによりロード時の負荷" +"抵抗が増加してしまう場合に有効な機能です。" msgid "Filament parking position" -msgstr "" +msgstr "フィラメント待避ポジション" msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" +"アンロード時にフィラメントが止まっている位置からエクストルーダー先端までの距" +"離。 これは、プリンターファームウェアの値と一致させる必要があります。" msgid "Extra loading distance" -msgstr "" +msgstr "追加ローディング長さ" msgid "" "When set to zero, the distance the filament is moved from parking position " @@ -10457,6 +11424,9 @@ msgid "" "positive, it is loaded further, if negative, the loading move is shorter " "than unloading." msgstr "" +"ゼロに設定すると、ロード中にフィラメントがパーキング位置から押し出される距離" +"は、アンロード中に戻った距離と同一になります。 正の場合、その分多くロードさ" +"れ、逆に負の場合は、ロード距離はアンロードよりも短くなります。" msgid "Start end points" msgstr "終始点" @@ -10551,10 +11521,10 @@ msgid "" msgstr "" msgid "Printer notes" -msgstr "" +msgstr "Printer notes" msgid "You can put your notes regarding the printer here." -msgstr "" +msgstr "You can put your notes regarding the printer here." msgid "Raft contact Z distance" msgstr "ラフト接触面Z間隔" @@ -10634,6 +11604,30 @@ msgstr "" "ノズルが長い距離で移動する時に、リトラクションの量です。値が0の場合、リトラク" "ションが無効になります。" +msgid "Long retraction when cut(experimental)" +msgstr "Long retraction when cut (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." + +msgid "Retraction distance when cut" +msgstr "Retraction distance when cut" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimental feature. Retraction length before cutting off during filament " +"change" + msgid "Z hop when retract" msgstr "リトラクト時にZ方向調整" @@ -10646,20 +11640,24 @@ msgstr "" "突を回避できます。" msgid "Z hop lower boundary" -msgstr "" +msgstr "Z hop lower boundary" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"Z hop will only come into effect when Z is above this value and is below the " +"parameter: \"Z hop upper boundary\"" msgid "Z hop upper boundary" -msgstr "" +msgstr "Z hop upper boundary" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"If this value is positive, Z hop will only come into effect when Z is above " +"the parameter: \"Z hop lower boundary\" and is below this value" msgid "Z hop type" msgstr "" @@ -10671,7 +11669,7 @@ msgid "Spiral" msgstr "スパイラル" msgid "Only lift Z above" -msgstr "" +msgstr "これ以上でリフトZ" msgid "" "If you set this to a positive value, Z lift will only take place above the " @@ -10679,7 +11677,7 @@ msgid "" msgstr "" msgid "Only lift Z below" -msgstr "" +msgstr "Zリフト以下" msgid "" "If you set this to a positive value, Z lift will only take place below the " @@ -10707,17 +11705,21 @@ msgid "Top and Bottom" msgstr "" msgid "Extra length on restart" -msgstr "" +msgstr "Extra length on restart" msgid "" "When the retraction is compensated after the travel move, the extruder will " "push this additional amount of filament. This setting is rarely needed." msgstr "" +"移動後に引込みが補償されると、エクストルーダーはこの追加量のフィラメントを押" +"し出します。 この設定はほとんど必要ありません。" msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" +"ツールの交換後に吸込み分が補正されると、エクストルーダーはこの追加量のフィラ" +"メントを押し出します。" msgid "Retraction Speed" msgstr "リトラクション速度" @@ -10736,7 +11738,7 @@ msgstr "" "ションの速度と同じくなります。" msgid "Use firmware retraction" -msgstr "" +msgstr "Use firmware retraction" msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " @@ -10772,15 +11774,17 @@ msgid "Random" msgstr "ランダム" msgid "Staggered inner seams" -msgstr "" +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 "" +msgstr "Seam gap" msgid "" "In order to reduce the visibility of the seam in a closed loop extrusion, " @@ -10794,17 +11798,20 @@ msgstr "" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" +"Use scarf joint to minimize seam visibility and increase seam strength." msgid "Conditional scarf joint" -msgstr "" +msgstr "Conditional scarf joint" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." msgid "Conditional angle threshold" -msgstr "" +msgstr "Conditional angle threshold" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -10847,39 +11854,44 @@ msgid "This factor affects the amount of material for scarf joints." msgstr "" msgid "Scarf start height" -msgstr "" +msgstr "Scarf start height" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"Start height of the scarf.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." msgid "Scarf around entire wall" -msgstr "" +msgstr "Scarf around entire wall" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "The scarf extends to the entire length of the wall." msgid "Scarf length" -msgstr "" +msgstr "Scarf length" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." msgid "Scarf steps" -msgstr "" +msgstr "Scarf steps" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "Minimum number of segments of each scarf." msgid "Scarf joint for inner walls" -msgstr "" +msgstr "Scarf joint for inner walls" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "Use scarf joint for inner walls as well." msgid "Role base wipe speed" msgstr "" @@ -10914,7 +11926,7 @@ msgid "" msgstr "" msgid "Wipe speed" -msgstr "" +msgstr "Wipe speed" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -10922,6 +11934,10 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" +"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%." msgid "Skirt distance" msgstr "スカート距離" @@ -10935,6 +11951,29 @@ msgstr "Skirt height" msgid "How many layers of skirt. Usually only one layer" msgstr "Number of skirt layers: usually only one" +msgid "Draft shield" +msgstr "保護シールド" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "限定" + +msgid "Enabled" +msgstr "有効" + msgid "Skirt loops" msgstr "スカートのループ数" @@ -10947,6 +11986,17 @@ msgstr "" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -10971,9 +12021,6 @@ 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 " @@ -10983,20 +12030,24 @@ msgstr "" "で、シームはありません。" msgid "Smooth Spiral" -msgstr "" +msgstr "Smooth Spiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" msgid "Max XY Smoothing" -msgstr "" +msgstr "Max XY Smoothing" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Maximum distance to move points in XY to try to achieve a smooth spiral. If " +"expressed as a %, it will be computed over nozzle diameter" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -11029,7 +12080,7 @@ msgid "Start G-code when start the printing of this filament" msgstr "このフィラメントを使用開始時のG-code" msgid "Single Extruder Multi Material" -msgstr "" +msgstr "シングルエクストルーダー・マルチマテリアル" msgid "Use single nozzle to print multi filament" msgstr "" @@ -11063,14 +12114,21 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" +"有効にすると、ツール変更がない場合にワイプタワーをプリントしなくなります。 ワ" +"イプタワーの高さが同期しなくなりますので、ツールチェンジのあるレイヤーでは、" +"エクストルーダーがプリント面より下方に移動してワイプタワーをプリントするケー" +"スもあります。 この場合、プリントした部分との衝突がないことをご自身で確認して" +"おく必要があります。" msgid "Prime all printing extruders" -msgstr "" +msgstr "全てのエクストルーダーでプライムを実施" msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." msgstr "" +"有効にすると、すべてのプリントエクストルーダーは、プリント開始時にプリント" +"ベッドの前端で準備されます。" msgid "Slice gap closing radius" msgstr "隙間充填半径" @@ -11104,7 +12162,7 @@ msgid "Close holes" msgstr "穴を閉じる" msgid "Z offset" -msgstr "" +msgstr "Zオフセット" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -11112,6 +12170,10 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" +"この値は、出力Gコードの全てのZ座標に対して加算/減算されます。これによって Zエ" +"ンドストップの位置を補正できます。例えば、エンドストップで0のとき、実際にはノ" +"ズルがベッド面から0.3mm離れる場合、これを-0.3に設定します(もしくはエンドス" +"トップ位置を修正します)。" msgid "Enable support" msgstr "有効化" @@ -11164,10 +12226,10 @@ msgid "" msgstr "造形しにくい部分だけサポートを生成します、例えば細長いしっぽ、ハリなど" msgid "Remove small overhangs" -msgstr "" +msgstr "Remove small overhangs" msgid "Remove small overhangs that possibly need no supports." -msgstr "" +msgstr "This removes small overhangs that may need no support." msgid "Top Z distance" msgstr "トップ面とのZ間隔" @@ -11192,11 +12254,12 @@ msgstr "" "を使用する意味です。" msgid "Avoid interface filament for base" -msgstr "" +msgstr "Avoid interface filament for base" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Avoid using support interface filament to print support base if possible." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -11232,10 +12295,10 @@ msgid "Bottom interface layers" msgstr "底部接触面層数" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Number of bottom interface layers" msgid "Same as top" -msgstr "" +msgstr "Same as top" msgid "Top interface spacing" msgstr "トップ接触面間隔" @@ -11316,7 +12379,7 @@ msgid "Tree Hybrid" msgstr "ツリーハイブリッド" msgid "Organic" -msgstr "" +msgstr "オーガニック" msgid "Independent support layer height" msgstr "独立サポート層ピッチ" @@ -11350,7 +12413,7 @@ msgstr "" "大きくなると、枝部分が繋がりやすくなります。" msgid "Preferred Branch Angle" -msgstr "" +msgstr "優先の枝アングル" #. TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" msgid "" @@ -11358,6 +12421,8 @@ msgid "" "model. Use a lower angle to make them more vertical and more stable. Use a " "higher angle for branches to merge faster." msgstr "" +"枝の好ましい角度、モデルを避ける必要がない場合。低い角度を使用すると、より垂" +"直になり、より安定します。枝が早く合流するようにするには、角度を高くします。" msgid "Tree support branch distance" msgstr "ツリーサポート枝間隔" @@ -11367,7 +12432,7 @@ msgid "" msgstr "サポートタイプがツリーの時、隣接するノードの距離です。" msgid "Branch Density" -msgstr "" +msgstr "枝の密度" #. TRN PrintSettings: "Organic supports" > "Branch Density" msgid "" @@ -11377,6 +12442,10 @@ msgid "" "interfaces instead of a high branch density value if dense interfaces are " "needed." msgstr "" +"枝の先端を生成するために使用されるサポート構造の密度を調整します。高い値を設" +"定するとオーバーハングが良くなりますが、サポートの除去が困難になるため、密度" +"の高いインターフェースが必要な場合は、枝密度を高めるのではなく、トップサポー" +"トのインターフェースを有効にすることをお勧めします。" msgid "Adaptive layer height" msgstr "アダプティブ積層ピッチ" @@ -11401,11 +12470,11 @@ msgid "Distance from tree branch to the outermost brim line" msgstr "" msgid "Tip Diameter" -msgstr "" +msgstr "先端径" #. TRN PrintSettings: "Organic supports" > "Tip Diameter" msgid "Branch tip diameter for organic supports." -msgstr "" +msgstr "オーガニックサポート時の枝先径。" msgid "Tree support branch diameter" msgstr "ツリーサポート枝直径" @@ -11415,7 +12484,7 @@ msgstr "サポートノードの初期直径です。" #. TRN PrintSettings: #lmFIXME msgid "Branch Diameter Angle" -msgstr "" +msgstr "枝径アングル" #. TRN PrintSettings: "Organic supports" > "Branch Diameter Angle" msgid "" @@ -11424,9 +12493,12 @@ msgid "" "over their length. A bit of an angle can increase stability of the organic " "support." msgstr "" +"枝の直径が、下に向かって徐々に太くなっていくときの角度です。角度が0だと、枝の" +"太さが一定になります。少し角度をつけると、オーガニックサポートの安定性が増し" +"ます。" msgid "Branch Diameter with double walls" -msgstr "" +msgstr "二重ウォール枝径" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -11434,12 +12506,15 @@ msgid "" "printed with double walls for stability. Set this value to zero for no " "double walls." msgstr "" +"この直径の円の面積よりも大きな面積を持つ枝は、安定性向上のためために二重" +"ウォールでプリントされます。 二重ウォールにしないときは、この値をゼロに設定し" +"ます。" msgid "Support wall loops" -msgstr "" +msgstr "Support wall loops" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "This setting specify the count of walls around support" msgid "Tree support with infill" msgstr "ツリーサポートインフィル使用" @@ -11460,7 +12535,7 @@ msgid "" msgstr "" msgid "Chamber temperature" -msgstr "" +msgstr "Chamber temperature" msgid "" "Higher chamber temperature can help suppress or reduce warping and " @@ -11471,6 +12546,12 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on. At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials, the actual chamber temperature should not " +"be high to avoid clogs, so 0 (turned off) is highly recommended." msgid "Nozzle temperature for layers after the initial one" msgstr "1層目後のノズル温度" @@ -11587,41 +12668,73 @@ msgid "Width of prime tower" msgstr "プライムタワーの幅です。" msgid "Wipe tower rotation angle" -msgstr "" +msgstr "ワイプタワーの回転角" msgid "Wipe tower rotation angle with respect to x-axis." -msgstr "" +msgstr "x軸に対するワイプタワーの回転角度。" msgid "Stabilization cone apex angle" -msgstr "" +msgstr "スタビライザーコーンの頂角" msgid "" "Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base." msgstr "" +"ワイプタワーを安定させるために使用される円錐の頂点の角度。角度が大きいと底面" +"が広くなります。" msgid "Wipe tower purge lines spacing" -msgstr "" +msgstr "ワイプタワーのパージラインの間隔" msgid "Spacing of purge lines on the wipe tower." +msgstr "ワイプタワーのパージラインの間隔。" + +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." msgstr "" msgid "Wipe tower extruder" -msgstr "" +msgstr "ワイプタワーエクストルーダー" msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." msgstr "" +"ワイプタワーの外周を印刷する際に使用するエクストルーダーです。0に設定すると、" +"使用可能なものを使用します(非水溶性であることが望ましい)。" msgid "Purging volumes - load/unload volumes" -msgstr "" +msgstr "パージ量-ロード/アンロード時" msgid "" "This vector saves required volumes to change from/to each tool used on the " "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" +"このベクトル列には、ワイプタワーで使用される各フィラメント間で変更するために" +"必要なボリュームが保存されます。 これらの値は、以下の完全なパージボリュームの" +"作成を簡素化するために使用されます。" msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -11651,10 +12764,10 @@ msgstr "" "無効になります。" msgid "Maximal bridging distance" -msgstr "" +msgstr "ブリッジ最大距離" msgid "Maximal distance between supports on sparse infill sections." -msgstr "" +msgstr "中抜きインフィルレイヤーの間隔の最大値。" msgid "X-Y hole compensation" msgstr "ホール補正 X-Y" @@ -11708,7 +12821,7 @@ msgid "Rotate the polyhole every layer." msgstr "" msgid "G-code thumbnails" -msgstr "" +msgstr "Gコードのサムネイル" msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " @@ -11716,15 +12829,17 @@ msgid "" msgstr "" msgid "Format of G-code thumbnails" -msgstr "" +msgstr "Gコードサムネイルのフォーマット" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " "QOI for low memory firmware" msgstr "" +"Gコードサムネイルのフォーマット。PNGは最高の品質、JPGは最小のサイズ、QOIは低" +"メモリのファームウェアのため" msgid "Use relative E distances" -msgstr "" +msgstr "Use relative E distances" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " @@ -11887,7 +13002,7 @@ msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "Do not run any validity checks, such as G-code path conflicts check." msgid "Ensure on bed" -msgstr "" +msgstr "ベッド上で確認" msgid "" "Lift the object above the bed when it is partially below. Disabled by default" @@ -11900,22 +13015,24 @@ msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "" msgid "Rotation angle around the Z axis in degrees." -msgstr "" +msgstr "Z軸周りの回転角度(度)。" msgid "Rotate around Y" -msgstr "" +msgstr "Y軸周りの回転" msgid "Rotation angle around the Y axis in degrees." -msgstr "" +msgstr "Y軸を中心とした回転角(度単位)。" msgid "Data directory" -msgstr "" +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 "Load custom gcode" msgstr "" @@ -11924,91 +13041,105 @@ msgid "Load custom gcode from json" msgstr "" msgid "Current z-hop" -msgstr "" +msgstr "現在のz-hop" msgid "Contains z-hop present at the beginning of the custom G-code block." -msgstr "" +msgstr "カスタムGコードブロックの先頭に存在するz-hopを含む。" msgid "" "Position of the extruder at the beginning of the custom G-code block. If the " "custom G-code travels somewhere else, it should write to this variable so " "PrusaSlicer knows where it travels from when it gets control back." msgstr "" +"カスタム G コード ブロックの先頭のエクストルーダーのモーターの位置。 カスタ" +"ム G コードで動かしたとき、PrusaSlicer が制御を取り戻したときにどこから移動し" +"たかを認識できるように、この変数に書き込む必要があります。" msgid "" "Retraction state at the beginning of the custom G-code block. If the custom " "G-code moves the extruder axis, it should write to this variable so " "PrusaSlicer deretracts correctly when it gets control back." msgstr "" +"カスタム G コード ブロックの先頭のリトラクション状態。 カスタム G コードがエ" +"クストルーダー軸を動かすとき、PrusaSlicer が制御を取り戻したときに正しく撤回" +"できるように、この変数に書き込む必要があります。" msgid "Extra deretraction" -msgstr "" +msgstr "追加リトラクションからの復帰" msgid "Currently planned extra extruder priming after deretraction." msgstr "" +"現在、リトラクションからの復帰時のエクストルーダーの追加プライミングが計画さ" +"れています。" msgid "Current extruder" -msgstr "" +msgstr "現在のエクストルーダー" msgid "Zero-based index of currently used extruder." -msgstr "" +msgstr "現在使用されているエクストルーダーの 0 から始まるインデックス。" msgid "Current object index" -msgstr "" +msgstr "現在のオブジェクトインデックス" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." msgstr "" +"順次プリントに特化したものです。 現在プリントされているオブジェクトの 0 から" +"始まるインデックス。" msgid "Has wipe tower" -msgstr "" +msgstr "ワイプタワーあり" msgid "Whether or not wipe tower is being generated in the print." -msgstr "" +msgstr "プリント時にワイプタワーが生成されているかどうか。" msgid "Initial extruder" -msgstr "" +msgstr "イニシャルエクストルーダー" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." msgstr "" +"プリントで使用される最初のエクストルーダーの 0 から始まるインデックス。 " +"initial_toolと同じ。" msgid "Initial tool" -msgstr "" +msgstr "イニシャルツール" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" +"プリントで使用される最初のエクストルーダーの 0 から始まるインデックス。 " +"Initial_extruder と同じです。" msgid "Is extruder used?" -msgstr "" +msgstr "エクストルーダーは使用されましたか?" msgid "Vector of bools stating whether a given extruder is used in the print." msgstr "" msgid "Volume per extruder" -msgstr "" +msgstr "エクストルーダーあたりの体積" msgid "Total filament volume extruded per extruder during the entire print." -msgstr "" +msgstr "プリント全体でエクストルーダーごとに押し出されたフィラメントの総量。" msgid "Total toolchanges" msgstr "" msgid "Number of toolchanges during the print." -msgstr "" +msgstr "プリント中のツール交換の数。" msgid "Total volume" -msgstr "" +msgstr "トータル体積" msgid "Total volume of filament used during the entire print." -msgstr "" +msgstr "プリント全体で使用されるフィラメントの総量。" msgid "Weight per extruder" -msgstr "" +msgstr "エクストルーダーあたりの重量" msgid "" "Weight per extruder extruded during the entire print. Calculated from " @@ -12016,7 +13147,7 @@ msgid "" msgstr "" msgid "Total weight" -msgstr "" +msgstr "トータル重量" msgid "" "Total weight of the print. Calculated from filament_density value in " @@ -12024,25 +13155,26 @@ msgid "" msgstr "" msgid "Total layer count" -msgstr "" +msgstr "トータルレイヤー数" msgid "Number of layers in the entire print." -msgstr "" +msgstr "全てのプリントのレイヤー数" msgid "Number of objects" -msgstr "" +msgstr "オブジェクト数" msgid "Total number of objects in the print." -msgstr "" +msgstr "プリント中のオブジェクトの総数" msgid "Number of instances" -msgstr "" +msgstr "インスタンス数" msgid "Total number of object instances in the print, summed over all objects." msgstr "" +"すべてのオブジェクトを合計した、プリント内のオブジェクト インスタンスの総数。" msgid "Scale per object" -msgstr "" +msgstr "オブジェクトごとのスケール" msgid "" "Contains a string with the information about what scaling was applied to the " @@ -12052,22 +13184,26 @@ msgid "" msgstr "" msgid "Input filename without extension" -msgstr "" +msgstr "拡張子を除いたファイル名を入力。" msgid "Source filename of the first object, without extension." -msgstr "" +msgstr "最初のオブジェクトのソース ファイル名(拡張子を除く)。" msgid "" "The vector has two elements: x and y coordinate of the point. Values in mm." msgstr "" +"ベクトルには、点の x 座標と y 座標という 2 つの要素があります。 値は mm 単位" +"です。" msgid "" "The vector has two elements: x and y dimension of the bounding box. Values " "in mm." msgstr "" +"ベクトルには、境界ボックスの x 次元と y 次元という 2 つの要素があります。 値" +"は mm 単位です。" msgid "First layer convex hull" -msgstr "" +msgstr "第 1 層の凸包(convex hull)" msgid "" "Vector of points of the first layer convex hull. Each element has the " @@ -12075,66 +13211,68 @@ msgid "" msgstr "" msgid "Bottom-left corner of first layer bounding box" -msgstr "" +msgstr "最初のレイヤーの境界ボックスの左下隅" msgid "Top-right corner of first layer bounding box" -msgstr "" +msgstr "最初のレイヤーの境界ボックスの右上隅" msgid "Size of the first layer bounding box" -msgstr "" +msgstr "最初のレイヤーの境界ボックスのサイズ" msgid "Bottom-left corner of print bed bounding box" -msgstr "" +msgstr "プリント ベッド境界ボックスの左下隅" msgid "Top-right corner of print bed bounding box" -msgstr "" +msgstr "プリント ベッド境界ボックスの右上隅" msgid "Size of the print bed bounding box" -msgstr "" +msgstr "プリントベッド境界ボックスのサイズ" msgid "Timestamp" -msgstr "" +msgstr "タイムスタンプ" msgid "String containing current time in yyyyMMdd-hhmmss format." -msgstr "" +msgstr "yyyyMMdd-hhmmss形式の現在時刻を表す文字列。" msgid "Day" -msgstr "" +msgstr "日" msgid "Hour" -msgstr "" +msgstr "時" msgid "Minute" -msgstr "" +msgstr "分" msgid "Print preset name" -msgstr "" +msgstr "プリセット名をプリント" msgid "Name of the print preset used for slicing." -msgstr "" +msgstr "スライスに使用されるプリントプリセットの名前。" msgid "Filament preset name" -msgstr "" +msgstr "フィラメントのプリセット名" msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" +"スライスに使用されるフィラメント プリセットの名前。 変数は、各エクストルー" +"ダーの 1 つの名前を含むベクトルです。" msgid "Printer preset name" -msgstr "" +msgstr "プリンタのプリセット名" msgid "Name of the printer preset used for slicing." -msgstr "" +msgstr "スライスに使用されるプリンタ プリセットの名前。" msgid "Physical printer name" -msgstr "" +msgstr "物理プリンター名" msgid "Name of the physical printer used for slicing." -msgstr "" +msgstr "スライスに使用される物理プリンターの名前。" msgid "Layer number" -msgstr "" +msgstr "レイヤーナンバー" msgid "Index of the current layer. One-based (i.e. first layer is number 1)." msgstr "" @@ -12145,13 +13283,13 @@ msgstr "" msgid "" "Height of the current layer above the print bed, measured to the top of the " "layer." -msgstr "" +msgstr "プリント ベッド上の現在のレイヤーの高さ (レイヤーの最上部までの計測)。" msgid "Maximal layer z" msgstr "" msgid "Height of the last layer above the print bed." -msgstr "" +msgstr "プリントベッド上の最後のレイヤーの高さ。" msgid "Filament extruder ID" msgstr "" @@ -12271,6 +13409,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: failed to parse" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12284,73 +13425,70 @@ 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 "Flow Rate Calibration" -msgstr "" +msgstr "Flow Rate Calibration" msgid "Max Volumetric Speed Calibration" -msgstr "" +msgstr "Max Volumetric Speed Calibration" msgid "Manage Result" -msgstr "" +msgstr "Manage Results" msgid "Manual Calibration" -msgstr "" +msgstr "Manual Calibration" msgid "Result can be read by human eyes." -msgstr "" +msgstr "Results can be easily seen and understood." msgid "Auto-Calibration" -msgstr "" +msgstr "Auto-Calibration" msgid "We would use Lidar to read the calibration result" -msgstr "" +msgstr "We would use Lidar to read the calibration result." msgid "Prev" -msgstr "" +msgstr "Prev" msgid "Recalibration" -msgstr "" +msgstr "Recalibration" msgid "Calibrate" -msgstr "" +msgstr "Calibrate" msgid "Finish" msgstr "完了" msgid "How to use calibration result?" -msgstr "" +msgstr "How can I use calibration results?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" +"You can change the Flow Dynamics Calibration Factor in material editing" msgid "" "The current firmware version of the printer does not support calibration.\n" "Please upgrade the printer firmware." msgstr "" +"The current firmware version of the printer does not support calibration.\n" +"Please update the printer firmware." msgid "Calibration not supported" -msgstr "" +msgstr "Calibration not supported" msgid "Error desc" -msgstr "" +msgstr "Error desc" msgid "Extra info" -msgstr "" +msgstr "Extra info" msgid "Flow Dynamics" -msgstr "" +msgstr "Flow Dynamics" msgid "Flow Rate" -msgstr "" +msgstr "Flow Rate" 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 "" +msgstr "Max Volumetric Speed" #, c-format, boost-format msgid "" @@ -12360,62 +13498,100 @@ msgid "" "End value: > Start value\n" "Value step: >= %.3f)" msgstr "" +"Please input valid values:\n" +"Start value: >= %.1f\n" +"End value: <= %.1f\n" +"End value: > Start value\n" +"Value step: >= %.3f)" msgid "The name cannot be empty." -msgstr "" +msgstr "The name cannot be empty." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "The selected preset: %s is not found." msgid "The name cannot be the same as the system preset name." -msgstr "" +msgstr "The name cannot be the same as the system preset name." msgid "The name is the same as another existing preset name" -msgstr "" +msgstr "The name is the same as another existing preset name." msgid "create new preset failed." -msgstr "" +msgstr "Creating new preset failed." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" +"Are you sure you want to cancel the current calibration and return to the " +"home page?" msgid "No Printer Connected!" -msgstr "" +msgstr "No Printer Connected!" msgid "Printer is not connected yet." -msgstr "" +msgstr "A printer is not connected yet." msgid "Please select filament to calibrate." -msgstr "" +msgstr "Please select filament to calibrate." msgid "The input value size must be 3." +msgstr "The input value size must be 3." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgid "Connecting to printer..." -msgstr "" +msgstr "Connecting to printer..." msgid "The failed test result has been dropped." -msgstr "" +msgstr "The failed test result has been removed." msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "Flow Dynamics Calibration results have been saved to the printer." + +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" msgstr "" +"There is already a previous calibration result with the same name: %s. Only " +"one result with a name is saved. Are you sure you want to overwrite the " +"previous result?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." msgid "Internal Error" -msgstr "" +msgstr "Internal Error" msgid "Please select at least one filament for calibration" -msgstr "" +msgstr "Please select at least one filament for calibration" msgid "Flow rate calibration result has been saved to preset" -msgstr "" +msgstr "Flow rate calibration results have been saved to preset." msgid "Max volumetric speed calibration result has been saved to preset" -msgstr "" +msgstr "Max volumetric speed calibration result has been saved to preset" msgid "When do you need Flow Dynamics Calibration" -msgstr "" +msgstr "When do you need Flow Dynamics Calibration?" msgid "" "We now have added the auto-calibration for different filaments, which is " @@ -12427,9 +13603,17 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" +"We now have added auto-calibration for different filaments, which is fully " +"automated and the result will be saved to 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." msgid "About this calibration" -msgstr "" +msgstr "About this calibration" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -12441,10 +13625,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12452,7 +13636,7 @@ msgid "" msgstr "" msgid "When to use Flow Rate Calibration" -msgstr "" +msgstr "When to use Flow Rate Calibration" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -12465,12 +13649,24 @@ msgid "" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." msgstr "" +"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." 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 "" +"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." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -12480,6 +13676,12 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" +"Flow Rate Calibration measures the ratio of expected to actual extrusion " +"volumes. The default setting works well with 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 our wiki article." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -12499,272 +13701,305 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" +"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 performing it." msgid "When you need Max Volumetric Speed Calibration" -msgstr "" +msgstr "When you need Max Volumetric Speed Calibration" msgid "Over-extrusion or under extrusion" -msgstr "" +msgstr "Over-extrusion or under extrusion" msgid "Max Volumetric Speed calibration is recommended when you print with:" -msgstr "" +msgstr "Max Volumetric Speed Calibration is recommended when you print with:" msgid "material with significant thermal shrinkage/expansion, such as..." -msgstr "" +msgstr "material with significant thermal shrinkage/expansion, such as..." msgid "materials with inaccurate filament diameter" -msgstr "" +msgstr "materials with inaccurate filament diameter" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "" +msgstr "We found the best Flow Dynamics Calibration Factor." msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." msgstr "" +"Part of the calibration failed! It may help to clean the plate and retry. " +"The failed test result will be deleted." msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" msgstr "" +"*We recommend that you add brand, material, type, and even humidity level to " +"the name" msgid "Failed" msgstr "失敗" +msgid "Please enter the name you want to save to printer." +msgstr "Please enter the name you want to save to printer." + +msgid "The name cannot exceed 40 characters." +msgstr "The name cannot exceed 40 characters." + 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?" +"want to override the other results?" msgstr "" +"Only one of the results with the same name will be saved. Are you sure you " +"want to replace the other results?" msgid "Please find the best line on your plate" -msgstr "" +msgstr "Please find the best line on your plate." -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Please find the corner with the perfect degree of extrusion" msgid "Input Value" -msgstr "" +msgstr "Input Value" msgid "Save to Filament Preset" -msgstr "" +msgstr "Save to Filament Presets" msgid "Preset" -msgstr "" +msgstr "Preset" msgid "Record Factor" -msgstr "" +msgstr "Record Factor" msgid "We found the best flow ratio for you" -msgstr "" +msgstr "We found the best flow ratio for you." msgid "Flow Ratio" -msgstr "" +msgstr "Flow Ratio" msgid "Please input a valid value (0.0 < flow ratio < 2.0)" -msgstr "" +msgstr "Please input a valid value (0.0 < flow ratio < 2.0)" msgid "Please enter the name of the preset you want to save." -msgstr "" +msgstr "Please enter the name of the preset you want to save." msgid "Calibration1" -msgstr "" +msgstr "Calibration1" msgid "Calibration2" -msgstr "" +msgstr "Calibration2" msgid "Please find the best object on your plate" -msgstr "" +msgstr "Please find the best object on your plate." msgid "Fill in the value above the block with smoothest top surface" -msgstr "" +msgstr "Fill in the value from the block with smoothest top surface" msgid "Skip Calibration2" -msgstr "" +msgstr "Skip Calibration 2" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "" +msgstr "flow ratio: %s " msgid "Please choose a block with smoothest top surface" -msgstr "" +msgstr "Please choose the block with the smoothest top surface." msgid "Please choose a block with smoothest top surface." -msgstr "" +msgstr "Please choose the block with the smoothest top surface." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" -msgstr "" +msgstr "Please input a valid value (0 <= Max Volumetric Speed <= 60)" msgid "Calibration Type" -msgstr "" +msgstr "Calibration Type" msgid "Complete Calibration" -msgstr "" +msgstr "Complete Calibration" msgid "Fine Calibration based on flow ratio" -msgstr "" +msgstr "Fine Calibration based on flow ratio" msgid "Title" -msgstr "" +msgstr "Title" msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." msgstr "" +"A test model will be printed. Please clear the build plate and place it back " +"on the heatbed before calibration." msgid "Printing Parameters" -msgstr "" - -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" +msgstr "Printing Parameters" msgid "Plate Type" msgstr "Plate Type" msgid "filament position" -msgstr "" +msgstr "filament position" msgid "External Spool" -msgstr "" +msgstr "External Spool" msgid "Filament For Calibration" -msgstr "" +msgstr "Filament For Calibration" 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 "" +"Tips for calibration material: \n" +"- Materials that can share same hot bed temperature\n" +"- Different filament brand and family (Brand = Bambu, Family = Basic, Matte, " +"etc.)" msgid "Pattern" -msgstr "" +msgstr "Pattern" msgid "Method" -msgstr "" +msgstr "Method" #, c-format, boost-format msgid "%s is not compatible with %s" -msgstr "" +msgstr "%s is not compatible with %s" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -msgstr "" +msgstr "TPU is not supported by Flow Dynamics Auto-Calibration." msgid "Connecting to printer" -msgstr "" +msgstr "Connecting to printer" msgid "From k Value" -msgstr "" +msgstr "From k Value" msgid "To k Value" -msgstr "" +msgstr "To k Value" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" -msgstr "" +msgstr "The nozzle diameter has been synchronized from the printer settings." msgid "From Volumetric Speed" -msgstr "" +msgstr "From Volumetric Speed" msgid "To Volumetric Speed" -msgstr "" +msgstr "To Volumetric Speed" msgid "Flow Dynamics Calibration Result" -msgstr "" +msgstr "Flow Dynamics Calibration Result" + +msgid "New" +msgstr "New" msgid "No History Result" -msgstr "" +msgstr "No History Result" msgid "Success to get history result" -msgstr "" +msgstr "Success to get history result" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "" +msgstr "Refreshing the previous Flow Dynamics Calibration records" msgid "Action" -msgstr "" +msgstr "Action" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." msgid "Edit Flow Dynamics Calibration" -msgstr "" +msgstr "Edit Flow Dynamics Calibration" + +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." msgid "Network lookup" -msgstr "" +msgstr "Network lookup" msgid "Address" -msgstr "" +msgstr "Address" msgid "Hostname" -msgstr "" +msgstr "Hostname" msgid "Service name" -msgstr "" +msgstr "Service name" msgid "OctoPrint version" -msgstr "" +msgstr "OctoPrint version" msgid "Searching for devices" -msgstr "" +msgstr "Searching for devices" msgid "Finished" msgstr "完了" msgid "Multiple resolved IP addresses" -msgstr "" +msgstr "IPアドレスの複数割当て" #, boost-format msgid "" "There are several IP addresses resolving to hostname %1%.\n" "Please select one that should be used." msgstr "" +"ホスト名%1%には、いくつかのIPアドレスがあります。\n" +"使用するIPアドレスを1つ選んでください。" msgid "PA Calibration" -msgstr "" +msgstr "PA Calibration" msgid "DDE" msgstr "" msgid "Bowden" -msgstr "" +msgstr "Bowden" msgid "Extruder type" msgstr "" msgid "PA Tower" -msgstr "" +msgstr "PA Tower" msgid "PA Line" -msgstr "" +msgstr "PA Line" msgid "PA Pattern" -msgstr "" +msgstr "PA Pattern" msgid "Start PA: " -msgstr "" +msgstr "Start PA:" msgid "End PA: " -msgstr "" +msgstr "End PA: " msgid "PA step: " -msgstr "" +msgstr "PA step:" msgid "Print numbers" -msgstr "" +msgstr "Print numbers" msgid "" "Please input valid values:\n" @@ -12772,39 +14007,46 @@ msgid "" "End PA: > Start PA\n" "PA step: >= 0.001)" msgstr "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" msgid "Temperature calibration" -msgstr "" +msgstr "Temperature calibration" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" +msgstr "PETG" + +msgid "PCTG" msgstr "" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" -msgstr "" +msgstr "Filament type" msgid "Start temp: " -msgstr "" +msgstr "Start temp:" msgid "End temp: " -msgstr "" +msgstr "End temp:" msgid "Temp step: " -msgstr "" +msgstr "Temp step:" msgid "" "Please input valid values:\n" @@ -12814,16 +14056,16 @@ msgid "" msgstr "" msgid "Max volumetric speed test" -msgstr "" +msgstr "Max volumetric speed test" msgid "Start volumetric speed: " -msgstr "" +msgstr "Start volumetric speed:" msgid "End volumetric speed: " -msgstr "" +msgstr "End volumetric speed:" msgid "step: " -msgstr "" +msgstr "step:" msgid "" "Please input valid values:\n" @@ -12833,13 +14075,13 @@ msgid "" msgstr "" msgid "VFA test" -msgstr "" +msgstr "VFA test" msgid "Start speed: " -msgstr "" +msgstr "Start speed:" msgid "End speed: " -msgstr "" +msgstr "End speed:" msgid "" "Please input valid values:\n" @@ -12849,129 +14091,132 @@ msgid "" msgstr "" msgid "Start retraction length: " -msgstr "" +msgstr "Start retraction length:" msgid "End retraction length: " -msgstr "" +msgstr "End retraction length: " msgid "mm/mm" -msgstr "" +msgstr "mm/mm" msgid "Send G-Code to printer host" -msgstr "" +msgstr "プリンターサーバーにGコードを送信" msgid "Upload to Printer Host with the following filename:" -msgstr "" +msgstr "Upload to Printer Host with the following filename:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "" +msgstr "Use forward slashes ( / ) as a directory separator if needed." msgid "Upload to storage" +msgstr "ストレージへのアップロード" + +msgid "Switch to Device tab after upload." msgstr "" #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "" +msgstr "Filename to upload doesn't end with \"%s\". Do you want to continue?" msgid "Upload" -msgstr "" +msgstr "Upload" msgid "Print host upload queue" -msgstr "" +msgstr "Print host upload queue" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" -msgstr "" +msgstr "Progress" msgid "Host" -msgstr "" +msgstr "Host" msgctxt "OfFile" msgid "Size" -msgstr "" +msgstr "Size of file" msgid "Filename" -msgstr "" +msgstr "Filename" msgid "Cancel selected" -msgstr "" +msgstr "Cancel selected" msgid "Show error message" -msgstr "" +msgstr "Show error message" msgid "Enqueued" -msgstr "" +msgstr "Queued" msgid "Uploading" msgstr "アップロード中" msgid "Cancelling" -msgstr "" +msgstr "Canceling" msgid "Error uploading to print host" -msgstr "" +msgstr "プリントホストへのアップロードに失敗" msgid "Unable to perform boolean operation on selected parts" -msgstr "" +msgstr "Unable to perform boolean operation on selected parts" msgid "Mesh Boolean" -msgstr "" +msgstr "Mesh Boolean" msgid "Union" -msgstr "" +msgstr "Union" msgid "Difference" -msgstr "" +msgstr "Difference" msgid "Intersection" -msgstr "" +msgstr "Intersection" msgid "Source Volume" -msgstr "" +msgstr "Source Volume" msgid "Tool Volume" -msgstr "" +msgstr "Tool Volume" msgid "Subtract from" -msgstr "" +msgstr "Subtract from" msgid "Subtract with" -msgstr "" +msgstr "Subtract with" msgid "selected" -msgstr "" +msgstr "selected" msgid "Part 1" -msgstr "" +msgstr "Part 1" msgid "Part 2" -msgstr "" +msgstr "Part 2" msgid "Delete input" -msgstr "" +msgstr "Delete input" msgid "Network Test" -msgstr "" +msgstr "Network Test" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Start Test Multi-Thread" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Start Test Single-Thread" msgid "Export Log" -msgstr "" +msgstr "Export Log" msgid "OrcaSlicer Version:" msgstr "" msgid "System Version:" -msgstr "" +msgstr "System Version:" msgid "DNS Server:" -msgstr "" +msgstr "DNS Server:" msgid "Test OrcaSlicer(GitHub)" msgstr "" @@ -12980,100 +14225,116 @@ msgid "Test OrcaSlicer(GitHub):" msgstr "" msgid "Test Bing.com" -msgstr "" +msgstr "Test Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "Test bing.com:" msgid "Log Info" -msgstr "" +msgstr "Log Info" msgid "Select filament preset" -msgstr "" +msgstr "Select filament preset" msgid "Create Filament" -msgstr "" +msgstr "Create Filament" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Create Based on Current Filament" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Copy Current Filament Preset " msgid "Basic Information" -msgstr "" +msgstr "Basic Information" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Add Filament Preset under this filament" msgid "We could create the filament presets for your following printer:" -msgstr "" +msgstr "We could create the filament presets for your following printer:" msgid "Select Vendor" -msgstr "" +msgstr "Select Vendor" msgid "Input Custom Vendor" -msgstr "" +msgstr "Input Custom Vendor" msgid "Can't find vendor I want" -msgstr "" +msgstr "Can't find vendor I want" msgid "Select Type" -msgstr "" +msgstr "Select Type" msgid "Select Filament Preset" -msgstr "" +msgstr "Select Filament Preset" msgid "Serial" -msgstr "" +msgstr "Serial" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "e.g. Basic, Matte, Silk, Marble" msgid "Filament Preset" -msgstr "" +msgstr "Filament Preset" msgid "Create" -msgstr "" +msgstr "Create" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "Vendor is not selected; please reselect vendor." msgid "Custom vendor is not input, please input custom vendor." -msgstr "" +msgstr "Custom vendor missing; please input custom vendor." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "Filament type is not selected, please reselect type." msgid "Filament serial is not inputed, please input serial." -msgstr "" +msgstr "Filament serial missing; please input serial." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"There may be disallowed characters in the vendor or serial input of the " +"filament. Please delete and re-enter." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." -msgstr "" +msgstr "All inputs in the custom vendor or serial are spaces. Please re-enter." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "The vendor can not be a number; please re-enter." msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +"You have not selected a printer or preset yet. Please select at least one." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"The Filament name %s you created already exists. \n" +"If you continue, the preset created will be displayed with its full name. Do " +"you want to continue?" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "Some existing presets have failed to be created, as follows:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"Do you want to rewrite it?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" @@ -13082,114 +14343,112 @@ msgid "" msgstr "" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Create Printer/Nozzle" msgid "Create Printer" -msgstr "" +msgstr "Create Printer" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Create Nozzle for Existing Printer" msgid "Create from Template" -msgstr "" +msgstr "Create from Template" msgid "Create Based on Current Printer" -msgstr "" +msgstr "Create Based on Current Printer" msgid "Import Preset" -msgstr "" +msgstr "Import Preset" msgid "Create Type" -msgstr "" +msgstr "Create Type" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "The model was not found; please reselect vendor." msgid "Select Model" -msgstr "" +msgstr "Select Model" msgid "Select Printer" -msgstr "" +msgstr "Select Printer" msgid "Input Custom Model" -msgstr "" +msgstr "Input Custom Model" msgid "Can't find my printer model" -msgstr "" +msgstr "Can't find my printer model" msgid "Rectangle" -msgstr "" +msgstr "Rectangle" msgid "Printable Space" -msgstr "" - -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" +msgstr "Printable Space" msgid "Hot Bed STL" -msgstr "" +msgstr "Hot Bed STL" msgid "Load stl" -msgstr "" +msgstr "Load stl" msgid "Hot Bed SVG" -msgstr "" +msgstr "Hot Bed SVG" msgid "Load svg" -msgstr "" +msgstr "Load svg" msgid "Max Print Height" -msgstr "" +msgstr "Max Print Height" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "The file exceeds %d MB, please import again." msgid "Exception in obtaining file size, please import again." -msgstr "" +msgstr "Exception in obtaining file size, please import again." msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "Preset path was not found; please reselect vendor." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "The printer model was not found, please reselect." msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "The nozzle diameter was not found; please reselect." msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "The printer preset was not found; please reselect." msgid "Printer Preset" -msgstr "" +msgstr "Printer Preset" msgid "Filament Preset Template" -msgstr "" +msgstr "Filament Preset Template" msgid "Deselect All" -msgstr "" +msgstr "Deselect All" msgid "Process Preset Template" -msgstr "" +msgstr "Process Preset Template" msgid "Back Page 1" -msgstr "" +msgstr "Back Page 1" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"You have not yet chosen which printer preset to create based on. Please " +"choose the vendor and model of the printer" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"You have entered a disallowed character in the printable area section on the " +"first page. Please use only numbers." msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "The custom printer or model missing; please input." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -13200,73 +14459,97 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserved.\n" +"\tCancel: Do not create a preset; return to the creation interface." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "You need to select at least one filament preset." msgid "You need to select at least one process preset." -msgstr "" +msgstr "You need to select at least one process preset." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "Create filament presets failed. As follows:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "Create process presets failed. As follows:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Vendor was not found; please reselect." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "Current vendor has no models, please reselect." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"You have not selected the vendor and model or input the custom vendor and " +"model." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"There may be escape characters in the custom printer vendor or model. Please " +"delete and re-enter." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" +"All inputs in the custom printer vendor or model are spaces. Please re-enter." msgid "Please check bed printable shape and origin input." -msgstr "" +msgstr "Please check bed printable shape and origin input." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"You have not yet selected the printer to replace the nozzle for; please " +"choose a printer." msgid "Create Printer Successful" -msgstr "" +msgstr "Create Printer Successful" msgid "Create Filament Successful" -msgstr "" +msgstr "Filament Created Successfully" msgid "Printer Created" -msgstr "" +msgstr "Printer Created" msgid "Please go to printer settings to edit your presets" -msgstr "" +msgstr "Please go to printer settings to edit your presets" msgid "Filament Created" -msgstr "" +msgstr "Filament Created" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Please go to filament settings to edit your presets if you need to.\n" +"Please note that nozzle temperature, hot bed temperature, and maximum " +"volumetric speed each have a significant impact on printing quality. Please " +"set them carefully." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" -msgstr "" - -msgid "Export Configs" -msgstr "" +msgstr "Printer Setting" msgid "Printer config bundle(.orca_printer)" msgstr "" @@ -13275,31 +14558,31 @@ msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Printer presets(.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Filament presets(.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Process presets(.zip)" msgid "initialize fail" -msgstr "" +msgstr "initialize fail" msgid "add file fail" -msgstr "" +msgstr "add file fail" msgid "add bundle structure file fail" -msgstr "" +msgstr "add bundle structure file fail" msgid "finalize fail" -msgstr "" +msgstr "finalize fail" msgid "open zip written fail" -msgstr "" +msgstr "open zip written fail" msgid "Export successful" -msgstr "" +msgstr "Export successful" #, c-format, boost-format msgid "" @@ -13308,6 +14591,10 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it?\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" @@ -13318,271 +14605,325 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"User's fillment preset set. \n" +"Can be shared with others." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Only display printers with changes to printer, filament, and process presets " +"are displayed." msgid "Only display the filament names with changes to filament presets." -msgstr "" +msgstr "Only display the filament names with changes to filament presets." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Only printer names with user printer presets will be displayed, and each " +"preset you choose will be exported as a zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Only the filament names with user filament presets will be displayed, \n" +"and all user filament presets in each filament name you select will be " +"exported as a zip." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Only printer names with changed process presets will be displayed, \n" +"and all user process presets in each printer name you select will be " +"exported as a zip." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Please select at least one printer or filament." msgid "Please select a type you want to export" -msgstr "" +msgstr "Please select a preset type you want to export" + +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." msgid "Edit Filament" -msgstr "" +msgstr "Edit Filament" msgid "Filament presets under this filament" -msgstr "" +msgstr "Filament presets under this filament" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Note: If the only preset under this filament is deleted, the filament will " +"be deleted after exiting the dialog." msgid "Presets inherited by other presets can not be deleted" -msgstr "" +msgstr "Presets inherited by other presets can not be deleted" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." msgstr[0] "" msgid "Delete Preset" -msgstr "" +msgstr "Delete Preset" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "Are you sure to delete the selected preset?" msgid "Delete preset" -msgstr "" +msgstr "Delete preset" msgid "+ Add Preset" -msgstr "" +msgstr "+ Add Preset" msgid "Delete Filament" -msgstr "" +msgstr "Delete Filament" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"All the filament presets belong to this filament would be deleted. \n" +"If you are using this filament on your printer, please reset the filament " +"information for that slot." msgid "Delete filament" -msgstr "" +msgstr "Delete filament" msgid "Add Preset" -msgstr "" +msgstr "Add Preset" msgid "Add preset for new printer" -msgstr "" +msgstr "Add preset for new printer" msgid "Copy preset from filament" -msgstr "" +msgstr "Copy preset from filament" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "The filament choice not find filament preset, please reselect it" msgid "[Delete Required]" -msgstr "" +msgstr "[Delete Required]" msgid "Edit Preset" -msgstr "" +msgstr "Edit Preset" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "For more information, please check out our Wiki" msgid "Collapse" -msgstr "" +msgstr "Collapse" msgid "Daily Tips" +msgstr "Daily Tips" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "nozzle memorized: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" msgstr "" +"Your nozzle diameter in preset is not consistent with the saved nozzle " +"diameter. Have you changed your nozzle?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*Printing %s material with %s may cause nozzle damage" msgid "Need select printer" -msgstr "" +msgstr "Need select printer" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "The start, end or step is not valid value." msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" msgstr "" +"Unable to calibrate: maybe because the set calibration value range is too " +"large, or the step is too small" msgid "Physical Printer" -msgstr "" +msgstr "Physical Printer" msgid "Print Host upload" -msgstr "" +msgstr "Print Host upload" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "Could not get a valid Printer Host reference" msgid "Success!" -msgstr "" +msgstr "Success!" msgid "Are you sure to log out?" msgstr "" msgid "Refresh Printers" +msgstr "Refresh Printers" + +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" msgstr "" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" +msgstr "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgid "Open CA certificate file" -msgstr "" +msgstr "Open CA certificate file" #, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." msgstr "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." msgid "Login/Test" msgstr "" msgid "Connection to printers connected via the print host failed." -msgstr "" +msgstr "Connection to printers connected via the print host failed." #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Mismatched type of print host: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "Connection to AstroBox is working correctly." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Could not connect to AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Note: AstroBox version 1.1.0 or higher is required." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "Connection to Duet is working correctly." msgid "Could not connect to Duet" -msgstr "" +msgstr "Could not connect to Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Unknown error occured" msgid "Wrong password" -msgstr "" +msgstr "Wrong password" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Could not get resources to create a new connection" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "Upload not enabled on FlashAir card." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "Connection to FlashAir is working correctly and upload is enabled." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Could not connect to FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Note: FlashAir with firmware 2.00.02 or newer and activated upload function " +"is required." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "Connection to MKS is working correctly." msgid "Could not connect to MKS" -msgstr "" +msgstr "Could not connect to MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Connection to OctoPrint is working correctly." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Could not connect to OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Note: OctoPrint version 1.1.0 or higher is required." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Connection to Prusa SL1 / SL1S is working correctly." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Could not connect to Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Connection to PrusaLink is working correctly." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Could not connect to PrusaLink" msgid "Storages found" -msgstr "" +msgstr "ストレージが見つかりました" #. TRN %1% = storage path #, boost-format msgid "%1% : read only" -msgstr "" +msgstr "%1% : 読込のみ" #. TRN %1% = storage path #, boost-format msgid "%1% : no free space" -msgstr "" +msgstr "%1% : 十分な空きがありません" #. TRN %1% = host #, boost-format msgid "Upload has failed. There is no suitable storage found at %1%." msgstr "" +"アップロードに失敗しました。%1%に適切なストレージが見つかりませんでした。" msgid "Connection to Prusa Connect works correctly." -msgstr "" +msgstr "Prusa コネクトに接続しました。" msgid "Could not connect to Prusa Connect" -msgstr "" +msgstr "Prusaコネクトに接続できませんでした" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Connection to Repetier is working correctly." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Could not connect to Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Note: Repetier version 0.90.0 or higher is required." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" #, boost-format msgid "" @@ -13590,6 +14931,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Parsing of host response failed.\n" +"Message body: \"%1%\"\n" +"Error: \"%2%\"" #, boost-format msgid "" @@ -13597,6 +14941,260 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Enumeration of host printers failed.\n" +"Message body: \"%1%\"\n" +"Error: \"%2%\"" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a small layer height, and results in almost negligible layer lines " +"and high print quality. It is suitable for most general printing cases." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. This results in " +"much higher print quality but a much longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height. This results in almost negligible layer lines and " +"slightly longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height. This results in slightly visible layer lines but shorter print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height. This results in almost invisible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost invisible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height. This results in minimal layer lines and higher print quality but " +"longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in minimal layer lines and much higher print quality " +"but much longer print time." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a normal layer height, and results in average layer lines and print " +"quality. It is suitable for most printing cases." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but slightly shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in less apparent layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost negligible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and longer print time." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in much more apparent layer lines and much lower print " +"quality, but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and slightly higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"It has a very big layer height, and results in very apparent layer lines, " +"low print quality and shorter printing time." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height. This results in very apparent layer lines and much lower print " +"quality but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height. This results in extremely apparent layer lines and much lower " +"print quality but much shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height. This results in slightly less but still apparent layer " +"lines and slightly higher print quality, but longer print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height. This results in less but still apparent layer lines and slightly " +"higher print quality, but longer print time in some cases." msgid "Connected to Obico successfully!" msgstr "" @@ -13610,17 +15208,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -13721,6 +15317,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Fix Model\n" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " +"problems on the Windows system?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -13940,6 +15539,10 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"When do you need to print with the printer door opened?\n" +"Did you know that opening the printer door can reduce the probability of " +"extruder/hotend clogging when printing lower temperature filament with a " +"higher enclosure temperature? There is more info about this in the Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -13948,6 +15551,228 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Avoid warping\n" +"Did you know that when printing materials that are prone to warping such as " +"ABS, appropriately increasing the heatbed temperature can reduce the " +"probability of warping?" + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Please input a valid value (K in 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Printer local connection failed; please try again." + +#~ 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 "" +#~ "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 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 may make the calibration result " +#~ "unreliable: using a texture plate to do the calibration; using a build " +#~ "plate with poor adhesion. (please wash the build plate or apply " +#~ "gluestick!) You can find more on our wiki.\n" +#~ "\n" +#~ "The calibration results have about 10 percent variation in our test, " +#~ "which may cause the results to not be identical for each calibration. We " +#~ "are still investigating the root cause to further improve this " +#~ "calibration in future updates." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to override the other results?" + +#, 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 "" +#~ "There is already a historical calibration result with the same name: %s. " +#~ "Only one set of results with the same name is saved. Are you sure you " +#~ "want to override the previous results?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Please find the corner with the perfect degree of extrusion" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Export &Configs" +#~ msgstr "構成データ" + +#~ msgid "Infill direction" +#~ 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 "この設定で出力のG-codeファイルにG2/G3コードを有効します。" + +#~ msgid "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill" +#~ msgstr "" +#~ "インフィルの領域を少し壁面を重ねるために拡大します。これにより壁面との接着" +#~ "性が向上させます。値はスパース インフィルの線幅の割合です。" + +#~ msgid "Unload Filament" +#~ msgstr "アンロード" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "AMS スロットを選択し、[ロード] または [アンロード] をタップすると、フィラ" +#~ "メントが自動的にロードまたはアンロードされます。" + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "メインボード" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "active" +#~ msgstr "アクティブ" + +#~ msgid "Jump to layer" +#~ 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 "湿度インジケータ (緑色: 正常 オレンジ\": やや高い 赤色: 高い)" + +#~ 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 "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "注意:造形時に入れる場合、造形が完成したから読込みます。" + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "G-codeは %1%にエクスポートしました" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "初期化失敗 (デバイス無し)" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "初期化失敗 (カメラ無し)" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "プリンターがダウンロード中、完了までお待ちください" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "初期化失敗 (ローカルモードではアクセスできません)" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "初期化失敗 (プリンターIP無効)" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "停止した [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "ロード失敗 [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "No files [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Load failed [%d]" + +#~ 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 "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." + +#, 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 "プリセットに変更がありあす。これらの変更を流用しますか?" #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 65475066f0..8b5519ab3b 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,17 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2024-03-15 23:12+0900\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"PO-Revision-Date: 2024-05-31 23:33+0900\n" "Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply." -"github.com>, crwusiz \n" +"github.com>, crwusiz \n" "Language-Team: \n" "Language: ko_KR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "지지대 칠하기" @@ -260,6 +260,9 @@ msgstr "회전 초기화" msgid "World coordinates" msgstr "영역 좌표" +msgid "Object coordinates" +msgstr "개체 좌표" + msgid "°" msgstr "°" @@ -1170,7 +1173,7 @@ msgid "" "Do NOT save local path to 3MF file.\n" "Also disables 'reload from disk' option." msgstr "" -"3MF 파일에 로컬 경로를 저장하지 마십시오.\n" +"3mf 파일에 로컬 경로를 저장하지 마십시오.\n" "또한 '디스크에서 다시 로드' 옵션을 비활성화합니다." #. TRN: An menu option to convert the SVG into an unmodifiable model part. @@ -1373,9 +1376,6 @@ msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "구성 파일 \"%1%\"이(가) 로드되었지만 일부 값이 인식되지 않았습니다." -msgid "V" -msgstr "V" - 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." @@ -1483,6 +1483,9 @@ msgstr "하나 이상의 파일 선택 (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "하나 이상의 파일 선택 (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "ZIP 파일 선택" + msgid "Choose one file (gcode/3mf):" msgstr "하나의 파일 선택 (gcode/3mf):" @@ -1554,6 +1557,13 @@ msgstr "진행 중인 업로드" msgid "Select a G-code file:" msgstr "G코드 파일 선택:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"URL 다운로드를 시작할 수 없습니다. 대상 폴더가 설정되지 않았습니다. 구성 마법" +"사에서 대상 폴더를 선택하세요." + msgid "Import File" msgstr "파일 가져오기" @@ -1786,8 +1796,8 @@ msgstr "기본값" msgid "Filament %d" msgstr "필라멘트 %d" -msgid "active" -msgstr "활성화" +msgid "current" +msgstr "현재" msgid "Scale to build volume" msgstr "출력 가능 영역에 맞게 확장" @@ -1879,6 +1889,9 @@ msgstr "기본 모델 추가" msgid "Add Handy models" msgstr "핸디 모델 추가" +msgid "Add Models" +msgstr "모델 추가" + msgid "Show Labels" msgstr "이름표 보기" @@ -1930,6 +1943,12 @@ msgstr "정렬" msgid "arrange current plate" msgstr "현재 플레이트 정렬" +msgid "Reload All" +msgstr "모두 다시 불러오기" + +msgid "reload all from disk" +msgstr "디스크에서 모두 다시 로드" + msgid "Auto Rotate" msgstr "자동 회전" @@ -1963,9 +1982,6 @@ msgstr "필라멘트 변경" msgid "Set Filament for selected items" msgstr "선택한 항목의 필라멘트로 설정" -msgid "current" -msgstr "현재" - msgid "Unlock" msgstr "잠금 해제" @@ -2286,9 +2302,6 @@ msgstr "현재 레이어에 사용될 사용자 정의 G코드 입력:" msgid "Jump to Layer" msgstr "다음 레이어로 이동" -msgid "Jump to layer" -msgstr "다음 레이어로 이동" - msgid "Please enter the layer number" msgstr "레이어 번호를 입력하세요" @@ -2358,7 +2371,7 @@ msgstr "프린터 연결 실패" msgid "Connection to printer failed" msgstr "프린터 연결 실패" -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "프린터와 Orca Slicer의 네트워크 연결을 확인하세요." msgid "Connecting..." @@ -2382,11 +2395,11 @@ msgstr "자동 리필" msgid "AMS not connected" msgstr "AMS가 연결되지 않음" -msgid "Load Filament" -msgstr "필라멘트 넣기" +msgid "Load" +msgstr "불러오기" -msgid "Unload Filament" -msgstr "필라멘트 언로드" +msgid "Unload" +msgstr "언로드" msgid "Ext Spool" msgstr "외부 스풀" @@ -2403,7 +2416,7 @@ msgstr "재시도" msgid "Calibrating AMS..." msgstr "AMS 교정 중..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "교정하는 동안 문제가 발생했습니다. 솔루션을 보려면 클릭하세요." msgid "Calibrate again" @@ -2444,10 +2457,10 @@ msgstr "새 필라멘트 가져오기" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"AMS 슬롯을 선택한 후 \"넣기\" 또는 \"빼기\" 버튼을 눌러 필라멘트를 자동으로 " -"넣거나 뺍니다." +"AMS 슬롯을 선택한 다음 '로드' 또는 '언로드' 버튼을 누르면 필라멘트를 자동으" +"로 로드하거나 언로드할 수 있습니다." msgid "Edit" msgstr "편집" @@ -2705,14 +2718,8 @@ msgstr "Orca Slicer 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" -msgstr "" -"Orca Slicer는 Prusa Research의 PrusaSlicer에서 나온 뱀부랩의 BambuStudio를 기" -"반으로 합니다. PrusaSlicer는 Alessandro Ranellucci와 RepRap 커뮤니티의 " -"Slic3r에서 제작되었습니다" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer는 PrusaSlicer와 BambuStudio를 기반으로 합니다" msgid "Libraries" msgstr "라이브러리" @@ -2807,11 +2814,13 @@ msgstr "정말 필라멘트 정보를 삭제하시겠습니까?" msgid "You need to select the material type and color first." msgstr "재료 유형과 색상을 먼저 선택해야 합니다." -msgid "Please input a valid value (K in 0~0.3)" -msgstr "유효한 값을 입력하세요(K는 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "유효한 값을 입력하세요 (%.1f~%.1f 사이의 K)" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "유효한 값을 입력하세요(K는 0~0.3, N은 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "유효한 값을 입력하세요 (%.1f~%.1f 사이의 K, %.1f~%.1f 사이의 N)" msgid "Other Color" msgstr "기타 색상" @@ -2913,35 +2922,18 @@ msgstr "AMS 미사용" msgid "Print with the filament mounted on the back of chassis" msgstr "섀시 뒷면에 필라멘트를 장착한 상태에서 출력" -msgid "Cabin humidity" -msgstr "AMS 습도" +msgid "Current 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.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"녹색은 AMS 습도가 정상임을 의미하고 주황색은 습도가 높음을 나타내고 빨간색은 " -"습도가 너무 높음을 나타냅니다.(습도계: 낮을수록 좋습니다.)" - -msgid "Desiccant status" -msgstr "건조제 상태" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"건조제 상태가 두 개의 막대보다 낮을 경우 건조제가 비활성 상태일 수 있음을 나" -"타냅니다. 건조제를 교체해 주세요.(막대: 높을수록 좋습니다.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"참고: 뚜껑이 열려 있거나 건조제 팩을 교체한 경우 수분을 흡수하는 데 몇 시간 " -"또는 하룻밤이 걸릴 수 있습니다. 온도가 낮으면 흡수 속도도 느려집니다. 이 시" -"간 동안 표시기가 챔버를 정확하게 나타내지 못할 수 있습니다." +"건조제가 너무 젖으면 교체하세요. 뚜껑이 열려 있거나 건조제 팩을 교체한 경우, " +"습기를 흡수하는 데 몇 시간이 걸리는 경우, 낮은 온도로 인해 공정이 느려지는 경" +"우 등에는 표시기가 정확하게 표시되지 않을 수 있습니다." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2993,6 +2985,12 @@ msgstr "" "다. \n" "(현재 동일한 브랜드, 재질, 색상의 소모품 자동 공급 지원)" +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" + msgid "AMS Settings" msgstr "AMS 설정" @@ -3007,11 +3005,11 @@ msgstr "" "업은 약 20초 정도 걸립니다." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"참고: 출력 중에 새 필라멘트를 삽입하면 출력이 완료될 때까지 AMS가 자동으로 어" -"떤 정보도 읽지 않습니다." +"참고: 출력 중에 새 필라멘트를 삽입하면 출력가 완료될 때까지 AMS가 자동으로 정" +"보를 읽지 않습니다." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3060,6 +3058,16 @@ msgstr "" "AMS는 현재 필라멘트가 소진되면 동일한 필라멘트 특성을 가진 다른 스풀로 자동으" "로 이동합니다" +msgid "Air Printing Detection" +msgstr "에어 프린팅 감지" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"막힘 및 필라멘트 연삭을 감지하여 출력를 즉시 중단하여 시간과 필라멘트를 절약" +"합니다." + msgid "File" msgstr "파일" @@ -3132,6 +3140,62 @@ msgstr "떠있는 예약 피연산자" msgid "Stack overflow" msgstr "스택 오버플로" +msgid "Running post-processing scripts" +msgstr "사후 처리 스크립트 실행중" + +msgid "Successfully executed post-processing script" +msgstr "성공적으로 실행된 후처리 스크립트" + +msgid "Unknown error occured during exporting G-code." +msgstr "G코드를 내보내는 동안 알 수 없는 오류가 발생했습니다." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"임시 G코드를 출력 G코드로 복사하지 못했습니다. SD 카드가 쓰기 잠겨 있나요?\n" +"오류 메시지입니다: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"임시 G코드를 출력 G코드로 복사하지 못했습니다. 대상 장치에 문제가 있을 수 있" +"으니 다시 내보내거나 다른 장치를 사용해 보세요. 손상된 출력 G코드는 %1%.tmp" +"에 있습니다." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"선택한 대상 폴더로 복사한 후 G코드의 이름을 바꾸지 못했습니다. 현재 경로는 " +"%1%.tmp입니다. 내보내기를 다시 시도하세요." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"임시 G코드의 복사가 완료되었지만 복사 확인 중에 %1%의 원본 코드를 열 수 없습" +"니다. 출력 G-코드는 %2%.tmp에 있습니다." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"임시 G코드 복사가 완료되었지만 복사 확인 중에 내보낸 코드를 열 수 없습니다. " +"출력 G-코드는 %1%.tmp에 있습니다." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "%1%로 내보낸 G코드 파일" + msgid "Unknown error when export G-code." msgstr "G코드를 내보낼 때 알 수 없는 오류가 발생했습니다." @@ -3145,13 +3209,6 @@ msgstr "" "오류 메시지: %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코드를 복사하지 못했습니다" @@ -3159,6 +3216,225 @@ msgstr "출력 G코드에 임시 G코드를 복사하지 못했습니다" msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "%1%로 업로드 예약 중. 윈도우 -> 호스트 업로드 출력 대기열 참조" +msgid "Device" +msgstr "장치" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "여러 프린터 편집" + +msgid "Select connected printers (0/6)" +msgstr "연결된 프린터 선택 (0/6)" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "연결된 프린터 선택 (%d/6)" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "선택할 수 있는 최대 프린터 수는 %d입니다" + +msgid "Offline" +msgstr "오프라인" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "시점" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "프린터 편집" + +msgid "Device Name" +msgstr "장치 이름" + +msgid "Task Name" +msgstr "작업 이름" + +msgid "Device Status" +msgstr "장치 상태" + +msgid "Actions" +msgstr "동작" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "여기에서 관리할 장치를 선택하세요(최대 6개 장치)" + +msgid "Add" +msgstr "추가" + +msgid "Idle" +msgstr "대기 중" + +msgid "Printing" +msgstr "출력 중" + +msgid "Upgrading" +msgstr "업그레이드 하기" + +msgid "Incompatible" +msgstr "호환되지 않음" + +msgid "syncing" +msgstr "동기화" + +msgid "Printing Finish" +msgstr "인쇄 완료" + +msgid "Printing Failed" +msgstr "인쇄 실패" + +msgid "Printing Pause" +msgstr "인쇄 일시중지" + +msgid "Prepare" +msgstr "준비 하기" + +msgid "Slicing" +msgstr "슬라이싱" + +msgid "Pending" +msgstr "대기중" + +msgid "Sending" +msgstr "전송 중…" + +msgid "Sending Finish" +msgstr "보내기 완료" + +msgid "Sending Cancel" +msgstr "보내기 취소" + +msgid "Sending Failed" +msgstr "전송 실패" + +msgid "Print Success" +msgstr "인쇄 성공" + +msgid "Print Failed" +msgstr "인쇄 실패" + +msgid "Removed" +msgstr "삭제됨" + +msgid "Resume" +msgstr "계속" + +msgid "Stop" +msgstr "정지" + +msgid "Task Status" +msgstr "작업 상태" + +msgid "Sent Time" +msgstr "전송한 시간" + +msgid "There are no tasks to be sent!" +msgstr "전송할 작업이 없습니다!" + +msgid "No historical tasks!" +msgstr "작업 내역이 없습니다!" + +msgid "Loading..." +msgstr "로딩 중..." + +msgid "No AMS" +msgstr "AMS 없음" + +msgid "Send to Multi-device" +msgstr "여러 장치로 보내기" + +msgid "Preparing print job" +msgstr "출력 작업 준비 중" + +msgid "Abnormal print file data. Please slice again" +msgstr "비정상적인 출력 파일 데이터입니다. 다시 슬라이스하세요" + +msgid "There is no device available to send printing." +msgstr "인쇄를 전송할 수 있는 장치가 없습니다." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "동시에 사용 중인 프린터의 수는 0과 같을 수 없습니다." + +msgid "Use External Spool" +msgstr "외부 스풀 사용" + +msgid "Use AMS" +msgstr "AMS 사용" + +msgid "Select Printers" +msgstr "프린터 선택" + +msgid "Ams Status" +msgstr "AMS 상태" + +msgid "Printing Options" +msgstr "인쇄 옵션" + +msgid "Bed Leveling" +msgstr "베드 레벨링" + +msgid "Timelapse" +msgstr "타임랩스" + +msgid "Flow Dynamic Calibration" +msgstr "흐름 동적 보정" + +msgid "Send Options" +msgstr "전송 옵션" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "전송" + +msgid "Name is invalid;" +msgstr "이름이 잘못되었습니다;" + +msgid "illegal characters:" +msgstr "잘못된 문자:" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "이름 길이가 제한을 초과합니다." + msgid "Origin" msgstr "원점" @@ -3224,6 +3500,19 @@ msgstr "베드 모델을 가져올 STL 파일 선택:" msgid "Bed Shape" msgstr "베드 모양" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "권장 최저 온도는 190도 미만 또는 권장 최고 온도는 300도 이상입니다.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "권장 최저 온도는 권장 최고 온도보다 높을 수 없습니다.\n" + +msgid "Please check.\n" +msgstr "확인해 보세요.\n" + 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" @@ -3305,25 +3594,6 @@ msgstr "" "\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 " But machines with I3 structure will not generate timelapse videos." -msgstr " 그러나 I3 구조의 장치는 타임랩스 비디오를 생성하지 않습니다." - -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 "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3386,6 +3656,27 @@ msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" +"심_경사_시작_높이는 레이어_높이보다 작아야 합니다.\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 " But machines with I3 structure will not generate timelapse videos." +msgstr " 그러나 I3 구조의 장치는 타임랩스 비디오를 생성하지 않습니다." + +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 "Auto bed leveling" msgstr "자동 베드 레벨링" @@ -3492,18 +3783,6 @@ msgstr "첫번째 레이어 오류 일시중지" msgid "Nozzle clog pause" msgstr "노즐 막힘 일시 중지" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "메인보드" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "알 수 없는" @@ -3623,7 +3902,7 @@ msgid "Slicing State" msgstr "슬라이싱 상태" msgid "Print Statistics" -msgstr "통계 인쇄" +msgstr "통계 출력" msgid "Objects Info" msgstr "개체 정보" @@ -3659,9 +3938,6 @@ msgstr "프린터 설정" msgid "parameter name" msgstr "매개변수 이름" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s 는 백분율일 수 없습니다" @@ -3673,6 +3949,10 @@ msgstr "%s 값이 범위를 벗어났습니다. 계속하시겠습니까?" msgid "Parameter validation" msgstr "매개변수 유효성 검사" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "값 %s이 범위를 벗어났습니다. 유효한 범위는 %d에서 %d까지입니다." + msgid "Value is out of range." msgstr "값이 범위를 벗어났습니다." @@ -3686,6 +3966,18 @@ msgstr "" "%s%%에 대해 예,\n" "%s %s에 대해 아니요." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "잘못된 입력 형식. 다음과 같은 벡터 형식의 치수를 입력하십시오: \"%1%\"" + +msgid "Input value is out of range" +msgstr "입력된 값이 범위를 벗어납니다" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "잘못된 형식입니다. 필요한 벡터 형식: \"%1%\"" @@ -3753,12 +4045,12 @@ msgstr "표시" msgid "Flushed" msgstr "버리기" -msgid "Total" -msgstr "합계" - msgid "Tower" msgstr "타워" +msgid "Total" +msgstr "합계" + msgid "Total Estimation" msgstr "추정치 합계" @@ -3861,6 +4153,12 @@ msgstr "추정 시간" msgid "Normal mode" msgstr "일반 모드" +msgid "Total Filament" +msgstr "총 필라멘트" + +msgid "Model Filament" +msgstr "모델 필라멘트" + msgid "Prepare time" msgstr "준비 시간" @@ -3954,6 +4252,9 @@ msgstr "정렬 옵션" msgid "Spacing" msgstr "간격" +msgid "0 means auto spacing." +msgstr "0은 자동 간격을 의미합니다." + msgid "Auto rotate for arrangement" msgstr "자동 회전 후 정렬" @@ -3966,9 +4267,6 @@ msgstr "압출 교정 영역을 피하세요" msgid "Align to Y axis" msgstr "Y축에 정렬" -msgid "Add" -msgstr "추가" - msgid "Add plate" msgstr "플레이트 추가" @@ -4099,6 +4397,9 @@ msgstr "모니터링 자동 기록" msgid "Go Live" msgstr "실시간" +msgid "Liveview Retry" +msgstr "라이브뷰 재시도" + msgid "Resolution" msgstr "해상도" @@ -4151,14 +4452,11 @@ msgstr "일부 사전 설정을 수정하는 동안 응용 프로그램을 닫 msgid "Logging" msgstr "로깅" -msgid "Prepare" -msgstr "준비 하기" - msgid "Preview" msgstr "미리 보기" -msgid "Device" -msgstr "장치" +msgid "Multi-device" +msgstr "멀티 디바이스" msgid "Project" msgstr "프로젝트" @@ -4184,9 +4482,6 @@ msgstr "모두 슬라이스" msgid "Export G-code file" msgstr "G코드 파일 내보내기" -msgid "Send" -msgstr "전송" - msgid "Export plate sliced file" msgstr "플레이트 슬라이스 파일 내보내기" @@ -4307,6 +4602,12 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" msgid "Load a model" msgstr "모델 불러오기" +msgid "Import Zip Archive" +msgstr "Zip 압축파일 가져오기" + +msgid "Load models contained within a zip archive" +msgstr "Zip 압축파일에 포함된 모델 로드" + msgid "Import Configs" msgstr "설정 가져오기" @@ -4340,8 +4641,8 @@ msgstr "G코드 내보내기" msgid "Export current plate as G-code" msgstr "현재 플레이트를 G코드로 내보내기" -msgid "Export &Configs" -msgstr "설정 내보내기 (&C)" +msgid "Export Preset Bundle" +msgstr "프리셋 번들 내보내기" msgid "Export current configuration to files" msgstr "현재 설정을 파일로 내보내기" @@ -4442,9 +4743,6 @@ msgstr "3D 장면에서 개체 오버행 하이라이트 표시" msgid "Preferences" msgstr "기본 설정" -msgid "View" -msgstr "시점" - msgid "Help" msgstr "도움말" @@ -4511,10 +4809,10 @@ msgstr "툴 경로를 OBJ로 내보내기 (&T)" msgid "Export toolpaths as OBJ" msgstr "툴 경로를 OBJ로 내보내기" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Studio 열기 (&O)" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Studio 열기" msgid "&Quit" @@ -4606,40 +4904,53 @@ msgstr "" msgid "Synchronization" msgstr "동기화" -msgid "Initialize failed (No Device)!" -msgstr "초기화 실패 (장치 없음)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "장치에서 더 많은 대화를 처리할 수 없습니다. 나중에 다시 시도해 주세요." -msgid "Initialize failed (Device connection not ready)!" -msgstr "초기화 실패 (장치 연결 준비 안 됨)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "플레이어가 오작동합니다. 시스템 플레이어를 다시 설치하세요." -msgid "Initialize failed (No Camera Device)!" -msgstr "초기화 실패 (카메라 없음)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"플레이어가 로드되지 않았습니다. 다시 시도하려면 '재생' 버튼을 클릭하세요." -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "프린터가 다운로드 중입니다. 다운로드가 완료될 때까지 기다리십시오." +msgid "Please confirm if the printer is connected." +msgstr "프린터가 연결되어 있는지 확인하세요." -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "초기화 실패(현재 프린터 버전에서는 지원되지 않음)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "프린터가 현재 다운로드 중입니다. 다운로드가 완료된 후 다시 시도하세요." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "초기화 실패 (LAN 전용 모드에서는 액세스할 수 없음)!" +msgid "Printer camera is malfunctioning." +msgstr "프린터 카메라가 오작동합니다." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "초기화 실패 (프린터의 LAN IP 누락)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "문제가 발생했습니다. 프린터 펌웨어를 업데이트하고 다시 시도하세요." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN 전용 라이브뷰가 꺼져 있습니다. 프린터 화면에서 라이브뷰를 켜십시오." + +msgid "Please enter the IP of printer to connect." +msgstr "연결할 프린터의 IP를 입력하세요." msgid "Initializing..." msgstr "초기화 중..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "(%s) 초기화 실패!" +msgid "Connection Failed. Please check the network and try again" +msgstr "연결에 실패했습니다. 네트워크를 확인한 후 다시 시도하세요" -msgid "Network unreachable" -msgstr "네트워크에 연결할 수 없음" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"네트워크를 확인하고 다시 시도해 보세요. 문제가 지속되면 프린터를 다시 시작하" +"거나 업데이트할 수 있습니다." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "[%d] 중지됨!" +msgid "The printer has been logged out and cannot connect." +msgstr "프린터가 로그아웃되어 연결할 수 없습니다." msgid "Stopped." msgstr "중지됨." @@ -4670,19 +4981,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "가상 카메라 초기화 실패(%s)!" +msgid "Network unreachable" +msgstr "네트워크에 연결할 수 없음" + msgid "Information" msgstr "정보" msgid "Playing..." msgstr "재생중...." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "[%d] 로드 실패!" - -msgid "Loading..." -msgstr "로딩 중..." - msgid "Year" msgstr "년" @@ -4701,9 +5008,6 @@ msgstr "월별 그룹 파일, 최근 파일 순." msgid "Show all files, recent first." msgstr "모든 파일 표시, 최근 파일 순." -msgid "Timelapse" -msgstr "타임랩스" - msgid "Switch to timelapse files." msgstr "타임랩스 파일로 전환합니다." @@ -4714,7 +5018,7 @@ msgid "Switch to video files." msgstr "비디오 파일로 전환합니다." msgid "Switch to 3mf model files." -msgstr "3MF 모델 파일로 전환." +msgstr "3mf 모델 파일로 전환." msgid "Delete selected files from printer." msgstr "선택된 파일을 프린터에서 삭제합니다." @@ -4731,6 +5035,12 @@ msgstr "선택" msgid "Batch manage files." msgstr "파일을 일괄 관리합니다." +msgid "Refresh" +msgstr "새로 고침" + +msgid "Reload file list from printer." +msgstr "프린터에서 파일 목록을 다시 로드합니다." + msgid "No printers." msgstr "프린터 없음." @@ -4741,13 +5051,35 @@ msgstr "[%d] 연결 실패!" msgid "Loading file list..." msgstr "파일 목록 로드 중..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "파일 없음 [%d]" +msgid "No files" +msgstr "파일 없음" + +msgid "Load failed" +msgstr "로드 실패" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "초기화 실패 (장치 연결 준비 안 됨)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"현재 펌웨어에서는 SD 카드의 파일 검색이 지원되지 않습니다. 프린터 펌웨어를 업" +"데이트하세요." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"초기화에 실패했습니다(저장소를 사용할 수 없습니다. SD 카드를 삽입하세요.)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN 연결 실패(sdcard를 볼 수 없음)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "LAN 전용 모드에서는 SD 카드의 파일 탐색이 지원되지 않습니다." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "로드 실패 [%d]" +msgid "Initialize failed (%s)!" +msgstr "(%s) 초기화 실패!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4768,11 +5100,11 @@ msgstr "파일 삭제" msgid "Fetching model infomations ..." msgstr "모델 정보 가져오는 중..." -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "프린터에서 모델 정보를 가져오지 못했습니다." -msgid "Failed to parse model infomations." -msgstr "모델 정보를 해석하지 못했습니다." +msgid "Failed to parse model information." +msgstr "모델 정보를 구문 분석하지 못했습니다." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4785,6 +5117,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "'%s' 파일이 손실되었습니다! 다시 다운로드하세요." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"파일: %s\n" +"제목: %s\n" + msgid "Download waiting..." msgstr "다운로드 대기 중..." @@ -4801,14 +5141,15 @@ msgstr "다운로드 완료" msgid "Downloading %d%%..." msgstr "다운로드 중 %d%%..." -msgid "Connection lost. Please retry." -msgstr "연결이 끊어졌습니다. 다시 시도해 주세요." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"프린터를 다시 연결하는 중입니다. 작업을 즉시 완료할 수 없습니다. 나중에 다시 " +"시도해 주세요." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "장치에서 더 많은 대화를 처리할 수 없습니다. 나중에 다시 시도해 주세요." - -msgid "File not exists." -msgstr "파일이 존재하지 않습니다." +msgid "File does not exist." +msgstr "파일이 없습니다." msgid "File checksum error. Please retry." msgstr "파일 체크섬 오류입니다. 다시 시도해 주세요." @@ -4865,12 +5206,6 @@ msgstr "종축을 중심으로 반전" msgid "Printing Progress" msgstr "출력 진행률" -msgid "Resume" -msgstr "계속" - -msgid "Stop" -msgstr "정지" - msgid "0" msgstr "0" @@ -4914,6 +5249,9 @@ msgstr "카메라 보기 전환" msgid "Control" msgstr "제어" +msgid "Printer Parts" +msgstr "프린터 부품" + msgid "Print Options" msgstr "출력 옵션" @@ -4932,9 +5270,6 @@ msgstr "챔버" msgid "Bed" msgstr "베드" -msgid "Unload" -msgstr "언로드" - msgid "Debug Info" msgstr "디버그 정보" @@ -5117,9 +5452,6 @@ msgstr "상태" msgid "Update" msgstr "업데이트" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "다시 표시하지 않음" @@ -5150,6 +5482,37 @@ msgstr "%s 정보" msgid "Skip" msgstr "건너뛰기" +msgid "Newer 3mf version" +msgstr "최신 3mf 버전" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"3mf 파일 버전은 베타 버전이며 현재 OrcaSlicer 버전보다 최신 버전입니다." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Orca Slicer Beta를 사용해 보려면 다음을 클릭하세요" + +msgid "Download Beta Version" +msgstr "베타 버전 다운로드" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "3mf 파일 버전은 현재 Orca Slicer 버전보다 최신 버전입니다." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Orca Slicer를 업데이트하면 3mf 파일의 모든 기능을 활성화할 수 있습니다." + +msgid "Current Version: " +msgstr "현재 버전: " + +msgid "Latest Version: " +msgstr "최신 버전: " + +msgid "Not for now" +msgstr "건너뛰기" + msgid "3D Mouse disconnected." msgstr "3D 마우스가 분리됨." @@ -5216,12 +5579,12 @@ msgstr[0] "%1$d 개체가 잘라낸 개체의 부품으로 로드되었습니다 msgid "ERROR" msgstr "오류" -msgid "CANCELED" -msgstr "취소됨" - msgid "COMPLETED" msgstr "완료됨" +msgid "CANCELED" +msgstr "취소됨" + msgid "Cancel upload" msgstr "업로드 취소" @@ -5333,6 +5696,25 @@ msgstr "프롬프트 소리 허용" msgid "Filament Tangle Detect" msgstr "필라멘트 엉킴 감지" +msgid "Nozzle Clumping Detection" +msgstr "노즐 응집 감지" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "노즐에 필라멘트나 기타 이물질이 뭉쳐져 있는지 확인하세요." + +msgid "Nozzle Type" +msgstr "노즐 유형" + +msgid "Stainless Steel" +msgstr "스테인레스 스틸" + +msgid "Hardened Steel" +msgstr "경화강" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "전역" @@ -5538,9 +5920,6 @@ msgstr "" 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 " @@ -5586,6 +5965,9 @@ msgstr "단계 파일 내의 구성 요소 이름이 UTF8 형식이 아닙니다 msgid "The name may show garbage characters!" msgstr "이름에 알 수 없는 문자가 표시될 수 있습니다!" +msgid "Remember my choice." +msgstr "선택 기억하기." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "파일 \"%1%\"을(를) 로드하지 못했습니다. 잘못된 구성이 발견되었습니다." @@ -5710,9 +6092,6 @@ msgstr "새로고침할 수 없음:" msgid "Error during reload" msgstr "새로고침 중 오류가 발생했습니다" -msgid "Slicing" -msgstr "슬라이싱" - msgid "There are warnings after slicing models:" msgstr "모델을 슬라이싱한 후 경고 발생:" @@ -5772,12 +6151,18 @@ msgstr "모델 가져오는 중" msgid "prepare 3mf file..." msgstr "3mf 파일 준비..." +msgid "Download failed, unknown file format." +msgstr "다운로드에 실패했습니다. 파일 형식을 알 수 없습니다." + msgid "downloading project ..." msgstr "프로젝트 다운로드 중 ..." +msgid "Download failed, File size exception." +msgstr "다운로드에 실패했습니다. 파일 크기 예외입니다." + #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "프로젝트 다운로드 %d%%" +msgstr "프로젝트 다운로드됨 %d%%" msgid "" "Importing to Orca Slicer failed. Please download the file and manually " @@ -5798,6 +6183,21 @@ msgstr "유효한 G코드를 포함하지 않습니다." msgid "Error occurs while loading G-code file" msgstr "G코드 파일을 로드하는 중 오류가 발생했습니다" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "경로 %1%에 ZIP 아카이브를 로드하지 못했습니다." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "파일을 %1%으로 압축 해제하지 못했습니다: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"%1%에서 압축 해제된 파일을 찾지 못했습니다. 파일 압축 해제에 실패했습니다." + msgid "Drop project file" msgstr "드롭 프로젝트 파일" @@ -5822,9 +6222,6 @@ msgstr "G코드 파일은 모델과 함께 로드할 수 없습니다!" msgid "Can not add models when in preview mode!" msgstr "미리보기 모드에서는 모델을 추가할 수 없습니다!" -msgid "Add Models" -msgstr "모델 추가" - msgid "All objects will be removed, continue?" msgstr "모든 개체가 제거됩니다. 계속하시겠습니까?" @@ -5833,9 +6230,6 @@ msgstr "" "현재 프로젝트에 저장되지 않은 변경 사항이 있습니다. 계속하기 전에 저장하시겠" "습니까?" -msgid "Remember my choice." -msgstr "선택 기억하기." - msgid "Number of copies:" msgstr "복제 수:" @@ -5866,9 +6260,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"모델 메쉬에 부울 연산을 수행할 수 없습니다. 오직 양수 부품만 내보내집니다." +"모델 메쉬에 대해 부울 연산을 수행할 수 없습니다. 긍정적인 부분만 유지됩니다. " +"메쉬를 수정하고 재시도해 볼 수 있습니다." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "이유: \"%1%\" 부분이 비어 있습니다." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "이유: \"%1%\" 부분이 볼륨을 바인딩하지 않습니다." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "이유: 부품 \"%1%\"에 자체 교차가 있습니다." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "이유: \"%1%\"과(와) 다른 부분에는 교차점이 없습니다." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6021,8 +6432,15 @@ msgstr "로그인 지역" msgid "Stealth Mode" msgstr "스텔스 모드" -msgid "Enable network plugin" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +"이 기능은 뱀부의 클라우드 서비스로의 데이터 전송을 중지합니다. BBL 머신을 사" +"용하지 않거나 LAN 모드만 사용하는 사용자는 이 기능을 안전하게 켤 수 있습니다." + +msgid "Enable network plugin" +msgstr "네트워크 플러그인 사용" msgid "Check for stable updates only" msgstr "안정적인 업데이트만 확인" @@ -6036,6 +6454,26 @@ msgstr "야드파운드법" msgid "Units" msgstr "단위" +msgid "Allow only one OrcaSlicer instance" +msgstr "OrcaSlicer 인스턴스를 하나만 허용" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"OSX에서는 기본적으로 항상 하나의 앱 인스턴스만 실행됩니다. 그러나 명령줄에서 " +"동일한 앱의 여러 인스턴스를 실행할 수 있습니다. 그러한 경우 이 설정은 하나의 " +"인스턴스만 허용합니다." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"이 기능을 활성화하면 OrcaSlicer를 시작하고 동일한 OrcaSlicer의 다른 인스턴스" +"가 이미 실행 중일 때 해당 인스턴스가 대신 다시 활성화됩니다." + msgid "Home" msgstr "홈" @@ -6045,6 +6483,21 @@ msgstr "기본 페이지" msgid "Set the page opened on startup." msgstr "시작 시 열리는 페이지를 설정합니다." +msgid "Touchpad" +msgstr "터치패드" + +msgid "Camera style" +msgstr "카메라 스타일" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"카메라 탐색 스타일을 선택합니다.\n" +"기본값: 회전의 경우 LMB+이동, 패닝의 경우 RMB/MMB+이동.\n" +"터치패드: 회전하려면 Alt+이동, 패닝하려면 Shift+이동." + msgid "Zoom to mouse position" msgstr "마우스 위치로 확대" @@ -6061,6 +6514,12 @@ msgstr "" "활성화된 경우 자유로운 카메라 앵글을 사용합니다. 활성화되지 않은 경우 제한된 " "카메라 앵글을 사용합니다." +msgid "Reverse mouse zoom" +msgstr "역방향 마우스 줌" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "활성화되면 마우스 휠을 사용하여 확대/축소 방향을 반대로 바꿉니다." + msgid "Show splash screen" msgstr "스플래시 화면 표시" @@ -6079,8 +6538,35 @@ msgstr "플러시 볼륨: 색상이 변경될 때마다 자동 계산됩니다." msgid "If enabled, auto-calculate everytime the color changed." msgstr "활성화하면 색상이 변경될 때마다 자동 계산됩니다." -msgid "Network" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "플러싱량: 필라멘트가 교체될 때마다 자동 계산됩니다." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "활성화하면 필라멘트가 교체될 때마다 자동 계산됩니다" + +msgid "Remember printer configuration" +msgstr "프린터 구성 기억" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." msgstr "" +"활성화된 경우 Orca는 각 프린터의 필라멘트/프로세스 구성을 자동으로 기억하고 " +"전환합니다." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "다중 장치 관리(Studio를 다시 시작한 후 적용)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"이 옵션을 활성화하면 동시에 여러 장치에 작업을 보내고 여러 장치를 관리할 수 " +"있습니다." + +msgid "Network" +msgstr "네트워크" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "사용자 사전 설정 자동 동기화(프린터/필라멘트/프로세스)" @@ -6122,6 +6608,48 @@ msgstr "" "활성화된 경우 OrcaSlicer를 기본 응용 프로그램으로 설정하여 .step 파일을 엽니" "다" +msgid "Associate web links to OrcaSlicer" +msgstr "OrcaSlicer에 웹 링크 연결" + +msgid "Associate URLs to OrcaSlicer" +msgstr "OrcaSlicer에 URL 연결" + +msgid "Current association: " +msgstr "현재 연결:" + +msgid "Associate prusaslicer://" +msgstr "prusaslicer:// 연결" + +msgid "Not associated to any application" +msgstr "어떤 애플리케이션과도 연결되지 않음" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Orca가 Printable.com에서 모델을 열 수 있도록 OrcaSlicer를 prusaslicer:// 링크" +"와 연결합니다." + +msgid "Associate bambustudio://" +msgstr "bambustudio:// 연결" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Orca가 makerworld.com에서 모델을 열 수 있도록 OrcaSlicer를 bambustudio:// 링" +"크와 연결하세요." + +msgid "Associate cura://" +msgstr "cura:// 연결" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Orca가 thingiverse.com에서 모델을 열 수 있도록 OrcaSlicer를 cura:// 링크와 연" +"결합니다." + msgid "Maximum recent projects" msgstr "최근 프로젝트 최대 표시" @@ -6291,12 +6819,21 @@ msgstr "프린터 선택/제거(시스템 사전 설정)" msgid "Create printer" msgstr "프린터 생성" -msgid "Incompatible" -msgstr "호환되지 않음" - msgid "The selected preset is null!" msgstr "선택한 사전 설정의 값이 존재하지 않습니다!(null)" +msgid "End" +msgstr "끝" + +msgid "Customize" +msgstr "사용자 정의" + +msgid "Other layer filament sequence" +msgstr "다른 층 필라멘트 순서" + +msgid "Please input layer value (>= 2)." +msgstr "레이어 값(>= 2)을 입력하세요." + msgid "Plate name" msgstr "플레이트 이름" @@ -6306,8 +6843,14 @@ msgstr "전역 출력 순서와 동일" msgid "Print sequence" msgstr "출력 순서" -msgid "Customize" -msgstr "사용자 정의" +msgid "Same as Global" +msgstr "글로벌과 동일" + +msgid "Disable" +msgstr "비활성" + +msgid "Spiral vase" +msgstr "나선형 꽃병 모드" msgid "First layer filament sequence" msgstr "첫 번째 레이어 필라멘트 순서" @@ -6370,15 +6913,6 @@ msgstr "사용자 사전 설정" msgid "Preset Inside Project" msgstr "프로젝트 내부 사전 설정" -msgid "Name is invalid;" -msgstr "이름이 잘못되었습니다;" - -msgid "illegal characters:" -msgstr "잘못된 문자:" - -msgid "illegal suffix:" -msgstr "잘못된 접미사:" - msgid "Name is unavailable." msgstr "이름을 사용할 수 없습니다." @@ -6396,15 +6930,6 @@ 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 "이름은 사전 설정의 별칭 이름과 같을 수 없습니다." @@ -6462,9 +6987,6 @@ msgstr "내 장치를 찾을 수 없습니까?" msgid "Log out successful." msgstr "로그아웃에 성공했습니다." -msgid "Offline" -msgstr "오프라인" - msgid "Busy" msgstr "사용중" @@ -6489,12 +7011,6 @@ msgstr "뱀부 텍스처 PEI 플레이트" msgid "Send print job to" msgstr "출력 작업 보내기" -msgid "Refresh" -msgstr "새로 고침" - -msgid "Bed Leveling" -msgstr "베드 레벨링" - msgid "Flow Dynamics Calibration" msgstr "동적 유량 교정" @@ -6507,9 +7023,6 @@ msgstr "전송 완료" msgid "Error code" msgstr "오류 코드" -msgid "Printer local connection failed, please try again." -msgstr "프린터 로컬 연결에 실패했습니다. 다시 시도하세요." - msgid "No login account, only printers in LAN mode are displayed" msgstr "로그인 계정이 없으며 LAN 모드의 프린터만 표시됩니다" @@ -6584,8 +7097,13 @@ 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 "선택한 프린터가 선택한 프린터 사전 설정과 호환되지 않습니다." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"선택한 프린터(%s)는 슬라이서(%s)에서 선택한 프린터 프로필과 호환되지 않습니" +"다." msgid "An SD card needs to be inserted to record timelapse." msgstr "타임랩스를 녹화하려면 SD 카드를 삽입해야 합니다." @@ -6640,43 +7158,34 @@ msgid "nozzle in preset: %s %s" msgstr "미리 설정된 노즐: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "기억된 노즐: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "기억된 노즐: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"미리 설정된 노즐 직경이 기억된 노즐 직경과 일치하지 않습니다.직경. 최근에 노" -"즐을 바꾸셨나요?" +"슬라이스 파일의 노즐 직경이 기억된 노즐과 일치하지 않습니다. 최근에 노즐을 변" +"경한 경우 장치 > 프린터 부품으로 이동하여 설정을 변경하세요." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*%s 재료를 %s로 출력하면 노즐이 손상될 수 있습니다" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "고온 재료(%s 재료)를 %s로 출력하면 노즐이 손상될 수 있습니다" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "위의 오류를 수정하십시오. 그렇지 않으면 출력를 계속할 수 없습니다." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "그래도 출력을 계속하려면 확인 버튼을 클릭하세요." -msgid "Hardened Steel" -msgstr "경화강" - -msgid "Stainless Steel" -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." @@ -6690,12 +7199,18 @@ msgstr "마이크로 라이다를 사용한 자동 유량 교정" msgid "Modifying the device name" msgstr "장치 이름 수정" +msgid "Bind with Pin Code" +msgstr "핀 코드로 바인딩" + msgid "Send to Printer SD card" msgstr "프린터 SD 카드로 보내기" msgid "Cannot send the print task when the upgrade is in progress" msgstr "업그레이드가 진행 중일 때 출력 작업을 보낼 수 없습니다" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "선택한 프린터가 선택한 프린터 사전 설정과 호환되지 않습니다." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "프린터 SD 카드로 보내기 전에 SD 카드를 삽입해야 합니다." @@ -6738,6 +7253,28 @@ msgstr "로그인 보고서 수신 시간 초과" msgid "Unknown Failure" msgstr "알 수 없는 실패" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"프린터 화면의 계정 페이지에서 핀 코드를 찾으십시오.\n" +" 그리고 아래에 핀코드를 입력하세요." + +msgid "Can't find Pin Code?" +msgstr "핀 코드를 찾을 수 없나요?" + +msgid "Pin Code" +msgstr "핀 코드" + +msgid "Binding..." +msgstr "바인딩..." + +msgid "Please confirm on the printer screen" +msgstr "프린터 화면에서 확인해주세요" + +msgid "Log in failed. Please check the Pin Code." +msgstr "로그인 실패. 핀코드를 확인해주세요." + msgid "Log in printer" msgstr "프린터 로그인" @@ -6895,8 +7432,8 @@ msgid "" "precise dimensions or is part of an assembly, it's important to double-check " "whether this change in geometry impacts the functionality of your print." msgstr "" -"이 옵션을 활성화하면 모델의 모양이 수정됩니다. 인쇄물에 정확한 치수가 필요하" -"거나 어셈블리의 일부인 경우 이러한 형상 변경이 인쇄물의 기능에 영향을 미치는" +"이 옵션을 활성화하면 모델의 모양이 수정됩니다. 출력물에 정확한 치수가 필요하" +"거나 어셈블리의 일부인 경우 이러한 형상 변경이 출력물의 기능에 영향을 미치는" "지 다시 확인하는 것이 중요합니다." msgid "Are you sure you want to enable this option?" @@ -6925,6 +7462,27 @@ msgstr "조정" msgid "Ignore" msgstr "무시" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"실험적 기능: 플러시를 최소화하기 위해 필라멘트 교체 중에 더 먼 거리에서 필라" +"멘트를 집어넣고 절단합니다. 플러시를 눈에 띄게 줄일 수 있지만 노즐 막힘이나 " +"기타 출력 문제의 위험이 높아질 수도 있습니다." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"실험적 기능: 플러시를 최소화하기 위해 필라멘트 교체 중에 더 먼 거리에서 필라" +"멘트를 집어넣고 절단합니다. 플러시를 크게 줄일 수 있지만 노즐 막힘이나 기타 " +"출력 문제의 위험을 높일 수도 있습니다. 최신 프린터 펌웨어와 함께 사용하십시" +"오." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -7004,6 +7562,9 @@ msgstr "지지대 필라멘트" msgid "Tree supports" msgstr "나무 지지대" +msgid "Skirt" +msgstr "스커트" + msgid "Prime tower" msgstr "프라임 타워" @@ -7177,6 +7738,14 @@ msgstr "다중 재료 프린터의 다중 압출기 툴 교체 매개변수" msgid "Printable space" msgstr "출력 가능 공간" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "%1% 매개변수에 잘못된 값이 입력됨: %2%" + +msgid "G-code flavor is switched" +msgstr "G코드 유형이 변경됨" + msgid "Cooling Fan" msgstr "냉각 팬" @@ -7404,21 +7973,36 @@ msgstr "" "않은 변경 사항을 포함:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "" -"사전 설정 \"%1%\"의 일부 설정을 변경했습니다.\n" -"사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "사전 설정 \"%1%\"의 일부 설정을 변경했습니다. " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"일부 사전 설정을 변경했습니다.\n" -"사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" +"\n" +"수정한 사전 설정 값을 저장하거나 삭제할 수 있습니다." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"수정한 사전 설정 값을 저장하거나 삭제하거나, 수정한 값을 새 사전 설정으로 전" +"송하도록 선택할 수 있습니다." + +msgid "You have previously modified your settings." +msgstr "이전에 설정을 수정했습니다." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"수정한 사전 설정 값을 삭제하거나 수정된 ​​값을 새 프로젝트로 전송하도록 선택할 " +"수 있습니다" msgid "Extruders count" msgstr "압출기 수" @@ -7452,7 +8036,7 @@ msgid "Transfer values from left to right" msgstr "왼쪽에서 오른쪽으로 값 전송" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "이 대화 상자를 활성화하면 선택한 값을 왼쪽에서 오른쪽으로 사전 설정으로 변환" @@ -7535,6 +8119,60 @@ msgstr "사용 가능한 업데이트가 없습니다." msgid "The configuration is up to date." msgstr "구성이 최신 상태입니다." +msgid "Obj file Import color" +msgstr "Obj 파일 가져오기 색상" + +msgid "Specify number of colors:" +msgstr "색상 수 지정:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "색상 개수는 [%d, %d] 범위 내에 있어야 합니다." + +msgid "Recommended " +msgstr "추천" + +msgid "Current filament colors:" +msgstr "현재 필라멘트 색상:" + +msgid "Quick set:" +msgstr "빠른 설정:" + +msgid "Color match" +msgstr "색상 일치" + +msgid "Approximate color matching." +msgstr "대략적인 색상 일치." + +msgid "Append" +msgstr "추가" + +msgid "Add consumable extruder after existing extruders." +msgstr "기존 압출기 뒤에 소모성 압출기를 추가합니다." + +msgid "Reset mapped extruders." +msgstr "매핑된 압출기를 재설정합니다." + +msgid "Cluster colors" +msgstr "클러스터 색상" + +msgid "Map Filament" +msgstr "지도 필라멘트" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"참고: 색상이 선택되었습니다. 확인을 선택할 수 있습니다.\n" +" 계속하거나 수동으로 조정하려면" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"경고: 새로 추가된 개수와\n" +" 현재 압출기는 16개를 초과합니다." + msgid "Ramming customization" msgstr "래밍 사용자 정의" @@ -7618,6 +8256,32 @@ msgstr "에서" msgid "To" msgstr "으로" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "뱀부 네트워크 플러그인이 감지되지 않습니다." @@ -7888,6 +8552,12 @@ msgstr "슬라이더를 5배 빠르게 이동" msgid "Shift+Mouse wheel" msgstr "Shift+마우스 휠" +msgid "Horizontal slider - Move to start position" +msgstr "수평 슬라이더 - 시작 위치로 이동" + +msgid "Horizontal slider - Move to last position" +msgstr "수평 슬라이더 - 마지막 위치로 이동" + msgid "Release Note" msgstr "릴리스 노트" @@ -7917,6 +8587,42 @@ msgstr "이 버전 건너뛰기" msgid "Done" msgstr "완료" +msgid "resume" +msgstr "재개" + +msgid "Resume Printing" +msgstr "출력 재개" + +msgid "Resume Printing(defects acceptable)" +msgstr "출력 재개(결함 허용)" + +msgid "Resume Printing(problem solved)" +msgstr "출력 재개(문제 해결)" + +msgid "Stop Printing" +msgstr "출력 중지" + +msgid "Check Assistant" +msgstr "어시스턴트 확인" + +msgid "Filament Extruded, Continue" +msgstr "필라멘트 압출, 계속" + +msgid "Not Extruded Yet, Retry" +msgstr "아직 압출되지 않았습니다. 다시 시도하세요" + +msgid "Finished, Continue" +msgstr "완료, 계속" + +msgid "Load Filament" +msgstr "필라멘트 넣기" + +msgid "Filament Loaded, Resume" +msgstr "필라멘트 로드됨, 재개" + +msgid "View Liveview" +msgstr "실시간 보기" + msgid "Confirm and Update Nozzle" msgstr "노즐 확인 및 업데이트" @@ -7974,12 +8680,6 @@ msgstr "버전:" msgid "Update firmware" msgstr "펌웨어 업데이트" -msgid "Printing" -msgstr "출력 중" - -msgid "Idle" -msgstr "대기 중" - msgid "Beta version" msgstr "베타 버전" @@ -8014,7 +8714,7 @@ 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." +"update next time starting Orca." msgstr "" "펌웨어 버전이 비정상입니다. 출력하기 전에 수리 및 업데이트가 필요합니다. 지" "금 업데이트하시겠습니까? 나중에 프린터에서 업데이트하거나 다음에 스튜디오를 " @@ -8153,9 +8853,6 @@ msgstr "내부 브릿지" msgid "Gap infill" msgstr "간격 채우기" -msgid "Skirt" -msgstr "스커트" - msgid "Support interface" msgstr "지지대 접점" @@ -8374,8 +9071,8 @@ msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -"프라임 타워는 현재 Marlin, RepRap/Sprinter에만 지원됩니다.RepRapFirmware 및 " -"Repetier G코드 유형." +"프라임 타워는 현재 Marlin, RepRap/Sprinter, RepRapFirmware 및 Repetier G코드 " +"유형에서만 지원됩니다." msgid "The prime tower is not supported in \"By object\" print." msgstr "프라임 타워는 \"개체별\" 출력에서 지원되지 않습니다." @@ -8510,6 +9207,12 @@ msgid "" "You can adjust the machine_max_acceleration_travel value in your printer's " "configuration to get higher speeds." msgstr "" +"이동 가속도 설정이 프린터의 최대 이동 가속도(machine_max_acceleration_travel)" +"를 초과합니다.\n" +"Orca는 이동 가속 속도를 자동으로 제한하여 프린터의 성능을 초과하지 않도록 합" +"니다.\n" +"더 빠른 속도를 얻으려면 프린터 구성에서 machine_max_acceleration_travel 값을 " +"조정할 수 있습니다." msgid "Generating skirt & brim" msgstr "스커트 & 브림 생성 중" @@ -8592,10 +9295,10 @@ msgid "Printer preset names" msgstr "프린터 사전 설정 이름" msgid "Use 3rd-party print host" -msgstr "" +msgstr "타사 출력 호스트 사용" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" -msgstr "" +msgstr "타사 프린트 호스트를 통해 밤부랩의 프린터 제어 허용" msgid "Hostname, IP or URL" msgstr "호스트 이름, IP 또는 URL" @@ -8776,6 +9479,15 @@ msgstr "엔지니어링 플레이트" msgid "First layer print sequence" msgstr "첫 레이어 출력 순서" +msgid "Other layers print sequence" +msgstr "다른 레이어 출력 순서" + +msgid "The number of other layers print sequence" +msgstr "다른 레이어 수 출력 순서" + +msgid "Other layers filament sequence" +msgstr "다른 층 필라멘트 순서" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "이 G코드는 Z올리기 전에 모든 레이어 변경에 삽입됩니다" @@ -9048,7 +9760,7 @@ msgid "" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." msgstr "" -"이 옵션은 카운터보어 구멍에 대한 브릿지를 생성하여 지지대 없이 인쇄할 수 있도" +"이 옵션은 카운터보어 구멍에 대한 브릿지를 생성하여 지지대 없이 출력할 수 있도" "록 합니다. 사용 가능한 모드는 다음과 같습니다.\n" "1. 없음: 브릿지가 생성되지 않습니다.\n" "2. 부분적으로 브릿지됨: 지원되지 않는 영역의 일부만 브릿지됩니다.\n" @@ -9099,7 +9811,7 @@ msgstr "" "하세요" msgid "mm/s or %" -msgstr "mm/s or %" +msgstr "mm/s 또는 %" msgid "External" msgstr "외부" @@ -9204,7 +9916,7 @@ msgid "Intra-layer order" msgstr "레이어 내 순서" msgid "Print order within a single layer" -msgstr "단일 레이어 내의 인쇄 순서" +msgstr "단일 레이어 내의 출력 순서" msgid "As object list" msgstr "개체 목록으로" @@ -9343,14 +10055,14 @@ msgstr "" "이는 데 도움이 될 수 있습니다.\n" "\n" "기본적으로 작은 내부 브릿지는 필터링되고 내부 솔리드 채우기는 희박한 채우기 " -"위에 직접 인쇄됩니다. 이는 대부분의 경우에 잘 작동하여 상단 표면 품질을 크게 " -"저하시키지 않고 인쇄 속도를 높입니다.\n" +"위에 직접 출력됩니다. 이는 대부분의 경우에 잘 작동하여 상단 표면 품질을 크게 " +"저하시키지 않고 출력 속도를 높입니다.\n" "\n" "그러나 특히 너무 낮은 희박 채우기 밀도가 사용되는 심하게 기울어지거나 곡선 모" "델에서는 지지되지 않는 고체 채우기가 말려 베개 현상이 발생할 수 있습니다.\n" "\n" "이 옵션을 활성화하면 약간 지원되지 않는 내부 솔리드 채우기 위에 내부 브릿지 " -"레이어가 인쇄됩니다. 아래 옵션은 필터링 양, 즉 생성된 내부 브릿지 양을 제어합" +"레이어가 출력됩니다. 아래 옵션은 필터링 양, 즉 생성된 내부 브릿지 양을 제어합" "니다.\n" "\n" "비활성화됨 - 이 옵션을 비활성화합니다. 이는 기본 동작이며 대부분의 경우 잘 작" @@ -9570,19 +10282,19 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"벽/채우기 순서. 확인란을 선택 취소하면 벽이 먼저 출력되며 이는 대부분의 경우 " +"벽/채우기 순서. 확인란을 선택 취소하면 벽이 먼저 인쇄되며 이는 대부분의 경우 " "가장 잘 작동합니다.\n" "\n" -"벽에 접착할 이웃 충전재가 있으므로 벽을 먼저 출력하면 과도한 돌출부에 도움이 " -"될 수 있습니다. 그러나 충전재는 출력된 벽이 부착된 부분을 약간 밀어내어 외부 " -"표면 마감이 더 나빠집니다. 또한 충전재가 부품의 외부 표면을 통해 빛날 수도 있" -"습니다." +"충전재를 먼저 인쇄하면 벽에 접착할 인접 충전재가 있으므로 돌출부가 심한 경우 " +"도움이 될 수 있습니다. 그러나 충전재는 인쇄된 벽이 부착된 부분을 약간 밀어내" +"어 외부 표면 마감이 더 나빠집니다. 또한 충전재가 부품의 외부 표면을 통해 빛" +"날 수도 있습니다." msgid "Wall loop direction" msgstr "벽 루프 방향" @@ -9633,6 +10345,12 @@ msgid "" "printing." msgstr "압출기 주변의 회피 반경. 개체별 출력에서 충돌 방지에 사용됩니다." +msgid "Nozzle height" +msgstr "노즐 높이" + +msgid "The height of nozzle tip." +msgstr "노즐 팁의 높이." + msgid "Bed mesh min" msgstr "배드 메쉬 최소" @@ -9646,8 +10364,8 @@ msgid "" "your printer manufacturer. The default setting is (-99999, -99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" -"이 옵션은 허용되는 배드 메쉬 영역의 최소 지점을 설정합니다. 프로브의 XY 오프" -"셋으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" +"이 옵션은 허용되는 배드 메쉬 영역의 최소 지점을 설정합니다. 프로브의 XY 옵셋" +"으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" "가 베드 영역 밖으로 나가지 않도록 하려면 베드 메쉬의 최소 및 최대 지점을 적절" "하게 설정해야 합니다. OrcaSlicer는adaptive_bed_mesh_min/" "adaptive_bed_mesh_max 값이 이러한 최소/최대 포인트를 초과하지 않도록 보장합니" @@ -9668,8 +10386,8 @@ msgid "" "your printer manufacturer. The default setting is (99999, 99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" -"이 옵션은 허용되는 침대 메쉬 영역의 최대 지점을 설정합니다. 프로브의 XY 오프" -"셋으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" +"이 옵션은 허용되는 침대 메쉬 영역의 최대 지점을 설정합니다. 프로브의 XY 옵셋" +"으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" "가 베드 영역 밖으로 나가지 않도록 하려면 베드 메쉬의 최소 및 최대 지점을 적절" "하게 설정해야 합니다. OrcaSlicer는adaptive_bed_mesh_min/" "adaptive_bed_mesh_max 값이 이러한 최소/최대 포인트를 초과하지 않도록 보장합니" @@ -9704,7 +10422,7 @@ msgid "Only used as a visual help on UI" msgstr "UI의 시각적 도움말로만 사용됨" msgid "Extruder offset" -msgstr "압출기 오프셋" +msgstr "압출기 옵셋" msgid "Flow ratio" msgstr "유량 비율" @@ -9750,6 +10468,30 @@ msgstr "" "이 설정을 활성화하면 출력물 냉각 팬이 정지되지 않으며 팬을 최소 속도로 가동하" "여 시동 및 정지 빈도를 줄입니다" +msgid "Don't slow down outer walls" +msgstr "외벽 감속하지 않기" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"활성화되면 최소 레이어 시간을 충족하기 위한 외벽의 출력 속도 감속을 적용하지 " +"않습니다. 이 기능은 아래의 경우에 도움이 될 수 있습니다:\n" +"\n" +"1. 유광 필라멘트로 인쇄할 때 일정한 광택을 유지하기 위한 경우 \n" +"2. 외벽 출력 속도의 변화로 인한 외벽의 Z밴딩처럼 보이는 형상이 생성되는 것을 " +"방지하기 위한 경우 \n" +"3. 외벽을 VFA를 발생시키는 속도로 출력하는 것을 방지하기 위한 경우\n" +"\n" + msgid "Layer time" msgstr "레이어 시간" @@ -10017,14 +10759,28 @@ msgstr "필라멘트 제조사" msgid "(Undefined)" msgstr "(정의되지 않음)" -msgid "Infill direction" -msgstr "채우기 방향" +msgid "Sparse infill direction" +msgstr "드문 채우기 방향" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "선의 시작 또는 주 방향을 제어하는 드문 채우기 패턴에 대한 각도" +msgid "Solid infill direction" +msgstr "꽉찬 채우기 방향" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "선의 시작 또는 기본 방향을 제어하는 ​​솔리드 채우기 패턴의 각도" + +msgid "Rotate solid infill direction" +msgstr "솔리드 채우기 방향 회전" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "각 레이어에 대해 솔리드 채우기 방향을 90° 회전합니다." + msgid "Sparse infill density" msgstr "드문 채우기 밀도" @@ -10072,6 +10828,9 @@ msgstr "정육면체 지지대" msgid "Lightning" msgstr "번개" +msgid "Cross Hatch" +msgstr "크로스 해치" + msgid "Sparse infill anchor length" msgstr "드문 채우기 고정점 길이" @@ -10156,7 +10915,7 @@ msgstr "" "니다." msgid "mm/s² or %" -msgstr "mm/s² or %" +msgstr "mm/s² 또는 %" msgid "" "Acceleration of sparse infill. If the value is expressed as a percentage (e." @@ -10273,6 +11032,9 @@ msgstr "" "\"close_fan_the_first_x_layers\"보다 낮으면 무시되며, 이 경우 팬은 " "\"close_fan_the_first_x_layers\" + 1 에서 최대 허용 속도로 가도됩니다." +msgid "layer" +msgstr "레이어" + msgid "Support interface fan speed" msgstr "지지대 접점 팬 속도" @@ -10341,15 +11103,38 @@ msgstr "" "간격 채우기 속도. 간격은 일반적으로 선 너비가 불규칙하므로 더 천천히 출력해" "야 합니다" +msgid "Precise Z height" +msgstr "정확한 Z 높이" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"슬라이싱 후 객체의 정확한 z 높이를 얻으려면 이 옵션을 활성화하세요. 마지막 " +"몇 레이어의 레이어 높이를 미세 조정하여 정확한 개체 높이를 얻습니다. 이는 실" +"험적인 매개변수입니다." + msgid "Arc fitting" msgstr "원호 맞춤" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"G2 및 G3 이동(원호 기반 G코드)이 있는 G코드 파일을 가져오려면 이 기능을 활성" -"화합니다. 피팅 공차는 해상도와 동일합니다" +"G2 및 G3 이동이 있는 G 코드 파일을 얻으려면 이 옵션을 활성화하십시오. 피팅 공" +"차는 분해능과 동일합니다. \n" +"\n" +"참고: Klipper 기계의 경우 이 옵션을 비활성화하는 것이 좋습니다. Klipper는 " +"arc 명령이 펌웨어에 의해 라인 세그먼트로 다시 분할되므로 이점을 얻지 못합니" +"다. 이로 인해 선 세그먼트가 슬라이서에 의해 호로 변환된 다음 펌웨어에 의해 다" +"시 선 세그먼트로 변환되므로 표면 품질이 저하됩니다." msgid "Add line number" msgstr "라인 번호 추가" @@ -10573,12 +11358,32 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "채우기/벽 겹치기" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"채우기 영역이 벽과 겹치도록 약간 확장되어 접착력이 향상됩니다. 드문 채우기 " -"선 너비의 백분율 값입니다" +"채우기 영역은 더 나은 접착을 위해 벽과 겹치도록 약간 확대됩니다. 백분율 값은 " +"희박한 채우기의 선 너비를 기준으로 합니다. 거친 상단 표면을 초래하는 재료의 " +"압출 및 축적 가능성을 최소화하려면 이 값을 ~10-15%로 설정하십시오." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "상단/하단 솔리드 채우기/벽 겹침" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"상단 솔리드 채우기 영역은 더 나은 접착을 위해 벽과 겹치도록 약간 확대되고 상" +"단 채우기가 벽과 만나는 핀홀의 모양을 최소화합니다. 25-30%의 값은 핀홀의 모양" +"을 최소화하는 좋은 출발점입니다. 백분율 값은 희박한 채우기의 선 너비를 기준으" +"로 합니다." msgid "Speed of internal sparse infill" msgstr "내부 드문 채우기 속도" @@ -10953,7 +11758,7 @@ msgid "" "cooling is enabled." msgstr "" "더 나은 레이어 냉각을 위해 속도를 낮추는 경우 위의 최소 레이어 시간을 유지하" -"기 위해 프린터가 느려지는 최소 인쇄 속도입니다." +"기 위해 프린터가 느려지는 최소 출력 속도입니다." msgid "Nozzle diameter" msgstr "노즐 직경" @@ -11227,6 +12032,27 @@ msgstr "" "긴 이동 중에 필라멘트가 흘러나오는 것을 방지하기 위해 압출기의 일정량의 재료" "를 뒤로 당깁니다. 후퇴를 비활성화하려면 0을 설정하세요" +msgid "Long retraction when cut(experimental)" +msgstr "절단 시 긴 후퇴(실험적)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"실험적 기능. 퍼지를 최소화하기 위해 변경하는 동안 더 먼 거리에서 필라멘트를 " +"집어넣고 절단합니다. 이렇게 하면 플러시가 크게 줄어들지만 노즐 막힘이나 기타 " +"출력 문제가 발생할 위험이 높아질 수도 있습니다." + +msgid "Retraction distance when cut" +msgstr "절단 시 후퇴 거리" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "실험적 특징.필라멘트 교환시 절단 전 후퇴길이" + msgid "Z hop when retract" msgstr "후퇴 시 Z 올리기" @@ -11360,7 +12186,7 @@ msgstr "설정된 남은 출력 시간 비활성화" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" -msgstr "" +msgstr "M73 생성 비활성화: 최종 G코드에 남은 출력 시간 설정" msgid "Seam position" msgstr "솔기 위치" @@ -11436,7 +12262,7 @@ msgstr "" "냄) 스카프 조인트 솔기가 사용됩니다. 기본값은 155°입니다." msgid "Conditional overhang threshold" -msgstr "" +msgstr "조건부 오버행 임계값" #, no-c-format, no-boost-format msgid "" @@ -11446,6 +12272,10 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"이 옵션은 스카프 조인트 이음새 적용을 위한 돌출 임계값을 결정합니다. 둘레의 " +"지지되지 않은 부분이 이 임계값보다 작으면 스카프 조인트 심이 적용됩니다. 기" +"본 임계값은 외벽 너비의 40% of로 설정됩니다. 성능 고려 사항으로 인해 돌출 정" +"도가 추정됩니다." msgid "Scarf joint speed" msgstr "스카프 조인트 속도" @@ -11460,8 +12290,8 @@ msgid "" "percentage (e.g., 80%), the speed is calculated based on the respective " "outer or inner wall speed. The default value is set to 100%." msgstr "" -"이 옵션은 스카프 조인트의 인쇄 속도를 설정합니다. 스카프 조인트를 느린 속도" -"(100mm/s 미만)로 인쇄하는 것이 좋습니다. 또한 설정 속도가 외벽 또는 내벽의 속" +"이 옵션은 스카프 조인트의 출력 속도를 설정합니다. 스카프 조인트를 느린 속도" +"(100mm/s 미만)로 출력하는 것이 좋습니다. 또한 설정 속도가 외벽 또는 내벽의 속" "도와 크게 다른 경우 '압출 속도 평탄화'를 활성화하는 것이 좋습니다. 여기에 지" "정된 속도가 외부 또는 내부 벽의 속도보다 높을 경우 프린터는 기본적으로 두 가" "지 속도 중 더 느린 속도로 설정됩니다. 백분율(예: 80%)로 지정되면 속도는 각각" @@ -11549,13 +12379,13 @@ msgid "" "print order as in these modes it is more likely an external perimeter is " "printed immediately after a deretraction move." msgstr "" -"외부/내부 또는 내부/외부/내부 벽 인쇄 순서로 인쇄할 때 외부 둘레 시작 부분에" +"외부/내부 또는 내부/외부/내부 벽 출력 순서로 출력할 때 외부 둘레 시작 부분에" "서 잠재적인 과잉 압출의 가시성을 최소화하기 위해 외부 둘레 시작 부분에서 내부" "에 후퇴가 약간 수행됩니다. 이렇게 하면 압출에 대한 모든 잠재력이 외부 표면에" "서 숨겨집니다.\n" "\n" -"외부/내부 또는 내부/외부/내부 벽 인쇄 순서로 인쇄할 때 유용합니다. 이러한 모" -"드에서는 후퇴 이동 직후 외부 둘레가 인쇄될 가능성이 더 높기 때문입니다." +"외부/내부 또는 내부/외부/내부 벽 출력 순서로 출력할 때 유용합니다. 이러한 모" +"드에서는 후퇴 이동 직후 외부 둘레가 출력될 가능성이 더 높기 때문입니다." msgid "Wipe speed" msgstr "닦기 속도" @@ -11584,6 +12414,40 @@ msgstr "" "얼마나 많은 스커트 레이어를 생성할지 결정합니다. 일반적으로 한개의 레이어를 " "사용합니다" +msgid "Draft shield" +msgstr "드래프트 쉴드" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"드래프트 쉴드는 바람으로 인해 ABS 또는 ASA 인쇄물이 뒤틀리거나 인쇄 베드에서 " +"분리되는 것을 방지하는 데 유용합니다. 일반적으로 오픈 프레임 프린터, 즉 인클" +"로저가 없는 경우에만 필요합니다. \n" +"\n" +"옵션:\n" +"활성화됨 = 스커트가 가장 높은 인쇄물의 높이와 같습니다.\n" +"제한됨 = 스커트가 스커트 높이에 지정된 높이만큼 높습니다.\n" +"\n" +"참고: 드래프트 쉴드가 활성화되면 스커트는 개체로부터 스커트 거리에 인쇄됩니" +"다. 따라서 챙이 활성화된 경우 챙과 교차할 수 있습니다. 이를 방지하려면 스커" +"트 거리 값을 늘리십시오.\n" + +msgid "Limited" +msgstr "제한됨" + +msgid "Enabled" +msgstr "활성화됨" + msgid "Skirt loops" msgstr "스커트 루프" @@ -11596,6 +12460,22 @@ msgstr "스커트 속도" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "스커트의 속도(mm/s), 0은 기본 레이어 압출 속도를 사용함을 의미합니다." +msgid "Skirt minimum extrusion length" +msgstr "스커트 최소 돌출 길이" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"스커트를 인쇄할 때 최소 필라멘트 압출 길이(mm)입니다. 0은 이 기능이 비활성화" +"되었음을 의미합니다.\n" +"\n" +"프린터가 프라임 라인 없이 인쇄하도록 설정된 경우 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" @@ -11620,9 +12500,6 @@ 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 " @@ -11768,7 +12645,7 @@ msgid "Close holes" msgstr "구멍 닫기" msgid "Z offset" -msgstr "Z 오프셋" +msgstr "Z 옵셋" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -12318,6 +13195,46 @@ msgstr "닦기 타워 청소 선 간격" msgid "Spacing of purge lines on the wipe tower." msgstr "닦기 타워의 청소 선 간격입니다." +msgid "Maximum wipe tower print speed" +msgstr "최대 와이프 타워 인쇄 속도" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"와이프 타워에서 퍼징하고 와이프 타워 희박 레이어를 인쇄할 때 최대 인쇄 속도입" +"니다. 퍼징 시 희소 충전 속도 또는 필라멘트 최대 체적 속도에서 계산된 속도가 " +"더 낮은 경우 가장 낮은 속도가 대신 사용됩니다.\n" +"\n" +"희소 레이어를 인쇄할 때 내부 주변 속도 또는 필라멘트 최대 체적 속도에서 계산" +"된 속도가 더 낮은 경우 가장 낮은 속도가 대신 사용됩니다.\n" +"\n" +"이 속도를 높이면 타워의 안정성에 영향을 줄 수 있을 뿐만 아니라 노즐이 와이프 " +"타워에 형성될 수 있는 얼룩과 충돌하는 힘도 증가할 수 있습니다.\n" +"\n" +"이 매개변수를 기본값인 90mm/초 이상으로 늘리기 전에 프린터가 증가된 속도에서 " +"안정적으로 브리지할 수 있고 도구 교환 시 흘러나오는 현상이 잘 제어되는지 확인" +"하십시오.\n" +"\n" +"와이프 타워 외부 경계의 경우 이 설정에 관계없이 내부 경계 속도가 사용됩니다." + msgid "Wipe tower extruder" msgstr "닦기 타워 압출기" @@ -12448,7 +13365,7 @@ msgstr "" "기" msgid "Format of G-code thumbnails" -msgstr "G코드 미리보기 포맷" +msgstr "G코드 미리보기 형식" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " @@ -12565,8 +13482,8 @@ msgid "" "top-surface. 'One wall threshold' is only visibile if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" -"짧고 닫히지 않은 벽이 인쇄되는 것을 방지하려면 이 값을 조정하십시오. 이로 인" -"해 인쇄 시간이 늘어날 수 있습니다. 값이 높을수록 더 많은 벽과 긴 벽이 제거됩" +"짧고 닫히지 않은 벽이 출력되는 것을 방지하려면 이 값을 조정하십시오. 이로 인" +"해 출력 시간이 늘어날 수 있습니다. 값이 높을수록 더 많은 벽과 긴 벽이 제거됩" "니다.\n" "\n" "참고: 모델 외부의 시각적 틈을 방지하기 위해 하단 및 상단 표면은 이 값의 영향" @@ -12718,13 +13635,13 @@ msgstr "현재 개체 인덱스" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." -msgstr "순차 인쇄에만 해당됩니다. 현재 인쇄된 개체의 0 기반 인덱스입니다." +msgstr "순차 출력에만 해당됩니다. 현재 출력된 개체의 0 기반 인덱스입니다." msgid "Has wipe tower" msgstr "와이프 타워 있음" msgid "Whether or not wipe tower is being generated in the print." -msgstr "인쇄물에 와이프타워가 생성되는지 여부입니다." +msgstr "출력물에 와이프타워가 생성되는지 여부입니다." msgid "Initial extruder" msgstr "초기 압출기" @@ -12733,7 +13650,7 @@ msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." msgstr "" -"인쇄에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기 도구와 동일합니다." +"출력에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기 도구와 동일합니다." msgid "Initial tool" msgstr "초기 도구" @@ -12742,13 +13659,13 @@ msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" -"인쇄에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기_압출기와 동일합니다." +"출력에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기_압출기와 동일합니다." msgid "Is extruder used?" msgstr "압출기를 사용하나요?" msgid "Vector of bools stating whether a given extruder is used in the print." -msgstr "특정 압출기가 인쇄에 사용되는지 여부를 나타내는 값 입니다." +msgstr "특정 압출기가 출력에 사용되는지 여부를 나타내는 값 입니다." msgid "Volume per extruder" msgstr "압출기당 부피" @@ -12760,7 +13677,7 @@ msgid "Total toolchanges" msgstr "총 도구 변경" msgid "Number of toolchanges during the print." -msgstr "인쇄 중 도구 교환 횟수." +msgstr "출력 중 도구 교환 횟수." msgid "Total volume" msgstr "총량" @@ -12785,25 +13702,25 @@ msgid "" "Total weight of the print. Calculated from filament_density value in " "Filament Settings." msgstr "" -"인쇄물의 총 무게입니다. 필라멘트 설정의 filment_density 값에서 계산됩니다." +"출력물의 총 무게입니다. 필라멘트 설정의 filment_density 값에서 계산됩니다." msgid "Total layer count" msgstr "총 레이어 수" msgid "Number of layers in the entire print." -msgstr "전체 인쇄의 레이어 수입니다." +msgstr "전체 출력의 레이어 수입니다." msgid "Number of objects" msgstr "개체 수" msgid "Total number of objects in the print." -msgstr "인쇄물의 총 개체 수입니다." +msgstr "출력물의 총 개체 수입니다." msgid "Number of instances" msgstr "인스턴스 수" msgid "Total number of object instances in the print, summed over all objects." -msgstr "모든 개체에 대해 합산된 인쇄물의 총 개체 인스턴스 수입니다." +msgstr "모든 개체에 대해 합산된 출력물의 총 개체 인스턴스 수입니다." msgid "Scale per object" msgstr "개체당 크기 조정" @@ -12853,13 +13770,13 @@ msgid "Size of the first layer bounding box" msgstr "첫 번째 레이어 경계 상자의 크기" msgid "Bottom-left corner of print bed bounding box" -msgstr "인쇄 베드 경계 상자의 왼쪽 하단 모서리" +msgstr "출력 베드 경계 상자의 왼쪽 하단 모서리" msgid "Top-right corner of print bed bounding box" -msgstr "인쇄 베드 경계 상자의 오른쪽 상단 모서리" +msgstr "출력 베드 경계 상자의 오른쪽 상단 모서리" msgid "Size of the print bed bounding box" -msgstr "인쇄 베드 경계 상자의 크기" +msgstr "출력 베드 경계 상자의 크기" msgid "Timestamp" msgstr "타임스탬프" @@ -12877,10 +13794,10 @@ msgid "Minute" msgstr "분" msgid "Print preset name" -msgstr "사전 설정 이름 인쇄" +msgstr "사전 설정 이름 출력" msgid "Name of the print preset used for slicing." -msgstr "슬라이스에 사용되는 인쇄 사전 설정의 이름입니다." +msgstr "슬라이스에 사용되는 출력 사전 설정의 이름입니다." msgid "Filament preset name" msgstr "필라멘트 사전 설정 이름" @@ -12916,13 +13833,13 @@ msgstr "레이어 z" msgid "" "Height of the current layer above the print bed, measured to the top of the " "layer." -msgstr "레이어 상단까지 측정된 인쇄 베드 위의 현재 레이어 높이입니다." +msgstr "레이어 상단까지 측정된 출력 베드 위의 현재 레이어 높이입니다." msgid "Maximal layer z" msgstr "최대 레이어 z" msgid "Height of the last layer above the print bed." -msgstr "인쇄 베드 위의 마지막 레이어 높이입니다." +msgstr "출력 베드 위의 마지막 레이어 높이입니다." msgid "Filament extruder ID" msgstr "필라멘트 압출기 ID" @@ -13042,6 +13959,9 @@ msgstr "취소됨" msgid "load_obj: failed to parse" msgstr "load_obj: 구문 분석에 실패" +msgid "load mtl in obj: failed to parse" +msgstr "obj에 mtl 로드: 구문 ​​분석에 실패했습니다" + msgid "The file contains polygons with more than 4 vertices." msgstr "이 파일에는 꼭지점이 4개 이상인 다각형이 포함되어 있습니다." @@ -13119,12 +14039,6 @@ 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자를 초과할 수 없습니다." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13171,6 +14085,18 @@ msgstr "교정할 필라멘트를 선택하세요." msgid "The input value size must be 3." msgstr "입력 값 크기는 3이어야 합니다." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"이 기계 유형은 노즐당 16개의 기록 결과만 보유할 수 있습니다. 기존 기록 결과" +"를 삭제한 후 교정을 시작할 수 있습니다. 또는 교정을 계속할 수 있지만 새로운 " +"교정 기록 결과를 생성할 수는 없습니다.\n" +"그래도 교정을 계속하시겠습니까?" + msgid "Connecting to printer..." msgstr "프린터에 연결하는 중..." @@ -13180,6 +14106,23 @@ msgstr "실패한 테스트 결과가 삭제되었습니다." msgid "Flow Dynamics Calibration result has been saved to the printer" 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 override the historical result?" +msgstr "" +"동일한 이름을 가진 기록 교정 결과가 이미 있습니다: %s. 동일한 이름의 결과 중 " +"하나만 저장됩니다. 과거 결과를 재정의하시겠습니까?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"이 기계 유형은 노즐당 %d개의 기록 결과만 보유할 수 있습니다. 이 결과는 저장되" +"지 않습니다." + msgid "Internal Error" msgstr "내부 오류" @@ -13226,31 +14169,15 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"우리 위키에서 동적 유량 교정에 대한 자세한 내용을 찾아보세요.\n" -"\n" -"일반적으로 교정은 필요하지 않습니다. 출력 시작 메뉴에서 \"동적 유량 교정\" 옵" -"션을 선택한 상태에서 단일 색상/재료 출력을 시작하면 프린터는 이전 방식을 따르" -"며 출력 전에 필라멘트를 교정합니다. 다중 색상/재료 출력을 시작하면 프린터는 " -"모든 필라멘트 전환 중에 필라멘트에 대한 기본 보상 매개변수를 사용하므로 대부" -"분의 경우 좋은 결과를 얻을 수 있습니다.\n" -"\n" -"교정 결과를 신뢰할 수 없게 만드는 몇 가지 경우가 있습니다. 텍스처 플레이트를 " -"사용하여 보정을 수행합니다. 빌드 플레이트의 접착력이 좋지 않습니다. (빌드 플" -"레이트를 세척하거나 풀을 바르십시오!) ...위키에서 자세한 내용을 확인할 수 있" -"습니다.\n" -"\n" -"테스트에서 교정 결과에는 약 10%의 오차가 있으며, 이로 인해 각 교정에서 결과" -"가 정확히 동일하지 않을 수 있습니다. 새로운 업데이트로 개선하기 위해 근본 원" -"인을 계속 조사하고 있습니다." msgid "When to use Flow Rate Calibration" msgstr "유량 교정을 사용해야 하는 경우" @@ -13364,26 +14291,23 @@ msgstr "*이름에 브랜드, 재질, 유형, 습도까지 추가하는 것이 msgid "Failed" msgstr "실패" +msgid "Please enter the name you want to save to printer." +msgstr "프린터에 저장할 이름을 입력하세요." + +msgid "The name cannot exceed 40 characters." +msgstr "이름은 40자를 초과할 수 없습니다." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override 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 "Please find the cornor with perfect degree of extrusion" -msgstr "완벽한 압출각도를 가진 모서리를 찾아주세요" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Please find the corner with the perfect degree of extrusion" msgid "Input Value" msgstr "입력값" @@ -13459,12 +14383,6 @@ msgstr "" msgid "Printing Parameters" msgstr "출력 매개변수" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "플레이트 타입" @@ -13511,12 +14429,6 @@ msgstr "K 값으로" msgid "Step value" msgstr "단계 값" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "노즐 직경이 프린터 설정에서 동기화되었습니다" @@ -13529,6 +14441,9 @@ msgstr "체적 속도로" msgid "Flow Dynamics Calibration Result" msgstr "동적 유량 교정 결과" +msgid "New" +msgstr "새로운" + msgid "No History Result" msgstr "기록 결과 없음" @@ -13541,9 +14456,22 @@ msgstr "과거 동적 유량 교정 기록 새로 고침" msgid "Action" msgstr "실행" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "이 기계 유형은 노즐당 %d개의 기록 결과만 보유할 수 있습니다." + msgid "Edit Flow Dynamics Calibration" msgstr "동적 유량 교정 편집" +msgid "New Flow Dynamic Calibration" +msgstr "새로운 흐름 동적 교정" + +msgid "Ok" +msgstr "확인" + +msgid "The filament must be selected." +msgstr "필라멘트를 선택해야 합니다." + msgid "Network lookup" msgstr "네트워크 조회" @@ -13632,6 +14560,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -13728,6 +14659,9 @@ msgstr "필요한 경우 슬래시( / )를 디렉토리 구분 기호로 사용 msgid "Upload to storage" msgstr "저장소에 업로드" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "업로드 파일 이름이 \"%s\"로 끝나지 않습니다. 계속하시겠습니까?" @@ -13824,7 +14758,7 @@ msgid "Export Log" msgstr "로그 내보내기" msgid "OrcaSlicer Version:" -msgstr "" +msgstr "OrcaSlicer 버전:" msgid "System Version:" msgstr "시스템 버전:" @@ -13833,10 +14767,10 @@ msgid "DNS Server:" msgstr "DNS 서버:" msgid "Test OrcaSlicer(GitHub)" -msgstr "" +msgstr "OrcaSlicer 테스트(깃허브)" msgid "Test OrcaSlicer(GitHub):" -msgstr "" +msgstr "OrcaSlicer 테스트(깃허브):" msgid "Test Bing.com" msgstr "테스트 Bing.com" @@ -13933,6 +14867,16 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "아직 프린터나 사전 설정을 선택하지 않았습니다. 하나 이상 선택하세요." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"생성한 필라멘트 이름 %s이(가) 이미 존재합니다.\n" +"계속 생성하면 생성된 사전 설정이 전체 이름과 함께 표시됩니다. 계속하시겠습니" +"까?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "다음과 같이 일부 기존 사전 설정을 생성하지 못했습니다.\n" @@ -13993,12 +14937,6 @@ msgstr "직사각형" msgid "Printable Space" msgstr "출력 가능 공간" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "베드 STL" @@ -14144,19 +15082,30 @@ msgstr "필라멘트 생성됨" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "필요한 경우 필라멘트 설정으로 이동하여 사전 설정을 편집하세요.\n" "노즐 온도, 핫베드 온도 및 최대 체적 속도는 출력 품질에 큰 영향을 미칩니다. 신" "중하게 설정해 주세요." +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Orca에서는 사용자 사전 설정 동기화 기능이 활성화되어 있지 않아 장치 페이지에" +"서 필라멘트 설정이 실패할 수 있음을 감지했습니다.\n" +"동기화 기능을 활성화하려면 \"사용자 사전 설정 동기화\"를 클릭하세요." + msgid "Printer Setting" msgstr "프린터 설정" -msgid "Export Configs" -msgstr "구성 내보내기" - msgid "Printer config bundle(.orca_printer)" msgstr "프린터 구성 번들(.orca_printer)" @@ -14211,7 +15160,7 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" -"사용자 채우기 사전 설정입니다.\n" +"사용자의 필라멘트 사전 설정입니다.\n" "다른 사람과 공유할 수 있습니다." msgid "" @@ -14255,6 +15204,9 @@ msgstr "프린터나 필라멘트를 하나 이상 선택해 주세요." msgid "Please select a type you want to export" msgstr "내보내려는 유형을 선택하세요" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "임시 폴더를 생성하지 못했습니다. 구성 내보내기를 다시 시도해 보세요." + msgid "Edit Filament" msgstr "필라멘트 편집" @@ -14329,6 +15281,21 @@ msgstr "무너짐" msgid "Daily Tips" msgstr "일일 팁" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "기억된 노즐: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"미리 설정된 노즐 직경이 기억된 노즐 직경과 일치하지 않습니다.직경. 최근에 노" +"즐을 바꾸셨나요?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*%s 재료를 %s로 출력하면 노즐이 손상될 수 있습니다" + msgid "Need select printer" msgstr "프린터 선택 필요" @@ -14355,11 +15322,17 @@ msgid "Success!" msgstr "성공!" msgid "Are you sure to log out?" -msgstr "" +msgstr "정말 로그아웃하시겠습니까?" msgid "Refresh Printers" msgstr "프린터 새로 고침" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -14388,7 +15361,7 @@ msgstr "" "시오." msgid "Login/Test" -msgstr "" +msgstr "로그인/테스트" msgid "Connection to printers connected via the print host failed." msgstr "출력 호스트를 통해 연결된 프린터에 연결하지 못했습니다." @@ -14434,7 +15407,8 @@ msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" -"참고: 펌웨어 2.00.02 이상이 있고 업로드 기능이 활성화된 FlashAir필수입니다." +"참고: 펌웨어 2.00.02 또는 이후 버전을 사용중이며 업로드 기능이 활성화된 " +"FlashAir가 필요합니다." msgid "Connection to MKS works correctly." msgstr "MKS에 대한 연결이 올바르게 작동합니다." @@ -14524,46 +15498,283 @@ msgstr "" "메시지 본문: \"%1%\"\n" "오류: \"%2%\"" -msgid "Connected to Obico successfully!" -msgstr "" - -msgid "Could not connect to Obico" -msgstr "" - -msgid "Connected to SimplyPrint successfully!" -msgstr "" - -msgid "Could not connect to SimplyPrint" -msgstr "" - -msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." msgstr "" +"레이어 높이가 작기 때문에 레이어 라인이 거의 무시할 수 있고 출력 품질이 높습" +"니다. 대부분의 일반적인 출력 케이스에 적합합니다." msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 속도와 가속도가 낮고 성긴 채우기 패턴" +"은 자이로이드입니다. 따라서 출력 품질은 훨씬 높아지지만 출력 시간은 훨씬 길어" +"집니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 약간 더 크고 레이어 라인" +"이 거의 무시할 수 있으며 출력 시간이 약간 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 선이 약간 " +"눈에 띄지만 출력 시간은 더 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 라인이 " +"거의 보이지 않고 출력 품질이 높아지지만 출력 시간은 단축됩니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 라인이 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 선이 거의 보이지 않" +"고 출력 품질이 훨씬 높아지지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 라인이 " +"최소화되고 출력 품질이 높아지지만 출력 시간은 단축됩니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 라인이 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 라인이 최소화되고 " +"출력 품질이 훨씬 높아지지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"이는 일반적인 레이어 높이를 가지며 일반적인 레이어 선과 출력 품질을 가져옵니" +"다. 대부분의 일반적인 출력 케이스에 적합합니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하여 더 많은 벽 루프와 더 높은 성긴 채우기 " +"밀도를 갖습니다. 따라서 출력 강도는 높아지지만 필라멘트 소비가 늘어나고 출력 " +"시간이 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 더 " +"뚜렷해지고 출력 품질이 낮아지지만 출력 시간은 약간 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 더 " +"뚜렷해지고 출력 품질이 낮아지지만 출력 시간은 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선이 덜 " +"뚜렷하고 출력 품질이 높아지지만 출력 시간은 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 선이 덜 뚜렷해지고 " +"출력 품질이 훨씬 높아지지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아 레이어 라인이 거" +"의 무시할 수 있고 출력 품질이 높아지지만 출력 시간은 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 라인은 거의 무시할 " +"수 있고 출력 품질은 훨씬 높지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 라인을 " +"거의 무시할 수 있고 출력 시간이 길어집니다." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"레이어 높이가 커서 레이어 선이 뚜렷이 보이고 출력 품질과 출력 시간이 보통입니" +"다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하여 더 많은 벽 루프와 더 높은 성긴 채우기 " +"밀도를 갖습니다. 따라서 출력 강도는 높아지지만 필라멘트 소비가 늘어나고 출력 " +"시간이 길어집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 더 " +"뚜렷해지고 출력 품질이 낮아지지만 일부 출력의 경우 출력 시간이 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 훨" +"씬 더 뚜렷해지고 출력 품질이 훨씬 낮아지지만 일부 출력의 경우 출력 시간이 짧" +"아집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선이 덜 " +"뚜렷해지고 출력 품질이 약간 높아지지만 출력 시간은 길어집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선이 덜 " +"뚜렷하고 출력 품질이 높아지지만 출력 시간이 길어집니다." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"레이어 높이가 매우 커서 레이어 선이 매우 뚜렷하고 출력 품질이 낮으며 일반적" +"인 출력 시간이 소요됩니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 매" +"우 뚜렷해지고 출력 품질이 훨씬 낮아지지만 일부 출력의 경우 출력 시간이 짧아집" +"니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 훨씬 더 크고 레이어 라인" +"이 매우 뚜렷해지고 출력 품질이 훨씬 낮아지지만 일부 출력의 경우 출력 시간이 " +"훨씬 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 약간 더 작아서 약간 적지" +"만 여전히 뚜렷한 레이어 라인이 나타나고 출력 품질이 약간 높아지지만 일부 출력" +"의 경우 출력 시간이 길어집니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선은 적" +"지만 여전히 뚜렷하고 출력 품질은 약간 높지만 일부 출력의 경우 출력 시간이 길" +"어집니다." + +msgid "Connected to Obico successfully!" +msgstr "Obico에 성공적으로 연결되었습니다!" + +msgid "Could not connect to Obico" +msgstr "Obico에 연결할 수 없습니다" + +msgid "Connected to SimplyPrint successfully!" +msgstr "SimplyPrint에 성공적으로 연결되었습니다!" + +msgid "Could not connect to SimplyPrint" +msgstr "SimplyPrint에 연결할 수 없습니다" + +msgid "Internel error" msgstr "" msgid "Unknown error" +msgstr "알 수 없는 오류" + +msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" +"SimplyPrint 계정이 연결되지 않았습니다. 연결 옵션으로 이동하여 설정합니다." msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "플래시포지 연결이 정상적으로 작동합니다." msgid "Could not connect to Flashforge" -msgstr "" +msgstr "플래시포지 연결할 수 없음" msgid "The provided state is not correct." -msgstr "" +msgstr "제공된 상태가 올바르지 않습니다." msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "이 애플리케이션을 승인할 때 필요한 권한을 부여하세요." msgid "Something unexpected happened when trying to log in, please try again." msgstr "" +"로그인을 시도하는 동안 예기치 않은 문제가 발생했습니다. 다시 시도해 주세요." msgid "User cancelled." -msgstr "" +msgstr "사용자가 취소했습니다." #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -14943,6 +16154,317 @@ msgstr "" "ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이" "면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "파일 크기가 업로드 제한인 100MB를 초과했습니다. 패널을 통해 파일을 업로드" +#~ "하세요." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "유효한 값을 입력하세요(K는 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "유효한 값을 입력하세요(K는 0~0.3, N은 0.6~2.0)" + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "연결된 프린터 선택(0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "연결된 프린터 (%d/6)를 선택합니다" + +#~ msgid "PrintingPause" +#~ msgstr "인쇄 일시 중지" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "프린터 로컬 연결에 실패했습니다. 다시 시도하세요." + +#~ msgid "" +#~ "Please find the details of Flow Dynamics Calibration from our wiki.\n" +#~ "\n" +#~ "Usually the calibration is unnecessary. When you start a single color/" +#~ "material print, with the \"flow dynamics calibration\" option checked in " +#~ "the print start menu, the printer will follow the old way, calibrate the " +#~ "filament before the print; When you start a multi color/material print, " +#~ "the printer will use the default compensation parameter for the filament " +#~ "during every filament switch which will have a good result in most " +#~ "cases.\n" +#~ "\n" +#~ "Please note there are a few cases that will make the calibration result " +#~ "not reliable: using a texture plate to do the calibration; the build " +#~ "plate does not have good adhesion (please wash the build plate or apply " +#~ "gluestick!) ...You can find more from our wiki.\n" +#~ "\n" +#~ "The calibration results have about 10 percent jitter in our test, which " +#~ "may cause the result not exactly the same in each calibration. We are " +#~ "still investigating the root cause to do improvements with new updates." +#~ msgstr "" +#~ "우리 위키에서 동적 유량 교정에 대한 자세한 내용을 찾아보세요.\n" +#~ "\n" +#~ "일반적으로 교정은 필요하지 않습니다. 출력 시작 메뉴에서 \"동적 유량 교정" +#~ "\" 옵션을 선택한 상태에서 단일 색상/재료 출력을 시작하면 프린터는 이전 방" +#~ "식을 따르며 출력 전에 필라멘트를 교정합니다. 다중 색상/재료 출력을 시작하" +#~ "면 프린터는 모든 필라멘트 전환 중에 필라멘트에 대한 기본 보상 매개변수를 " +#~ "사용하므로 대부분의 경우 좋은 결과를 얻을 수 있습니다.\n" +#~ "\n" +#~ "교정 결과를 신뢰할 수 없게 만드는 몇 가지 경우가 있습니다. 텍스처 플레이트" +#~ "를 사용하여 보정을 수행합니다. 빌드 플레이트의 접착력이 좋지 않습니다. (빌" +#~ "드 플레이트를 세척하거나 풀을 바르십시오!) ...위키에서 자세한 내용을 확인" +#~ "할 수 있습니다.\n" +#~ "\n" +#~ "테스트에서 교정 결과에는 약 10%의 오차가 있으며, 이로 인해 각 교정에서 결" +#~ "과가 정확히 동일하지 않을 수 있습니다. 새로운 업데이트로 개선하기 위해 근" +#~ "본 원인을 계속 조사하고 있습니다." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "동일한 이름을 가진 결과 중 하나만 저장됩니다. 다른 결과에 덮어쓰겠습니까?" + +#, c-format, boost-format +#~ msgid "" +#~ "There is already a historical calibration result with the same name: %s. " +#~ "Only one of the results with the same name is saved. Are you sure you " +#~ "want to overrides the historical result?" +#~ msgstr "" +#~ "동일한 이름을 가진 교정 기록 결과가 이미 있습니다: %s. 동일한 이름의 결과 " +#~ "중 하나만 저장됩니다. 과거 결과에 덮어쓰겠습니까?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "완벽한 압출각도를 가진 모서리를 찾아주세요" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "벽/채우기 순서. 확인란을 선택 취소하면 벽이 먼저 출력되며 이는 대부분의 경" +#~ "우 가장 잘 작동합니다.\n" +#~ "\n" +#~ "벽에 접착할 이웃 충전재가 있으므로 벽을 먼저 출력하면 과도한 돌출부에 도움" +#~ "이 될 수 있습니다. 그러나 충전재는 출력된 벽이 부착된 부분을 약간 밀어내" +#~ "어 외부 표면 마감이 더 나빠집니다. 또한 충전재가 부품의 외부 표면을 통해 " +#~ "빛날 수도 있습니다." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer는 Prusa Research의 PrusaSlicer에서 나온 뱀부랩의 BambuStudio" +#~ "를 기반으로 합니다. PrusaSlicer는 Alessandro Ranellucci와 RepRap 커뮤니티" +#~ "의 Slic3r에서 제작되었습니다" + +#~ msgid "Export &Configs" +#~ msgstr "설정 내보내기 (&C)" + +#~ msgid "" +#~ "Over 4 systems/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "4개 이상의 시스템/핸디가 원격 액세스를 사용하고 있습니다. 일부 시스템을 닫" +#~ "고 다시 시도할 수 있습니다." + +#~ msgid "Infill direction" +#~ 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코드)이 있는 G코드 파일을 가져오려면 이 기능을 활" +#~ "성화합니다. 피팅 공차는 해상도와 동일합니다" + +#~ 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 "Export Configs" +#~ msgstr "구성 내보내기" + +#~ msgid "Unload Filament" +#~ msgstr "필라멘트 언로드" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "AMS 슬롯을 선택한 후 \"넣기\" 또는 \"빼기\" 버튼을 눌러 필라멘트를 자동으" +#~ "로 넣거나 뺍니다." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "메인보드" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "active" +#~ msgstr "활성화" + +#~ msgid "Jump to layer" +#~ msgstr "다음 레이어로 이동" + +#~ msgid "Cabin humidity" +#~ msgstr "AMS 습도" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "녹색은 AMS 습도가 정상임을 의미하고 주황색은 습도가 높음을 나타내고 빨간색" +#~ "은 습도가 너무 높음을 나타냅니다.(습도계: 낮을수록 좋습니다.)" + +#~ msgid "Desiccant status" +#~ msgstr "건조제 상태" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "건조제 상태가 두 개의 막대보다 낮을 경우 건조제가 비활성 상태일 수 있음을 " +#~ "나타냅니다. 건조제를 교체해 주세요.(막대: 높을수록 좋습니다.)" + +#~ msgid "" +#~ "Note: When the lid is open or the desiccant pack is changed, it can take " +#~ "hours or a night to absorb the moisture. Low temperatures also slow down " +#~ "the process. During this time, the indicator may not represent the " +#~ "chamber accurately." +#~ msgstr "" +#~ "참고: 뚜껑이 열려 있거나 건조제 팩을 교체한 경우 수분을 흡수하는 데 몇 시" +#~ "간 또는 하룻밤이 걸릴 수 있습니다. 온도가 낮으면 흡수 속도도 느려집니다. " +#~ "이 시간 동안 표시기가 챔버를 정확하게 나타내지 못할 수 있습니다." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "참고: 출력 중에 새 필라멘트를 삽입하면 출력이 완료될 때까지 AMS가 자동으" +#~ "로 어떤 정보도 읽지 않습니다." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "G코드를 %1%로 내보내기 성공" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "초기화 실패 (장치 없음)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "초기화 실패 (카메라 없음)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "프린터가 다운로드 중입니다. 다운로드가 완료될 때까지 기다리십시오." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "초기화 실패(현재 프린터 버전에서는 지원되지 않음)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "초기화 실패 (LAN 전용 모드에서는 액세스할 수 없음)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "초기화 실패 (프린터의 LAN IP 누락)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "[%d] 중지됨!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "[%d] 로드 실패!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "파일 없음 [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "로드 실패 [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "프린터에서 모델 정보를 가져오지 못했습니다." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "모델 정보를 해석하지 못했습니다." + +#~ msgid "Connection lost. Please retry." +#~ msgstr "연결이 끊어졌습니다. 다시 시도해 주세요." + +#~ msgid "File not exists." +#~ msgstr "파일이 존재하지 않습니다." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "모델 메쉬에 부울 연산을 수행할 수 없습니다. 오직 양수 부품만 내보내집니다." + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "사전 설정 \"%1%\"의 일부 설정을 변경했습니다.\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 " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "필요한 경우 필라멘트 설정으로 이동하여 사전 설정을 편집하세요.\n" +#~ "노즐 온도, 핫베드 온도 및 최대 체적 속도는 출력 품질에 큰 영향을 미칩니" +#~ "다. 신중하게 설정해 주세요." + #~ msgid "Studio Version:" #~ msgstr "스튜디오 버전:" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index 381e1b1f66..833b06ff7c 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -53,6 +53,11 @@ src/slic3r/GUI/BBLTopbar.cpp src/slic3r/GUI/DownloadProgressDialog.cpp src/slic3r/GUI/RecenterDialog.cpp src/slic3r/GUI/BackgroundSlicingProcess.cpp +src/slic3r/GUI/MultiMachinePage.cpp +src/slic3r/GUI/MultiMachineManagerPage.cpp +src/slic3r/GUI/MultiMachine.cpp +src/slic3r/GUI/MultiTaskManagerPage.cpp +src/slic3r/GUI/SendMultiMachinePage.cpp src/slic3r/GUI/BedShapeDialog.cpp src/slic3r/GUI/BedShapeDialog.hpp src/slic3r/GUI/ConfigManipulation.cpp @@ -105,8 +110,10 @@ src/slic3r/GUI/UnsavedChangesDialog.cpp src/slic3r/GUI/Auxiliary.cpp src/slic3r/GUI/UpdateDialogs.cpp src/slic3r/GUI/UnsavedChangesDialog.cpp +src/slic3r/GUI/ObjColorDialog.cpp src/slic3r/GUI/WipeTowerDialog.cpp src/slic3r/GUI/wxExtensions.cpp +src/slic3r/GUI/wxMediaCtrl2.cpp src/slic3r/GUI/WebUserLoginDialog.cpp src/slic3r/GUI/WebGuideDialog.cpp src/slic3r/GUI/KBShortcutsDialog.hpp @@ -159,6 +166,7 @@ src/slic3r/Utils/FlashAir.cpp src/slic3r/Utils/MKS.cpp src/slic3r/Utils/OctoPrint.cpp src/slic3r/Utils/Repetier.cpp +src/slic3r/Utils/ProfileDescription.hpp src/slic3r/Utils/Obico.cpp src/slic3r/Utils/SimplyPrint.cpp src/slic3r/Utils/Flashforge.cpp diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index cdb1b24ba7..0f214310bc 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -1,14 +1,15 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "Language: nl\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: Localazy (https://localazy.com)\n" msgid "Supports Painting" msgstr "Ondersteuning (Support) tekenen" @@ -99,7 +100,7 @@ msgid "Support Generated" msgstr "Ondersteuning gegenereerd" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "Plaats op vlak" msgid "Lay on face" msgstr "Op deze zijde neerleggen." @@ -150,7 +151,7 @@ msgid "Height range" msgstr "Hoogtebereik" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Shift + Enter" msgid "Toggle Wireframe" msgstr "Schakel draadmodel in of uit" @@ -165,10 +166,10 @@ msgid "Height Range" msgstr "Hoogtebereik" msgid "Vertical" -msgstr "" +msgstr "Verticaal" msgid "Horizontal" -msgstr "" +msgstr "Horizontaal" msgid "Remove painted color" msgstr "Geschilderd kleur verwijderen" @@ -181,13 +182,13 @@ msgid "Move" msgstr "Verplaats" msgid "Gizmo-Move" -msgstr "" +msgstr "Verplaatsen" msgid "Rotate" msgstr "Draai" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Roteren" msgid "Optimize orientation" msgstr "Oriëntatie optimaliseren" @@ -199,7 +200,7 @@ msgid "Scale" msgstr "Schalen" msgid "Gizmo-Scale" -msgstr "" +msgstr "Verschalen" msgid "Error: Please close all toolbar menus first" msgstr "Fout: sluit eerst alle openstaande hulpmiddelmenu's" @@ -252,6 +253,9 @@ msgstr "Rotatie herstellen" msgid "World coordinates" msgstr "Wereldcoördinaten" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -266,16 +270,16 @@ msgid "uniform scale" msgstr "Uniform schalen" msgid "Planar" -msgstr "" +msgstr "Planair" msgid "Dovetail" -msgstr "" +msgstr "Zwaluwstaart" msgid "Auto" msgstr "Automatisch" msgid "Manual" -msgstr "" +msgstr "Handmatig" msgid "Plug" msgstr "Plug" @@ -284,7 +288,7 @@ msgid "Dowel" msgstr "Deuvel" msgid "Snap" -msgstr "" +msgstr "Snap" msgid "Prism" msgstr "" @@ -299,7 +303,7 @@ msgid "Hexagon" msgstr "Zeskant" msgid "Keep orientation" -msgstr "" +msgstr "Oriëntatie behouden" msgid "Place on cut" msgstr "Op kniplijn plaatsen" @@ -323,19 +327,19 @@ msgstr "Vorm" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Diepte" msgid "Groove" -msgstr "" +msgstr "Groef" msgid "Width" msgstr "Breedte" msgid "Flap Angle" -msgstr "" +msgstr "Klephoek" msgid "Groove Angle" -msgstr "" +msgstr "Groefhoek" msgid "Part" msgstr "Onderdeel" @@ -358,7 +362,7 @@ msgid "Move cut plane" msgstr "" msgid "Mode" -msgstr "" +msgstr "Modus" msgid "Change cut mode" msgstr "" @@ -406,7 +410,7 @@ msgid "Remove connectors" msgstr "Verbindingen verwijderen" msgid "Bulge" -msgstr "" +msgstr "Uitstulping" msgid "Bulge proportion related to radius" msgstr "" @@ -512,10 +516,12 @@ msgid "Connector" msgstr "Verbinding" msgid "Cut by Plane" -msgstr "" +msgstr "Snij met behulp van vlak" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" +"Niet-gevormde randen worden veroorzaakt door snijgereedschap: wil je dit nu " +"herstellen?" msgid "Repairing model object" msgstr "Model object repareren" @@ -615,13 +621,13 @@ msgid "Remove selection" msgstr "Selectie verwijderen" msgid "Entering Seam painting" -msgstr "" +msgstr "Naad schilderen invoeren" msgid "Leaving Seam painting" -msgstr "" +msgstr "Naad schilderen verlaten" msgid "Paint-on seam editing" -msgstr "" +msgstr "Paint-on naadbewerking" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -669,7 +675,7 @@ msgid "Text move" msgstr "" msgid "Set Mirror" -msgstr "" +msgstr "Stel spiegeling in" msgid "Embossed text" msgstr "" @@ -705,7 +711,7 @@ msgid "First font" msgstr "" msgid "Default font" -msgstr "" +msgstr "Standaard lettertype" msgid "Advanced" msgstr "Geavanceerd" @@ -757,10 +763,11 @@ msgstr "" msgid "You can't change a type of the last solid part of the object." msgstr "" +"U kunt het type van het laatste onderdeel van een object niet wijzigen." msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "Knippen" msgid "Click to change part type into negative volume." msgstr "" @@ -902,19 +909,19 @@ msgstr "" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "Links" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "Centreren" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "Rechts" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "Bovenste" msgctxt "Alignment" msgid "Middle" @@ -922,7 +929,7 @@ msgstr "" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "Onderste" msgid "Revert alignment." msgstr "" @@ -1017,7 +1024,7 @@ msgstr "" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right msgid "Alignment" -msgstr "" +msgstr "Uitlijning" #. TRN - Input label. Be short as possible msgid "Char gap" @@ -1073,7 +1080,7 @@ msgid "SVG actions" msgstr "" msgid "SVG" -msgstr "" +msgstr "SVG" #, boost-format msgid "Opacity (%1%)" @@ -1160,7 +1167,7 @@ msgid "Bake into model as uneditable part" msgstr "" msgid "Save as" -msgstr "" +msgstr "Opslaan Als" msgid "Save SVG file" msgstr "" @@ -1186,7 +1193,7 @@ msgid "Lock/unlock the aspect ratio of the SVG." msgstr "" msgid "Reset scale" -msgstr "" +msgstr "Reset verschaling" msgid "Distance of the center of the SVG to the model surface." msgstr "" @@ -1195,16 +1202,16 @@ msgid "Reset distance" msgstr "" msgid "Reset rotation" -msgstr "" +msgstr "Reset rotatie" msgid "Lock/unlock rotation angle when dragging above the surface." msgstr "" msgid "Mirror vertically" -msgstr "" +msgstr "Verticaal spiegelen" msgid "Mirror horizontally" -msgstr "" +msgstr "Spiegel horizontaal" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" @@ -1234,43 +1241,43 @@ msgid "SVG file does NOT contain a single path to be embossed (%1%)." msgstr "" msgid "Vertex" -msgstr "" +msgstr "Vertex" msgid "Edge" -msgstr "" +msgstr "Rand" msgid "Plane" -msgstr "" +msgstr "Vlak" msgid "Point on edge" -msgstr "" +msgstr "Punt op rand" msgid "Point on circle" -msgstr "" +msgstr "Punt op cirkel" msgid "Point on plane" -msgstr "" +msgstr "Punt op vlak" msgid "Center of edge" -msgstr "" +msgstr "Midden van rand" msgid "Center of circle" -msgstr "" +msgstr "Middelpunt van cirkel" msgid "ShiftLeft mouse button" msgstr "" msgid "Select feature" -msgstr "" +msgstr "Functie selecteren" msgid "Select point" -msgstr "" +msgstr "Kies punt" msgid "Delete" msgstr "Verwijderen" msgid "Restart selection" -msgstr "" +msgstr "Selectie herstarten" msgid "Esc" msgstr "Esc" @@ -1279,14 +1286,14 @@ msgid "Unselect" msgstr "" msgid "Measure" -msgstr "" +msgstr "Maatregel" msgid "Edit to scale" -msgstr "" +msgstr "Op schaal bewerken" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "Schalen" msgid "None" msgstr "Geen" @@ -1298,22 +1305,22 @@ msgid "Length" msgstr "Lengte" msgid "Selection" -msgstr "" +msgstr "Selectie" msgid "Copy to clipboard" msgstr "Kopieer naar klembord" msgid "Perpendicular distance" -msgstr "" +msgstr "Perpendicular distance" msgid "Distance" -msgstr "" +msgstr "Distance" msgid "Direct distance" -msgstr "" +msgstr "Direct distance" msgid "Distance XYZ" -msgstr "" +msgstr "Distance XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1355,9 +1362,6 @@ msgstr "" "Configuratiebestand “%1%” werd geladen, maar sommige waarden werden niet " "herkend." -msgid "V" -msgstr "V" - 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." @@ -1463,6 +1467,9 @@ msgstr "Kies één of meer bestanden (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Kies één of meer bestanden (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "" + msgid "Choose one file (gcode/3mf):" msgstr "Kies één bestand (gcode/3mf):" @@ -1499,9 +1506,12 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"Het aantal gebruikersvoorinstellingen dat in de cloud is opgeslagen, heeft " +"de bovengrens overschreden. Nieuw gemaakte gebruikersvoorinstellingen kunnen " +"alleen lokaal worden gebruikt." msgid "Sync user presets" -msgstr "" +msgstr "Synchroniseer gebruikersvoorinstellingen" msgid "Loading user preset" msgstr "Voorinstelling voor gebruiker laden" @@ -1530,6 +1540,11 @@ msgstr "Lopende uploads" msgid "Select a G-code file:" msgstr "Selecteer een G-code bestand:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" + msgid "Import File" msgstr "Importeer bestand" @@ -1664,10 +1679,10 @@ msgid "Cone" msgstr "Kegel" msgid "Disc" -msgstr "" +msgstr "Schijf" msgid "Torus" -msgstr "" +msgstr "Torus" msgid "Orca Cube" msgstr "Orca-kubus" @@ -1726,10 +1741,10 @@ msgid "Fix model" msgstr "Repareer model" msgid "Export as one STL" -msgstr "" +msgstr "Exporteren als één STL" msgid "Export as STLs" -msgstr "" +msgstr "Exporteren als STL's" msgid "Reload from disk" msgstr "Opnieuw laden vanaf schijf" @@ -1756,8 +1771,8 @@ msgstr "Standaard" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "Actief" +msgid "current" +msgstr "Huidige" msgid "Scale to build volume" msgstr "Schalen naar bruikbaar volume" @@ -1851,6 +1866,9 @@ msgstr "Primitief toevoegen" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "Modellen toevoegen" + msgid "Show Labels" msgstr "Toon labels" @@ -1903,6 +1921,12 @@ msgstr "Rangschikken" msgid "arrange current plate" msgstr "Huidig printbed rangschikken" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Automatisch roteren" @@ -1936,9 +1960,6 @@ msgstr "Filament veranderen" msgid "Set Filament for selected items" msgstr "Filament instellen voor de geselecteerde items" -msgid "current" -msgstr "Huidige" - msgid "Unlock" msgstr "Ontgrendelen" @@ -2262,7 +2283,7 @@ msgid "Pause" msgstr "Pauze" msgid "Template" -msgstr "" +msgstr "Sjabloon" msgid "Custom" msgstr "Aangepast" @@ -2285,9 +2306,6 @@ msgstr "Voer de aangepaste G-code in die op de huidige laag wordt gebruikt:" msgid "Jump to Layer" msgstr "Spring naar laag" -msgid "Jump to layer" -msgstr "Jump to layer" - msgid "Please enter the layer number" msgstr "Voer het laagnummer in." @@ -2316,7 +2334,7 @@ msgid "Change filament at the beginning of this layer." msgstr "Change filament at the beginning of this layer." msgid "Delete Pause" -msgstr "" +msgstr "Pauze verwijderen" msgid "Delete Custom Template" msgstr "Delete Custom Template" @@ -2334,7 +2352,7 @@ msgid "No printer" msgstr "Geen printer" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "Verbinding maken met de server is mislukt" @@ -2357,8 +2375,8 @@ 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 "Please check the network connection of the printer and Orca." +msgstr "Please check the network connection of the printer and Orca." msgid "Connecting..." msgstr "Verbinden..." @@ -2367,7 +2385,7 @@ msgid "?" msgstr " ?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "Leeg" @@ -2376,15 +2394,15 @@ msgid "AMS" msgstr "AMS" msgid "Auto Refill" -msgstr "" +msgstr "Auto Refill" msgid "AMS not connected" msgstr "AMS niet aangesloten" -msgid "Load Filament" -msgstr "Filament laden" +msgid "Load" +msgstr "Load" -msgid "Unload Filament" +msgid "Unload" msgstr "Lossen" msgid "Ext Spool" @@ -2402,7 +2420,7 @@ msgstr "Opnieuw proberen" msgid "Calibrating AMS..." msgstr "AMS kalibreren..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Er is een probleem opgetreden tijdens de kalibratie. Klik om de oplossing te " "bekijken." @@ -2414,7 +2432,7 @@ msgid "Cancel calibration" msgstr "Kalibreren afbreken" msgid "Idling..." -msgstr "" +msgstr "Inactief..." msgid "Heat the nozzle" msgstr "Verwarm de nozzle" @@ -2432,23 +2450,23 @@ msgid "Purge old filament" msgstr "Oud filament verwijderen" msgid "Feed Filament" -msgstr "" +msgstr "Voer filament in" msgid "Confirm extruded" -msgstr "" +msgstr "Bevestig geëxtrudeerd" msgid "Check filament location" -msgstr "" +msgstr "Controleer de positie van het filament" msgid "Grab new filament" msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Kies een AMS sleuf en druk op de \"Laden\" of \"Verwijderen\" knop om het " -"filament automatisch te laden of te verwijderen." +"Kies een AMS-sleuf en druk op de knop \"Laden\" of \"Lossen\" om automatisch " +"filament te laden of te ontladen." msgid "Edit" msgstr "Bewerken" @@ -2528,7 +2546,7 @@ msgid "Orienting canceled." msgstr "" msgid "Filling" -msgstr "" +msgstr "Vullen" msgid "Bed filling canceled." msgstr "Bed filling canceled." @@ -2537,13 +2555,13 @@ msgid "Bed filling done." msgstr "Bed filling done." msgid "Searching for optimal orientation" -msgstr "" +msgstr "Zoeken naar optimale oriëntatie" msgid "Orientation search canceled." -msgstr "" +msgstr "Oriëntatie zoeken geannuleerd." msgid "Orientation found." -msgstr "" +msgstr "Oriëntatie gevonden." msgid "Logging in" msgstr "Bezig met inloggen" @@ -2612,7 +2630,7 @@ msgid "Sending print job through cloud service" msgstr "Printopdracht verzenden via cloud service" msgid "Print task sending times out." -msgstr "" +msgstr "Het verzenden van de printtaak loopt uit." msgid "Service Unavailable" msgstr "Service niet beschikbaar" @@ -2630,6 +2648,7 @@ 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 "" +"Succesvol verzonden. Springt automatisch naar de volgende pagina in %ss" msgid "An SD card needs to be inserted before printing via LAN." msgstr "" @@ -2716,10 +2735,7 @@ msgstr "Orca Slicer 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2798,10 +2814,10 @@ msgstr "" "ondersteund." msgid "Factors of Flow Dynamics Calibration" -msgstr "" +msgstr "Factoren van Flow Dynamics Calibration" msgid "PA Profile" -msgstr "" +msgstr "PA-profiel" msgid "Factor K" msgstr "Factor K" @@ -2818,10 +2834,12 @@ 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.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2929,37 +2947,19 @@ msgstr "AMS uitschakelen" msgid "Print with the filament mounted on the back of chassis" msgstr "Print met filament op een externe spoel" -msgid "Cabin humidity" -msgstr "Vochtigheid in de cabine" +msgid "Current Cabin humidity" +msgstr "Current Cabin humidity" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Groen betekent dat de AMS-luchtvochtigheid normaal is, oranje betekent dat " -"de luchtvochtigheid hoog is en rood betekent dat de luchtvochtigheid te hoog " -"is. (Hygrometer: hoe lager, hoe beter.)" - -msgid "Desiccant status" -msgstr "Status van het droogmiddel" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Een droogmiddelstatus lager dan twee streepjes geeft aan dat het droogmiddel " -"mogelijk inactief is. Vervang het droogmiddel. (Hoe hoger, hoe beter.)" - -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 "" -"Opmerking: Als het deksel open is of de verpakking van het droogmiddel is " -"vervangen, kan het enkele uren of een nacht duren voordat het vocht is " -"opgenomen. Lage temperaturen vertragen ook het proces. Gedurende deze tijd " -"geeft de indicator de vochtigheid mogelijk niet nauwkeurig weer." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases: when the lid is open or the " +"desiccant pack is changed. It takes a few hours to absorb the moisture, and " +"low temperatures also slow down the process." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2992,16 +2992,19 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" +"Als het huidige materiaal op is, gaat de printer verder met afdrukken in de " +"volgende volgorde." msgid "Group" msgstr "Group" msgid "The printer does not currently support auto refill." -msgstr "" +msgstr "De printer ondersteunt automatisch bijvullen momenteel niet." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" +"AMS filament backup is not enabled; please enable it in the AMS settings." msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -3009,6 +3012,16 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"If there are two identical filaments in an AMS, AMS filament backup will be " +"enabled. \n" +"(This currently supports automatic supply of consumables with the same " +"brand, material type, and color)" + +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" msgid "AMS Settings" msgstr "AMS Instellingen" @@ -3024,11 +3037,11 @@ msgstr "" "nieuw Bambu Lab filament. Dit duurt ongeveer 20 seconden." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Opmerking: als er tijdens het afdrukken nieuw filament wordt geplaatst, zal " -"de AMS niet automatisch informatie lezen totdat het afdrukken is voltooid." +"Opmerking: als er tijdens het printen een nieuw filament wordt geplaatst, " +"zal het AMS niet automatisch informatie lezen totdat het printen is voltooid." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3080,6 +3093,16 @@ msgstr "" "AMS gaat automatisch verder met een andere spoel met dezelfde filament " "eigenschappen wanneer het huidige filament op is." +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "Bestand" @@ -3153,6 +3176,63 @@ msgstr "Zwevende gereserveerde operand" msgid "Stack overflow" msgstr "Stack overflow" +msgid "Running post-processing scripts" +msgstr "Het uitvoeren van post-processing scripts" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "Onbekende fout opgetreden tijdens exporteren van de G-code." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Fout bij het exporteren naar output-G-code. Is de SD-kaart geblokkeerd tegen " +"schrijven?\n" +"Foutbericht: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Fout bij het exporteren naar output-G-code. Het probleem ligt mogelijk bij " +"het doelapparaat. Probeer het opnieuw te exporteren of gebruik een ander " +"apparat. De beschadigde G-code is opgeslagen als %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Fout bij het exporteren naar output-G-code. Hernoemen van het bestand " +"mislukt. Huidige locatie is %1%.tmp. Probeer opnieuw te exporteren." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Fout bij het exporteren naar output-G-code. Exporteren gelukt, maar kan het " +"bestand %1% niet openen om te controleren. De output is %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Fout bij het exporteren naar output-G-code. Exporteren gelukt, maar kan het " +"bestand niet openen om te controleren. De output is %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr ".gcode-bestand geëxporteerd naar %1%" + msgid "Unknown error when export G-code." msgstr "Onbekende fout tijdens het exporteren van de G-code" @@ -3166,13 +3246,6 @@ msgstr "" "Foutmelding: %1%.\n" "Bronbestand %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Success! G-code geexporteerd naar %1%" - -msgid "Running post-processing scripts" -msgstr "Het uitvoeren van post-processing scripts" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" "Het kopiëren van de tijdelijke G-code naar de G-uitvoercode is mislukt." @@ -3181,6 +3254,225 @@ msgstr "" msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "Upload inplannen in `%1%`. Zie Venster -> Print Host Upload Queue" +msgid "Device" +msgstr "Apparaat" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "Weergave" + +msgid "N/A" +msgstr "N/B" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "Device Name" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Device Status" +msgstr "Device Status" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Toevoegen" + +msgid "Idle" +msgstr "Inactief" + +msgid "Printing" +msgstr "Printen" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Incompatible" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Voorbereiden" + +msgid "Slicing" +msgstr "Slicen" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "Verzenden" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Hervatten" + +msgid "Stop" +msgstr "Stop" + +msgid "Task Status" +msgstr "Task Status" + +msgid "Sent Time" +msgstr "Sent Time" + +msgid "There are no tasks to be sent!" +msgstr "There are no tasks to be sent!" + +msgid "No historical tasks!" +msgstr "No historical tasks!" + +msgid "Loading..." +msgstr "Laden..." + +msgid "No AMS" +msgstr "No AMS" + +msgid "Send to Multi-device" +msgstr "Send to Multi-device" + +msgid "Preparing print job" +msgstr "Print opdracht voorbereiden" + +msgid "Abnormal print file data. Please slice again" +msgstr "Abnormale printbestand. Slice opnieuw" + +msgid "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "Use External Spool" + +msgid "Use AMS" +msgstr "Use AMS" + +msgid "Select Printers" +msgstr "Select Printers" + +msgid "Ams Status" +msgstr "AMS Status" + +msgid "Printing Options" +msgstr "Printing Options" + +msgid "Bed Leveling" +msgstr "Bed leveling" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "Send Options" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "Versturen" + +msgid "Name is invalid;" +msgstr "Naam is ongeldig;" + +msgid "illegal characters:" +msgstr "Niet toegestande karakters:" + +msgid "illegal suffix:" +msgstr "Ongeldig achtervoegsel:" + +msgid "The name is not allowed to be empty." +msgstr "Het is niet toegestaand om de naam leeg te laten." + +msgid "The name is not allowed to start with space character." +msgstr "Het is niet toegestaan om een naam met een spatie te laten beginnen." + +msgid "The name is not allowed to end with space character." +msgstr "Het is niet toegestaan om een naam met een spatie te laten eindigen." + +msgid "The name length exceeds the limit." +msgstr "The name length exceeds the limit." + msgid "Origin" msgstr "Begin" @@ -3254,6 +3546,23 @@ msgstr "Kies een STL bestand waaruit het printbed model geladen kan worden:" msgid "Bed Shape" msgstr "Printbed vorm" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"De aanbevolen minimumtemperatuur is lager dan 190 graden of de aanbevolen " +"maximumtemperatuur is hoger dan 300 graden.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" + +msgid "Please check.\n" +msgstr "Controleer het.\n" + 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" @@ -3285,6 +3594,9 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"Current chamber temperature is higher than the material's safe temperature; " +"this may result in material softening and nozzle clogs.The maximum safe " +"temperature for the material is %d" msgid "" "Too small layer height.\n" @@ -3339,25 +3651,6 @@ msgstr "" "\n" "De waarde wordt teruggezet naar 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 "" -"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 " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" -"Wilt u de voorgestelde instellingen automatisch aanpassen? \n" -"Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" -"Nee - Pas de vaas modus deze keer niet toe" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3418,6 +3711,25 @@ msgid "" "Reset to 0." msgstr "" +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 "" +"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 " But machines with I3 structure will not generate timelapse videos." +msgstr " Maar machines met een I3-structuur genereren geen timelapsevideo's." + +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 "" +"Wilt u de voorgestelde instellingen automatisch aanpassen? \n" +"Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" +"Nee - Pas de vaas modus deze keer niet toe" + msgid "Auto bed leveling" msgstr "Automatisch bed levellen" @@ -3482,58 +3794,47 @@ msgid "Paused due to heat bed temperature malfunction" msgstr "Onderbroken vanwege storing in de temperatuur van het printbed" msgid "Filament unloading" -msgstr "" +msgstr "Lossen van filament" msgid "Skip step pause" -msgstr "" +msgstr "Stappauze overslaan" msgid "Filament loading" -msgstr "" +msgstr "Filament bezig met laden" msgid "Motor noise calibration" -msgstr "" +msgstr "Kalibratie van motorgeluid" msgid "Paused due to AMS lost" -msgstr "" +msgstr "Gepauzeerd wegens verlies van AMS" msgid "Paused due to low speed of the heat break fan" msgstr "" +"Gepauzeerd vanwege lage snelheid van de ventilator voor warmteonderbreking" msgid "Paused due to chamber temperature control error" -msgstr "" +msgstr "Gepauzeerd vanwege een fout in de temperatuurregeling van de kamer" msgid "Cooling chamber" -msgstr "" +msgstr "Koelkamer" msgid "Paused by the Gcode inserted by user" -msgstr "" +msgstr "Gepauzeerd door de Gcode ingevoegd door gebruiker" msgid "Motor noise showoff" -msgstr "" +msgstr "Motorgeluid showoff" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Nozzle filament bedekt gedetecteerde pauze" msgid "Cutter error pause" -msgstr "" +msgstr "Pauze bij snijfout" msgid "First layer error pause" -msgstr "" +msgstr "Eerste laag foutpauze" msgid "Nozzle clog pause" -msgstr "" - -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Moederbord" - -msgid "TH" -msgstr "th" - -msgid "XCam" -msgstr "XCam" +msgstr "Pauze bij verstopping van het mondstuk" msgid "Unknown" msgstr "Onbekend" @@ -3564,18 +3865,27 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃. In order to avoid extruder clogging, low temperature filament (PLA/PETG/" +"TPU) is not allowed to be loaded." msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"Low temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order " +"to avoid extruder clogging, it is not allowed to set the chamber temperature " +"above 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated, and the target chamber temperature will " +"automatically be set to 0℃." msgid "Failed to start printing job" msgstr "Het starten van de printopdracht is mislukt" @@ -3583,34 +3893,39 @@ msgstr "Het starten van de printopdracht is mislukt" msgid "" "This calibration does not support the currently selected nozzle diameter" msgstr "" +"Deze kalibratie ondersteunt de momenteel geselecteerde mondstukdiameter niet" msgid "Current flowrate cali param is invalid" -msgstr "" +msgstr "Huidige stroomsnelheid cali param is ongeldig" msgid "Selected diameter and machine diameter do not match" -msgstr "" +msgstr "Geselecteerde diameter en machinediameter komen niet overeen" msgid "Failed to generate cali gcode" -msgstr "" +msgstr "Cali gcode niet gegenereerd" msgid "Calibration error" -msgstr "" +msgstr "Kalibratiefout" msgid "TPU is not supported by AMS." -msgstr "" +msgstr "TPU wordt niet ondersteund door AMS." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -msgstr "" +msgstr "Bambu PET-CF/PA6-CF wordt niet ondersteund door AMS." msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" +"Vochtige PVA zal flexibel worden en vast komen te zitten in de AMS, zorg er " +"dus voor dat je het droogt voor gebruik." 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-filamenten zijn hard en bros. Ze kunnen gemakkelijk breken of vast " +"komen te zitten in AMS." msgid "default" msgstr "Standaard" @@ -3653,7 +3968,7 @@ msgid "Dimensions" msgstr "" msgid "Temperatures" -msgstr "" +msgstr "Temperaturen" msgid "Timestamps" msgstr "" @@ -3680,9 +3995,6 @@ msgstr "Printer instellingen" msgid "parameter name" msgstr "parameternaam" -msgid "N/A" -msgstr "N/B" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kan geen percentage zijn" @@ -3694,6 +4006,10 @@ msgstr "De %s waarde is buiten het bereik, doorgaan?" msgid "Parameter validation" msgstr "Parametervalidatie" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Value %s is out of range. The valid range is from %d to %d." + msgid "Value is out of range." msgstr "Waarde is buiten het bereik." @@ -3707,6 +4023,19 @@ msgstr "" "JA voor %s%%, \n" "NEE voor %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Ongeldige invoer. Verwachte waarde moet in het volgende format: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Ingevoerde waarde valt buiten het bereik" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Onjuist formaat. Het Vector formaat wordt verwacht: \"%1%\"" @@ -3774,12 +4103,12 @@ msgstr "Tonen" msgid "Flushed" msgstr "Flushed" +msgid "Tower" +msgstr "Toren" + msgid "Total" msgstr "Totaal" -msgid "Tower" -msgstr "" - msgid "Total Estimation" msgstr "Schatting totaal" @@ -3787,7 +4116,7 @@ msgid "Total time" msgstr "Totale tijd" msgid "Total cost" -msgstr "" +msgstr "Total cost" msgid "up to" msgstr "tot" @@ -3882,6 +4211,12 @@ msgstr "Geschatte duur" msgid "Normal mode" msgstr "Normale modus" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "Voorbereidingstijd" @@ -3975,6 +4310,9 @@ msgstr "Rangschik opties" msgid "Spacing" msgstr "Uitlijning" +msgid "0 means auto spacing." +msgstr "0 means auto spacing." + msgid "Auto rotate for arrangement" msgstr "Automatisch roteren voor rankschikking" @@ -3985,10 +4323,7 @@ msgid "Avoid extrusion calibration region" msgstr "Vermijd het extrusie kalibratie gebied" msgid "Align to Y axis" -msgstr "" - -msgid "Add" -msgstr "Toevoegen" +msgstr "Uitlijnen op Y-as" msgid "Add plate" msgstr "Printbed toevoegen" @@ -4054,7 +4389,7 @@ msgid "An object is layed over the boundary of plate." msgstr "Er bevind zich een object buiten de grenzen van de printplaat." msgid "A G-code path goes beyond the max print height." -msgstr "" +msgstr "Een G-codepad gaat verder dan de maximale printhoogte." msgid "A G-code path goes beyond the boundary of plate." msgstr "Een G-code pad treedt buiten de grenzen van de printplaat." @@ -4082,10 +4417,10 @@ msgid "Bed leveling" msgstr "Bed leveling" msgid "Vibration compensation" -msgstr "" +msgstr "Trillingscompensatie" msgid "Motor noise cancellation" -msgstr "" +msgstr "Motorruisonderdrukking" msgid "Calibration program" msgstr "Kalibratie programma" @@ -4112,7 +4447,7 @@ msgid "Calibrating" msgstr "Kalibreren" msgid "No step selected" -msgstr "" +msgstr "Geen stap geselecteerd" msgid "Auto-record Monitoring" msgstr "Automatische opnamebewaking" @@ -4120,6 +4455,9 @@ msgstr "Automatische opnamebewaking" msgid "Go Live" msgstr "Live gaan" +msgid "Liveview Retry" +msgstr "Liveweergave opnieuw proberen" + msgid "Resolution" msgstr "Resolutie" @@ -4172,14 +4510,11 @@ msgstr "Applicatie sluiten terwijl sommige voorinstellingen zijn gewijzigd." msgid "Logging" msgstr "Vastleggen" -msgid "Prepare" -msgstr "Voorbereiden" - msgid "Preview" msgstr "Voorvertoning" -msgid "Device" -msgstr "Apparaat" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "Project" @@ -4205,9 +4540,6 @@ msgstr "Alles slicen" msgid "Export G-code file" msgstr "G-codebestand exporteren" -msgid "Send" -msgstr "Versturen" - msgid "Export plate sliced file" msgstr "Exporteer plate sliced bestand" @@ -4328,6 +4660,12 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMF importeren" msgid "Load a model" msgstr "Laad een model" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Importeer configuratie" @@ -4338,10 +4676,10 @@ msgid "Import" msgstr "Importeren" msgid "Export all objects as one STL" -msgstr "" +msgstr "Alle objecten exporteren als één STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "Alle objecten exporteren als STL's" msgid "Export Generic 3MF" msgstr "Generiek 3MF exporteren" @@ -4361,8 +4699,8 @@ msgstr "Exporteer G-code" msgid "Export current plate as G-code" msgstr "Exporteer de huidige plaat als G-code" -msgid "Export &Configs" -msgstr "Export &Configs" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Huidige configuratie exporteren naar bestanden" @@ -4463,56 +4801,53 @@ msgstr "Show object overhang highlight in 3D scene" msgid "Preferences" msgstr "Voorkeuren" -msgid "View" -msgstr "Weergave" - msgid "Help" msgstr "Help" msgid "Temperature Calibration" -msgstr "" +msgstr "Temperatuurkalibratie" msgid "Pass 1" -msgstr "" +msgstr "Fase 1" msgid "Flow rate test - Pass 1" -msgstr "" +msgstr "Stroomsnelheidstest - Fase 1" msgid "Pass 2" -msgstr "" +msgstr "Fase 2" msgid "Flow rate test - Pass 2" -msgstr "" +msgstr "Stroomsnelheidstest - Fase 2" msgid "Flow rate" -msgstr "" +msgstr "Flowrate" msgid "Pressure advance" -msgstr "" +msgstr "Drukverhoging" msgid "Retraction test" -msgstr "" +msgstr "Retractietest" msgid "Orca Tolerance Test" -msgstr "" +msgstr "Orca Tolerance Test" msgid "Max flowrate" -msgstr "" +msgstr "Max flowrate" msgid "VFA" -msgstr "" +msgstr "VFA" msgid "More..." -msgstr "" +msgstr "Meer..." msgid "Tutorial" -msgstr "" +msgstr "Tutorial" msgid "Calibration help" -msgstr "" +msgstr "Hulp bij kalibratie" msgid "More calibrations" -msgstr "" +msgstr "Meer kalibraties" msgid "&Open G-code" msgstr "&Open G-code" @@ -4532,10 +4867,10 @@ msgstr "Exporteer &Toolpaths als OBJ" msgid "Export toolpaths as OBJ" msgstr "Toolpaths exporteren als OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Open & Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Studio openen" msgid "&Quit" @@ -4627,41 +4962,58 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisatie" -msgid "Initialize failed (No Device)!" -msgstr "Het initializeren is mislukt (geen apparaat)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "Het apparaat kan niet meer gesprekken aan. Probeer het later opnieuw." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "De speler werkt niet goed. Installeer de systeemspeler opnieuw." -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialisatie is mislukt (geen camera-apparaat)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"De printer is bezig met downloaden. Wacht tot het downloaden is voltooid." +"De speler is niet geladen; klik op de \"play\" knop om het opnieuw te " +"proberen." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Please confirm if the printer is connected." +msgstr "Controleer of de printer is aangesloten." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" +"De printer is momenteel bezig met downloaden. Probeer het opnieuw nadat het " +"is voltooid." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisatie mislukt (niet toegankelijk in alleen LAN-modus)!" +msgid "Printer camera is malfunctioning." +msgstr "De printercamera werkt niet goed." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialisatie is mislukt (LAN-IP van de printer ontbreekt)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Er heeft zich een probleem voorgedaan. Werk de printerfirmware bij en " +"probeer het opnieuw." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." + +msgid "Please enter the IP of printer to connect." +msgstr "Voer het IP-adres in van de printer waarmee u verbinding wilt maken." msgid "Initializing..." msgstr "Initialiseren..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Initialisatie is mislukt (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Verbinding mislukt. Controleer het netwerk en probeer het opnieuw" -msgid "Network unreachable" -msgstr "Netwerk onbereikbaar" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Controleer het netwerk en probeer het opnieuw. U kunt de printer opnieuw " +"opstarten of bijwerken als het probleem zich blijft voordoen." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Gestopt [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "De printer is afgemeld en kan geen verbinding maken." msgid "Stopped." msgstr "Gestopt." @@ -4692,19 +5044,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Initialisatie virtuele camera mislukt (%s)!" +msgid "Network unreachable" +msgstr "Netwerk onbereikbaar" + msgid "Information" msgstr "Informatie" msgid "Playing..." msgstr "Afspelen..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Laden mislukt [%d]!" - -msgid "Loading..." -msgstr "Laden..." - msgid "Year" msgstr "Jaar" @@ -4723,9 +5071,6 @@ msgstr "Groepeer bestanden per maand, recent eerst." msgid "Show all files, recent first." msgstr "Toon alle bestanden, recentste eerst." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Schakel over naar timelapse bestanden." @@ -4753,6 +5098,12 @@ msgstr "Selecteren" msgid "Batch manage files." msgstr "Batchbeheer van bestanden." +msgid "Refresh" +msgstr "Vernieuwen" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "Geen printers" @@ -4763,13 +5114,34 @@ msgstr "Verbinding mislukt [%d]!" msgid "Loading file list..." msgstr "Bestandslijst laden..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "No files [%d]" +msgid "No files" +msgstr "Geen bestanden" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initialization failed (Device connection not ready)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Load failed [%d]" +msgid "Initialize failed (%s)!" +msgstr "Initialisatie is mislukt (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4791,11 +5163,11 @@ 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 fetch model information from printer." +msgstr "Mislukt bij het ophalen van modelgegevens van de printer." -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "Mislukt bij het parsen van modelinformatie." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4806,6 +5178,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Bestand '%s' is verloren gegaan! Download het opnieuw." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "Download wacht..." @@ -4822,27 +5202,28 @@ msgstr "Download voltooid" msgid "Downloading %d%%..." msgstr "%d%% downloaden..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." -msgstr "" +msgid "File does not exist." +msgstr "Bestand bestaat niet." msgid "File checksum error. Please retry." -msgstr "" +msgstr "Fout in bestandscontrolesom. Probeer opnieuw." msgid "Not supported on the current printer version." -msgstr "" +msgstr "Niet ondersteund op de huidige printerversie." msgid "Storage unavailable, insert SD card." -msgstr "" +msgstr "Opslagruimte niet beschikbaar, Micro SD-kaart plaatsen." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Foutcode: %d" msgid "Speed:" msgstr "Snelheid" @@ -4886,12 +5267,6 @@ msgstr "" msgid "Printing Progress" msgstr "Print voortgang" -msgid "Resume" -msgstr "Hervatten" - -msgid "Stop" -msgstr "Stop" - msgid "0" msgstr "0" @@ -4905,17 +5280,21 @@ msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." msgstr "" +"You have completed printing the mall model, \n" +"but synchronizing rating information has failed." msgid "How do you like this printing file?" -msgstr "" +msgstr "Wat vind je van dit afdrukbestand?" msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" +"(Het model is al beoordeeld. Uw beoordeling overschrijft de vorige " +"beoordeling)." msgid "Rate" -msgstr "" +msgstr "Tarief" msgid "Camera" msgstr "Camera" @@ -4932,6 +5311,9 @@ msgstr "" msgid "Control" msgstr "Besturing" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "Print Opties" @@ -4950,9 +5332,6 @@ msgstr "Kamer" msgid "Bed" msgstr "Printbed" -msgid "Unload" -msgstr "Lossen" - msgid "Debug Info" msgstr "Informatie over Debuggen" @@ -4990,6 +5369,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Verwarm het mondstuk tot boven de 170 graden voordat u filament laadt of " +"lost." msgid "Still unload" msgstr "Nog steeds aan het ontladen" @@ -5026,95 +5407,110 @@ msgid "Can't start this without SD card." msgstr "Kan niet starten zonder microSD-kaart." msgid "Rate the Print Profile" -msgstr "" +msgstr "Beoordeel het printprofiel" msgid "Comment" -msgstr "" +msgstr "Opmerking" msgid "Rate this print" -msgstr "" +msgstr "Beoordeel deze print" msgid "Add Photo" -msgstr "" +msgstr "Foto toevoegen" msgid "Delete Photo" -msgstr "" +msgstr "Foto verwijderen" msgid "Submit" -msgstr "" +msgstr "Indienen" msgid "Please click on the star first." -msgstr "" +msgstr "Klik eerst op de ster." msgid "InFo" -msgstr "" +msgstr "Informatie" msgid "Get oss config failed." -msgstr "" +msgstr "Het ophalen van de oss-configuratie is mislukt." msgid "Upload Pictrues" -msgstr "" +msgstr "Upload Pictures" msgid "Number of images successfully uploaded" -msgstr "" +msgstr "Aantal afbeeldingen succesvol geüpload" msgid " upload failed" -msgstr "" +msgstr "uploaden mislukt" msgid " upload config prase failed\n" -msgstr "" +msgstr " upload config prase mislukt\n" msgid " No corresponding storage bucket\n" -msgstr "" +msgstr " Geen bijbehorende opslag bucket\n" msgid " can not be opened\n" -msgstr "" +msgstr " cannot be opened\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" msgstr "" +"De volgende problemen deden zich voor tijdens het uploaden van afbeeldingen. " +"Wil je ze negeren?\n" +"\n" msgid "info" msgstr "Informatie" msgid "Synchronizing the printing results. Please retry a few seconds later." msgstr "" +"De afdrukresultaten worden gesynchroniseerd. Probeer het een paar seconden " +"later opnieuw." msgid "Upload failed\n" -msgstr "" +msgstr "Uploaden mislukt\n" msgid "obtaining instance_id failed\n" -msgstr "" +msgstr "het verkrijgen van instance_id is mislukt\n" msgid "" "Your comment result cannot be uploaded due to some reasons. As follows:\n" "\n" " error code: " msgstr "" +"Your comment result cannot be uploaded due to the following reasons:\n" +"\n" +" error code: " msgid "error message: " -msgstr "" +msgstr "foutmelding: " msgid "" "\n" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"Would you like to redirect to the webpage to give a rating?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" msgstr "" +"Sommige afbeeldingen zijn niet geüpload. Wilt u doorverwijzen naar de " +"webpagina voor beoordeling?" msgid "You can select up to 16 images." -msgstr "" +msgstr "Je kunt tot 16 afbeeldingen selecteren." msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" +"At least one successful print record of this print profile is required \n" +"to give a positive rating (4 or 5 stars)." msgid "Status" msgstr "Status" @@ -5122,9 +5518,6 @@ msgstr "Status" msgid "Update" msgstr "Updaten" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Niet nogmaals tonen" @@ -5155,6 +5548,35 @@ msgstr "%s informatie" msgid "Skip" msgstr "Overslaan" +msgid "Newer 3mf version" +msgstr "Nieuwere versie 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Beta-versie downloaden" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Huidige versie:" + +msgid "Latest Version: " +msgstr "Laatste versie:" + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "3D-muis losgekoppeld." @@ -5180,10 +5602,10 @@ msgid "Details" msgstr "Détails" msgid "New printer config available." -msgstr "" +msgstr "Nieuwe printerconfiguratie beschikbaar." msgid "Wiki" -msgstr "" +msgstr "Wiki" msgid "Undo integration failed." msgstr "Het ongedaan maken van de integratie is mislukt." @@ -5232,12 +5654,12 @@ msgstr[1] "" msgid "ERROR" msgstr "Fout" -msgid "CANCELED" -msgstr "GEANNULEERD" - msgid "COMPLETED" msgstr "VOLTOOID" +msgid "CANCELED" +msgstr "GEANNULEERD" + msgid "Cancel upload" msgstr "Upload annuleren" @@ -5254,10 +5676,10 @@ msgid "Export successfully." msgstr "Succesvol geëxporteerd" msgid "Model file downloaded." -msgstr "" +msgstr "Modelbestand gedownload." msgid "Serious warning:" -msgstr "" +msgstr "Ernstige waarschuwing:" msgid " (Repair)" msgstr " (Repareren)" @@ -5345,10 +5767,29 @@ msgid "Auto-recovery from step loss" msgstr "Automatisch herstel na stapverlies" msgid "Allow Prompt Sound" -msgstr "" +msgstr "Promptgeluid toestaan" msgid "Filament Tangle Detect" -msgstr "" +msgstr "Filament Tangle Detection" + +msgid "Nozzle Clumping Detection" +msgstr "Nozzle Clumping Detection" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Check if the nozzle is clumping by filament or other foreign objects." + +msgid "Nozzle Type" +msgstr "Nozzle Type" + +msgid "Stainless Steel" +msgstr "Roestvrij staal" + +msgid "Hardened Steel" +msgstr "Gehard staal" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" msgid "Global" msgstr "Globale" @@ -5439,7 +5880,7 @@ msgid "Set filaments to use" msgstr "Stel filamenten in om te gebruiken" msgid "Search plate, object and part." -msgstr "" +msgstr "Zoek plaat, object en onderdeel." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -5509,6 +5950,9 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"The current heatbed temperature is relatively high. The nozzle may clog when " +"printing this filament in a closed environment. Please open the front door " +"and/or remove the upper glass." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5523,12 +5967,15 @@ msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." msgstr "" +"Het inschakelen van traditionele timelapse-fotografie kan oneffenheden in " +"het oppervlak veroorzaken. Het wordt aanbevolen om over te schakelen naar de " +"vloeiende modus." msgid "Expand sidebar" -msgstr "" +msgstr "Zijbalk uitklappen" msgid "Collapse sidebar" -msgstr "" +msgstr "Zijbalk inklappen" #, c-format, boost-format msgid "Loading file: %s" @@ -5552,9 +5999,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "U dient de software te upgraden.\n" -msgid "Newer 3mf version" -msgstr "Nieuwere versie 3mf" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5570,26 +6014,32 @@ msgid "Please correct them in the param tabs" msgstr "Please correct them in the Param tabs" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" +msgstr "The 3mf has following modified G-code in filament or printer presets:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"Controleer of deze aangepaste G-codes veilig zijn om schade aan de machine " +"te voorkomen!" msgid "Modified G-codes" -msgstr "" +msgstr "Modified G-code" msgid "The 3mf has following customized filament or printer presets:" msgstr "" +"De 3mf heeft de volgende aangepaste voorinstellingen voor filament of " +"printer:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"Controleer of de G-codes in deze presets veilig zijn om schade aan de " +"machine te voorkomen!" msgid "Customized Preset" -msgstr "" +msgstr "Aangepaste voorinstelling" msgid "Name of components inside step file is not UTF8 format!" msgstr "Naam van componenten in step-bestand is niet UTF8-formaat!" @@ -5599,6 +6049,9 @@ msgstr "" "Vanwege niet-ondersteunde tekstcodering kunnen er onjuiste tekens " "verschijnen!" +msgid "Remember my choice." +msgstr "Remember my choice." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5659,22 +6112,24 @@ msgid "Export STL file:" msgstr "Exporteer STL bestand:" msgid "Export AMF file:" -msgstr "" +msgstr "AMF-bestand exporteren:" msgid "Save file as:" msgstr "Bewaar bestand als:" msgid "Export OBJ file:" -msgstr "" +msgstr "OBJ-bestand exporteren:" #, c-format, boost-format msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"The file %s already exists.\n" +"Do you want to replace it?" msgid "Comfirm Save As" -msgstr "" +msgstr "Opslaan als bevestigen" msgid "Delete object which is a part of cut object" msgstr "Delete object which is a part of cut object" @@ -5695,13 +6150,13 @@ msgid "Another export job is running." msgstr "Er is reeds een export taak actief." msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "Kan niet worden vervangen door meer dan één volume" msgid "Error during replace" msgstr "Fout tijdens vervanging" msgid "Replace from:" -msgstr "" +msgstr "Vervangen van:" msgid "Select a new file" msgstr "Selecteer een nieuw bestand" @@ -5713,22 +6168,19 @@ msgid "Please select a file" msgstr "Selecteer een bestand" msgid "Do you want to replace it" -msgstr "" +msgstr "Do you want to replace it?" msgid "Message" -msgstr "" +msgstr "Bericht" msgid "Reload from:" -msgstr "" +msgstr "Herladen vanaf:" msgid "Unable to reload:" -msgstr "" +msgstr "Kan niet herladen:" msgid "Error during reload" -msgstr "" - -msgid "Slicing" -msgstr "Slicen" +msgstr "Fout tijdens herladen" msgid "There are warnings after slicing models:" msgstr "Er zijn waarschuwingen na het slicen van modellen:" @@ -5792,9 +6244,15 @@ msgstr "Model importeren" msgid "prepare 3mf file..." msgstr "voorbereiden van 3mf bestand..." +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "project downloaden..." +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Project %d%% gedownload" @@ -5805,7 +6263,7 @@ msgid "" msgstr "" msgid "Import SLA archive" -msgstr "" +msgstr "Importeer SLA-archief" msgid "The selected file" msgstr "Het geselecteerde bestand" @@ -5816,6 +6274,20 @@ msgstr "Bevat geen geldige Gcode" msgid "Error occurs while loading G-code file" msgstr "Er is een fout opgetreden tijdens het laden van het G-codebestand." +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" + msgid "Drop project file" msgstr "Projectbestand neerzetten" @@ -5840,9 +6312,6 @@ msgstr "G-Code bestanden en modellen kunnen niet tegelijk geladen worden!" msgid "Can not add models when in preview mode!" msgstr "Modellen kunnen niet worden toegevoegd in voorbeeldmodus" -msgid "Add Models" -msgstr "Modellen toevoegen" - msgid "All objects will be removed, continue?" msgstr "Alle objecten zullen verwijderd worden, doorgaan?" @@ -5851,9 +6320,6 @@ msgstr "" "Het huidige project heeft niet-opgeslagen wijzigingen. Wilt u eerst opslaan " "voordat u verder gaat?" -msgid "Remember my choice." -msgstr "Remember my choice." - msgid "Number of copies:" msgstr "Aantal kopieën:" @@ -5864,13 +6330,13 @@ msgid "Save G-code file as:" msgstr "Bewaar G-code bestand als:" msgid "Save SLA file as:" -msgstr "" +msgstr "SLA-bestand opslaan als:" msgid "The provided file name is not valid." -msgstr "" +msgstr "De opgegeven bestandsnaam is ongeldig." msgid "The following characters are not allowed by a FAT file system:" -msgstr "" +msgstr "De volgende tekens zijn niet toegestaan in een FAT-bestandssysteem:" msgid "Save Sliced file as:" msgstr "Bewaar het geslicede bestand als:" @@ -5885,10 +6351,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5903,7 +6385,7 @@ msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "" msgid "Upload and Print" -msgstr "" +msgstr "Upload en print" msgid "" "Print By Object: \n" @@ -5938,7 +6420,7 @@ msgstr "Number of currently selected parts: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "" +msgstr "Aantal momenteel geselecteerde objecten: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -6043,6 +6525,11 @@ msgstr "Inlogregio" msgid "Stealth Mode" msgstr "" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -6058,15 +6545,46 @@ msgstr "Imperiaal" msgid "Units" msgstr "Eenheden" -msgid "Home" +msgid "Allow only one OrcaSlicer instance" msgstr "" +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"Op OSX is er standaard altijd maar één instantie van een app actief. Het is " +"echter toegestaan om meerdere instanties van dezelfde app uit te voeren " +"vanaf de opdrachtregel. In dat geval staat deze instelling slechts één " +"instantie toe." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + +msgid "Home" +msgstr "Thuis" + msgid "Default Page" msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Zoom to mouse position" @@ -6078,13 +6596,21 @@ msgstr "" "2D window center." msgid "Use free camera" -msgstr "" +msgstr "Gebruik vrij beweegbare camera" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +"Als dit is ingeschakeld wordt de vrij beweegbare camera gebruikt, anders een " +"vaste camera." + +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" msgid "Show splash screen" -msgstr "" +msgstr "Toon startscherm" msgid "Show the splash screen during startup." msgstr "" @@ -6098,12 +6624,40 @@ msgstr "" msgid "Flushing volumes: Auto-calculate everytime the color changed." msgstr "" +"Spoelvolumes: Automatisch berekenen telkens wanneer de kleur verandert." msgid "If enabled, auto-calculate everytime the color changed." msgstr "" +"Als deze optie is ingeschakeld, wordt elke keer dat de kleur verandert " +"automatisch berekend." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Flushing volumes: Auto-calculate every time the filament is changed." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "If enabled, auto-calculate every time filament is changed" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." msgid "Network" -msgstr "" +msgstr "Netwerk" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -6149,6 +6703,42 @@ msgstr "" "Indien ingeschakeld, wordt Orca Slicer ingesteld als de standaardtoepassing " "om .step-bestanden te openen" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Maximum recent projects" @@ -6159,7 +6749,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Clear my choice on the unsaved projects." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "No warnings when loading 3MF with modified G-code" msgid "Auto-Backup" msgstr "Automatisch backup maken" @@ -6315,16 +6905,25 @@ msgid "Add/Remove materials" msgstr "Materialen toevoegen/verwijderen" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Printers selecteren/verwijderen (systeemvoorinstellingen)" msgid "Create printer" -msgstr "" - -msgid "Incompatible" -msgstr "Incompatible" +msgstr "Printer maken" msgid "The selected preset is null!" -msgstr "" +msgstr "De geselecteerde preset is nul!" + +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "Aanpassen" + +msgid "Other layer filament sequence" +msgstr "Other layer filament sequence" + +msgid "Please input layer value (>= 2)." +msgstr "Please input layer value (>= 2)." msgid "Plate name" msgstr "Plate name" @@ -6335,11 +6934,17 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Afdrukvolgorde" -msgid "Customize" -msgstr "" +msgid "Same as Global" +msgstr "Same as Global" + +msgid "Disable" +msgstr "Disable" + +msgid "Spiral vase" +msgstr "Spiraalvaas" msgid "First layer filament sequence" -msgstr "" +msgstr "Eerste laag filamentvolgorde" msgid "Same as Global Plate Type" msgstr "Same as Global Plate Type" @@ -6402,15 +7007,6 @@ msgstr "Gebruikersvoorinstelling" msgid "Preset Inside Project" msgstr "Voorinstelling Project Inside" -msgid "Name is invalid;" -msgstr "Naam is ongeldig;" - -msgid "illegal characters:" -msgstr "Niet toegestande karakters:" - -msgid "illegal suffix:" -msgstr "Ongeldig achtervoegsel:" - msgid "Name is unavailable." msgstr "Naam is niet beschikbaar." @@ -6430,15 +7026,6 @@ msgstr "" msgid "Please note that saving action will replace this preset" msgstr "Let er aub op dat opslaan de voorinstelling zal overschrijven" -msgid "The name is not allowed to be empty." -msgstr "Het is niet toegestaand om de naam leeg te laten." - -msgid "The name is not allowed to start with space character." -msgstr "Het is niet toegestaan om een naam met een spatie te laten beginnen." - -msgid "The name is not allowed to end with space character." -msgstr "Het is niet toegestaan om een naam met een spatie te laten eindigen." - msgid "The name cannot be the same as a preset alias name." msgstr "" "Er kan niet voor een naam gekozen worden die hetzelfde is als de naam van " @@ -6479,7 +7066,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Zoeken" msgid "My Device" msgstr "Mijn apparaat" @@ -6499,9 +7086,6 @@ msgstr "Kun je geen apparaten vinden?" msgid "Log out successful." msgstr "Uitloggen gelukt." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Bezet" @@ -6518,7 +7102,7 @@ msgid "Bambu Smooth PEI Plate" msgstr "" msgid "High temperature Plate" -msgstr "" +msgstr "Plaat op hoge temperatuur" msgid "Bambu Textured PEI Plate" msgstr "" @@ -6526,17 +7110,11 @@ msgstr "" msgid "Send print job to" msgstr "Stuur de printtaak naar" -msgid "Refresh" -msgstr "Vernieuwen" - -msgid "Bed Leveling" -msgstr "Bed leveling" - msgid "Flow Dynamics Calibration" -msgstr "" +msgstr "Kalibratie van Flow Dynamics" msgid "Click here if you can't connect to the printer" -msgstr "" +msgstr "Klik hier als je geen verbinding kunt maken met de printer" msgid "send completed" msgstr "Versturen gelukt" @@ -6544,9 +7122,6 @@ msgstr "Versturen gelukt" msgid "Error code" msgstr "Error code" -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" @@ -6627,8 +7202,13 @@ 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "" @@ -6652,10 +7232,14 @@ msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." msgstr "" +"When spiral vase mode is enabled, machines with I3 structure will not " +"generate timelapse videos." msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"Timelapse wordt niet ondersteund omdat Afdruksequentie is ingesteld op \"Per " +"object\"." msgid "Errors" msgstr "Fouten" @@ -6683,62 +7267,69 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "mondstuk in voorinstelling: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "" +msgid "nozzle memorized: %.2f %s" +msgstr "mondstuk onthouden: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" +"Your nozzle diameter in sliced file is not consistent with the saved nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Please fix the error above, otherwise printing cannot continue." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - 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." +"Aansluiten op de printer. Kan niet annuleren tijdens het verbindingsproces." msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." msgstr "" +"Let op bij gebruik! Flowkalibratie op de PEI-plaat met structuur kan " +"mislukken vanwege het verstrooide oppervlak." msgid "Automatic flow calibration using Micro Lidar" -msgstr "" +msgstr "Automatic flow calibration using the Micro Lidar" msgid "Modifying the device name" msgstr "De naam van het apparaat wijzigen" +msgid "Bind with Pin Code" +msgstr "Bind with Pin Code" + msgid "Send to Printer SD card" msgstr "Verzenden naar de MicroSD-kaart in de printer" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Kan de printtaak niet verzenden wanneer de upgrade wordt uitgevoerd" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"De geselecteerde printer is niet compatibel met de gekozen " +"printervoorinstellingen." + 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." @@ -6755,7 +7346,7 @@ msgid "Slice ok." msgstr "Slice gelukt" msgid "View all Daily tips" -msgstr "" +msgstr "Bekijk alle dagelijkse tips" msgid "Failed to create socket" msgstr "Failed to create socket" @@ -6784,6 +7375,28 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Onbekende fout" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." + +msgid "Can't find Pin Code?" +msgstr "Can't find Pin Code?" + +msgid "Pin Code" +msgstr "Pin Code" + +msgid "Binding..." +msgstr "Binding..." + +msgid "Please confirm on the printer screen" +msgstr "Please confirm on the printer screen" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Log in failed. Please check the Pin Code." + msgid "Log in printer" msgstr "Inloggen op printer" @@ -6906,7 +7519,7 @@ msgstr "" "inschakelen?" msgid "Still print by object?" -msgstr "" +msgstr "Print je nog steeds per object?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6965,15 +7578,39 @@ msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"De laaghoogte overschrijdt de limiet in Printerinstellingen -> Extruder -> " +"Laaghoogtelimieten, dit kan problemen met de afdrukkwaliteit veroorzaken." msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "Automatisch aanpassen aan het ingestelde bereik? \n" msgid "Adjust" -msgstr "" +msgstr "Aanpassen" msgid "Ignore" +msgstr "Negeer" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications. Please use with the latest printer firmware." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -7045,7 +7682,7 @@ msgid "Acceleration" msgstr "Versnelling" msgid "Jerk(XY)" -msgstr "" +msgstr "Jerk(XY)" msgid "Raft" msgstr "Vlot" @@ -7056,6 +7693,9 @@ msgstr "Support filament" msgid "Tree supports" msgstr "" +msgid "Skirt" +msgstr "Skirt" + msgid "Prime tower" msgstr "Prime toren" @@ -7069,7 +7709,7 @@ msgid "Post-processing Scripts" msgstr "Post-processing Scripts" msgid "Notes" -msgstr "" +msgstr "Notes" msgid "Frequent" msgstr "Veelgebruikt" @@ -7146,13 +7786,16 @@ msgstr "" "niet ondersteunt." msgid "Smooth PEI Plate / High Temp Plate" -msgstr "" +msgstr "Gladde PEI Plaat / Hoge Temp Plaat" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" +"Bedtemperatuur wanneer gladde PEI-plaat/hoge temperatuurplaat is " +"geïnstalleerd. Waarde 0 betekent dat het filament niet geschikt is voor " +"afdrukken op de gladde PEI-plaat/hoge temperatuurplaat." msgid "Textured PEI Plate" msgstr "PEI plaat met structuur" @@ -7206,13 +7849,13 @@ msgid "Auxiliary part cooling fan" msgstr "Extra koel ventilator" msgid "Exhaust fan" -msgstr "" +msgstr "Uitlaatventilator" msgid "During print" -msgstr "" +msgstr "Tijdens het afdrukken" msgid "Complete print" -msgstr "" +msgstr "Afdruk compleet" msgid "Filament start G-code" msgstr "Filament start G-code" @@ -7224,13 +7867,13 @@ msgid "Multimaterial" msgstr "" msgid "Wipe tower parameters" -msgstr "" +msgstr "Afveegblokparameters" msgid "Toolchange parameters with single extruder MM printers" -msgstr "" +msgstr "Toolwisselparameter voor multi-materialprinters met één extruder" msgid "Ramming settings" -msgstr "" +msgstr "Ramming-instellingen" msgid "Toolchange parameters with multi extruder MM printers" msgstr "" @@ -7238,6 +7881,14 @@ msgstr "" msgid "Printable space" msgstr "Ruimte waarbinnen geprint kan worden" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "" @@ -7263,7 +7914,7 @@ msgid "Machine end G-code" msgstr "Machine einde G-code" msgid "Printing by object G-code" -msgstr "" +msgstr "Afdrukken met object G-code" msgid "Before layer change G-code" msgstr "G-Code voor de laag wijziging" @@ -7272,7 +7923,7 @@ msgid "Layer change G-code" msgstr "G-code laag wijzigen" msgid "Time lapse G-code" -msgstr "" +msgstr "Time-lapse G-code" msgid "Change filament G-code" msgstr "Filament G-code aanpassen" @@ -7305,10 +7956,10 @@ msgid "Single extruder multimaterial setup" msgstr "" msgid "Wipe tower" -msgstr "" +msgstr "Afveegblok" msgid "Single extruder multimaterial parameters" -msgstr "" +msgstr "Parameter voor multi-material met één extruder" msgid "Layer height limits" msgstr "Limieten voor laaghoogte" @@ -7324,9 +7975,12 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Disable it in order to enable Firmware Retraction?" msgid "Firmware Retraction" -msgstr "" +msgstr "Firmware intrekken" msgid "Detached" msgstr "Losgemaakt" @@ -7336,9 +7990,12 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"%d Filament Preset en %d Process Preset zijn gekoppeld aan deze printer. " +"Deze voorinstellingen worden verwijderd als de printer wordt verwijderd." msgid "Presets inherited by other presets can not be deleted!" msgstr "" +"Presets die door andere presets worden geërfd, kunnen niet worden verwijderd!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." @@ -7360,6 +8017,9 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"Weet je zeker dat je de geselecteerde preset wilt verwijderen? \n" +"Als de voorinstelling overeenkomt met een filament dat momenteel in gebruik " +"is op je printer, reset dan de filamentinformatie voor die sleuf." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7466,23 +8126,30 @@ msgstr "" "bevat de navolgende nog niet opgeslagen aanpassingen:" #, 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 "" -"U heeft enkele instellingen van voorinstelling \"%1%\" gewijzigd.\n" -"Wilt u deze gewijzigde instellingen (nieuwe waarde) behouden na het wisselen " -"van preset?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "You have changed some settings of preset \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"You can save or discard the preset values you have modified." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "You have previously modified your settings." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Je hebt een aantal vooraf ingestelde instellingen gewijzigd. \n" -"Wilt u deze gewijzigde instellingen (nieuwe waarde) behouden na het wisselen " -"van presets?" msgid "Extruders count" msgstr "Extruder aantal" @@ -7513,7 +8180,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7598,8 +8265,62 @@ msgstr "Geen updates beschikbaar." msgid "The configuration is up to date." msgstr "De configuratie is up to date." -msgid "Ramming customization" +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + +msgid "Ramming customization" +msgstr "Ramming aanpassen" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" @@ -7612,27 +8333,37 @@ msgid "" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." msgstr "" +"Ramming wordt gebruikt voor het snel extruderen vlak voor een toolwisseling " +"bij multi-materialprinters met één extruder. Het doel daarvan is om het " +"einde van het ongeladen filament goed te vormen (zodat het later weer " +"geladen kan worden) en nieuw filament niet verhinderd wordt. Deze fase is " +"belangrijk. Verschillende materialen vereisen verschillende " +"extrusiesnelheden voor de juiste vorm. Daarom zijn de waarden tijdens de " +"ramming aan te passen.\n" +"\n" +"Dit is een expert-level instelling. Onjuiste aanpassingen kunnen zorgen voor " +"verstoppingen en andere problemen." msgid "Total ramming time" -msgstr "" +msgstr "Totale ramming-tijd" msgid "s" msgstr "s" msgid "Total rammed volume" -msgstr "" +msgstr "Totaal ramming-volume" msgid "Ramming line width" -msgstr "" +msgstr "Lijnbreedte voor ramming" msgid "Ramming line spacing" -msgstr "" +msgstr "Lijnafstand voor ramming" msgid "Auto-Calc" msgstr "Automatisch berekenen" msgid "Re-calculate" -msgstr "" +msgstr "Herbereken" msgid "Flushing volumes for filament change" msgstr "Volumes reinigen voor filament wijziging" @@ -7672,12 +8403,38 @@ msgstr "Van" msgid "To" msgstr "Naar" -msgid "Bambu Network plug-in not detected." +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" msgstr "" -msgid "Click here to download it." +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" msgstr "" +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "Bambu Network-plug-in niet gedetecteerd." + +msgid "Click here to download it." +msgstr "Klik hier om het te downloaden." + msgid "Login" msgstr "Inloggen" @@ -7711,7 +8468,7 @@ msgstr "" "verbergen" msgid "Switch table page" -msgstr "" +msgstr "Schakeltabel pagina" msgid "Show keyboard shortcuts list" msgstr "Toon lijst met sneltoetsen" @@ -7867,10 +8624,10 @@ msgid "Gizmo Text emboss / engrave" msgstr "" msgid "Zoom in" -msgstr "" +msgstr "Zoom in" msgid "Zoom out" -msgstr "" +msgstr "Zoom uit" msgid "Switch between Prepare/Preview" msgstr "" @@ -7947,6 +8704,12 @@ msgstr "Schuifregelaar 5x sneller verplaatsen" msgid "Shift+Mouse wheel" msgstr "Shift+Muiswiel" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Release-opmerkingen" @@ -7972,13 +8735,49 @@ msgid "New version of Orca Slicer" msgstr "Nieuwe versie van Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "Deze versie overslaan" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "resume" + +msgid "Resume Printing" +msgstr "Resume Printing" + +msgid "Resume Printing(defects acceptable)" +msgstr "Resume Printing (defects acceptable)" + +msgid "Resume Printing(problem solved)" +msgstr "Resume Printing (problem solved)" + +msgid "Stop Printing" +msgstr "Stop Printing" + +msgid "Check Assistant" +msgstr "Check Assistant" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruded, Continue" + +msgid "Not Extruded Yet, Retry" +msgstr "Not Extruded Yet, Retry" + +msgid "Finished, Continue" +msgstr "Finished, Continue" + +msgid "Load Filament" +msgstr "Filament laden" + +msgid "Filament Loaded, Resume" +msgstr "Filament Loaded, Resume" + +msgid "View Liveview" +msgstr "View Liveview" + msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Bevestig en update het mondstuk" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN-verbinding mislukt (verzenden afdrukbestand)" @@ -8007,20 +8806,23 @@ msgstr "Waar vind je het IP-adres en de toegangscode van je printer?" msgid "Step 3: Ping the IP address to check for packet loss and latency." msgstr "" +"Stap 3: Ping het IP-adres om te controleren op pakketverlies en latentie." msgid "Test" -msgstr "" +msgstr "Test" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP en toegangscode geverifieerd! U kunt het venster sluiten" msgid "Connection failed, please double check IP and Access Code" -msgstr "" +msgstr "Verbinding mislukt, controleer IP en toegangscode opnieuw" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"Verbinding mislukt! Als uw IP-adres en toegangscode correct zijn, \n" +"ga dan naar stap 3 voor het oplossen van netwerkproblemen" msgid "Model:" msgstr "Model:" @@ -8034,14 +8836,8 @@ msgstr "Versie" msgid "Update firmware" msgstr "Firmware bijwerken" -msgid "Printing" -msgstr "Printen" - -msgid "Idle" -msgstr "Inactief" - msgid "Beta version" -msgstr "" +msgstr "Beta versie" msgid "Latest version" msgstr "Nieuwste versie" @@ -8074,7 +8870,7 @@ 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." +"update next time starting Orca." msgstr "" "De firmwareversie is abnormaal. Repareren en bijwerken is vereist voor het " "afdrukken. Wil je nu updaten? Je kunt ook later op de printer updaten of " @@ -8217,9 +9013,6 @@ msgstr "" msgid "Gap infill" msgstr "Gat opvulling" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Support interface" @@ -8419,26 +9212,34 @@ msgid "" msgstr "" msgid "Variable layer height is not supported with Organic supports." -msgstr "" +msgstr "Variabele laaghoogte wordt niet ondersteund met organische steunen." msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Verschillende mondstukdiameters en verschillende filamentdiameters zijn niet " +"toegestaan als de prime-toren is ingeschakeld." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"De Wipe Tower wordt momenteel alleen ondersteund met de relatieve " +"extruderadressering (use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"Ooze-preventie wordt momenteel niet ondersteund als de prime tower is " +"ingeschakeld." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"De prime tower wordt momenteel alleen ondersteund voor de Marlin, RepRap/" +"Sprinter, RepRapFirmware en Repetier G-code smaken." msgid "The prime tower is not supported in \"By object\" print." msgstr "Een prime-toren wordt niet ondersteund bij het \"per object\" printen." @@ -8520,16 +9321,23 @@ msgid "" "each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" +"Relatieve extruderwaarden vereist het resetten van de extruderpositie op " +"elke laag om decimale onnauwkeurigheid te voorkomen. Voeg \"G92 E0\" toe aan " +"layer_gcode." msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" +"\"G92 E0\" gevonden in before_layer_gcode, wat niet compatibel is met " +"absolute positionering." msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." msgstr "" +"\"G92 E0\" gevonden in layer_gcode, wat niet compatibel is met absolute " +"positionering." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" @@ -8671,11 +9479,13 @@ msgstr "" "address/" msgid "Device UI" -msgstr "" +msgstr "UI van het apparaat" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" +"Geef de URL op van de gebruikersinterface van uw apparaat als deze niet " +"hetzelfde is als print_host" msgid "API Key / Password" msgstr "API sleutel / wachtwoord" @@ -8837,7 +9647,16 @@ msgid "Engineering Plate" msgstr "Engineering plate (technisch printbed)" msgid "First layer print sequence" -msgstr "" +msgstr "Afdrukvolgorde van de eerste laag" + +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" msgid "This G-code is inserted at every layer change before lifting z" msgstr "" @@ -8886,7 +9705,7 @@ msgid "" msgstr "" msgid "Everywhere" -msgstr "" +msgstr "Overal" msgid "Top and bottom surfaces" msgstr "" @@ -8971,12 +9790,14 @@ msgid "" msgstr "" msgid "Top surface flow ratio" -msgstr "" +msgstr "Flowratio bovenoppervlak" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" +"Deze factor beïnvloedt de hoeveelheid materiaal voor de bovenste vaste " +"vulling. Je kunt het iets verminderen om een glad oppervlak te krijgen." msgid "Bottom surface flow ratio" msgstr "" @@ -9121,7 +9942,7 @@ msgid "" msgstr "" msgid "mm/s or %" -msgstr "" +msgstr "mm/s of %" msgid "External" msgstr "" @@ -9266,7 +10087,7 @@ msgid "Default process profile when switch to this machine profile" msgstr "Standaard procesprofiel bij het overschakelen naar dit machineprofiel" msgid "Activate air filtration" -msgstr "" +msgstr "Activate air filtration" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" @@ -9278,6 +10099,8 @@ msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" msgstr "" +"Snelheid van de afzuigventilator tijdens het printen. Deze snelheid " +"overschrijft de snelheid in de aangepaste g-code van het filament." msgid "Speed of exhaust fan after printing completes" msgstr "" @@ -9359,7 +10182,7 @@ msgid "" msgstr "" msgid "Disabled" -msgstr "" +msgstr "Uit" msgid "Limited filtering" msgstr "" @@ -9386,12 +10209,14 @@ msgid "End G-code when finish the whole printing" msgstr "Voeg een eind G-code toe bij het afwerken van de hele print." msgid "Between Object Gcode" -msgstr "" +msgstr "Tussen object Gcode" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"Gcode invoegen tussen objecten. Deze parameter wordt alleen actief wanneer u " +"uw modellen object voor object afdrukt." msgid "End G-code when finish the printing of this filament" msgstr "" @@ -9457,7 +10282,7 @@ msgstr "" "maar niet van de vulling van de brug." msgid "Internal solid infill pattern" -msgstr "" +msgstr "Intern massief invulpatroon" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " @@ -9477,7 +10302,7 @@ msgstr "" "langzamer geprint dan de binnenste wanden om een betere kwaliteit te krijgen." msgid "Small perimeters" -msgstr "" +msgstr "Kleine omtrek" msgid "" "This separate setting will affect the speed of perimeters having radius <= " @@ -9492,6 +10317,7 @@ msgstr "" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm" msgstr "" +"Dit stelt de drempel voor kleine omtreklengte in. De standaarddrempel is 0 mm" msgid "Walls printing order" msgstr "" @@ -9531,13 +10357,13 @@ msgid "Inner/Outer/Inner" msgstr "" msgid "Print infill first" -msgstr "" +msgstr "Eerst infill afdrukken" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9591,6 +10417,12 @@ msgstr "" "Afstandsradius rond de extruder: gebruikt om botsingen te vermijden bij het " "printen per object." +msgid "Nozzle height" +msgstr "Hoogte van het mondstuk" + +msgid "The height of nozzle tip." +msgstr "De hoogte van de mondstukpunt." + msgid "Bed mesh min" msgstr "" @@ -9662,7 +10494,7 @@ msgstr "" "lichte over- of onderflow is." msgid "Enable pressure advance" -msgstr "" +msgstr "Pressure advance inschakelen" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " @@ -9688,6 +10520,22 @@ msgstr "" "staan op een minimale snelheid om het aantal start en stop momenten te " "beperken" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Laag tijd" @@ -9708,10 +10556,10 @@ msgid "Default filament color" msgstr "Standaard filamentkleur" msgid "Filament notes" -msgstr "" +msgstr "Filament notes" msgid "You can put your notes regarding the filament here." -msgstr "" +msgstr "You can put your notes regarding the filament here." msgid "Required nozzle HRC" msgstr "Vereiste nozzle HRC" @@ -9772,54 +10620,64 @@ msgid "" msgstr "" msgid "Loading speed" -msgstr "" +msgstr "Laadsnelheid" msgid "Speed used for loading the filament on the wipe tower." -msgstr "" +msgstr "Snelheid die gebruikt wordt voor het afveegblok." msgid "Loading speed at the start" -msgstr "" +msgstr "Laadsnelheid aan het begin" msgid "Speed used at the very beginning of loading phase." -msgstr "" +msgstr "Snelheid die gebruikt wordt aan het begin van de laadfase." msgid "Unloading speed" -msgstr "" +msgstr "Ontlaadsnelheid" msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" +"Snelheid die gebruikt wordt voor het ontladen van het afveegblok (heeft geen " +"effect op het initiële onderdeel van het ontladen direct na de ramming)." msgid "Unloading speed at the start" -msgstr "" +msgstr "Ontlaadsnelheid in het begin" msgid "" "Speed used for unloading the tip of the filament immediately after ramming." msgstr "" +"Snelheid die gebruikt wordt voor het ontladen van het filament direct na de " +"ramming." msgid "Delay after unloading" -msgstr "" +msgstr "Vertraging na het ontladen" msgid "" "Time to wait after the filament is unloaded. May help to get reliable " "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" +"Wachttijd voor het ontladen van het filament. Dit kan helpen om betrouwbare " +"toolwisselingen te krijgen met flexibele materialen die meer tijd nodig " +"hebben om te krimpen naar de originele afmetingen." msgid "Number of cooling moves" -msgstr "" +msgstr "Aantal koelbewegingen" msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" +"Het filament wordt gekoeld tijdens het terug en voorwaarts bewegen in de " +"koelbuis. Specificeer het benodigd aantal bewegingen." msgid "Speed of the first cooling move" -msgstr "" +msgstr "Snelheid voor de eerste koelbeweging" msgid "Cooling moves are gradually accelerating beginning at this speed." msgstr "" +"Koelbewegingen worden gelijkmatig versneld, beginnend vanaf deze snelheid." msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" @@ -9833,30 +10691,38 @@ msgid "" msgstr "" msgid "Speed of the last cooling move" -msgstr "" +msgstr "Snelheid voor de laatste koelbeweging" msgid "Cooling moves are gradually accelerating towards this speed." -msgstr "" +msgstr "Koelbewegingen versnellen gelijkmatig tot aan deze snelheid." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"Tijd voor de printerfirmware (of de MMU 2.0) om nieuw filament te laden " +"tijdens een toolwissel (tijdens het uitvoeren van de T-code). Deze tijd " +"wordt toegevoegd aan de totale printtijd in de tijdsschatting." msgid "Ramming parameters" -msgstr "" +msgstr "Rammingparameters" msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." msgstr "" +"Deze frase is bewerkt door het Rammingdialoog en bevat parameters voor de " +"ramming." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"Tijd voor de printerfirmware (of de MMU 2.0) om filament te ontladen tijdens " +"een toolwissel (tijdens het uitvoeren van de T-code). Deze tijd wordt " +"toegevoegd aan de totale printtijd in de tijdsschatting." msgid "Enable ramming for multitool setups" msgstr "" @@ -9911,13 +10777,16 @@ msgstr "" "drukken." msgid "Softening temperature" -msgstr "" +msgstr "Verzachtingstemperatuur" msgid "" "The material softens at this temperature, so when the bed temperature is " "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than this, it's highly recommended to open the front " +"door and/or remove the upper glass to avoid clogs." msgid "Price" msgstr "Prijs" @@ -9929,16 +10798,16 @@ msgid "money/kg" msgstr "Prijs per KG" msgid "Vendor" -msgstr "" +msgstr "Leverancier" msgid "Vendor of filament. For show only" -msgstr "" +msgstr "Verkoper van filament. Alleen voor show" msgid "(Undefined)" msgstr "(niet gedefinieerd)" -msgid "Infill direction" -msgstr "Vulling (infill) richting" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -9947,6 +10816,20 @@ msgstr "" "Dit is de hoek voor een dun opvulpatroon, dat het begin of de hoofdrichting " "van de lijnen bepaalt." +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Vulling percentage" @@ -9992,6 +10875,9 @@ msgstr "Ondersteuning Cubic" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "Cross Hatch" + msgid "Sparse infill anchor length" msgstr "" @@ -10015,7 +10901,7 @@ msgid "1000 (unlimited)" msgstr "1000 (unlimited)" msgid "Maximum length of the infill anchor" -msgstr "" +msgstr "Maximale lengte van de vullingsbevestiging" msgid "" "Connect an infill line to an internal perimeter with a short segment of an " @@ -10059,12 +10945,15 @@ msgid "" msgstr "" msgid "mm/s² or %" -msgstr "" +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 "" +"Versnelling van de schaarse invulling. Als de waarde wordt uitgedrukt als " +"een percentage (bijvoorbeeld 100%), wordt deze berekend op basis van de " +"standaardversnelling." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -10080,13 +10969,13 @@ msgstr "" "kan de hechting van de bouwplaat verbeteren." msgid "Enable accel_to_decel" -msgstr "" +msgstr "Accel_to_decel inschakelen" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "" +msgstr "De max_accel_to_decel van Klipper wordt automatisch aangepast" msgid "accel_to_decel" -msgstr "" +msgstr "accel_to_decel" #, c-format, boost-format msgid "" @@ -10094,10 +10983,10 @@ msgid "" msgstr "" msgid "Jerk of outer walls" -msgstr "" +msgstr "Jerk van de buitenwand" msgid "Jerk of inner walls" -msgstr "" +msgstr "Jerk van de binnenwand" msgid "Jerk for top surface" msgstr "" @@ -10170,6 +11059,9 @@ msgid "" "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "" @@ -10224,7 +11116,7 @@ msgid "Whether to apply fuzzy skin on the first layer" msgstr "" msgid "Filter out tiny gaps" -msgstr "" +msgstr "Kleine openingen wegfilteren" msgid "Layers and Perimeters" msgstr "Lagen en perimeters" @@ -10239,15 +11131,31 @@ msgstr "" "Dit is de snelheid voor het opvullen van gaten. Tussenruimtes hebben meestal " "een onregelmatige lijndikte en moeten daarom langzamer worden afgedrukt." +msgid "Precise Z height" +msgstr "Precise Z height" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." + msgid "Arc fitting" msgstr "Boog montage" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Schakel dit in om een G-codebestand te krijgen met G2- en G3-bewegingen. De " -"pastolerantie is gelijk aan de resolutie." msgid "Add line number" msgstr "Lijn hoogte toevoegen" @@ -10303,10 +11211,10 @@ msgid "HRC" msgstr "HRC" msgid "Printer structure" -msgstr "" +msgstr "Printerstructuur" msgid "The physical arrangement and components of a printing device" -msgstr "" +msgstr "De fysieke opstelling en onderdelen van een afdrukapparaat" msgid "CoreXY" msgstr "" @@ -10321,10 +11229,12 @@ msgid "Delta" msgstr "" msgid "Best object position" -msgstr "" +msgstr "Beste objectpositie" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "" +"Beste automatisch schikkende positie in het bereik [0,1] met betrekking tot " +"de bedvorm." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " @@ -10370,7 +11280,7 @@ msgid "money/h" msgstr "" msgid "Support control chamber temperature" -msgstr "" +msgstr "Ondersteuning voor het regelen van de kamertemperatuur" msgid "" "This option is enabled if machine support controlling chamber temperature\n" @@ -10378,7 +11288,7 @@ msgid "" msgstr "" msgid "Support air filtration" -msgstr "" +msgstr "Ondersteun luchtfiltratie" msgid "" "Enable this if printer support air filtration\n" @@ -10401,7 +11311,7 @@ msgid "Enable this option if you want to use multiple bed types" msgstr "" msgid "Label objects" -msgstr "" +msgstr "Label objecten" msgid "" "Enable this to add comments into the G-Code labeling print moves with what " @@ -10411,19 +11321,22 @@ msgid "" msgstr "" msgid "Exclude objects" -msgstr "" +msgstr "Objecten uitsluiten" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" msgid "Verbose G-code" -msgstr "" +msgstr "Opmerkingen in 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." msgstr "" +"Sta dit toe om een G-code met opmerkingen te genereren. Bij elk blok " +"commando's wordt een opmerking geplaatst. Als u print vanaf een SD-kaart, " +"kan de extra grootte van het bestand de firmware vertragen." msgid "Infill combination" msgstr "Vulling (infill) combinatie" @@ -10447,37 +11360,54 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Vulling (infill)/wand overlap" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"Hierdoor kan het opvulgebied (infill) iets worden vergroot om de wanden te " -"overlappen voor een betere hechting. De procentuele waarde is relatief ten " -"opzichte van de lijndikte van de opvulling." msgid "Speed of internal sparse infill" msgstr "Dit is de snelheid voor de dunne vulling (infill)" msgid "Interface shells" -msgstr "" +msgstr "Interface shells" 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 "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Maximale breedte van een gesegmenteerd gebied" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" +"Maximum width of a segmented region. A value of 0 disables this feature." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Insluitdiepte van een gesegmenteerde regio" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" +"Insluitdiepte van een gesegmenteerd gebied. Nul schakelt deze functie uit." msgid "Ironing Type" msgstr "Strijk type" @@ -10744,7 +11674,7 @@ msgid "" msgstr "" msgid "mm³/s²" -msgstr "" +msgstr "mm³/s²" msgid "Smoothing segment length" msgstr "" @@ -10797,12 +11727,14 @@ msgid "Diameter of nozzle" msgstr "Diameter van de nozzle" msgid "Configuration notes" -msgstr "" +msgstr "Configuratie-opmerkingen" msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." msgstr "" +"Hier kunt u eigen opmerkingen plaatsen. Deze tekst wordt bovenin de G-code " +"toegevoegd." msgid "Host Type" msgstr "Hosttype" @@ -10822,36 +11754,44 @@ msgstr "" "Volume van de nozzle tussen de filamentsnijder en het uiteinde van de nozzle" msgid "Cooling tube position" -msgstr "" +msgstr "Koelbuispositie" msgid "Distance of the center-point of the cooling tube from the extruder tip." -msgstr "" +msgstr "Afstand vanaf de nozzle tot het middelpunt van de koelbuis." msgid "Cooling tube length" -msgstr "" +msgstr "Koelbuislengte" msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" +"Lengte van de koelbuis om de ruimte voor koelbewegingen daarin te beperken." msgid "High extruder current on filament swap" -msgstr "" +msgstr "Hoge stroomsterkte bij extruder voor filamentwissel" msgid "" "It may be beneficial to increase the extruder motor current during the " "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" +"Het kan nuttig zijn om de stroomsterkte van de extrudermotor te verhogen " +"tijdens het uitvoeren van de filamentwisseling om snelle ramming mogelijk te " +"maken en om weerstand te overwinnen tijdens het laden van filament met een " +"misvormde kop." msgid "Filament parking position" -msgstr "" +msgstr "Filament parkeerpositie" msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" +"Afstand van de nozzlepunt tot de positie waar het filament wordt geparkeerd " +"wanneer dat niet geladen is. Deze moet overeenkomen met de waarde in de " +"firmware." msgid "Extra loading distance" -msgstr "" +msgstr "Extra laadafstand" msgid "" "When set to zero, the distance the filament is moved from parking position " @@ -10859,6 +11799,10 @@ msgid "" "positive, it is loaded further, if negative, the loading move is shorter " "than unloading." msgstr "" +"Als dit ingesteld is op 0, zal de afstand die het filament tijdens het laden " +"uit de parkeerpositie even groot zijn als wanneer het filament " +"teruggetrokken wordt. Als de waarde positief is, zal het verder geladen " +"worden. Als het negatief is, is de laadafstand dus korter." msgid "Start end points" msgstr "Start end points" @@ -10960,10 +11904,10 @@ msgid "" msgstr "" msgid "Printer notes" -msgstr "" +msgstr "Printer notes" msgid "You can put your notes regarding the printer here." -msgstr "" +msgstr "You can put your notes regarding the printer here." msgid "Raft contact Z distance" msgstr "Vlot (raft) contact Z afstand:" @@ -11051,6 +11995,30 @@ msgstr "" "tijdens verplaatsingen over lange afstand te voorkomen. Stel in op 0 om " "terugtrekken (retraction) uit te schakelen." +msgid "Long retraction when cut(experimental)" +msgstr "Long retraction when cut (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." + +msgid "Retraction distance when cut" +msgstr "Retraction distance when cut" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimental feature. Retraction length before cutting off during filament " +"change" + msgid "Z hop when retract" msgstr "Z hop tijdens terugtrekken (retraction)" @@ -11065,20 +12033,24 @@ msgstr "" "op te tillen kan stringing voorkomen." msgid "Z hop lower boundary" -msgstr "" +msgstr "Z hop ondergrens" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"Z hop treedt alleen in werking wanneer Z boven deze waarde ligt en onder de " +"parameter: \"Z hop bovengrens\"." msgid "Z hop upper boundary" -msgstr "" +msgstr "Z hop bovengrens" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"Als deze waarde positief is, treedt Z hop alleen in werking als Z boven de " +"parameter ligt: \"Z hop ondergrens\" en onder deze waarde ligt" msgid "Z hop type" msgstr "" @@ -11090,7 +12062,7 @@ msgid "Spiral" msgstr "Spiraal" msgid "Only lift Z above" -msgstr "" +msgstr "Beweeg Z alleen omhoog boven" msgid "" "If you set this to a positive value, Z lift will only take place above the " @@ -11098,7 +12070,7 @@ msgid "" msgstr "" msgid "Only lift Z below" -msgstr "" +msgstr "Beweeg Z alleen omhoog onder" msgid "" "If you set this to a positive value, Z lift will only take place below the " @@ -11126,17 +12098,21 @@ msgid "Top and Bottom" msgstr "" msgid "Extra length on restart" -msgstr "" +msgstr "Extra lengte bij herstart" 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 "" +"Als retracten wordt gecompenseerd na een beweging, wordt deze extra " +"hoeveelheid filament geëxtrudeerd. Deze instelling is zelden van toepassing." msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" +"Als retracten wordt gecompenseerd na een toolwisseling, wordt deze extra " +"hoeveelheid filament geëxtrudeerd." msgid "Retraction Speed" msgstr "Terugtrek (retraction) snelheid" @@ -11156,7 +12132,7 @@ msgstr "" "dezelfde snelheid heeft als het intrekken (retraction)." msgid "Use firmware retraction" -msgstr "" +msgstr "Gebruik firmware retractie" msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " @@ -11200,7 +12176,7 @@ msgid "" msgstr "" msgid "Seam gap" -msgstr "" +msgstr "Naadopening" msgid "" "In order to reduce the visibility of the seam in a closed loop extrusion, " @@ -11214,17 +12190,20 @@ msgstr "" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" +"Use scarf joint to minimize seam visibility and increase seam strength." msgid "Conditional scarf joint" -msgstr "" +msgstr "Conditional scarf joint" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." msgid "Conditional angle threshold" -msgstr "" +msgstr "Conditional angle threshold" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -11267,39 +12246,44 @@ msgid "This factor affects the amount of material for scarf joints." msgstr "" msgid "Scarf start height" -msgstr "" +msgstr "Scarf start height" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"Start height of the scarf.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." msgid "Scarf around entire wall" -msgstr "" +msgstr "Scarf around entire wall" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "The scarf extends to the entire length of the wall." msgid "Scarf length" -msgstr "" +msgstr "Scarf length" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." msgid "Scarf steps" -msgstr "" +msgstr "Scarf steps" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "Minimum number of segments of each scarf." msgid "Scarf joint for inner walls" -msgstr "" +msgstr "Scarf joint for inner walls" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "Use scarf joint for inner walls as well." msgid "Role base wipe speed" msgstr "" @@ -11334,7 +12318,7 @@ msgid "" msgstr "" msgid "Wipe speed" -msgstr "" +msgstr "Veegsnelheid" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -11342,6 +12326,10 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" +"De veegsnelheid wordt bepaald door de snelheidsinstelling die in deze " +"configuratie is opgegeven.Als de waarde wordt uitgedrukt als percentage " +"(bijv. 80%), wordt deze berekend op basis van de bovenstaande instelling van " +"de rijsnelheid.De standaardwaarde voor deze parameter is 80%." msgid "Skirt distance" msgstr "Rand (skirt) afstand" @@ -11355,6 +12343,29 @@ msgstr "Skirt height" msgid "How many layers of skirt. Usually only one layer" msgstr "Number of skirt layers: usually only one" +msgid "Draft shield" +msgstr "Tochtscherm" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "Gelimiteerd" + +msgid "Enabled" +msgstr "Aan" + msgid "Skirt loops" msgstr "Rand (skirt) lussen" @@ -11369,6 +12380,17 @@ msgstr "" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -11397,9 +12419,6 @@ msgstr "" "Dit is de snelheid voor de interne solide vulling (infill), bodem en " "bovenste oppervlakte zijn hiervan uitgezonderd" -msgid "Spiral vase" -msgstr "Spiraalvaas" - 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 " @@ -11410,20 +12429,24 @@ msgstr "" "met solide onderlagen. Het uiteindelijke gegenereerde model heeft geen naad." msgid "Smooth Spiral" -msgstr "" +msgstr "Smooth Spiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" msgid "Max XY Smoothing" -msgstr "" +msgstr "Max XY Smoothing" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Maximum distance to move points in XY to try to achieve a smooth spiral. If " +"expressed as a %, it will be computed over nozzle diameter" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -11461,7 +12484,7 @@ msgid "Start G-code when start the printing of this filament" msgstr "Start G-code wanneer het printen van dit filament begint" msgid "Single Extruder Multi Material" -msgstr "" +msgstr "Multi-material met één extruder" msgid "Use single nozzle to print multi filament" msgstr "" @@ -11495,14 +12518,20 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" +"Het afveegblok wordt niet geprint bij lagen zonder toolwisselingen als dit " +"is ingeschakeld. Op lagen met een toolwissel zal de extruder neerwaarts " +"bewegen naar het afveegblok. De gebruiker is verantwoordelijk voor eventuele " +"botsingen met de print." msgid "Prime all printing extruders" -msgstr "" +msgstr "Veeg alle printextruders af" msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." msgstr "" +"Alle extruders worden afgeveegd aan de voorzijde van het printbed aan het " +"begin van de print als dit is ingeschakeld." msgid "Slice gap closing radius" msgstr "Sluitingsradius van de gap" @@ -11537,7 +12566,7 @@ msgid "Close holes" msgstr "Gaten sluiten" msgid "Z offset" -msgstr "" +msgstr "Z-hoogte" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -11545,6 +12574,10 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" +"Deze waarde wordt toegevoegd (of afgetrokken) van alle Z-coördinaten in de G-" +"code. Het wordt gebruikt voor een slechte Z-eindstop positie. Als de Z-" +"eindstop bijvoorbeeld een waarde gebruikt die 0.3mm van het printbed is, kan " +"dit ingesteld worden op -0.3mm." msgid "Enable support" msgstr "Support inschakelen" @@ -11604,10 +12637,10 @@ msgstr "" "cantilever, etc." msgid "Remove small overhangs" -msgstr "" +msgstr "Kleine uitsteeksels verwijderen" msgid "Remove small overhangs that possibly need no supports." -msgstr "" +msgstr "Verwijder kleine overstekken die mogelijk geen steun nodig hebben." msgid "Top Z distance" msgstr "Top Z afstand" @@ -11634,11 +12667,13 @@ msgstr "" "huidige filament wordt gebruikt." msgid "Avoid interface filament for base" -msgstr "" +msgstr "Vermijd interfacedraad voor basis" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Gebruik indien mogelijk geen filament voor de steuninterface om de " +"steunbasis te printen." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -11675,10 +12710,10 @@ msgid "Bottom interface layers" msgstr "Onderste interfacelagen" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Aantal onderste interfacelagen" msgid "Same as top" -msgstr "" +msgstr "Hetzelfde als boven" msgid "Top interface spacing" msgstr "Bovenste interface-afstand" @@ -11890,10 +12925,10 @@ msgid "" msgstr "" msgid "Support wall loops" -msgstr "" +msgstr "Steunmuurlussen" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "Deze instelling specificeert het aantal muren rond de ondersteuning" msgid "Tree support with infill" msgstr "Tree support met vulling" @@ -11915,7 +12950,7 @@ msgid "" msgstr "" msgid "Chamber temperature" -msgstr "" +msgstr "Kamertemperatuur" msgid "" "Higher chamber temperature can help suppress or reduce warping and " @@ -11926,6 +12961,12 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on. At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials, the actual chamber temperature should not " +"be high to avoid clogs, so 0 (turned off) is highly recommended." msgid "Nozzle temperature for layers after the initial one" msgstr "Nozzle temperatuur voor de lagen na de eerstse laag" @@ -12055,10 +13096,10 @@ msgid "Width of prime tower" msgstr "Dit is de breedte van de prime toren." msgid "Wipe tower rotation angle" -msgstr "" +msgstr "Rotatie van het afveegblok" msgid "Wipe tower rotation angle with respect to x-axis." -msgstr "" +msgstr "Rotatie van het afveegblok ten opzichte van de X-as." msgid "Stabilization cone apex angle" msgstr "" @@ -12074,6 +13115,31 @@ msgstr "" msgid "Spacing of purge lines on the wipe tower." msgstr "" +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "" @@ -12124,10 +13190,10 @@ msgstr "" "kracht tenzij de prime tower is ingeschakeld." msgid "Maximal bridging distance" -msgstr "" +msgstr "Maximale brugafstand" msgid "Maximal distance between supports on sparse infill sections." -msgstr "" +msgstr "Maximale afstand tussen support op dunne vullingsdelen." msgid "X-Y hole compensation" msgstr "X-Y-gaten compensatie" @@ -12185,7 +13251,7 @@ msgid "Rotate the polyhole every layer." msgstr "" msgid "G-code thumbnails" -msgstr "" +msgstr "G-code miniaturen" msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " @@ -12193,15 +13259,17 @@ msgid "" msgstr "" msgid "Format of G-code thumbnails" -msgstr "" +msgstr "Bestandstype van G-code-voorbeelden" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " "QOI for low memory firmware" msgstr "" +"Bestandstype van G-code-voorbeelden: PNG voor de beste kwaliteit, JPG voor " +"kleinste bestand, QOI voor firmware met weinig geheugen" msgid "Use relative E distances" -msgstr "" +msgstr "Relatieve E-afstanden gebruiken" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " @@ -12375,7 +13443,7 @@ msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "Do not run any validity checks, such as G-code path conflicts check." msgid "Ensure on bed" -msgstr "" +msgstr "Plaats op bed" msgid "" "Lift the object above the bed when it is partially below. Disabled by default" @@ -12388,22 +13456,25 @@ msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "" msgid "Rotation angle around the Z axis in degrees." -msgstr "" +msgstr "Rotatiehoek rond de Z-as in graden." msgid "Rotate around Y" -msgstr "" +msgstr "Draai over de Y-as" msgid "Rotation angle around the Y axis in degrees." -msgstr "" +msgstr "Rotatiehoek rond de Y-as in graden." msgid "Data directory" -msgstr "" +msgstr "Bestandslocatie voor de data" msgid "" "Load and store settings at the given directory. This is useful for " "maintaining different profiles or including configurations from a network " "storage." msgstr "" +"Laad fabrieksinstellingen en sla op. Dit is handig voor het onderhouden van " +"verschillende profielen of het opnemen van configuraties van een " +"netwerkopslag." msgid "Load custom gcode" msgstr "" @@ -12759,6 +13830,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: failed to parse" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12772,73 +13846,71 @@ 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 "Flow Rate Calibration" -msgstr "" +msgstr "Flow Rate kalibratie" msgid "Max Volumetric Speed Calibration" -msgstr "" +msgstr "Kalibratie van maximale volumetrische snelheid" msgid "Manage Result" -msgstr "" +msgstr "Resultaat beheren" msgid "Manual Calibration" -msgstr "" +msgstr "Handmatige kalibratie" msgid "Result can be read by human eyes." -msgstr "" +msgstr "Het resultaat kan door mensenogen worden gelezen." msgid "Auto-Calibration" -msgstr "" +msgstr "Auto-Calibration" msgid "We would use Lidar to read the calibration result" -msgstr "" +msgstr "We zouden Lidar gebruiken om het kalibratieresultaat af te lezen" msgid "Prev" -msgstr "" +msgstr "Vorige" msgid "Recalibration" -msgstr "" +msgstr "Herkalibratie" msgid "Calibrate" -msgstr "" +msgstr "Kalibreren" msgid "Finish" msgstr "Klaar" msgid "How to use calibration result?" -msgstr "" +msgstr "Hoe kan ik kalibratieresultaten gebruiken?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" +"Je kunt de kalibratiefactor van de stromingsdynamica wijzigen bij het " +"bewerken van materialen" msgid "" "The current firmware version of the printer does not support calibration.\n" "Please upgrade the printer firmware." msgstr "" +"De huidige firmwareversie van de printer ondersteunt geen kalibratie.\n" +"Voer een upgrade van de printerfirmware uit." msgid "Calibration not supported" -msgstr "" +msgstr "Kalibratie wordt niet ondersteund" msgid "Error desc" -msgstr "" +msgstr "Fout beschrijving" msgid "Extra info" -msgstr "" +msgstr "Extra informatie" msgid "Flow Dynamics" -msgstr "" +msgstr "Flowdynamiek" msgid "Flow Rate" -msgstr "" +msgstr "Flow Rate" 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 "" +msgstr "Maximale volumetrische snelheid" #, c-format, boost-format msgid "" @@ -12848,62 +13920,105 @@ msgid "" "End value: > Start value\n" "Value step: >= %.3f)" msgstr "" +"Voer geldige waarden in:\n" +"Startwaarde: >= %.1f\n" +"Eindwaarde: <= %.1f\n" +"Eindwaarde: > Startwaarde\n" +"Waarde stap: >= %.3f)" msgid "The name cannot be empty." -msgstr "" +msgstr "De naam mag niet leeg zijn." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "De geselecteerde preset: %s is niet gevonden." msgid "The name cannot be the same as the system preset name." msgstr "" +"De naam mag niet hetzelfde zijn als de naam van de systeemvoorinstelling." msgid "The name is the same as another existing preset name" -msgstr "" +msgstr "De naam is hetzelfde als een andere bestaande presetnaam" msgid "create new preset failed." -msgstr "" +msgstr "nieuwe voorinstelling maken mislukt." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" +"Are you sure you want to cancel the current calibration and return to the " +"home page?" msgid "No Printer Connected!" -msgstr "" +msgstr "Geen printer aangesloten!" msgid "Printer is not connected yet." -msgstr "" +msgstr "Printer is nog niet aangesloten." msgid "Please select filament to calibrate." -msgstr "" +msgstr "Selecteer het filament dat u wilt kalibreren." msgid "The input value size must be 3." +msgstr "De grootte van de invoerwaarde moet 3 zijn." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgid "Connecting to printer..." -msgstr "" +msgstr "Aansluiten op de printer..." msgid "The failed test result has been dropped." -msgstr "" +msgstr "Het mislukte testresultaat is verwijderd." msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "Flow Dynamics kalibratieresultaat is opgeslagen in de printer" + +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" msgstr "" +"Er is al een eerder kalibratieresultaat met dezelfde naam: %s. Er wordt maar " +"één resultaat met een naam opgeslagen. Weet je zeker dat je het vorige " +"resultaat wilt overschrijven?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." msgid "Internal Error" -msgstr "" +msgstr "Interne fout" msgid "Please select at least one filament for calibration" -msgstr "" +msgstr "Selecteer ten minste één filament voor kalibratie" msgid "Flow rate calibration result has been saved to preset" msgstr "" +"Het resultaat van de debietkalibratie is opgeslagen in een " +"voorkeursinstelling." msgid "Max volumetric speed calibration result has been saved to preset" msgstr "" +"Het kalibratieresultaat van de maximale volumetrische snelheid is opgeslagen " +"in de vooraf ingestelde waarde" msgid "When do you need Flow Dynamics Calibration" -msgstr "" +msgstr "Wanneer heb je een Flow Dynamics-kalibratie nodig?" msgid "" "We now have added the auto-calibration for different filaments, which is " @@ -12915,9 +14030,18 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" +"We hebben nu de automatische kalibratie voor verschillende filamenten " +"toegevoegd. Deze is volledig geautomatiseerd en het resultaat wordt " +"opgeslagen in de printer voor toekomstig gebruik. Je hoeft de kalibratie " +"alleen uit te voeren in de volgende beperkte gevallen:\n" +"1. Als je een nieuw filament van een ander merk/model introduceert of als " +"het filament vochtig is;\n" +"2. Als de spuitmond versleten is of vervangen is door een nieuwe;\n" +"3. Als de maximale volumetrische snelheid of printtemperatuur is gewijzigd " +"in de filamentinstelling." msgid "About this calibration" -msgstr "" +msgstr "Over deze kalibratie" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -12929,10 +14053,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12940,7 +14064,7 @@ msgid "" msgstr "" msgid "When to use Flow Rate Calibration" -msgstr "" +msgstr "Wanneer moet u Flow Rate kalibratie gebruiken" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -12953,12 +14077,24 @@ msgid "" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." msgstr "" +"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." 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 "" +"Bovendien is Flow Rate kalibratie cruciaal voor schuimmaterialen zoals LW-" +"PLA die worden gebruikt in RC-vliegtuigen. Deze materialen zetten sterk uit " +"bij verhitting, en kalibratie levert een bruikbare referentiestroom op." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -12968,6 +14104,13 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" +"Flow Rate Calibration meet de verhouding tussen verwachte en werkelijke " +"extrusievolumes. De standaardinstelling werkt goed in Bambu Lab printers en " +"officiële filamenten, omdat deze vooraf zijn gekalibreerd en afgestemd. Voor " +"een normaal filament is het meestal niet nodig om een kalibratie van de " +"stroomsnelheid uit te voeren, tenzij je nog steeds de genoemde defecten ziet " +"nadat je andere kalibraties hebt uitgevoerd. Kijk voor meer informatie in " +"het wiki-artikel." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -12987,227 +14130,262 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" +"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 performing it." msgid "When you need Max Volumetric Speed Calibration" -msgstr "" +msgstr "Wanneer u maximale volumetrische snelheidskalibratie nodig hebt" msgid "Over-extrusion or under extrusion" -msgstr "" +msgstr "Over-extrusie of onderextrusie" msgid "Max Volumetric Speed calibration is recommended when you print with:" msgstr "" +"Kalibratie van de maximale volumetrische snelheid wordt aanbevolen wanneer " +"je afdrukt met:" msgid "material with significant thermal shrinkage/expansion, such as..." -msgstr "" +msgstr "materiaal met aanzienlijke thermische krimp/uitzetting, zoals..." msgid "materials with inaccurate filament diameter" -msgstr "" +msgstr "materialen met een onnauwkeurige filamentdiameter" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "" +msgstr "We hebben de beste Flow Dynamics kalibratiefactor gevonden" msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." msgstr "" +"Een deel van de kalibratie is mislukt! U kunt de plaat schoonmaken en het " +"opnieuw proberen. Het mislukte testresultaat komt te vervallen." msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" msgstr "" +"*We raden je aan om merk, materiaal, type en zelfs vochtigheidsgraad toe te " +"voegen in de Naam." msgid "Failed" msgstr "Mislukt" +msgid "Please enter the name you want to save to printer." +msgstr "Voer de naam in die u op de printer wilt opslaan." + +msgid "The name cannot exceed 40 characters." +msgstr "De naam mag niet langer zijn dan 40 tekens." + 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?" +"want to override the other results?" msgstr "" +"Slechts één van de resultaten met dezelfde naam wordt opgeslagen. Weet je " +"zeker dat je de andere resultaten wilt overschrijven?" msgid "Please find the best line on your plate" -msgstr "" +msgstr "Zoek de beste regel op je bord" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Zoek de hoek met de perfecte extrusiegraad" msgid "Input Value" -msgstr "" +msgstr "Invoerwaarde" msgid "Save to Filament Preset" -msgstr "" +msgstr "Opslaan in filamentvoorinstellingen" msgid "Preset" -msgstr "" +msgstr "Voorinstelling" msgid "Record Factor" -msgstr "" +msgstr "Recordfactor" msgid "We found the best flow ratio for you" -msgstr "" +msgstr "We hebben de beste stroomverhouding voor je gevonden" msgid "Flow Ratio" -msgstr "" +msgstr "Flow ratio" msgid "Please input a valid value (0.0 < flow ratio < 2.0)" -msgstr "" +msgstr "Voer een geldige waarde in (0,0 < flow ratio < 2,0)" msgid "Please enter the name of the preset you want to save." -msgstr "" +msgstr "Voer de naam in van de voorinstelling die u wilt opslaan." msgid "Calibration1" -msgstr "" +msgstr "Kalibratie 1" msgid "Calibration2" -msgstr "" +msgstr "Kalibratie 2" msgid "Please find the best object on your plate" -msgstr "" +msgstr "Zoek het beste voorwerp op je bord" msgid "Fill in the value above the block with smoothest top surface" -msgstr "" +msgstr "Vul de waarde boven het blok in met het gladste bovenvlak" msgid "Skip Calibration2" -msgstr "" +msgstr "Kalibratie overslaan2" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "" +msgstr "Stroomverhouding : %s " msgid "Please choose a block with smoothest top surface" -msgstr "" +msgstr "Kies een blok met de gladste bovenkant" msgid "Please choose a block with smoothest top surface." -msgstr "" +msgstr "Kies een blok met de gladste bovenkant." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" msgstr "" +"Voer een geldige waarde in (0 <= maximale volumetrische snelheid <= 60)" msgid "Calibration Type" -msgstr "" +msgstr "Kalibratietype" msgid "Complete Calibration" -msgstr "" +msgstr "Volledige kalibratie" msgid "Fine Calibration based on flow ratio" -msgstr "" +msgstr "Fijne kalibratie op basis van flow ratio" msgid "Title" -msgstr "" +msgstr "Titel" msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." msgstr "" +"Er wordt een testmodel geprint. Maak de bouwplaat vrij en plaats deze terug " +"op het hotbed voordat je gaat kalibreren." msgid "Printing Parameters" -msgstr "" - -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" +msgstr "Afdrukparameters" msgid "Plate Type" msgstr "Plate Type" msgid "filament position" -msgstr "" +msgstr "filament positie" msgid "External Spool" -msgstr "" +msgstr "Externe spoel" msgid "Filament For Calibration" -msgstr "" +msgstr "Filament voor kalibratie" 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 "" +"Tips voor kalibratiemateriaal: \n" +"- Materialen die dezelfde warmbedtemperatuur kunnen delen\n" +"- Verschillende filamentmerken en -families (Merk = Bambu, Familie = Basis, " +"Mat)" msgid "Pattern" -msgstr "" +msgstr "Patroon" msgid "Method" -msgstr "" +msgstr "Methode" #, c-format, boost-format msgid "%s is not compatible with %s" -msgstr "" +msgstr "%s is niet compatibel met %s" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -msgstr "" +msgstr "TPU wordt niet ondersteund voor automatische Flow Dynamics-kalibratie." msgid "Connecting to printer" -msgstr "" +msgstr "Verbinding maken met printer" msgid "From k Value" -msgstr "" +msgstr "Van k Waarde" msgid "To k Value" -msgstr "" +msgstr "Naar k Waarde" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" +"De diameter van het mondstuk is gesynchroniseerd met de printerinstellingen." msgid "From Volumetric Speed" -msgstr "" +msgstr "Van Volumetric Speed" msgid "To Volumetric Speed" -msgstr "" +msgstr "Naar volumetrische snelheid" msgid "Flow Dynamics Calibration Result" -msgstr "" +msgstr "Kalibratieresultaat van Flow Dynamics" + +msgid "New" +msgstr "New" msgid "No History Result" -msgstr "" +msgstr "Geen geschiedenisresultaat" msgid "Success to get history result" -msgstr "" +msgstr "Succes om geschiedenisresultaat te krijgen" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "" +msgstr "De vorige Flow Dynamics kalibratierecords vernieuwen" msgid "Action" -msgstr "" +msgstr "Actie" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." msgid "Edit Flow Dynamics Calibration" -msgstr "" +msgstr "Flow Dynamics-kalibratie bewerken" + +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." msgid "Network lookup" -msgstr "" +msgstr "Netwerk opzoeken" msgid "Address" -msgstr "" +msgstr "Address" msgid "Hostname" -msgstr "" +msgstr "Hostnaam" msgid "Service name" -msgstr "" +msgstr "Servicenaam" msgid "OctoPrint version" -msgstr "" +msgstr "OctoPrint-versie" msgid "Searching for devices" -msgstr "" +msgstr "Zoeken naar apparaten" msgid "Finished" msgstr "Voltooid" @@ -13222,37 +14400,37 @@ msgid "" msgstr "" msgid "PA Calibration" -msgstr "" +msgstr "PA-kalibratie" msgid "DDE" msgstr "" msgid "Bowden" -msgstr "" +msgstr "Bowden" msgid "Extruder type" msgstr "" msgid "PA Tower" -msgstr "" +msgstr "PA-toren" msgid "PA Line" -msgstr "" +msgstr "PA-lijn" msgid "PA Pattern" -msgstr "" +msgstr "PA-patroon" msgid "Start PA: " -msgstr "" +msgstr "Start PA:" msgid "End PA: " -msgstr "" +msgstr "PA beëindigen: " msgid "PA step: " -msgstr "" +msgstr "PA-stap:" msgid "Print numbers" -msgstr "" +msgstr "Cijfers afdrukken" msgid "" "Please input valid values:\n" @@ -13260,39 +14438,46 @@ msgid "" "End PA: > Start PA\n" "PA step: >= 0.001)" msgstr "" +"Voer geldige waarden in:\n" +"PA starten: >= 0,0\n" +"PA beëindigen: > PA starten\n" +"PA-stap: >= 0,001)" msgid "Temperature calibration" -msgstr "" +msgstr "Temperatuurkalibratie" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" +msgstr "PETG" + +msgid "PCTG" msgstr "" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" -msgstr "" +msgstr "Filamenttype" msgid "Start temp: " -msgstr "" +msgstr "Starttemp:" msgid "End temp: " -msgstr "" +msgstr "Eindtemp:" msgid "Temp step: " -msgstr "" +msgstr "Temp stap:" msgid "" "Please input valid values:\n" @@ -13302,16 +14487,16 @@ msgid "" msgstr "" msgid "Max volumetric speed test" -msgstr "" +msgstr "Max. volumetrische snelheidstest" msgid "Start volumetric speed: " -msgstr "" +msgstr "Volumetrische snelheid starten:" msgid "End volumetric speed: " -msgstr "" +msgstr "Volumetrische eindsnelheid:" msgid "step: " -msgstr "" +msgstr "stap:" msgid "" "Please input valid values:\n" @@ -13321,13 +14506,13 @@ msgid "" msgstr "" msgid "VFA test" -msgstr "" +msgstr "VFA-test" msgid "Start speed: " -msgstr "" +msgstr "Startsnelheid:" msgid "End speed: " -msgstr "" +msgstr "Eindsnelheid:" msgid "" "Please input valid values:\n" @@ -13337,129 +14522,133 @@ msgid "" msgstr "" msgid "Start retraction length: " -msgstr "" +msgstr "Begin terugtreklengte:" msgid "End retraction length: " -msgstr "" +msgstr "Beëindig terugtreklengte: " msgid "mm/mm" -msgstr "" +msgstr "mm/mm" msgid "Send G-Code to printer host" -msgstr "" +msgstr "Stuur G-code naar printerhost" msgid "Upload to Printer Host with the following filename:" -msgstr "" +msgstr "Uploaden naar Printer Host met de volgende bestandsnaam:" msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" +"Gebruik indien nodig schuine strepen (/) als scheidingsteken voor mappen." msgid "Upload to storage" msgstr "" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "" +msgstr "De bestandsnaam van de upload eindigt niet op \"%s\". Wilt u doorgaan?" msgid "Upload" -msgstr "" +msgstr "Uploaden" msgid "Print host upload queue" -msgstr "" +msgstr "Uploadwachtrij van de host afdrukken" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" -msgstr "" +msgstr "Voortgang" msgid "Host" -msgstr "" +msgstr "Host" msgctxt "OfFile" msgid "Size" -msgstr "" +msgstr "Maat" msgid "Filename" -msgstr "" +msgstr "Bestandsnaam" msgid "Cancel selected" -msgstr "" +msgstr "Annuleer geselecteerde" msgid "Show error message" -msgstr "" +msgstr "Foutmelding tonen" msgid "Enqueued" -msgstr "" +msgstr "In de wachtrij" msgid "Uploading" msgstr "Uploaden" msgid "Cancelling" -msgstr "" +msgstr "Annuleren" msgid "Error uploading to print host" msgstr "" msgid "Unable to perform boolean operation on selected parts" -msgstr "" +msgstr "Kan geen booleaanse bewerking uitvoeren op geselecteerde onderdelen" msgid "Mesh Boolean" -msgstr "" +msgstr "Mesh booleaans" msgid "Union" -msgstr "" +msgstr "Unie" msgid "Difference" -msgstr "" +msgstr "Verschil" msgid "Intersection" -msgstr "" +msgstr "Kruising" msgid "Source Volume" -msgstr "" +msgstr "Bronvolume" msgid "Tool Volume" -msgstr "" +msgstr "Gereedschapsvolume" msgid "Subtract from" -msgstr "" +msgstr "Aftrekken van" msgid "Subtract with" -msgstr "" +msgstr "Aftrekken met" msgid "selected" -msgstr "" +msgstr "geselecteerd" msgid "Part 1" -msgstr "" +msgstr "Deel 1" msgid "Part 2" -msgstr "" +msgstr "Deel 2" msgid "Delete input" -msgstr "" +msgstr "Invoer verwijderen" msgid "Network Test" -msgstr "" +msgstr "Netwerktest" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Multi-thread test starten" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Test Single-Thread starten" msgid "Export Log" -msgstr "" +msgstr "Logboek exporteren" msgid "OrcaSlicer Version:" msgstr "" msgid "System Version:" -msgstr "" +msgstr "Systeemversie:" msgid "DNS Server:" -msgstr "" +msgstr "DNS-server:" msgid "Test OrcaSlicer(GitHub)" msgstr "" @@ -13468,100 +14657,119 @@ msgid "Test OrcaSlicer(GitHub):" msgstr "" msgid "Test Bing.com" -msgstr "" +msgstr "Test Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "Test bing.com:" msgid "Log Info" -msgstr "" +msgstr "Log-informatie" msgid "Select filament preset" -msgstr "" +msgstr "Selecteer voorinstelling gloeidraad" msgid "Create Filament" -msgstr "" +msgstr "Draad maken" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Creëer op basis van huidig filament" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Kopieer de huidige filamentvoorinstelling " msgid "Basic Information" -msgstr "" +msgstr "Basisinformatie" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Voeg Filament Preset toe onder dit filament" msgid "We could create the filament presets for your following printer:" -msgstr "" +msgstr "We kunnen de filament presets maken voor uw volgende printer:" msgid "Select Vendor" -msgstr "" +msgstr "Selecteer leverancier" msgid "Input Custom Vendor" -msgstr "" +msgstr "Aangepaste leverancier invoeren" msgid "Can't find vendor I want" -msgstr "" +msgstr "Kan de leverancier die ik wil niet vinden" msgid "Select Type" -msgstr "" +msgstr "Selecteer type" msgid "Select Filament Preset" -msgstr "" +msgstr "Selecteer filament preset" msgid "Serial" -msgstr "" +msgstr "Serieel" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "bijv. Basic, Mat, Zijde, Marmer" msgid "Filament Preset" -msgstr "" +msgstr "Filament voorinstelling" msgid "Create" -msgstr "" +msgstr "Creëren" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "Vendor is not selected; please reselect vendor." msgid "Custom vendor is not input, please input custom vendor." -msgstr "" +msgstr "Custom vendor missing; please input custom vendor." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"\"Bambu\" of \"Generic\" kan niet worden gebruikt als leverancier voor " +"aangepaste filamenten." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "Het type draad is niet geselecteerd, selecteer het type opnieuw." msgid "Filament serial is not inputed, please input serial." -msgstr "" +msgstr "Filament serial missing; please input serial." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"There may be disallowed characters in the vendor or serial input of the " +"filament. Please delete and re-enter." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" +"Alle ingangen in de aangepaste verkoper of serie zijn spaties. Voer opnieuw " +"in." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "The vendor can not be a number; please re-enter." msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +"Je hebt nog geen printer of preset geselecteerd. Selecteer er ten minste één." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"De filamentnaam %s die je hebt gemaakt, bestaat al. \n" +"Als u doorgaat, wordt de gemaakte voorinstelling weergegeven met de " +"volledige naam. Wilt u doorgaan?" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "Sommige bestaande presets zijn niet aangemaakt, als volgt:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"Wil je het herschrijven?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" @@ -13570,114 +14778,112 @@ msgid "" msgstr "" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Printer/mondstuk maken" msgid "Create Printer" -msgstr "" +msgstr "Printer maken" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Mondstuk maken voor bestaande printer" msgid "Create from Template" -msgstr "" +msgstr "Maken op basis van sjabloon" msgid "Create Based on Current Printer" -msgstr "" +msgstr "Aanmaken op basis van huidige printer" msgid "Import Preset" -msgstr "" +msgstr "Preset importeren" msgid "Create Type" -msgstr "" +msgstr "Type maken" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "The model was not found; please reselect vendor." msgid "Select Model" -msgstr "" +msgstr "Model kiezen" msgid "Select Printer" -msgstr "" +msgstr "Selecteer printer" msgid "Input Custom Model" -msgstr "" +msgstr "Invoer aangepast model" msgid "Can't find my printer model" -msgstr "" +msgstr "Kan mijn printermodel niet vinden" msgid "Rectangle" -msgstr "" +msgstr "Rechthoek" msgid "Printable Space" -msgstr "" - -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" +msgstr "Printbare ruimte" msgid "Hot Bed STL" -msgstr "" +msgstr "Warm bed STL" msgid "Load stl" -msgstr "" +msgstr "Stl laden" msgid "Hot Bed SVG" -msgstr "" +msgstr "Warm bed SVG" msgid "Load svg" -msgstr "" +msgstr "svg laden" msgid "Max Print Height" -msgstr "" +msgstr "Max. afdrukhoogte" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "Het bestand is groter dan %d MB, importeer opnieuw." msgid "Exception in obtaining file size, please import again." -msgstr "" +msgstr "Uitzondering in het verkrijgen van bestandsgrootte, importeer opnieuw." msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "Preset-pad niet gevonden; selecteer leverancier opnieuw." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "Het printermodel is niet gevonden, selecteer opnieuw." msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "The nozzle diameter was not found; please reselect." msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "The printer preset was not found; please reselect." msgid "Printer Preset" -msgstr "" +msgstr "Vooraf ingestelde printer" msgid "Filament Preset Template" -msgstr "" +msgstr "Filament vooraf ingestelde sjabloon" msgid "Deselect All" -msgstr "" +msgstr "Alles deselecteren" msgid "Process Preset Template" -msgstr "" +msgstr "Vooraf ingesteld proces sjabloon" msgid "Back Page 1" -msgstr "" +msgstr "Terug Pagina 1" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"Je hebt nog niet gekozen op basis van welke preset je de printer wilt maken. " +"Kies de leverancier en het model van de printer" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"U hebt een niet toegestaan teken ingevoerd in het gedeelte van het " +"afdrukbare gebied op de eerste pagina. Gebruik alleen cijfers." msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "The custom printer or model missing; please input." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -13688,73 +14894,99 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserved.\n" +"\tCancel: Do not create a preset; return to the creation interface." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "U moet ten minste één filamentvoorinstelling selecteren." msgid "You need to select at least one process preset." -msgstr "" +msgstr "Je moet minstens één procesvoorinstelling selecteren." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "Voorinstellingen voor filament maken mislukt. Als volgt:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "Procesvoorinstellingen maken mislukt. Als volgt:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Leverancier is niet gevonden; selecteer opnieuw." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "De huidige leverancier heeft geen modellen. Selecteer opnieuw." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"U hebt de verkoper en het model niet geselecteerd of de aangepaste verkoper " +"en het aangepaste model niet ingevoerd." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"Er kunnen escape-tekens staan in de aangepaste printerverkoper of het " +"aangepaste printermodel. Verwijder ze en voer ze opnieuw in." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" +"Alle invoer in de aangepaste printerverkoper of het aangepaste printermodel " +"zijn spaties. Voer opnieuw in." msgid "Please check bed printable shape and origin input." -msgstr "" +msgstr "Controleer de bedrukbare vorm en oorsprongsinvoer." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"Je hebt de printer waarvoor je het mondstuk wilt vervangen nog niet " +"geselecteerd; kies een printer." msgid "Create Printer Successful" -msgstr "" +msgstr "Printer succesvol maken" msgid "Create Filament Successful" -msgstr "" +msgstr "Filament Created Successfully" msgid "Printer Created" -msgstr "" +msgstr "Printer gemaakt" msgid "Please go to printer settings to edit your presets" -msgstr "" +msgstr "Ga naar printerinstellingen om je voorinstellingen te bewerken" msgid "Filament Created" -msgstr "" +msgstr "Aangemaakt filament" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Ga naar filamentinstellingen om uw voorinstellingen te bewerken als dat " +"nodig is.\n" +"Houd er rekening mee dat de spuitmondtemperatuur, warmbedtemperatuur en " +"maximale volumetrische snelheid elk een aanzienlijke invloed hebben op de " +"printkwaliteit. Stel ze daarom zorgvuldig in." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" -msgstr "" - -msgid "Export Configs" -msgstr "" +msgstr "Printerinstelling" msgid "Printer config bundle(.orca_printer)" msgstr "" @@ -13763,31 +14995,31 @@ msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Printer presets(.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Filament presets(.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Proces presets(.zip)" msgid "initialize fail" -msgstr "" +msgstr "initialiseren mislukt" msgid "add file fail" -msgstr "" +msgstr "Bestand toevoegen mislukt" msgid "add bundle structure file fail" -msgstr "" +msgstr "bundle structuurbestand toevoegen mislukt" msgid "finalize fail" -msgstr "" +msgstr "afronden mislukt" msgid "open zip written fail" -msgstr "" +msgstr "open zip geschreven mislukt" msgid "Export successful" -msgstr "" +msgstr "Export succesvol" #, c-format, boost-format msgid "" @@ -13796,6 +15028,10 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it?\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" @@ -13806,51 +15042,69 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"Ingestelde preset vullingsset van de gebruiker.\n" +"Kan worden gedeeld met anderen." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Alleen printers met wijzigingen in printer-, filament- en proces presets " +"worden weergegeven." msgid "Only display the filament names with changes to filament presets." -msgstr "" +msgstr "Geef alleen de filamentnamen weer met wijzigingen in filament presets." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Alleen printernamen met gebruikersprinter presets worden weergegeven en elke " +"preset die je kiest, wordt als zip geëxporteerd." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Alleen de filamentnamen met gebruikers presets worden weergegeven, \n" +"en alle gebruikers presets in elke filamentnaam die u selecteert, worden " +"geëxporteerd als zip-bestand." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Alleen printernamen met gewijzigde proces presets worden weergegeven, \n" +"en alle gebruikersproces presets in elke printernaam die u selecteert, " +"worden als zip geëxporteerd." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Selecteer ten minste één printer of filament." msgid "Please select a type you want to export" -msgstr "" +msgstr "Selecteer het type preset dat je wilt exporteren" + +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." msgid "Edit Filament" -msgstr "" +msgstr "Bewerk filament" msgid "Filament presets under this filament" -msgstr "" +msgstr "Presets onder deze gloeidraad" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Opmerking: Als de enige preset onder deze gloeidraad wordt verwijderd, wordt " +"de gloeidraad verwijderd na het verlaten van het dialoogvenster." msgid "Presets inherited by other presets can not be deleted" msgstr "" +"Presets die door andere presets worden geërfd, kunnen niet worden verwijderd" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." @@ -13858,181 +15112,216 @@ msgstr[0] "" msgstr[1] "" msgid "Delete Preset" -msgstr "" +msgstr "Preset verwijderen" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "Weet je zeker dat je de geselecteerde preset wilt verwijderen?" msgid "Delete preset" -msgstr "" +msgstr "Preset verwijderen" msgid "+ Add Preset" -msgstr "" +msgstr "+ Preset toevoegen" msgid "Delete Filament" -msgstr "" +msgstr "Draad verwijderen" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"Alle presets van het filament die bij dit filament horen, worden " +"verwijderd. \n" +"Als u dit filament gebruikt in uw printer, reset dan de filamentinformatie " +"voor die sleuf." msgid "Delete filament" -msgstr "" +msgstr "Draad verwijderen" msgid "Add Preset" -msgstr "" +msgstr "Preset toevoegen" msgid "Add preset for new printer" -msgstr "" +msgstr "Preset toevoegen voor nieuwe printer" msgid "Copy preset from filament" -msgstr "" +msgstr "Kopieer preset van filament" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "De filamentkeuze vindt geen filament preset, selecteer deze opnieuw" msgid "[Delete Required]" -msgstr "" +msgstr "[Verwijderen vereist]" msgid "Edit Preset" -msgstr "" +msgstr "Preset bewerken" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "For more information, please check out our Wiki" msgid "Collapse" -msgstr "" +msgstr "Instorten" msgid "Daily Tips" +msgstr "Dagelijkse tips" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "mondstuk onthouden: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" msgstr "" +"Your nozzle diameter in preset is not consistent with the saved nozzle " +"diameter. Have you changed your nozzle?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*Afdrukken%s materiaal mee%s kan schade aan het mondstuk veroorzaken" msgid "Need select printer" -msgstr "" +msgstr "Printer selecteren" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "Het begin, einde of stap is geen geldige waarde." msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" msgstr "" +"Kan niet kalibreren: misschien omdat het bereik van de ingestelde " +"kalibratiewaarde te groot is, of omdat de stap te klein is" msgid "Physical Printer" -msgstr "" +msgstr "Fysieke printer" msgid "Print Host upload" -msgstr "" +msgstr "Host-upload afdrukken" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "Kon geen geldige printerhostreferentie krijgen" msgid "Success!" -msgstr "" +msgstr "Succes!" msgid "Are you sure to log out?" msgstr "" msgid "Refresh Printers" +msgstr "Printers vernieuwen" + +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" msgstr "" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" +"HTTPS CA-bestand is optioneel. Het is alleen nodig als je HTTPS gebruikt met " +"een zelfondertekend certificaat." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" +msgstr "Certificaatbestanden (*.crt, *.pem)|*.crt;*.pem|Alle bestanden|*.*" msgid "Open CA certificate file" -msgstr "" +msgstr "Open CA-certificaatbestand" #, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" +"Op dit systeem gebruikt %s HTTPS-certificaten uit de " +"systeemcertificaatopslag of de sleutelhanger." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." msgstr "" +"Om een aangepast CA-bestand te gebruiken, importeert u uw CA-bestand in " +"Certificate Store / Keychain." msgid "Login/Test" msgstr "" msgid "Connection to printers connected via the print host failed." -msgstr "" +msgstr "Verbinding met printers aangesloten via de printhost mislukt." #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Verkeerd type afdrukhost: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "Connection to AstroBox is working correctly." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Kan geen verbinding maken met AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Note: AstroBox version 1.1.0 or higher is required." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "Connection to Duet is working correctly." msgid "Could not connect to Duet" -msgstr "" +msgstr "Kan geen verbinding maken met Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Onbekende fout opgetreden" msgid "Wrong password" -msgstr "" +msgstr "Verkeerd wachtwoord." msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Kan geen bronnen krijgen om een nieuwe verbinding te maken" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "Uploaden niet ingeschakeld op FlashAir-kaart." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "Connection to FlashAir is working correctly and upload is enabled." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Kan geen verbinding maken met FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Opmerking: FlashAir met firmware 2.00.02 of nieuwer en geactiveerde " +"uploadfunctie is vereist." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "Connection to MKS is working correctly." msgid "Could not connect to MKS" -msgstr "" +msgstr "Kan geen verbinding maken met MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Connection to OctoPrint is working correctly." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Kan geen verbinding maken met OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Note: OctoPrint version 1.1.0 or higher is required." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Connection to Prusa SL1 / SL1S is working correctly." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Kan geen verbinding maken met Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Connection to PrusaLink is working correctly." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Kan geen verbinding maken met PrusaLink" msgid "Storages found" msgstr "" @@ -14059,19 +15348,21 @@ msgid "Could not connect to Prusa Connect" msgstr "" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Connection to Repetier is working correctly." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Kan geen verbinding maken met Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Note: Repetier version 0.90.0 or higher is required." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP-status: %1%\n" +"Bericht: \"%2%\"" #, boost-format msgid "" @@ -14079,6 +15370,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Parsing van hostrespons mislukt.\n" +"Inhoud bericht: \"%1%\"\n" +"Fout: \"%2%\"" #, boost-format msgid "" @@ -14086,6 +15380,260 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Opsomming van hostprinters mislukt.\n" +"Inhoud bericht: \"%1%\"\n" +"Fout: \"%2%\"" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a small layer height, and results in almost negligible layer lines " +"and high print quality. It is suitable for most general printing cases." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. This results in " +"much higher print quality but a much longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height. This results in almost negligible layer lines and " +"slightly longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height. This results in slightly visible layer lines but shorter print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height. This results in almost invisible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost invisible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height. This results in minimal layer lines and higher print quality but " +"longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in minimal layer lines and much higher print quality " +"but much longer print time." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a normal layer height, and results in average layer lines and print " +"quality. It is suitable for most printing cases." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but slightly shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in less apparent layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost negligible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and longer print time." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in much more apparent layer lines and much lower print " +"quality, but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and slightly higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"It has a very big layer height, and results in very apparent layer lines, " +"low print quality and shorter printing time." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height. This results in very apparent layer lines and much lower print " +"quality but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height. This results in extremely apparent layer lines and much lower " +"print quality but much shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height. This results in slightly less but still apparent layer " +"lines and slightly higher print quality, but longer print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height. This results in less but still apparent layer lines and slightly " +"higher print quality, but longer print time in some cases." msgid "Connected to Obico successfully!" msgstr "" @@ -14099,17 +15647,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14211,6 +15757,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Model repareren\n" +"Wist je dat je een beschadigd 3D-model kunt repareren om veel snijproblemen " +"op het Windows-systeem te voorkomen?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -14450,6 +15999,11 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"Wanneer moet u printen met de printerdeur open?\n" +"Wist je dat het openen van de printerdeur de kans op verstopping van de " +"extruder/hotend kan verminderen bij het printen van filament met een lagere " +"temperatuur en een hogere omgevingstemperatuur? Er staat meer informatie " +"hierover in de Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -14458,6 +16012,245 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Kromtrekken voorkomen\n" +"Wist je dat bij het printen van materialen die gevoelig zijn voor " +"kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het " +"warmtebed de kans op kromtrekken kan verkleinen?" + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Voer een geldige waarde in (K in 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Voer een geldige waarde in (K in 0~0,3, N in 0,6~2,0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Printer local connection failed; please try again." + +#~ 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 "" +#~ "De details van Flow Dynamics Calibration vindt u op onze wiki.\n" +#~ "\n" +#~ "Meestal is kalibratie niet nodig. Als je een print met één kleur/" +#~ "materiaal start en de optie \"kalibratie van de stroomdynamica\" is " +#~ "aangevinkt in het startmenu van de printer, dan zal de printer de oude " +#~ "manier volgen en het filament kalibreren voor het printen; als je een " +#~ "print met meerdere kleuren/materialen start, dan zal de printer de " +#~ "standaard compensatieparameter voor het filament gebruiken tijdens elke " +#~ "filamentwissel, wat in de meeste gevallen een goed resultaat zal " +#~ "opleveren.\n" +#~ "\n" +#~ "Let op: er zijn een paar gevallen waardoor het kalibratieresultaat niet " +#~ "betrouwbaar is: als je een textuurplaat gebruikt om de kalibratie uit te " +#~ "voeren; als de bouwplaat geen goede hechting heeft (was de bouwplaat of " +#~ "breng lijm aan!) ...Je kunt meer informatie vinden op onze wiki.\n" +#~ "\n" +#~ "De kalibratieresultaten hebben ongeveer 10 procent jitter in onze test, " +#~ "waardoor het resultaat niet bij elke kalibratie precies hetzelfde is. We " +#~ "onderzoeken nog steeds de oorzaak om verbeteringen aan te brengen met " +#~ "nieuwe updates." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Slechts één van de resultaten met dezelfde naam wordt opgeslagen. Weet je " +#~ "zeker dat je de andere resultaten wilt vervangen?" + +#, 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 "" +#~ "Er is al een eerder kalibratieresultaat met dezelfde naam: %s. Slechts " +#~ "één van de resultaten met dezelfde naam wordt opgeslagen. Weet je zeker " +#~ "dat je het vorige resultaat wilt vervangen?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Zoek de hoek met de perfecte extrusiegraad" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Export &Configs" +#~ msgstr "Export &Configs" + +#~ msgid "Infill direction" +#~ msgstr "Vulling (infill) richting" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Schakel dit in om een G-codebestand te krijgen met G2- en G3-bewegingen. " +#~ "De pastolerantie is gelijk aan de resolutie." + +#~ 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 "" +#~ "Hierdoor kan het opvulgebied (infill) iets worden vergroot om de wanden " +#~ "te overlappen voor een betere hechting. De procentuele waarde is relatief " +#~ "ten opzichte van de lijndikte van de opvulling." + +#~ msgid "Unload Filament" +#~ msgstr "Lossen" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Kies een AMS sleuf en druk op de \"Laden\" of \"Verwijderen\" knop om het " +#~ "filament automatisch te laden of te verwijderen." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Moederbord" + +#~ msgid "TH" +#~ msgstr "th" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "active" +#~ msgstr "Actief" + +#~ msgid "Jump to layer" +#~ msgstr "Jump to layer" + +#~ msgid "Cabin humidity" +#~ msgstr "Vochtigheid in de cabine" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Groen betekent dat de AMS-luchtvochtigheid normaal is, oranje betekent " +#~ "dat de luchtvochtigheid hoog is en rood betekent dat de luchtvochtigheid " +#~ "te hoog is. (Hygrometer: hoe lager, hoe beter.)" + +#~ msgid "Desiccant status" +#~ msgstr "Status van het droogmiddel" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "Een droogmiddelstatus lager dan twee streepjes geeft aan dat het " +#~ "droogmiddel mogelijk inactief is. Vervang het droogmiddel. (Hoe hoger, " +#~ "hoe beter.)" + +#~ 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 "" +#~ "Opmerking: Als het deksel open is of de verpakking van het droogmiddel is " +#~ "vervangen, kan het enkele uren of een nacht duren voordat het vocht is " +#~ "opgenomen. Lage temperaturen vertragen ook het proces. Gedurende deze " +#~ "tijd geeft de indicator de vochtigheid mogelijk niet nauwkeurig weer." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Opmerking: als er tijdens het afdrukken nieuw filament wordt geplaatst, " +#~ "zal de AMS niet automatisch informatie lezen totdat het afdrukken is " +#~ "voltooid." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Success! G-code geexporteerd naar %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Het initializeren is mislukt (geen apparaat)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Initialisatie is mislukt (geen camera-apparaat)!" + +#~ 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 "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)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Gestopt [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Laden mislukt [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "No files [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Load failed [%d]" + +#~ 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 "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." + +#, 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 "" +#~ "U heeft enkele instellingen van voorinstelling \"%1%\" gewijzigd.\n" +#~ "Wilt u deze gewijzigde instellingen (nieuwe waarde) behouden na het " +#~ "wisselen van preset?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Je hebt een aantal vooraf ingestelde instellingen gewijzigd. \n" +#~ "Wilt u deze gewijzigde instellingen (nieuwe waarde) behouden na het " +#~ "wisselen van presets?" #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 0aef501d5c..5d89daaa74 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" -"Project-Id-Version: OrcaSlicer 2.0\n" +"Project-Id-Version: OrcaSlicer 2.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga \n" "Language-Team: \n" @@ -12,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 " "|| n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "Malowanie podpór" @@ -63,7 +64,7 @@ msgid "Perform" msgstr "Wykonaj" msgid "Gap area" -msgstr "Obszar przerwy" +msgstr "Obszar szczeliny" msgid "Tool type" msgstr "Typ narzędzia" @@ -87,7 +88,7 @@ msgid "Fill" msgstr "Wypełnienie" msgid "Gap Fill" -msgstr "Wypełnianie przerw" +msgstr "Wypełnienie szczelin" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" @@ -206,7 +207,7 @@ msgid "Gizmo-Scale" msgstr "Uchwyt-Skaluj" msgid "Error: Please close all toolbar menus first" -msgstr "Błąd: Proszę najpierw zamknąć wszystkie menu paska narzędziowego." +msgstr "Błąd: Proszę najpierw zamknąć wszystkie paski narzędziowe" msgid "in" msgstr "cal" @@ -256,6 +257,9 @@ msgstr "Zresetuj obrót" msgid "World coordinates" msgstr "Współrzędne" +msgid "Object coordinates" +msgstr "Koordynaty obiektu" + msgid "°" msgstr "°" @@ -306,13 +310,13 @@ msgid "Keep orientation" msgstr "Zachowaj orientację" msgid "Place on cut" -msgstr "Umieść na przecięciu" +msgstr "Pozostaw w miejscu cięcia" msgid "Flip upside down" msgstr "Obróć do góry nogami" msgid "Connectors" -msgstr "Złączki" +msgstr "Łączniki" msgid "Type" msgstr "Typ" @@ -359,9 +363,9 @@ msgid "" "Drag to move the cut plane\n" "Right-click a part to assign it to the other side" msgstr "" -"Kliknij, aby obrócić płaszczyznę cięcia.\n" -"Przeciągnij, aby przesunąć płaszczyznę cięcia.\n" -"Kliknij prawym przyciskiem myszy na części modelu, aby przypisać ją do " +"Kliknij, aby obrócić płaszczyznę przekroju.\n" +"Przeciągnij, aby przesunąć płaszczyznę przekroju.\n" +"Kliknij prawym przyciskiem myszy na część modelu, aby przypisać ją do " "drugiej strony" msgid "Move cut plane" @@ -392,19 +396,19 @@ msgid "Right click" msgstr "Prawy przycisk myszy" msgid "Remove connector" -msgstr "Usuń złączkę" +msgstr "Usuń łącznik" msgid "Move connector" -msgstr "Przesuń złączkę" +msgstr "Przesuń łącznik" msgid "Add connector to selection" -msgstr "Dodaj łącznik do zaznaczeni" +msgstr "Dodaj łącznik do zaznaczenia" msgid "Remove connector from selection" -msgstr "Usuń złączkę ze zaznaczenia" +msgstr "Usuń łącznik z zaznaczenia" msgid "Select all connectors" -msgstr "Zaznacz wszystkie złączki" +msgstr "Zaznacz wszystkie łączniki" msgid "Cut" msgstr "Przeciąć" @@ -413,7 +417,7 @@ msgid "Rotate cut plane" msgstr "Obróć przekrój" msgid "Remove connectors" -msgstr "Usuń złączki" +msgstr "Usuń łączniki" msgid "Bulge" msgstr "Wypukłość" @@ -428,7 +432,7 @@ msgid "Space proportion related to radius" msgstr "Proporcja przestrzeni do promienia" msgid "Confirm connectors" -msgstr "Potwierdź złączki" +msgstr "Potwierdź łączniki" msgid "Cancel" msgstr "Anuluj" @@ -492,24 +496,24 @@ msgid "Warning" msgstr "Ostrzeżenie" msgid "Invalid connectors detected" -msgstr "Wykryto nieprawidłowe złączki" +msgstr "Wykryto nieprawidłowe łączniki" #, c-format, boost-format msgid "%1$d connector is out of cut contour" msgid_plural "%1$d connectors are out of cut contour" -msgstr[0] "%1$d złączka jest poza konturem cięcia" -msgstr[1] "%1$d złączki są poza konturem cięcia" +msgstr[0] "%1$d łącznik jest poza konturem cięcia" +msgstr[1] "%1$d łączniki są poza konturem cięcia" msgstr[2] "%1$d złączek jest poza konturem cięcia" #, c-format, boost-format msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" -msgstr[0] "%1$d złączka jest poza obiektem" -msgstr[1] "%1$d złączki są poza obiektem" -msgstr[2] "%1$d złączek jest poza obiektem" +msgstr[0] "%1$d łącznik jest poza obiektem" +msgstr[1] "%1$d łączniki są poza obiektem" +msgstr[2] "%1$d łączników jest poza obiektem" msgid "Some connectors are overlapped" -msgstr "Niektóre złączki się nakładają" +msgstr "Niektóre łączniki nakładają się" msgid "Select at least one object to keep after cutting." msgstr "Wybierz co najmniej jeden obiekt do zachowania po przecięciu." @@ -521,7 +525,7 @@ msgid "Cut plane with groove is invalid" msgstr "Płaszczyzna cięcia z rowkiem jest nieprawidłowa" msgid "Connector" -msgstr "Złączka" +msgstr "Łącznik" msgid "Cut by Plane" msgstr "Cięcie płaszczyzną" @@ -538,7 +542,7 @@ msgid "Cut by line" msgstr "Cięcie linią" msgid "Delete connector" -msgstr "Usuń złączkę" +msgstr "Usuń łącznik" msgid "Mesh name" msgstr "Nazwa siatki" @@ -1245,7 +1249,7 @@ msgstr "Zmień typ SVG" #. TRN - Input label. Be short as possible msgid "Mirror" -msgstr "Odbij" +msgstr "Lustrzane odbicie" msgid "Choose SVG file for emboss:" msgstr "Wybierz plik SVG do wytłaczania:" @@ -1291,7 +1295,7 @@ msgid "Center of circle" msgstr "Środek okręgu" msgid "ShiftLeft mouse button" -msgstr "Przycisk myszy ShiftLeft" +msgstr "Shift + Lewy przycisk myszy" msgid "Select feature" msgstr "Wybierz funkcję" @@ -1300,7 +1304,7 @@ msgid "Select point" msgstr "Wybierz punkt" msgid "Delete" -msgstr "Usunąć" +msgstr "Usuń" msgid "Restart selection" msgstr "Restartuj wybór" @@ -1374,7 +1378,7 @@ msgid "Filament" msgstr "Filament" msgid "Machine" -msgstr "Drukarkę" +msgstr "Drukarka" msgid "Configuration package was loaded, but some values were not recognized." msgstr "" @@ -1385,11 +1389,8 @@ msgstr "" msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "" -"Załadowano plik konfiguracyjny \"%1%\", ale niektóre wartości nie zostały " -"rozpoznane." - -msgid "V" -msgstr "V" +"Plik konfiguracyjny \"%1%\" został załadowany, ale niektóre wartości nie " +"zostały rozpoznane." msgid "" "OrcaSlicer will terminate because of running out of memory.It may be a bug. " @@ -1413,7 +1414,7 @@ msgstr "Błąd krytyczny" #, boost-format msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "OrcaSlicer napotkał niewłaściwy wyjątek: %1%" +msgstr "OrcaSlicer napotkał nieobsługiwany wyjątek: %1%" msgid "Untitled" msgstr "Bez tytułu" @@ -1501,6 +1502,9 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Wybierz jeden lub więcej plików (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "Wybierz plik ZIP" + msgid "Choose one file (gcode/3mf):" msgstr "Wybierz jeden plik (gcode/3mf):" @@ -1528,7 +1532,7 @@ msgid "" "The version of Orca Slicer is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"Wersja Orca Slicer jest zbyt niska i musi zostać zaktualizowana do " +"Wersja Orca Slicer jest przestarzała i musi zostać zaktualizowana do " "najnowszej wersji, aby działać normalnie" msgid "Privacy Policy Update" @@ -1571,6 +1575,13 @@ msgstr "Trwające wgrywanie" msgid "Select a G-code file:" msgstr "Wybierz plik G-code:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Nie można rozpocząć pobierania pliku z adresu URL. Folder docelowy nie jest " +"ustawiony. Proszę wybrać folder docelowy w Kreatorze Konfiguracji" + msgid "Import File" msgstr "Importuj plik" @@ -1621,7 +1632,7 @@ msgid "Top Minimum Shell Thickness" msgstr "Minimalna grubość górnej powłoki" msgid "Bottom Solid Layers" -msgstr "Dolne warstwy" +msgstr "Pełne warstwy dolne" msgid "Bottom Minimum Shell Thickness" msgstr "Minimalna grubość dolnej powłoki" @@ -1687,7 +1698,7 @@ msgid "Show" msgstr "Pokaż" msgid "Del" -msgstr "Usuń" +msgstr "Del" msgid "Delete the selected object" msgstr "Usuń wybrany obiekt" @@ -1761,10 +1772,10 @@ msgid "Set as individual objects" msgstr "Ustaw jako osobne obiekty" msgid "Fill bed with copies" -msgstr "Wypełnij stół kopiami modelu" +msgstr "Wypełnij stół kopią modelu" msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "Uzupełnij pozostałą powierzchnię stołu kopiami wybranego obiektu" +msgstr "Uzupełnij pozostałą powierzchnię stołu kopią wybranego obiektu" msgid "Printable" msgstr "Do druku" @@ -1773,10 +1784,10 @@ msgid "Fix model" msgstr "Napraw model" msgid "Export as one STL" -msgstr "Eksportuj jako jedno STL" +msgstr "Eksportuj jako pojedynczy STL" msgid "Export as STLs" -msgstr "Eksportuj jako STL-y" +msgstr "Eksportuj jako wiele STL" msgid "Reload from disk" msgstr "Przeładuj z dysku" @@ -1803,14 +1814,14 @@ msgstr "Domyślny" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "aktywny" +msgid "current" +msgstr "bieżący" msgid "Scale to build volume" -msgstr "Skaluj do obszaru budowy" +msgstr "Skaluj do obszaru roboczego" msgid "Scale an object to fit the build volume" -msgstr "Skaluj obiekt, aby pasował do obszaru budowy" +msgstr "Skaluj obiekt, aby pasował do obszaru roboczego" msgid "Flush Options" msgstr "Opcje płukania" @@ -1843,7 +1854,7 @@ msgid "Assemble" msgstr "Złożenie" msgid "Assemble the selected objects to an object with multiple parts" -msgstr "Złożenie wybranych obiektów w obiekt z wieloma częściami" +msgstr "Zmontuj wybrane obiekty w obiekt wieloczęściowy" msgid "Assemble the selected objects to an object with single part" msgstr "Zmontuj wybrane obiekty w jedną część" @@ -1896,6 +1907,9 @@ msgstr "Dodaj prymityw" msgid "Add Handy models" msgstr "Dodaj modele podręczne" +msgid "Add Models" +msgstr "Dodaj modele" + msgid "Show Labels" msgstr "Pokaż etykiety" @@ -1947,6 +1961,12 @@ msgstr "Ustaw" msgid "arrange current plate" msgstr "ustaw bieżącą płytę" +msgid "Reload All" +msgstr "Przeładuj wszystko" + +msgid "reload all from disk" +msgstr "Przeładuj wszystko z dysku" + msgid "Auto Rotate" msgstr "Automatyczna rotacja" @@ -1966,7 +1986,7 @@ msgid "Simplify Model" msgstr "Uprość model" msgid "Center" -msgstr "Centruj" +msgstr "Wyśrodkuj" msgid "Edit Process Settings" msgstr "Edytuj ustawienia procesu" @@ -1980,9 +2000,6 @@ msgstr "Zmień filament" msgid "Set Filament for selected items" msgstr "Ustaw filament dla wybranych elementów" -msgid "current" -msgstr "bieżący" - msgid "Unlock" msgstr "Odblokuj" @@ -2076,13 +2093,13 @@ msgstr "" "ustawienia procesu dla wybranych obiektów." msgid "Delete connector from object which is a part of cut" -msgstr "Usuń łącznik z obiektu będącego częścią rozcięcia" +msgstr "Usuń łącznik z obiektu będącego częścią przecięcia" msgid "Delete solid part from object which is a part of cut" -msgstr "Usuń stałą część z obiektu będącego częścią rozcięcia" +msgstr "Usuń bryłę z obiektu, który jest częścią przecięcia" msgid "Delete negative volume from object which is a part of cut" -msgstr "Usuń ujemną objętość z obiektu będącego częścią rozcięcia" +msgstr "Usuń odejmowanie objętości z obiektu będącego częścią przecięcia." msgid "" "To save cut correspondence you can delete all connectors from all related " @@ -2108,7 +2125,7 @@ msgid "Delete all connectors" msgstr "Usuń wszystkie łączniki" msgid "Deleting the last solid part is not allowed." -msgstr "Nie wolno usuwać ostatniej pełnej części." +msgstr "Usunięcie ostatniej części bryły jest niedozwolone." msgid "The target object contains only one part and can not be splited." msgstr "" @@ -2118,7 +2135,7 @@ msgid "Assembly" msgstr "Zestawienie" msgid "Cut Connectors information" -msgstr "Informacje o łącznikach cięcia" +msgstr "Usuń informacje o łącznikach" msgid "Object manipulation" msgstr "Manipulacja obiektami" @@ -2151,7 +2168,7 @@ msgid "Layer" msgstr "Warstwa" msgid "Selection conflicts" -msgstr "Konflikty zaznaczeń" +msgstr "Konflikty wyboru" msgid "" "If first selected item is an object, the second one should also be object." @@ -2182,7 +2199,7 @@ msgid "Type:" msgstr "Typ:" msgid "Choose part type" -msgstr "Wybierz typ części" +msgstr "Wybierz rodzaj części" msgid "Enter new name" msgstr "Wprowadź nową nazwę" @@ -2324,9 +2341,6 @@ msgstr "Wprowadź niestandardowy G-code używany na bieżącej warstwie:" msgid "Jump to Layer" msgstr "Przejdź do warstwy" -msgid "Jump to layer" -msgstr "Przejdź do warstwy" - msgid "Please enter the layer number" msgstr "Proszę podać numer warstwy" @@ -2346,7 +2360,7 @@ msgid "Add Custom Template" msgstr "Dodaj niestandardowy szablon" msgid "Insert template custom G-code at the beginning of this layer." -msgstr "Wstaw niestandardowy szablon kodu G na początku tej warstwy." +msgstr "Wstaw niestandardowy szablon G-code na początku tej warstwy." msgid "Filament " msgstr "Materiał " @@ -2397,8 +2411,8 @@ msgstr "Nie udało się połączyć z drukarką" msgid "Connection to printer failed" msgstr "Nie udało się połączyć z drukarką" -msgid "Please check the network connection of the printer and Studio." -msgstr "Proszę sprawdzić połączenie sieciowe drukarki i Studio." +msgid "Please check the network connection of the printer and Orca." +msgstr "Proszę sprawdzić połączenie sieciowe drukarki i Orca." msgid "Connecting..." msgstr "Łączenie..." @@ -2421,17 +2435,17 @@ msgstr "Auto. uzupełnienie" msgid "AMS not connected" msgstr "AMS niepodłączony" -msgid "Load Filament" +msgid "Load" msgstr "Ładuj" -msgid "Unload Filament" +msgid "Unload" msgstr "Wyładuj" msgid "Ext Spool" -msgstr "Ext Spool" +msgstr "zew.szpula" msgid "Tips" -msgstr "Porady" +msgstr "Wskazówki" msgid "Guide" msgstr "Instr." @@ -2442,7 +2456,7 @@ msgstr "Ponów" msgid "Calibrating AMS..." msgstr "Kalibracja AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Wystąpił problem podczas kalibracji. Kliknij, aby zobaczyć rozwiązanie." @@ -2462,7 +2476,7 @@ msgid "Cut filament" msgstr "Odcinanie filamentu" msgid "Pull back current filament" -msgstr "Wycofaj obecny filament" +msgstr "Wycofuje obecny filament" msgid "Push new filament into extruder" msgstr "" @@ -2488,10 +2502,10 @@ msgstr "" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Wybierz Slot AMS, a następnie naciśnij przycisk \"Ładuj\" lub \"Wyładuj\" ," -"aby automatycznie załadować lub wyładować filament." +"Wybierz gniazdo AMS, a następnie naciśnij przycisk \"Ładuj\" lub \"Wyładuj" +"\" ,aby automatycznie załadować lub wyładować filamenty." msgid "Edit" msgstr "Edytuj" @@ -2525,8 +2539,8 @@ msgstr "Układanie anulowane." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." msgstr "" -"Rozmieszczanie zostało zakończone, ale istnieją nierozpakowane przedmioty. " -"Zmniejsz odstępy i spróbuj ponownie." +"Ustawianie zostało zakończone, ale niektóre elementy nie mogły zostać " +"ustawione. Zmniejsz odstępy i spróbuj ponownie." msgid "Arranging done." msgstr "Układanie zakończone." @@ -2543,8 +2557,8 @@ msgid "" "bed:\n" "%s" msgstr "" -"Układanie zignorowało następujące obiekty, które nie zmieszczą się na jednym " -"stoisku:\n" +"Ustawienie zignorowało następujące obiekty, które nie mieszczą się na " +"pojedynczej płycie:\n" "%s" msgid "" @@ -2605,8 +2619,7 @@ msgstr "Zadanie anulowane." msgid "Upload task timed out. Please check the network status and try again." msgstr "" -"Przekroczono limit czasu zadania przesyłania. Sprawdź stan sieci i spróbuj " -"ponownie." +"Przekroczono limit czasu przesyłania. Sprawdź stan sieci i spróbuj ponownie." msgid "Cloud service connection failed. Please try again." msgstr "Nie udało się połączyć z usługą w chmurze. Spróbuj ponownie." @@ -2619,7 +2632,7 @@ msgid "" "model and slice again." msgstr "" "Plik druku przekracza maksymalny dopuszczalny rozmiar (1GB). Proszę uprościć " -"model i ponownie dokonać podziału na warstwy." +"model i pociąć go ponownie." msgid "Failed to send the print job. Please try again." msgstr "" @@ -2758,14 +2771,8 @@ msgstr "Orca Slicer jest licencjonowany na zasadach " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, wersja 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" -msgstr "" -"Orca Slicer opiera się na BambuStudio od Bambulab, które wywodzi się z " -"PrusaSlicer od Prusa Research. PrusaSlicer z kolei bazuje na Slic3r od " -"Alessandro Ranellucci i społeczności RepRap" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer opiera się na projektach PrusaSlicer i BambuStudio" msgid "Libraries" msgstr "Biblioteki" @@ -2842,7 +2849,7 @@ msgid "Setting AMS slot information while printing is not supported" msgstr "Ustawianie informacji o slocie AMS podczas druku nie jest obsługiwane" msgid "Factors of Flow Dynamics Calibration" -msgstr "Współczynnik kalib. Dynamiki Przepływu" +msgstr "współczynnik kalibracji dynamiki przepływu" msgid "PA Profile" msgstr "Profil PA" @@ -2863,13 +2870,14 @@ msgstr "Czy na pewno chcesz usunąć informacje o filamentach?" msgid "You need to select the material type and color first." msgstr "Najpierw musisz wybrać typ i kolor filamentu." -msgid "Please input a valid value (K in 0~0.3)" -msgstr "Proszę podać prawidłową wartość (K w zakresie od 0 do 0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "Proszę podać prawidłową wartość (K w zakresie %.1f~%.1f)" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" -"Proszę podać prawidłową wartość (K w zakresie od 0 do 0.3, N w zakresie od " -"0.6 do 2.0)" +"Proszę podać prawidłową wartość (K w zakresie %.1f~%.1f, N in %.1f~%.1f)" msgid "Other Color" msgstr "Inny kolor" @@ -2878,7 +2886,7 @@ msgid "Custom Color" msgstr "Własny kolor" msgid "Dynamic flow calibration" -msgstr "Kalibracja dynamicznego przepływu" +msgstr "Kalibracja dynamiki przepływu" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " @@ -2902,7 +2910,7 @@ msgid "Bed Temperature" msgstr "Temperatura stołu" msgid "Max volumetric speed" -msgstr "Maksymalny przepływ" +msgstr "Maksymalna prędkość przepływu" msgid "℃" msgstr "℃" @@ -2924,9 +2932,9 @@ msgid "" "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Kalibracja zakończona. Proszę znaleźć na płycie, linie ekstruzji o " +"Kalibracja zakończona. Proszę znaleźć na płycie roboczej, linie ekstruzji o " "najbardziej jednolitym wyglądzie, podobne do przedstawionego poniżej obrazu, " -"i wprowadź tę wartość w pole wprowadzania współczynnika K" +"i wprowadź tę wartość w pole wprowadzania współczynnika K." msgid "Save" msgstr "Zapisz" @@ -2949,13 +2957,13 @@ msgid "%s does not support %s" msgstr "%s nie obsługuje %s" msgid "Dynamic flow Calibration" -msgstr "Kalibracja dynamicznego przepływu" +msgstr "Kalibracja Dynamiki Przepływu" msgid "Step" msgstr "Krok" msgid "AMS Slots" -msgstr "Sloty AMS" +msgstr "Gniazda AMS" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." @@ -2967,7 +2975,7 @@ msgid "Enable AMS" msgstr "Włącz AMS" msgid "Print with filaments in the AMS" -msgstr "Drukowanie za pomocą AMS" +msgstr "Drukowanie filamentem z AMS" msgid "Disable AMS" msgstr "Wyłącz AMS" @@ -2975,43 +2983,26 @@ msgstr "Wyłącz AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Drukuj z filamentem zamontowanym na tylnej części obudowy" -msgid "Cabin humidity" -msgstr "Wilgotność w kabinie" +msgid "Current Cabin humidity" +msgstr "Aktualna wilgotność w komorze" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Zielony kolor oznacza, że wilgotność w AMS jest normalna, pomarańczowy " -"oznacza wysoką wilgotność, czerwony oznacza zbyt wysoką wilgotność. " -"(Higrometr: im niższa, tym lepiej.)" - -msgid "Desiccant status" -msgstr "Stan wilgotności" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Stan wilgotności poniżej dwóch kresek oznacza, że sorbent może być " -"nieaktywny. Proszę wymień sorbent. (Im więcej kresek, tym lepiej.)" - -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 "" -"Uwaga: gdy pokrywa jest otwarta lub zmieniono pakiet sorbentu, może potrwać " -"kilka godzin lub noc, aby wchłonąć wilgoć. Niska temperatura również " -"spowalnia proces. W tym czasie wskaźnik może nie dokładnie odzwierciedlać " -"stan komory." +"Pamiętaj o wymianie pakietu pochłaniacza wilgoci gdy stanie się on zbyt " +"mokry. Wskaźnik może nie dokładnie odzwierciedlać stan wilgotności gdy: " +"otwarta jest pokrywa lub pakiet pochłaniacza został nie dawno wymieniony. " +"Proces absorpcji wilgoci może zająć kilka godzin, a niskie temperatury " +"również spowolnią ten proces." msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "" -"Skonfiguruj, który slot AMS powinien być używany dla filamentu używanego w " -"zadaniu druku" +"Konfiguruj, które gniazdo AMS powinno być używane dla filamentu w trakcie " +"zadania drukowania" msgid "Filament used in this print job" msgstr "Filament używany w tym zadaniu druku" @@ -3030,7 +3021,7 @@ msgstr "" "Drukowanie przy użyciu materiałów zamontowanych na tylnej części obudowy" msgid "Print with filaments in ams" -msgstr "Drukowanie za pomocą AMS" +msgstr "Drukowanie filamentem z AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "" @@ -3066,6 +3057,12 @@ msgstr "" "(System obecnie wspiera automatyczne przełączanie na materiały " "eksploatacyjne tej samej marki, rodzaju i koloru)" +msgid "DRY" +msgstr "SUCHY" + +msgid "WET" +msgstr "MOKRY" + msgid "AMS Settings" msgstr "Ustawienia AMS" @@ -3080,11 +3077,12 @@ msgstr "" "włożeniu. To zajmie około 20 sekund." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Uwaga: jeśli podczas drukowania włożony zostanie nowy filament, AMS nie " -"będzie automatycznie odczytywać żadnych informacji do zakończenia drukowania." +"Uwaga: jeśli podczas drukowania zostanie włożony nowy filament, system AMS " +"nie będzie automatycznie odczytywał żadnych informacji do momentu " +"zakończenia drukowania." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3136,6 +3134,16 @@ msgstr "" "AMS automatycznie przełączy się na inną szpule z tym samym rodzajem " "filamentu, gdy obecny filament się skończy" +msgid "Air Printing Detection" +msgstr "Wykrywanie druku w powietrzu" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Wykrywa zatkanie i zacięcie się filamentu, natychmiast zatrzymując " +"drukowanie w celu oszczędzenia czasu i filamentu." + msgid "File" msgstr "Plik" @@ -3176,13 +3184,13 @@ msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"Wystąpił błąd. Być może brakuje pamięci w systemie lub to błąd programu" +"Wystąpił błąd. Być może brakuje pamięci w systemie lub jest to błąd programu" msgid "Please save project and restart the program. " msgstr "Proszę zapisać projekt i ponownie uruchomić program. " msgid "Processing G-Code from Previous file..." -msgstr "Przetwarzanie kodu G z poprzedniego pliku..." +msgstr "Przetwarzanie G-code z poprzedniego pliku..." msgid "Slicing complete" msgstr "Cięcie zakończone" @@ -3208,8 +3216,68 @@ msgstr "Zmiennoprzecinkowy zarezerwowany operand" msgid "Stack overflow" msgstr "Przepełnienie stosu" +msgid "Running post-processing scripts" +msgstr "Uruchamianie skryptu post-procesingu" + +msgid "Successfully executed post-processing script" +msgstr "Pomyślnie wykonano skrypt post-processingu" + +msgid "Unknown error occured during exporting G-code." +msgstr "Nieznany błąd podczas eksportowania G-code." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. " +"Być może karta SD jest zablokowana do zapisu?\n" +"Komunikat błędu: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. " +"Może być problem z urządzeniem docelowym, spróbuj ponownie wyeksportować lub " +"użyć innego urządzenia. Uszkodzony plik wyjściowego G-code znajduje się w " +"pliku %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Zmiana nazwy G-code po skopiowaniu pliku do folderu docelowego nie powiodła " +"się. Bieżąca ścieżka to %1%.tmp. Spróbuj ponownie go wyeksportować." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Kopiowanie tymczasowego G-code zakończono, ale oryginalny G-code w " +"lokalizacji %1% nie mógł być otwarty podczas sprawdzania kopii. Wygenerowany " +"G-code znajduje się w lokalizacji %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Kopiowanie tymczasowego G-code zakończono, ale wyeksportowany G-code nie " +"mógł być otwarty podczas sprawdzania kopii. Wygenerowany G-code znajduje się " +"w lokalizacji %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Plik G-code został wyeksportowany do %1%" + msgid "Unknown error when export G-code." -msgstr "Nieznany błąd podczas eksportowania kodu G." +msgstr "Nieznany błąd podczas eksportowania G-code." #, boost-format msgid "" @@ -3221,15 +3289,8 @@ msgstr "" "Wiadomość o błędzie: %1%.\n" "Plik źródłowy %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Pomyślnie wyeksportowano G-code do %1%" - -msgid "Running post-processing scripts" -msgstr "Uruchamianie skryptu post-procesingu" - msgid "Copying of the temporary G-code to the output G-code failed" -msgstr "Kopiowanie tymczasowego kodu G do kodu G wynikowego nie powiodło się" +msgstr "Kopiowanie tymczasowego G-kodu do G-kodu wyjściowego nie powiodło się" #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" @@ -3237,6 +3298,226 @@ msgstr "" "Planowanie przesyłania do `%1%`. Zobacz Okno -> Kolejka przesyłania do hosta " "drukarki" +msgid "Device" +msgstr "Urządzenie" + +msgid "Task Sending" +msgstr "Wysyłanie zadań" + +msgid "Task Sent" +msgstr "Wysłane do druku" + +msgid "Edit multiple printers" +msgstr "Edycja drukarek" + +msgid "Select connected printers (0/6)" +msgstr "Wybierz podłączone drukarki (0/6)" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "Wybierz Podłączone Drukarki (%d/6)" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "Maksymalna liczba drukarek, które można wybrać, to %d" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "Brak zadania" + +msgid "View" +msgstr "Widok" + +msgid "N/A" +msgstr "N/D" + +msgid "Edit Printers" +msgstr "Edycja drukarek" + +msgid "Device Name" +msgstr "Nazwa urządzenia" + +msgid "Task Name" +msgstr "Nazwa zadania" + +msgid "Device Status" +msgstr "Status urządzenia" + +msgid "Actions" +msgstr "Działania" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Proszę wybrać urządzenia, którymi chciałbyś tutaj zarządzać (do 6 urządzeń)" + +msgid "Add" +msgstr "Dodaj" + +msgid "Idle" +msgstr "Bezczynny" + +msgid "Printing" +msgstr "Drukowanie" + +msgid "Upgrading" +msgstr "Aktualizacja" + +msgid "Incompatible" +msgstr "Niekompatybilne" + +msgid "syncing" +msgstr "synchronizacja" + +msgid "Printing Finish" +msgstr "Drukowanie zakończone" + +msgid "Printing Failed" +msgstr "Drukowanie nie powiodło się" + +msgid "Printing Pause" +msgstr "Drukowanie wstrzymane" + +msgid "Prepare" +msgstr "Przygotowanie" + +msgid "Slicing" +msgstr "Cięcie" + +msgid "Pending" +msgstr "W toku" + +msgid "Sending" +msgstr "Wysyłanie" + +msgid "Sending Finish" +msgstr "Wysłanie ukończone" + +msgid "Sending Cancel" +msgstr "Anulowano wysyłanie" + +msgid "Sending Failed" +msgstr "Wysyłanie nieudane" + +msgid "Print Success" +msgstr "Pomyślnie wydrukowano" + +msgid "Print Failed" +msgstr "Drukowanie nie powiodło się" + +msgid "Removed" +msgstr "Usunięto" + +msgid "Resume" +msgstr "Wznów" + +msgid "Stop" +msgstr "Zatrzymaj" + +msgid "Task Status" +msgstr "Status Zadania" + +msgid "Sent Time" +msgstr "Czas wysłania" + +msgid "There are no tasks to be sent!" +msgstr "Brak zadań do wysłania!" + +msgid "No historical tasks!" +msgstr "Brak historii zadań!" + +msgid "Loading..." +msgstr "Wczytywanie..." + +msgid "No AMS" +msgstr "Brak AMS" + +msgid "Send to Multi-device" +msgstr "Wyślij do wielu urządzeń" + +msgid "Preparing print job" +msgstr "Przygotowywanie zadania do druku" + +msgid "Abnormal print file data. Please slice again" +msgstr "Nieprawidłowe dane pliku druku. Proszę ponownie przetnij" + +msgid "There is no device available to send printing." +msgstr "Brak dostępnego urządzenia lub nie zostało wybrane." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "Liczba używanych jednocześnie drukarek nie może być równa 0." + +msgid "Use External Spool" +msgstr "Użyj zewnętrznej szpuli" + +msgid "Use AMS" +msgstr "Użyj AMS" + +msgid "Select Printers" +msgstr "Wybierz drukarki" + +msgid "Ams Status" +msgstr "Status Ams" + +msgid "Printing Options" +msgstr "Opcje drukowania" + +msgid "Bed Leveling" +msgstr "Poziomowanie stołu" + +msgid "Timelapse" +msgstr "Timelaps" + +msgid "Flow Dynamic Calibration" +msgstr "Kalibracja Dynamiki Przepływu" + +msgid "Send Options" +msgstr "Opcje wysyłania" + +msgid "Send to" +msgstr "Wyślij do" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"drukarek jednocześnie. (Zależy to od liczby urządzeń, które można podgrzewać " +"jednocześnie.)" + +msgid "Wait" +msgstr "Czekaj" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minut na każdą partię. (Zależy od tego, jak długo trwa proces nagrzewania.)" + +msgid "Send" +msgstr "Wyślij" + +msgid "Name is invalid;" +msgstr "Nazwa jest nieprawidłowa;" + +msgid "illegal characters:" +msgstr "niedozwolone znaki:" + +msgid "illegal suffix:" +msgstr "niedozwolony sufiks:" + +msgid "The name is not allowed to be empty." +msgstr "Nazwa nie może być pusta." + +msgid "The name is not allowed to start with space character." +msgstr "Nazwa nie może zaczynać się od znaku spacji." + +msgid "The name is not allowed to end with space character." +msgstr "Nazwa nie może kończyć się na znak spacji." + +msgid "The name length exceeds the limit." +msgstr "Długość nazwy przekracza limit." + msgid "Origin" msgstr "Punkt bazowy" @@ -3246,20 +3527,20 @@ msgstr "Rozmiar w osi X i Y prostokątnej płyty." msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." -msgstr "Odległość punktu 0,0 w kodzie G od lewego górnego rogu prostokąta." +msgstr "Odległość punktu 0,0 w G-code od lewego górnego rogu prostokąta." msgid "" "Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." msgstr "" "Średnica stołu drukarki. Przyjmuje się, że punkt początkowy (0,0) znajduje " -"się w centrum." +"się na środku." msgid "Rectangular" -msgstr "Prostokątna" +msgstr "Prostokątny" msgid "Circular" -msgstr "Okrągła" +msgstr "Okrągły" msgid "Load shape from STL..." msgstr "Załaduj kształt z pliku STL..." @@ -3305,14 +3586,31 @@ msgstr "Wybierz plik STL do zaimportowania modelu stołu z:" msgid "Bed Shape" msgstr "Kształt stołu" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Zalecana temperatura jest poniżej minimalnych 190 stopni lub temperatura " +"przekracza zalecane maksimum 300 stopni.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"Minimalna zalecana temperatura nie może być wyższa niż zalecana temperatura " +"maksymalna.\n" + +msgid "Please check.\n" +msgstr "Sprawdź.\n" + 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 "" -"Extruder może być zablokowany, gdy temperatura wykracza poza zalecany " +"Dysza może zostać zablokowana, gdy temperatura wykracza poza zalecany " "zakres.\n" -"Upewnij się, czy temperatura jest odpowiednia do drukowania.\n" +"Upewnij się, czy temperatura do druku jest odpowiednia.\n" "\n" #, c-format, boost-format @@ -3371,10 +3669,11 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"To ustawienie jest stosowane tylko do dostrojenia rozmiaru modelu z małą " -"wartością w niektórych przypadkach.\n" -"Na przykład, gdy rozmiar modelu ma mały błąd i trudno go złożyć.\n" -"Do dostrojenia dużego rozmiaru, proszę użyć funkcji skalowania modelu.\n" +"To ustawienie jest używane tylko do dostrajania rozmiaru modelu w niewielkim " +"stopniu.\n" +"Na przykład, gdy rozmiar modelu ma małe błędy lub gdy tolerancje są " +"nieprawidłowe. W przypadku wprowadzania dużych zmian należy do tego użyć " +"funkcji skalowania modelu.\n" "\n" "Wartość zostanie zresetowana do 0." @@ -3385,33 +3684,13 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Zbyt duża kompensacja efektu \"stopy słonia\" nie jest wskazane.\n" +"Zbyt duża kompensacja efektu \"stopy słonia\" nie jest wskazana.\n" "Jeśli rzeczywiście występuje poważny efekt stopy słonia, proszę sprawdzić " "inne ustawienia.\n" "Na przykład, czy temperatura stołu jest zbyt wysoka.\n" "\n" "Wartość zostanie zresetowana do 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 "" -"Tryb Wazy działa tylko wtedy gdy liczba pętli ściany wynosi 1, wyłączone są " -"podpory, ilość warstw górnej powłoki wynosi 0, gęstość wypełnienia wynosi 0, " -"a tryb Timelaps ustawiony jest na Tradycyjny." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Jednak maszyny z budową I3 nie będą generować filmów timelapse." - -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 "" -"Czy zmienić te ustawienia automatycznie? \n" -"Tak - Zmień te ustawienia automatycznie i włącz tryb Wazy\n" -"Nie - Zrezygnuj tym razem z używania trybu Wazy" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3437,11 +3716,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"Wieża czyszcząca nie działa, gdy włączona jest Zmienna Wysokość Warstwy lub " -"Niezależna Wysokość Warstwy podpory.\n" +"Wieża czyszcząca nie działa, gdy włączona jest Adaptacyjna wysokość warstwy " +"lub Niezależna wysokość warstwy podpory.\n" "Którą opcję chcesz zachować?\n" "TAK - Zachowaj Wieżę czyszczącą\n" -"NIE - Zachowaj Zmienną Wysokość Warstwy i Niezależną Wysokość Warstwy " +"NIE - Zachowaj Adaptacyjną wysokość warstwy i Niezależną wysokość warstwy " "podpory" msgid "" @@ -3461,11 +3740,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"Wieża czyszcząca nie działa, gdy włączona jest Niezależna Wysokość Warstwy " +"Wieża czyszcząca nie działa, gdy włączona jest Niezależna wysokość warstwy " "podpory.\n" "Którą opcję chcesz zachować?\n" "TAK - Zachowaj Wieżę czyszczącą\n" -"NIE - Zachowaj Niezależną Wysokość Warstwy podpory" +"NIE - Zachowaj Niezależną wysokość warstwy podpory" msgid "" "While printing by Object, the extruder may collide skirt.\n" @@ -3482,6 +3761,26 @@ msgstr "" "seam_slope_start_height musi być mniejsza niż wysokość warstwy. \n" "Zresetuj do wartości 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 "" +"Tryb Wazy działa tylko wtedy gdy liczba pętli ściany wynosi 1, wyłączone są " +"podpory, ilość warstw górnej powłoki wynosi 0, gęstość wypełnienia wynosi 0, " +"a tryb Timelaps ustawiony jest na Tradycyjny." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Jednak maszyny z budową I3 nie będą generować filmów timelapse." + +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 "" +"Czy zmienić te ustawienia automatycznie? \n" +"Tak - Zmień te ustawienia automatycznie i włącz tryb Wazy\n" +"Nie - Zrezygnuj tym razem z używania trybu Wazy" + msgid "Auto bed leveling" msgstr "Automatyczne poziomowanie stołu" @@ -3489,7 +3788,7 @@ msgid "Heatbed preheating" msgstr "Rozgrzewanie stołu" msgid "Sweeping XY mech mode" -msgstr "Tryb czyszczenia mechanizmu XY" +msgstr "Pomiar rezonansu osi XY" msgid "Changing filament" msgstr "Zmiana filamentu" @@ -3519,7 +3818,7 @@ msgid "Calibrating Micro Lidar" msgstr "Kalibracja Mikro Lidar" msgid "Homing toolhead" -msgstr "Przywracanie głowicy na pozycję wyjściową" +msgstr "Przywracanie głowicy drukującej na pozycję bazową" msgid "Cleaning nozzle tip" msgstr "Czyszczenie końcówki dyszy" @@ -3531,7 +3830,7 @@ msgid "Printing was paused by the user" msgstr "Druk został wstrzymany przez użytkownika" msgid "Pause of front cover falling" -msgstr "Pauza z powodu opadnięcia przedniej osłony" +msgstr "Pauza - osłona głowicy drukującej odpadła" msgid "Calibrating the micro lida" msgstr "Kalibracja mikro Lidaru" @@ -3561,7 +3860,7 @@ msgid "Paused due to AMS lost" msgstr "Pauza z powodu utraty AMS" msgid "Paused due to low speed of the heat break fan" -msgstr "Pauza z powodu niskiej prędkości wentylatora heat break" +msgstr "Wstrzymano z powodu niskiej prędkości wentylatora chłodzącego hotend" msgid "Paused due to chamber temperature control error" msgstr "Pauza z powodu błędu kontroli temperatury komory" @@ -3576,7 +3875,7 @@ msgid "Motor noise showoff" msgstr "Prezentacja hałasu silnika" msgid "Nozzle filament covered detected pause" -msgstr "Pauza wykrywająca zakrycie dyszy przez filament" +msgstr "Pauza - dysza pokryta filamentem" msgid "Cutter error pause" msgstr "Pauza z powodu błędu noża" @@ -3587,18 +3886,6 @@ msgstr "Pauza z powodu błędu pierwszej warstwy" msgid "Nozzle clog pause" msgstr "Pauza z powodu zatkanej dyszy" -msgid "MC" -msgstr "MC (Płytka główna)" - -msgid "MainBoard" -msgstr "MainBoard (Płyta główna)" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Nieznany" @@ -3609,7 +3896,7 @@ msgid "Serious" msgstr "Poważny" msgid "Common" -msgstr "Zwykły" +msgstr "Wspólny" msgid "Update successful." msgstr "Aktualizacja udana." @@ -3757,9 +4044,6 @@ msgstr "Ustawienia drukarki" msgid "parameter name" msgstr "nazwa parametru" -msgid "N/A" -msgstr "N/D" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s nie może być procentem" @@ -3771,6 +4055,10 @@ msgstr "Wartość %s jest poza zakresem, kontynuować?" msgid "Parameter validation" msgstr "Walidacja parametru" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Wartość %s jest spoza zakresu. Poprawny zakres wynosi od %d do %d." + msgid "Value is out of range." msgstr "Wartość jest poza zakresem." @@ -3784,6 +4072,20 @@ msgstr "" "TAK dla %s%%,\n" "NIE dla %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Nieprawidłowy format wejściowy. Oczekiwany jest wektor wymiarów w " +"następującym formacie: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Wartość wejściowa jest poza zakresem" + +msgid "Some extension in the input is invalid" +msgstr "Rozszerzenie w danych wejściowych jest nieprawidłowe" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Nieprawidłowy format. Oczekiwano formatu wektorowego: \"%1%\"" @@ -3801,7 +4103,7 @@ msgid "Temperature" msgstr "Temperatura" msgid "Flow" -msgstr "Flow" +msgstr "Przepływ" msgid "Tool" msgstr "Narzędzie" @@ -3851,20 +4153,20 @@ msgstr "Pokaż" msgid "Flushed" msgstr "Płukane" -msgid "Total" -msgstr "Łącznie" - msgid "Tower" msgstr "Wieża" +msgid "Total" +msgstr "Łącznie" + msgid "Total Estimation" msgstr "Podsumowanie" msgid "Total time" -msgstr "Całkowity czas" +msgstr "Czas całkowity" msgid "Total cost" -msgstr "Całkowity koszt" +msgstr "Koszt całkowity" msgid "up to" msgstr "do" @@ -3959,6 +4261,12 @@ msgstr "Szacowany czas" msgid "Normal mode" msgstr "Tryb normalny" +msgid "Total Filament" +msgstr "Całkowita ilość filamentu" + +msgid "Model Filament" +msgstr "Filament modelu" + msgid "Prepare time" msgstr "Czas przygotowania" @@ -4052,6 +4360,9 @@ msgstr "Opcje rozmieszczania" msgid "Spacing" msgstr "Rozstaw" +msgid "0 means auto spacing." +msgstr "Wartość 0 oznacza automatyczny odstęp." + msgid "Auto rotate for arrangement" msgstr "Automatyczna rotacja podczas rozmieszczania" @@ -4064,9 +4375,6 @@ msgstr "Unikaj obszaru kalibracji ekstruzji" msgid "Align to Y axis" msgstr "Wyrównaj do osi Y" -msgid "Add" -msgstr "Dodaj" - msgid "Add plate" msgstr "Dodaj płytę" @@ -4126,8 +4434,8 @@ msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." msgstr "" -"Wykryto konflikty ścieżek G-kodów na warstwie %d, z = %.2lf mm. Proszę " -"oddzielić konfliktujące obiekty dalej (%s <-> %s)." +"Wykryto konflikty ścieżek G-code na warstwie %d, z = %.2lf mm. Proszę " +"oddalić od siebie obiekty będące w konflikcie (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "Obiekt jest położony poza granicą płyty." @@ -4148,7 +4456,7 @@ msgid "" msgstr "" "Obiekt jest umieszczony poza granicą płyty lub przekracza limit wysokości.\n" "Rozwiąż problem, przesuwając go całkowicie na płytę lub poza nią oraz " -"potwierdzając, że wysokość mieści się w obszarze budowy." +"potwierdzając, że wysokość mieści się w obszarze roboczym." msgid "Calibration step selection" msgstr "Wybór kroku kalibracji" @@ -4198,6 +4506,9 @@ msgstr "Monitorowanie Auto-nagrywania" msgid "Go Live" msgstr "Na żywo" +msgid "Liveview Retry" +msgstr "Ponów podgląd na żywo" + msgid "Resolution" msgstr "Rozdzielczość" @@ -4250,14 +4561,11 @@ msgstr "Zamykanie aplikacji podczas modyfikacji niektórych ustawień." msgid "Logging" msgstr "Logowanie" -msgid "Prepare" -msgstr "Przygotowanie" - msgid "Preview" msgstr "Podgląd" -msgid "Device" -msgstr "Urządzenie" +msgid "Multi-device" +msgstr "Wiele urządzeń" msgid "Project" msgstr "Projekt" @@ -4273,20 +4581,17 @@ msgstr "" "zostanie zamknięta przed utworzeniem nowego modelu. Czy chcesz kontynuować?" msgid "Slice plate" -msgstr "Potnij płytę" +msgstr "Potnij aktualną płytę" msgid "Print plate" -msgstr "Drukuj płytę" +msgstr "Drukuj aktualną płytę" msgid "Slice all" -msgstr "Potnij wszystko" +msgstr "Potnij wszystkie płyty" msgid "Export G-code file" msgstr "Eksportuj plik G-code" -msgid "Send" -msgstr "Wyślij" - msgid "Export plate sliced file" msgstr "Eksportuj plik pociętej płyty" @@ -4294,7 +4599,7 @@ msgid "Export all sliced file" msgstr "Eksportuj wszystkie pocięte płyty" msgid "Print all" -msgstr "Drukuj wszystko" +msgstr "Drukuj wszystkie płyty" msgid "Send all" msgstr "Wyślij wszystko" @@ -4407,6 +4712,12 @@ msgstr "Importuj 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Wczytaj model" +msgid "Import Zip Archive" +msgstr "Importuj archiwum ZIP" + +msgid "Load models contained within a zip archive" +msgstr "Wczytaj modele zawarte w archiwum ZIP" + msgid "Import Configs" msgstr "Importuj konfiguracje" @@ -4429,10 +4740,10 @@ msgid "Export 3mf file without using some 3mf-extensions" msgstr "Eksportuj plik 3MF bez użycia niektórych rozszerzeń 3MF" msgid "Export current sliced file" -msgstr "Eksportuj bieżący plik nagraj na płytę" +msgstr "Eksportuj bieżący plik cięcia" msgid "Export all plate sliced file" -msgstr "Eksportuj wszystkie pliki nagraj na płytę" +msgstr "Eksportuj wszystkie pliki po pocięciu płyt" msgid "Export G-code" msgstr "Eksportuj plik G-code" @@ -4440,8 +4751,8 @@ msgstr "Eksportuj plik G-code" msgid "Export current plate as G-code" msgstr "Eksportuj bieżący stół jako plik G-code" -msgid "Export &Configs" -msgstr "Eksportuj &konfiguracje" +msgid "Export Preset Bundle" +msgstr "Eksport zestawu ustawień" msgid "Export current configuration to files" msgstr "Eksportuj bieżącą konfigurację do plików" @@ -4542,9 +4853,6 @@ msgstr "Pokaż podświetlenie nawisów obiektów w scenie 3D" msgid "Preferences" msgstr "Preferencje" -msgid "View" -msgstr "Widok" - msgid "Help" msgstr "Pomoc" @@ -4555,19 +4863,19 @@ msgid "Pass 1" msgstr "Procedura 1" msgid "Flow rate test - Pass 1" -msgstr "Test przepływu - Procedura 1" +msgstr "Test natężenia przepływu - Procedura 1" msgid "Pass 2" msgstr "Procedura 2" msgid "Flow rate test - Pass 2" -msgstr "Test przepływu - Procedura 2" +msgstr "Test natężenia przepływu - Procedura 2" msgid "Flow rate" -msgstr "Przepływ" +msgstr "Natężenie przepływu" msgid "Pressure advance" -msgstr "Kalibracja PA" +msgstr "Wzrost ciśnienia (PA)" msgid "Retraction test" msgstr "Test Retrakcji" @@ -4576,7 +4884,7 @@ msgid "Orca Tolerance Test" msgstr "Orca Test Tolerancji" msgid "Max flowrate" -msgstr "Maksymalne Natężenie Przepływu" +msgstr "Maksymalne natężenie przepływu" msgid "VFA" msgstr "Test VFA" @@ -4611,11 +4919,11 @@ msgstr "Eksportuj &ścieżki narzędzi jako OBJ" msgid "Export toolpaths as OBJ" msgstr "Eksportuj ścieżki narzędzi jako OBJ" -msgid "Open &Studio" -msgstr "Otwórz &Studio" +msgid "Open &Slicer" +msgstr "Otwórz &Slicer" -msgid "Open Studio" -msgstr "Otwórz Studio" +msgid "Open Slicer" +msgstr "Otwórz Slicer" msgid "&Quit" msgstr "&Wyjście" @@ -4717,43 +5025,65 @@ msgstr "" msgid "Synchronization" msgstr "Synchronizacja" -msgid "Initialize failed (No Device)!" -msgstr "Inicjalizacja nie powiodła się (Brak urządzenia)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Inicjalizacja nie powiodła się (Brak gotowości połączenia urządzenia)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicjalizacja nie powiodła się (Brak urządzenia kamery)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Drukarka jest zajęta pobieraniem. Proszę czekać, aż pobieranie zostanie " -"zakończone." +"Urządzenie nie może obsługiwać kolejnych połączeń. Proszę spróbować ponownie " +"później." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Inicjalizacja nie powiodła się (Nieobsługiwane w obecnej wersji drukarki)!" +"Odtwarzacz nie działa poprawnie. Proszę ponownie zainstalować odtwarzacz " +"systemowy." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicjalizacja nie powiodła się (Niedostępne w trybie tylko LAN)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"Odtwarzacz nie został załadowany, proszę kliknąć przycisk \"Odtwórz\", aby " +"spróbować ponownie." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicjalizacja nie powiodła się (Brak adresu IP drukarki w sieci LAN)!" +msgid "Please confirm if the printer is connected." +msgstr "Proszę potwierdzić, czy drukarka jest podłączona." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"Drukarka aktualnie pobiera dane. Proszę spróbować ponownie po zakończeniu " +"tego procesu." + +msgid "Printer camera is malfunctioning." +msgstr "Kamera drukarki jest uszkodzona." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Wystąpił problem. Proszę zaktualizować oprogramowanie drukarki i spróbować " +"ponownie." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Tryb podglądu LAN jest wyłączony. Proszę włączyć podgląd na żywo na ekranie " +"drukarki." + +msgid "Please enter the IP of printer to connect." +msgstr "Proszę podać adres IP drukarki, aby nawiązać połączenie." msgid "Initializing..." msgstr "Inicjalizacja..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Inicjalizacja nie powiodła się (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"Połączenie nieudane. Proszę sprawdzić połączenie sieciowe i spróbować " +"ponownie." -msgid "Network unreachable" -msgstr "Brak połączenia z siecią" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Proszę sprawdzić połączenie sieciowe i spróbować ponownie. Jeśli problem " +"nadal występuje, można ponownie uruchomić lub zaktualizować drukarkę." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Zatrzymano [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "Drukarka została wylogowana i nie można się z nią połączyć." msgid "Stopped." msgstr "Zatrzymano." @@ -4784,19 +5114,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Inicjalizacja wirtualnej kamery nie powiodła się (%s)!" +msgid "Network unreachable" +msgstr "Brak połączenia z siecią" + msgid "Information" msgstr "Informacja" msgid "Playing..." msgstr "Odtwarzanie..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Błąd wczytywania [%d]!" - -msgid "Loading..." -msgstr "Wczytywanie..." - msgid "Year" msgstr "Rok" @@ -4815,9 +5141,6 @@ msgstr "Grupuj pliki według miesiąca, najnowsze na początku." msgid "Show all files, recent first." msgstr "Pokaż wszystkie pliki, najnowsze na początku." -msgid "Timelapse" -msgstr "Timelaps" - msgid "Switch to timelapse files." msgstr "Przełącz się na pliki timelapse." @@ -4845,6 +5168,12 @@ msgstr "Wybierz" msgid "Batch manage files." msgstr "Partycjonuj zarządzanie plikami." +msgid "Refresh" +msgstr "Odśwież" + +msgid "Reload file list from printer." +msgstr "Przeładuj listę plików z drukarki." + msgid "No printers." msgstr "Brak drukarek." @@ -4855,13 +5184,36 @@ msgstr "Błąd połączenia [%d]!" msgid "Loading file list..." msgstr "Wczytywanie listy plików..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Brak plików [%d]" +msgid "No files" +msgstr "Brak plików" + +msgid "Load failed" +msgstr "Błąd ładowania" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Inicjalizacja nie powiodła się (Brak połączenia z urządzeniem)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Przeglądanie plików na karcie SD nie jest obsługiwane w bieżącym " +"oprogramowaniu. Proszę zaktualizować oprogramowanie drukarki." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"Inicjalizacja nie powiodła się (brak dostępu do pamięci, włóż kartę SD)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "Połączenie LAN nieudane (Nie udało się wyświetlić zawartości karty SD)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "" +"Przeglądanie plików na karcie SD nie jest obsługiwane w trybie tylko LAN." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Błąd wczytywania [%d]" +msgid "Initialize failed (%s)!" +msgstr "Inicjalizacja nie powiodła się (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4887,11 +5239,11 @@ msgstr "Usuń plik" msgid "Fetching model infomations ..." msgstr "Pobieranie informacji o modelach..." -msgid "Failed to fetching model infomations from printer." -msgstr "Nie udało się pobrać informacji o modelach z drukarki." +msgid "Failed to fetch model information from printer." +msgstr "Nie udało się pobrać informacji o modelu z drukarki." -msgid "Failed to parse model infomations." -msgstr "Nie udało się sparsować informacji o modelach." +msgid "Failed to parse model information." +msgstr "Nie udało się przeanalizować informacji o modelu." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4904,6 +5256,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Plik '%s' został utracony! Proszę pobrać go ponownie." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Plik: %s\n" +"Tytuł: %s\n" + msgid "Download waiting..." msgstr "Oczekiwanie na pobranie..." @@ -4920,15 +5280,14 @@ msgstr "Pobieranie zakończone" msgid "Downloading %d%%..." msgstr "Pobieranie %d%%..." -msgid "Connection lost. Please retry." -msgstr "Utracono połączenie. Proszę spróbować ponownie." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Urządzenie nie może obsłużyć więcej rozmów. Proszę spróbować ponownie " -"później." +"Ponowne łączenie z drukarką, operacja nie może być teraz zakończona, spróbuj " +"ponownie później." -msgid "File not exists." +msgid "File does not exist." msgstr "Plik nie istnieje." msgid "File checksum error. Please retry." @@ -4986,12 +5345,6 @@ msgstr "Odwróć oś obrotu (Roll)" msgid "Printing Progress" msgstr "Postęp druku" -msgid "Resume" -msgstr "Wznów" - -msgid "Stop" -msgstr "Zatrzymaj" - msgid "0" msgstr "0" @@ -5034,6 +5387,9 @@ msgstr "Zmień widok kamery" msgid "Control" msgstr "Sterowanie" +msgid "Printer Parts" +msgstr "Typ dyszy" + msgid "Print Options" msgstr "Opcje drukowania" @@ -5052,9 +5408,6 @@ msgstr "Cham" msgid "Bed" msgstr "Stół" -msgid "Unload" -msgstr "Wyładowaj" - msgid "Debug Info" msgstr "Informacje debugowania" @@ -5074,7 +5427,7 @@ msgid "Downloading..." msgstr "Pobieranie..." msgid "Cloud Slicing..." -msgstr "Krojenie w chmurze..." +msgstr "Cięcie w chmurze..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." @@ -5096,10 +5449,10 @@ msgstr "" "powyżej 170 stopni." msgid "Still unload" -msgstr "Wyładuj" +msgstr "Wycofaj" msgid "Still load" -msgstr "Załaduj" +msgstr "Podaj" msgid "Please select an AMS slot before calibration" msgstr "Przed kalibracją wybierz gniazdo AMS" @@ -5109,7 +5462,7 @@ msgid "" "unload the filament and try again." msgstr "" "Nie można odczytać informacji o filamentach: filament jest załadowany w " -"głowicy narzędzia, proszę go wyładować i spróbować ponownie." +"głowicy drukującej, proszę go wyładować i spróbować ponownie." msgid "This only takes effect during printing" msgstr "To działa tylko podczas drukowania" @@ -5118,10 +5471,10 @@ msgid "Silent" msgstr "Cichy" msgid "Standard" -msgstr "Standardowy" +msgstr "Standard" msgid "Sport" -msgstr "Sportowy" +msgstr "Sport" msgid "Ludicrous" msgstr "Szalony" @@ -5200,8 +5553,8 @@ msgid "" "\n" " error code: " msgstr "" -"Wynik twojego komentarza nie może być przesłany z powodu pewnych przyczyn. " -"Jak następuje:\n" +"Wynik twojego komentarza nie może być przesłany z powodu następujących " +"przyczyn:\n" "\n" " kod błędu: " @@ -5240,9 +5593,6 @@ msgstr "Status" msgid "Update" msgstr "Aktualizacja" -msgid "HMS" -msgstr "Stan drukarki (HMS)" - msgid "Don't show again" msgstr "Nie pokazuj ponownie" @@ -5273,6 +5623,39 @@ msgstr "%s informacje" msgid "Skip" msgstr "Pomiń" +msgid "Newer 3mf version" +msgstr "Nowa wersja 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"Wersja pliku 3MF jest w wersji Beta i jest nowsza niż obecna wersja " +"OrcaSlicer." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Jeśli chciałbyś wypróbować OrcaSlicer Beta, możesz kliknąć tutaj." + +msgid "Download Beta Version" +msgstr "Pobierz wersje Beta" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "Wersja pliku 3MF jest nowsza niż obecna w wersji OrcaSlicer." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Zaktualizowanie OrcaSlicer może umożliwić korzystanie ze wszystkich funkcji " +"pliku 3MF." + +msgid "Current Version: " +msgstr "Obecna wersja:" + +msgid "Latest Version: " +msgstr "Najnowsza wersja:" + +msgid "Not for now" +msgstr "Nie teraz" + msgid "3D Mouse disconnected." msgstr "3D Mouse niepodłączona." @@ -5345,12 +5728,12 @@ msgstr[2] "%1$d obiektów zostało załadowanych jako części obiektu wycięteg msgid "ERROR" msgstr "BŁĄD" -msgid "CANCELED" -msgstr "ANULOWANO" - msgid "COMPLETED" msgstr "ZAKOŃCZONO" +msgid "CANCELED" +msgstr "ANULOWANO" + msgid "Cancel upload" msgstr "Anuluj przesyłanie" @@ -5394,7 +5777,7 @@ msgid "Color painting" msgstr "Malowanie kolorem" msgid "Cut connectors" -msgstr "Usuń połączenie" +msgstr "Utnij łącznik" msgid "Layers" msgstr "Warstwy" @@ -5438,7 +5821,7 @@ msgid "Enable AI monitoring of printing" msgstr "Włącz monitorowanie drukowania przez sztuczną inteligencję" msgid "Sensitivity of pausing is" -msgstr "Czułość wstrzymywania wynosi" +msgstr "Czułość pauzy wynosi" msgid "Enable detection of build plate position" msgstr "Włącz wykrywanie położenia płyty roboczej" @@ -5462,6 +5845,27 @@ msgstr "Zezwól na dźwiękowe powiadomienia" msgid "Filament Tangle Detect" msgstr "Wykrywanie splątanych filamentów" +msgid "Nozzle Clumping Detection" +msgstr "Wykrywanie \"zalepienia\" się dyszy" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Sprawdź, czy dysza nie została zatkana filamentem lub innym obcym " +"przedmiotem." + +msgid "Nozzle Type" +msgstr "Rodzaj dyszy" + +msgid "Stainless Steel" +msgstr "Stal nierdzewna" + +msgid "Hardened Steel" +msgstr "Stal hartowana" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Globalne" @@ -5506,7 +5910,7 @@ msgid "Invalid name, the following characters are not allowed:" msgstr "Nieprawidłowa nazwa, poniższe znaki są niedozwolone:" msgid "Sliced Info" -msgstr "Informacje o nałożeniu warstw" +msgstr "Informacje o cięciu" msgid "Used Filament (m)" msgstr "Użyty filament (m)" @@ -5669,9 +6073,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Lepiej zaktualizuj swoje oprogramowanie.\n" -msgid "Newer 3mf version" -msgstr "Nowa wersja 3mf" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5688,18 +6089,18 @@ msgstr "Proszę poprawić je na kartach parametrów" msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" -"Plik 3MF ma następujące zmodyfikowane kody G w profilach filamentu lub " +"Plik 3MF ma następujące zmodyfikowane G-code w profilach filamentu lub " "drukarki:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" -"Proszę potwierdzić, że te zmodyfikowane kody G są bezpieczne, aby zapobiec " +"Proszę potwierdzić, że te zmodyfikowane G-code są bezpieczne, aby zapobiec " "ewentualnym uszkodzeniom maszyny!" msgid "Modified G-codes" -msgstr "Zmodyfikowane kody G" +msgstr "Zmodyfikowane G-codes" msgid "The 3mf has following customized filament or printer presets:" msgstr "Plik 3MF ma następujące dostosowane profile filamentu lub drukarki:" @@ -5720,6 +6121,9 @@ msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF8!" msgid "The name may show garbage characters!" msgstr "Nazwa może zawierać nieczytelne znaki!" +msgid "Remember my choice." +msgstr "Zapamiętaj moją decyzję." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5729,7 +6133,7 @@ msgid "Objects with zero volume removed" msgstr "Usunięto obiekty o zerowym wolumenie" msgid "The volume of the object is zero" -msgstr "Wolumen tego obiektu wynosi zero" +msgstr "Objętość tego obiektu wynosi zero" #, c-format, boost-format msgid "" @@ -5799,7 +6203,7 @@ msgid "Comfirm Save As" msgstr "Potwierdź Zapisz jako" msgid "Delete object which is a part of cut object" -msgstr "Usuń obiekt będący częścią wyciętego obiektu" +msgstr "Usuń obiekt będący częścią przeciętego obiektu" msgid "" "You try to delete an object which is a part of a cut object.\n" @@ -5849,11 +6253,8 @@ msgstr "Nie można wczytać:" msgid "Error during reload" msgstr "Błąd podczas przeładowywania" -msgid "Slicing" -msgstr "Cięcie" - msgid "There are warnings after slicing models:" -msgstr "Po wykonaniu cięcia występują ostrzeżenia w modelach:" +msgstr "Po wykonaniu cięcia modeli występują ostrzeżenia:" msgid "warnings" msgstr "ostrzeżenia" @@ -5912,9 +6313,15 @@ msgstr "Importowanie modelu" msgid "prepare 3mf file..." msgstr "przygotuj plik 3mf..." +msgid "Download failed, unknown file format." +msgstr "Pobieranie nie powiodło się, nieznany format pliku." + msgid "downloading project ..." msgstr "pobieranie projektu ..." +msgid "Download failed, File size exception." +msgstr "Pobieranie nie powiodło się, wyjątek - rozmiar pliku." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt pobrany w %d%%" @@ -5923,7 +6330,8 @@ msgid "" "Importing to Orca Slicer failed. Please download the file and manually " "import it." msgstr "" -"Import do Orca Slicer nie powiódł się. Pobierz plik i zaimportuj go ręcznie." +"Importowanie do Orca Slicer nie powiodło się. Proszę pobrać plik i " +"zaimportować go ręcznie." msgid "Import SLA archive" msgstr "Importuj archiwum SLA" @@ -5932,10 +6340,26 @@ msgid "The selected file" msgstr "Wybrany plik" msgid "does not contain valid gcode." -msgstr "nie zawiera prawidłowego kodu G." +msgstr "nie zawiera prawidłowego gcode." msgid "Error occurs while loading G-code file" -msgstr "Wystąpił błąd podczas wczytywania pliku z kodem G" +msgstr "Wystąpił błąd podczas wczytywania pliku z G-code" + +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Nie udało załadować się archiwum ZIP z ścieżki %1%." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Nie udało się rozpakować pliku do %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Nie udało się znaleźć rozpakowanego pliku pod adresem %1%. Rozpakowywanie " +"pliku nie powiodło się." msgid "Drop project file" msgstr "Upuść plik projektu" @@ -5961,18 +6385,12 @@ msgstr "Pliki G-code nie mogą być wczytywane razem z modelami!" msgid "Can not add models when in preview mode!" msgstr "Nie można dodawać modeli w trybie podglądu!" -msgid "Add Models" -msgstr "Dodaj modele" - msgid "All objects will be removed, continue?" msgstr "Wszystkie obiekty zostaną usunięte, kontynuować?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"Aktualny projekt ma niezapisane zmiany, zapisać go przed kontynuowaniem?" - -msgid "Remember my choice." -msgstr "Zapamiętaj moją decyzję." +"Aktualny projekt ma niezapisane zmiany, czy zapisać go przed kontynuacją?" msgid "Number of copies:" msgstr "Liczba kopii:" @@ -6000,15 +6418,30 @@ msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"Plik %s został wysłany do przestrzeni magazynowej drukarki i może być " -"oglądany na drukarce." +"Plik %s został wysłany do pamięci drukarki i można go obejrzeć na urządzeniu." msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Nie można wykonywać operacji boolowskich na siatkach modeli. Eksportowane " -"będą tylko części dodatnie." +"Nie można wykonać operacji boolowskich na siatkach modelu. Eksportowane będą " +"tylko części dodatnie" + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Przyczyna: część \"%1%\" jest pusta." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Przyczyna: część \"%1%\" nie ogranicza objętości." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Przyczyna: część \"%1%\" wprowadzona automatycznie." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Przyczyna: \"%1%\" i inna część nie mają wspólnego przecięcia." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6170,6 +6603,14 @@ msgstr "Region Logowania" msgid "Stealth Mode" msgstr "Tryb \"Niewidzialny\"" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" +"Zatrzymuje to transmisję danych do chmury Bambu. Użytkownicy, którzy nie " +"korzystają z maszyn BBL lub używają tylko trybu LAN, mogą bezpiecznie " +"włączyć tę funkcję." + msgid "Enable network plugin" msgstr "Włącz wtyczkę sieciową (BambuLab)" @@ -6185,6 +6626,27 @@ msgstr "Imperialny" msgid "Units" msgstr "Jednostki" +msgid "Allow only one OrcaSlicer instance" +msgstr "Zezwól tylko na jedną instancję programu OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"W systemie macOS domyślnie działa tylko jedna instancja aplikacji. Jednak z " +"wiersza poleceń można uruchomić kilka instancji tej samej aplikacji. W takim " +"przypadku te ustawienia umożliwią działanie tylko jednej instancji." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Jeśli ta opcja jest włączona, po uruchomieniu OrcaSlicer, gdy inna instancja " +"tego samego OrcaSlicer jest już uruchomiona, ta instancja zostanie ponownie " +"aktywowana." + msgid "Home" msgstr "Strona główna" @@ -6194,6 +6656,21 @@ msgstr "Domyślna Strona" msgid "Set the page opened on startup." msgstr "Ustaw stronę otwieraną przy uruchomieniu." +msgid "Touchpad" +msgstr "Panel dotykowy" + +msgid "Camera style" +msgstr "Styl kamery" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Wybierz styl nawigacji kamery.\n" +"Domyślnie: LPM+ruch dla obrotu, PPM/ŚPM+ruch dla przesuwania.\n" +"Touchpad: Alt+ruch dla obrotu, Shift+ruch dla przesuwania." + msgid "Zoom to mouse position" msgstr "Powiększ do pozycji myszki" @@ -6204,13 +6681,19 @@ msgstr "" "Powiększ do pozycji wskaźnika myszy w widoku 3D, zamiast do środka okna 2D." msgid "Use free camera" -msgstr "Użyj swobodnej kamery" +msgstr "Użyj wolnego widoku z kamery" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" "Jeśli włączone, to używany będzie wolny widok. Jeśli wyłączone, to widok " "będzie ograniczony." +msgid "Reverse mouse zoom" +msgstr "Odwrócone przybliżanie myszką" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "Jeśli włączone, kierunek kółka myszy zostanie odwrócony." + msgid "Show splash screen" msgstr "Pokaż ekran powitalny" @@ -6232,6 +6715,38 @@ msgid "If enabled, auto-calculate everytime the color changed." msgstr "" "Jeśli włączone, automatyczne obliczanie za każdym razem, gdy zmieni się kolor" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "" +"Objętości płukania: Automatycznie obliczaj za każdym razem, gdy zmieniany " +"jest filament" + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" +"Jeśli ta opcja jest włączona, automatycznie obliczaj za każdym razem, gdy " +"zmieniany jest filament." + +msgid "Remember printer configuration" +msgstr "Zapamiętaj konfigurację drukarki" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Jeśli ta opcja jest włączona, Orca będzie automatycznie zapamiętywać i " +"przełączać konfigurację filamentu/procesu dla każdej drukarki." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" +"Obsługa wielu urządzeń (zacznie być aktywna po ponownym uruchomieniu Orca)" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Dzięki tej opcji możesz wysyłać zadania do wielu urządzeń jednocześnie i " +"zarządzać nimi." + msgid "Network" msgstr "Sieć" @@ -6278,6 +6793,48 @@ msgstr "" "Jeśli włączone, ustawia OrcaSlicer jako domyślną aplikację do otwierania " "plików .step" +msgid "Associate web links to OrcaSlicer" +msgstr "Powiąż linki z OrcaSlicer" + +msgid "Associate URLs to OrcaSlicer" +msgstr "Powiąż URL z OrcaSlicer" + +msgid "Current association: " +msgstr "Aktualnie powiązano: " + +msgid "Associate prusaslicer://" +msgstr "z prusaslicer://" + +msgid "Not associated to any application" +msgstr "Nie skojarzony z żadną aplikacją" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Powiąż OrcaSlicer z linkami prusaslicer://, aby Orca mogła otwierać modele z " +"Printable.com" + +msgid "Associate bambustudio://" +msgstr "z bambustudio://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Powiąż OrcaSlicer z linkami bambustudio://, aby Orca mogła otwierać modele z " +"makerworld.com" + +msgid "Associate cura://" +msgstr "z cura://" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Powiąż OrcaSlicer z linkami cura://, aby Orca mogła otwierać modele z " +"thingiverse.com" + msgid "Maximum recent projects" msgstr "Maksymalna liczba ostatnich projektów" @@ -6449,12 +7006,21 @@ msgstr "Wybierz/Usuń drukarki (profile systemowe)" msgid "Create printer" msgstr "Utwórz drukarkę" -msgid "Incompatible" -msgstr "Niekompatybilne" - msgid "The selected preset is null!" msgstr "Wybrany profil jest pusty!" +msgid "End" +msgstr "Koniec" + +msgid "Customize" +msgstr "Dostosuj" + +msgid "Other layer filament sequence" +msgstr "Inna sekwencja filamentu na kolejnej warstwie" + +msgid "Please input layer value (>= 2)." +msgstr "Proszę podać wartość warstwy (>= 2)." + msgid "Plate name" msgstr "Nazwa płyty" @@ -6464,8 +7030,14 @@ msgstr "Tak samo jak globalna sekwencja druku" msgid "Print sequence" msgstr "Sekwencja druku" -msgid "Customize" -msgstr "Dostosuj" +msgid "Same as Global" +msgstr "Takie samo jak globalne" + +msgid "Disable" +msgstr "Rozłącz" + +msgid "Spiral vase" +msgstr "Tryb Wazy" msgid "First layer filament sequence" msgstr "Sekwencja koloru pierwszej warstwy" @@ -6489,8 +7061,7 @@ msgid "Log Out" msgstr "Wyloguj się" msgid "Slice all plate to obtain time and filament estimation" -msgstr "" -"Przetnij wszystkie płyty, aby uzyskać oszacowanie czasu i ilości filamentu" +msgstr "Potnij wszystkie płyty, aby uzyskać oszacowany czas i ilości filamentu" msgid "Packing project data into 3mf file" msgstr "Pakowanie danych projektu do pliku 3mf" @@ -6529,15 +7100,6 @@ msgstr "Profil użytkownika" msgid "Preset Inside Project" msgstr "Profil wewnątrz projektu" -msgid "Name is invalid;" -msgstr "Nazwa jest nieprawidłowa;" - -msgid "illegal characters:" -msgstr "niedozwolone znaki:" - -msgid "illegal suffix:" -msgstr "niedozwolony sufiks:" - msgid "Name is unavailable." msgstr "Nazwa jest niedostępna." @@ -6550,20 +7112,12 @@ msgstr "Profil \"%1%\" już istnieje." #, boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." -msgstr "Profil \"%1%\" już istnieje i jest niekompatybilny z obecnym drukarką." +msgstr "" +"Profil \"%1%\" już istnieje i jest niekompatybilny z aktualną drukarką." msgid "Please note that saving action will replace this preset" msgstr "Zwróć uwagę, że zapisanie spowoduje zastąpienie tego profilu" -msgid "The name is not allowed to be empty." -msgstr "Nazwa nie może być pusta." - -msgid "The name is not allowed to start with space character." -msgstr "Nazwa nie może zaczynać się od znaku spacji." - -msgid "The name is not allowed to end with space character." -msgstr "Nazwa nie może kończyć się na znak spacji." - msgid "The name cannot be the same as a preset alias name." msgstr "Nazwa nie może być taka sama, jak nazwa profilu ustawień" @@ -6621,9 +7175,6 @@ msgstr "Nie możesz znaleźć moich urządzeń?" msgid "Log out successful." msgstr "Wylogowanie powiodło się." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Zajęty" @@ -6648,14 +7199,8 @@ msgstr "Bambu Textured PEI Plate" msgid "Send print job to" msgstr "Wyślij zadanie druku do" -msgid "Refresh" -msgstr "Odśwież" - -msgid "Bed Leveling" -msgstr "Poziomowanie stołu" - msgid "Flow Dynamics Calibration" -msgstr "Kalibracja Flow Dynamics" +msgstr "Kalibracja Dynamiki Przepływu" msgid "Click here if you can't connect to the printer" msgstr "Kliknij tutaj, jeśli nie możesz połączyć się z drukarką" @@ -6666,10 +7211,6 @@ msgstr "wysłanie zakończone" msgid "Error code" msgstr "Kod błędu" -msgid "Printer local connection failed, please try again." -msgstr "" -"Nie udało się nawiązać lokalnego połączenia z drukarką, spróbuj ponownie." - msgid "No login account, only printers in LAN mode are displayed" msgstr "Bez logowania na koncie, wyświetlane są tylko drukarki w trybie LAN" @@ -6713,8 +7254,9 @@ msgid "" "Filaments to AMS slots mappings have been established. You can click a " "filament above to change its mapping AMS slot" msgstr "" -"Ustalono przyporządkowanie filamentów do slotów AMS. Możesz kliknąć na " -"dowolny filament powyżej, aby zmienić jego przypisanie do slotu AMS" +"Ustalono przyporządkowanie filamentów do gniazd w AMS. Możesz kliknąć na " +"dowolny filament powyżej, aby zmienić jego przypisanie do innego gniazda w " +"AMS" msgid "" "Please click each filament above to specify its mapping AMS slot before " @@ -6748,9 +7290,13 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Przed rozpoczęciem drukowania należy włożyć kartę SD." -msgid "The selected printer is incompatible with the chosen printer presets." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" -"Wybrana drukarka jest niekompatybilna z wybranymi ustawieniami drukarki." +"Wybrana drukarka (%s) jest niezgodna z wybranym profilem drukarki w " +"programie (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "Aby nagrywać timelapse, należy włożyć kartę SD." @@ -6809,20 +7355,30 @@ msgid "nozzle in preset: %s %s" msgstr "dysza w profilu: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "zapamiętana dysza: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "zapamiętana dysza: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"Średnica Twojej dyszy w profilu nie jest zgodna ze zapamiętaną średnicą " -"dyszy. Czy ostatnio zmieniałeś swoją dyszę?" +"Średnica dyszy w przetworzonym pliku nie jest zgodna z średnicą dyszy w " +"ustawieniach. Jeśli ostatnio zmieniłeś dyszę, przejdź do opcji Urządzenie > " +"Typ dyszy, aby zmienić to ustawienie." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"*Drukowanie filamentu %s z użyciem %s może spowodować uszkodzenie dyszy" +"Drukowanie materiału o wysokiej temperaturze (%s materiał) z %s może " +"spowodować uszkodzenie dyszy." + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Proszę naprawić powyższy błąd, w przeciwnym razie drukowanie nie może być " +"kontynuowane." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6830,25 +7386,10 @@ msgstr "" "Proszę nacisnąć przycisk potwierdzenia, jeśli nadal chcesz kontynuować " "drukowanie." -msgid "Hardened Steel" -msgstr "Stal utwardzana" - -msgid "Stainless Steel" -msgstr "Stal nierdzewna" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "Łączenie z drukarką. Nie można anulować w trakcie procesu łączenia." -msgid "Preparing print job" -msgstr "Przygotowywanie zadania do druku" - -msgid "Abnormal print file data. Please slice again" -msgstr "Nieprawidłowe dane pliku druku. Proszę ponownie przetnij" - -msgid "The name length exceeds the limit." -msgstr "Długość nazwy przekracza limit." - msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." @@ -6862,12 +7403,19 @@ msgstr "Automatyczna kalibracja przepływu za pomocą mikrolidaru" msgid "Modifying the device name" msgstr "Modyfikacja nazwy urządzenia" +msgid "Bind with Pin Code" +msgstr "Powiąż za pomocą kodu PIN" + msgid "Send to Printer SD card" msgstr "Wysłać na kartę SD drukarki" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Nie można wysłać zadania druku podczas aktualizacji" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"Wybrana drukarka jest niekompatybilna z wybranymi ustawieniami drukarki." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Przed wysłaniem na kartę SD drukarki, należy włożyć kartę SD." @@ -6910,6 +7458,28 @@ msgstr "Czas oczekiwania na otrzymanie raportu logowania minął" msgid "Unknown Failure" msgstr "Nieznana awaria" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Proszę znaleźć kod PIN na ekranie drukarki w zakładce konta\n" +"i wprowadź go poniżej." + +msgid "Can't find Pin Code?" +msgstr "Nie możesz odszukać kodu PIN?" + +msgid "Pin Code" +msgstr "Kod PIN" + +msgid "Binding..." +msgstr "Łączenie..." + +msgid "Please confirm on the printer screen" +msgstr "Proszę potwierdzić na ekranie drukarki" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Logowanie nie powiodło się. Proszę sprawdzić kod PIN." + msgid "Log in printer" msgstr "Zaloguj się do drukarki" @@ -7106,13 +7676,36 @@ msgstr "Dostosuj" msgid "Ignore" msgstr "Ignoruj" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Funkcja eksperymentalna: Polega na wycofywaniu filamentu na większą " +"odległość w celu zminimalizowania płukania, a następne jego odcięcie. Choć " +"może to znacząco zmniejszyć ilość zużytego filamentu, może również zwiększyć " +"ryzyko zatknięcia dyszy lub innych problemów z drukowaniem." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Funkcja eksperymentalna: Polega na wycofywaniu filamentu na większą " +"odległość w celu zminimalizowania płukania, a następne jego odcięcie. Choć " +"może to znacząco zmniejszyć ilość zużytego filamentu, może również zwiększyć " +"ryzyko zatknięcia dyszy lub innych problemów z drukowaniem. Proszę używać z " +"najnowszym oprogramowaniem drukarki." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" -"Podczas nagrywania timelapse'a bez głowicy narzędziowej zaleca się dodanie " +"Podczas nagrywania timelapse'a bez głowicy drukującej zaleca się dodanie " "\"Timelaps - Wieża Czyszcząca\" \n" "przez kliknięcie prawym przyciskiem myszy na pustym miejscu płyty i wybranie " "\"Dodaj Prymityw\"->\"Timelaps - Wieża Czyszcząca\"." @@ -7158,10 +7751,9 @@ msgid "" "expressed as a percentage of line width. 0 speed means no slowing down for " "the overhang degree range and wall speed is used" msgstr "" -"To jest szybkość dla różnych stopni nawisu. Stopnie nawisu są wyrażane jako " -"procent szerokości linii. Szybkość 0 oznacza brak zwolnienia dla zakresu " -"stopnia nawisu, a używana jest szybkość ściany. Szybkość dla pośrednich " -"wartości jest obliczana za pomocą interpolacji liniowej" +"To jest prędkość dla różnych stopni nawisu. Stopnie nawisu są wyrażane jako " +"procent szerokości linii. Prędkość 0 oznacza brak spowolnienia, a używana " +"jest prędkość ściany" msgid "Bridge" msgstr "Mosty" @@ -7187,6 +7779,9 @@ msgstr "Filament podpory" msgid "Tree supports" msgstr "Drzewo" +msgid "Skirt" +msgstr "Skirt" + msgid "Prime tower" msgstr "Wieża czyszcząca" @@ -7373,6 +7968,14 @@ msgstr "Parametry zmiany narzędzia w drukarkach wieloekstruzyjnych MM" msgid "Printable space" msgstr "Przestrzeń do druku" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Podano nieprawidłową wartość dla parametru%1%: %2%" + +msgid "G-code flavor is switched" +msgstr "Wariant G-code został zmieniony" + msgid "Cooling Fan" msgstr "Wentylator chłodzący" @@ -7383,7 +7986,7 @@ msgid "Extruder Clearance" msgstr "Odstęp od extrudera" msgid "Adaptive bed mesh" -msgstr "Adaptacjna siatka stołu" +msgstr "Adaptacyjna siatka stołu" msgid "Accessory" msgstr "Akcesoria" @@ -7434,7 +8037,7 @@ msgid "Acceleration limitation" msgstr "Ograniczenie przyspieszenia" msgid "Jerk limitation" -msgstr "Ograniczenie zrywu (Jerk)" +msgstr "Ograniczenie Jerk" msgid "Single extruder multimaterial setup" msgstr "Konfiguracja pojedynczego extrudera wielomateriałowego" @@ -7518,8 +8121,7 @@ msgid "Set" msgstr "Ustaw" msgid "Click to reset current value and attach to the global value." -msgstr "" -"Kliknij, aby zresetować bieżącą wartość i przypiąć ją do wartości globalnej." +msgstr "Kliknij, aby zresetować bieżącą wartość do wartości globalnej." msgid "Click to drop current modify and reset to saved value." msgstr "" @@ -7607,23 +8209,36 @@ msgstr "" "następujące niezapisane zmiany:" #, 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 "" -"Zmieniłeś niektóre ustawienia profilu \"%1%\". \n" -"Czy chciałbyś zachować te zmienione ustawienia (nowa wartość) po zmianie " -"profilu?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Zmieniono niektóre ustawienia profilu \"%1%\"." msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"Zmieniłeś niektóre ustawienia profilu. \n" -"Czy chciałbyś zachować te zmienione ustawienia (nowa wartość) po zmianie " -"profilu?" +"\n" +"Możesz zapisać lub odrzucić zmienione wartości w profilu." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Możesz zapisać lub odrzucić zmodyfikowane wartości profilu, lub kontynuować " +"ich używanie w nowym profilu." + +msgid "You have previously modified your settings." +msgstr "Wcześniej zmodyfikowałeś swoje ustawienia." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Możesz zapisać lub odrzucić zmodyfikowane wartości w profilu, lub " +"kontynuować ich używanie w nowym profilu" msgid "Extruders count" msgstr "Liczba extruderów" @@ -7659,7 +8274,7 @@ msgid "Transfer values from left to right" msgstr "Przenieś wartości z lewej do prawej" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Jeśli ta opcja jest aktywowana, to okno dialogowe może być używane do " @@ -7673,7 +8288,7 @@ msgid "Set as cover" msgstr "Ustaw jako okładkę" msgid "Cover" -msgstr "Okładka" +msgstr "Osłona" #, boost-format msgid "The name \"%1%\" already exists." @@ -7744,6 +8359,60 @@ msgstr "Brak dostępnych aktualizacji." msgid "The configuration is up to date." msgstr "Konfiguracja jest aktualna." +msgid "Obj file Import color" +msgstr "Importuj kolory z pliku .OBJ" + +msgid "Specify number of colors:" +msgstr "Podaj liczbę kolorów:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "Liczba kolorów powinna mieścić się w zakresie [%d, %d]." + +msgid "Recommended " +msgstr "Zalecane " + +msgid "Current filament colors:" +msgstr "Aktualne kolory filamentów:" + +msgid "Quick set:" +msgstr "Szybkie ustawienie:" + +msgid "Color match" +msgstr "Dopasowanie koloru" + +msgid "Approximate color matching." +msgstr "Przybliżone dopasowanie kolorów." + +msgid "Append" +msgstr "Dołącz" + +msgid "Add consumable extruder after existing extruders." +msgstr "Dodaj ekstruder do użycia po już istniejących ekstruderach" + +msgid "Reset mapped extruders." +msgstr "Zresetuj przypisane ekstrudery." + +msgid "Cluster colors" +msgstr "Klasteryzacja kolorów" + +msgid "Map Filament" +msgstr "Przypisz filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Uwaga: Kolor został wybrany. Możesz kliknąć OK \n" +"aby kontynuować, lub dostosować go ręcznie." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Ostrzeżenie: Suma nowo dodanych i \n" +" obecnych ekstruderów przekracza 16." + msgid "Ramming customization" msgstr "Dostosowanie wyciskania" @@ -7775,7 +8444,7 @@ msgid "s" msgstr "s" msgid "Total rammed volume" -msgstr "Całkowity objętość wyciskania" +msgstr "Całkowita objętość wyciskania" msgid "Ramming line width" msgstr "Szerokość linii wyciskania" @@ -7796,8 +8465,8 @@ msgid "" "Orca would re-calculate your flushing volumes everytime the filaments color " "changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" -"Orca będzie przeliczał Twoje objętości płukania za każdym razem, gdy zmieni " -"się kolor filamentu. Możesz wyłączyć auto-przeliczanie w Orca Slicer > " +"Orca będzie przeliczał objętość płukania za każdym razem, gdy zmieni się " +"kolor filamentu. Możesz wyłączyć auto-przeliczanie w Orca Slicer > " "Preferencje" msgid "Flushing volume (mm³) for each filament pair." @@ -7829,6 +8498,44 @@ msgstr "Od" msgid "To" msgstr "Do" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" +"Do wykonania tego zadania wymagany jest Windows Media Player! Czy chcesz " +"włączyć 'Windows Media Player' dla swojego systemu operacyjnego?" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" +"BambuSource nie został poprawnie zarejestrowany do odtwarzania mediów! " +"Naciśnij Tak, aby ponownie go zarejestrować. Będziesz poproszony dwa razy." + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" +"Brakujący komponent BambuSource zarejestrowany do odtwarzania mediów! Proszę " +"ponownie zainstalować OrcaSlicer lub skonsultować się z pomocą po-" +"sprzedażową." + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" +"Jeśli używasz BambuSource z innej instalacji programu, odtwarzanie wideo " +"może nie działać poprawnie! Naciśnij Tak, aby to naprawić." + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" +"Twój system nie posiada kodeków H.264 dla GStreamer, które są wymagane do " +"odtwarzania wideo. (Spróbuj zainstalować pakiety gstreamer1.0-plugins-bad " +"lub gstreamer1.0-libav, a następnie zrestartuj Orca Slicer?)" + msgid "Bambu Network plug-in not detected." msgstr "Nie wykryto wtyczki Bambu Network." @@ -7898,9 +8605,9 @@ msgid "" "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" -"Automatycznie orientuje wybrane obiekty lub wszystkie obiekty. Jeśli są " -"wybrane obiekty, orientuje tylko wybrane. W przeciwnym razie orientuje " -"wszystkie obiekty na bieżącym dysku." +"Ta funkcja automatycznie ustawia orientację zaznaczonych lub wszystkich " +"obiektów. Jeśli są wybrane obiekty, ustawi tylko te wybrane. W przeciwnym " +"razie ustawia wszystkie obiekty na aktualnej płycie roboczej." msgid "Shift+Tab" msgstr "Shift+Tab" @@ -8032,7 +8739,7 @@ msgid "Switch between Prepare/Preview" msgstr "Przełączanie między przygotowaniem/podglądem" msgid "Plater" -msgstr "Płyta drukująca" +msgstr "Płyta" msgid "Move: press to snap by 1mm" msgstr "Przesuń: naciśnij, aby przyciągnąć co 1 mm" @@ -8041,13 +8748,13 @@ msgid "⌘+Mouse wheel" msgstr "⌘+Kółko myszy" msgid "Support/Color Painting: adjust pen radius" -msgstr "Wsparcie/Kolorowanie: dostosuj promień pędzla" +msgstr "Podpory/Kolorowanie: dostosuj promień pędzla" msgid "⌥+Mouse wheel" msgstr "⌥+Kółko myszy" msgid "Support/Color Painting: adjust section position" -msgstr "Wsparcie/Kolorowanie: dostosuj pozycję sekcji" +msgstr "Podpory/Kolorowanie: dostosuj pozycję sekcji" msgid "Ctrl+Mouse wheel" msgstr "Ctrl+Kółko myszy" @@ -8100,6 +8807,12 @@ msgstr "Przesuń suwak 5x szybciej" msgid "Shift+Mouse wheel" msgstr "Shift+Kółko myszy" +msgid "Horizontal slider - Move to start position" +msgstr "Suwak poziomy - Przesuń do pozycji początkowej" + +msgid "Horizontal slider - Move to last position" +msgstr "Suwak poziomy - Przesuń do ostatniej pozycji" + msgid "Release Note" msgstr "Informacje o wydaniu" @@ -8129,6 +8842,42 @@ msgstr "Pomiń tę wersję" msgid "Done" msgstr "Gotowe" +msgid "resume" +msgstr "wznów" + +msgid "Resume Printing" +msgstr "Wznów zadanie drukowania" + +msgid "Resume Printing(defects acceptable)" +msgstr "Wznów drukowanie (wady są do zaakceptowania)" + +msgid "Resume Printing(problem solved)" +msgstr "Wznów drukowanie (problem został rozwiązany)" + +msgid "Stop Printing" +msgstr "Zatrzymaj Drukowanie" + +msgid "Check Assistant" +msgstr "Sprawdź Asystenta" + +msgid "Filament Extruded, Continue" +msgstr "Gotowe, kontynuuj" + +msgid "Not Extruded Yet, Retry" +msgstr "Jeszcze nie wytłoczono, Spróbuj ponownie" + +msgid "Finished, Continue" +msgstr "Zakończono, Kontynuuj" + +msgid "Load Filament" +msgstr "Ładuj" + +msgid "Filament Loaded, Resume" +msgstr "Filament załadowany, Wznów" + +msgid "View Liveview" +msgstr "Podgląd na żywo" + msgid "Confirm and Update Nozzle" msgstr "Potwierdź i zaktualizuj dyszę" @@ -8182,7 +8931,7 @@ msgid "Model:" msgstr "Model:" msgid "Serial:" -msgstr "Numer seryjny:" +msgstr "Seria:" msgid "Version:" msgstr "Wersja:" @@ -8190,12 +8939,6 @@ msgstr "Wersja:" msgid "Update firmware" msgstr "Aktualizuj oprogramowanie" -msgid "Printing" -msgstr "Drukowanie" - -msgid "Idle" -msgstr "Bezczynność" - msgid "Beta version" msgstr "Wersja beta" @@ -8231,11 +8974,11 @@ 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." +"update next time starting Orca." msgstr "" "Błąd wersji oprogramowania układowego. Naprawa i aktualizacja są wymagane " "przed drukowaniem. Czy chcesz zaktualizować teraz? Możesz to również zrobić " -"później na drukarce lub przy następnym uruchomieniu studia." +"później na drukarce lub przy następnym uruchomieniu Orca." msgid "Extension Board" msgstr "Płyta rozszerzeń" @@ -8373,9 +9116,6 @@ msgstr "Wewnętrzny most" msgid "Gap infill" msgstr "Wypełnienie szczelin" -msgid "Skirt" -msgstr "Skirt" - msgid "Support interface" msgstr "Warstwa łącząca" @@ -8654,7 +9394,7 @@ msgstr "Zbyt duża szerokość linii" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"Wieża czyszcząca wymaga, aby wsparcie miało tę samą wysokość warstwy co " +"Wieża czyszcząca wymaga, aby podpory miały tę samą wysokość warstwy co " "obiekt." msgid "" @@ -8712,7 +9452,7 @@ msgstr "" #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "Płytka %d: %s nie obsługuje filamentu %s" +msgstr "Płyta robocza %d: %s nie obsługuje filamentu %s." msgid "" "Setting the jerk speed too low could lead to artifacts on curved surfaces" @@ -8852,7 +9592,7 @@ msgid "Printer preset names" msgstr "Nazwy profilu drukarki" msgid "Use 3rd-party print host" -msgstr "Użyj zewnętrznego serwera druku" +msgstr "Użyj serwera druku firm trzecich" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" msgstr "" @@ -8947,7 +9687,7 @@ msgstr "" "grudek na powierzchni" msgid "Avoid crossing wall - Max detour length" -msgstr "- Maksymalna długość objazdu" +msgstr "Maksymalna długość objazdu" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -8957,10 +9697,10 @@ msgid "" msgstr "" "Unikaj ruchów nad obrysami-\n" "Maksymalna długość objazdu przy unikaniu przejeżdżania nad obrysami. Jeśli " -"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad " -"obrysami\" zostanie zignorowana dla tej ścieżki. Długość objazdu można " -"zdefiniować jako wartość absolutna lub obliczona procentowo (np. 50%) z " -"długości ruchu bezpośredniego." +"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad obrysami" +"\" zostanie zignorowana dla tej ścieżki. Długość objazdu można zdefiniować " +"jako wartość absolutna lub obliczona procentowo (np. 50%) z długości ruchu " +"bezpośredniego." msgid "mm or %" msgstr "mm lub %" @@ -9045,6 +9785,15 @@ msgstr "Engineering Plate" msgid "First layer print sequence" msgstr "Sekwencja druku pierwszej warstwy" +msgid "Other layers print sequence" +msgstr "Inna kolejność druku warstw" + +msgid "The number of other layers print sequence" +msgstr "Ilość warstw ze zmienioną kolejnością drukowania" + +msgid "Other layers filament sequence" +msgstr "Kolejność filamenu dla pozostałych warstw" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "" "Ten G-code jest wstawiany przy każdej zmianie warstwy, tuż przed " @@ -9058,9 +9807,9 @@ msgid "" "surface layer. When the thickness calculated by this value is thinner than " "bottom shell thickness, the bottom shell layers will be increased" msgstr "" -"Ilość zwartych warstw przy druku dolnej powierzchni modelu, włączając w to " -"dolną warstwę powierzchniową. Jeżeli grubość wyliczona przez tę wartość jest " -"cieńsza niż grubość dolnej powłoki, liczba warstw dolnej powłoki zostanie " +"To jest liczba pełnych warstw dolnej powłoki, włączając w to dolną " +"powierzchnie. Jeżeli grubość obliczona na podstawie tej wartości jest " +"mniejsza niż grubość dolnej powłoki, liczba warstw dolnej powłoki zostanie " "zwiększona" msgid "Bottom shell thickness" @@ -9180,7 +9929,7 @@ msgid "" "material for bridge, to improve sag" msgstr "" "Zmniejsz tę wartość minimalnie (na przykład do 0.9), aby zmniejszyć ilość " -"filamentu na most, co poprawi jego przewisanie" +"filamentu dla mostu, co zmniejszy jego wygięcie" msgid "Internal bridge flow ratio" msgstr "Współczynnik przepływu dla wewnętrznych mostów" @@ -9201,8 +9950,8 @@ msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" -"Ten współczynnik wpływa na ilość materiału na górne pełne wypełnienie. " -"Możesz go nieco zmniejszyć, aby uzyskać gładkie wykończenie powierzchni" +"Czynnik ten wpływa na ilość filamentu na górne pełne wypełnienie. Możesz go " +"nieco zmniejszyć, aby uzyskać gładkie wykończenie powierzchni" msgid "Bottom surface flow ratio" msgstr "Współczynnik przepływu dolnej powierzchni" @@ -9476,7 +10225,7 @@ msgstr "" "0, aby dezaktywować" msgid "Compatible machine" -msgstr "Kompatybilna drukarka" +msgstr "Kompatybilna maszyna" msgid "upward compatible machine" msgstr "drukarka kompatybilna i wzwyż" @@ -9519,10 +10268,10 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"Włącz tę opcję, aby zwolnić prędkość druku, aby czas końcowej warstwy nie " -"był krótszy niż próg czasu warstwy w \"Próg maksymalnej prędkości " -"wentylatora\", tak aby warstwa mogła być chłodzona przez dłuższy czas. Może " -"to poprawić jakość chłodzenia dla igieł i małych detali" +"Włącz tę opcję, aby zmniejszyć prędkość drukowania, aby czas ostatniej " +"warstwy nie był krótszy niż próg czasu warstwy w „Maksymalny próg prędkości " +"wentylatora”, aby warstwa mogła być chłodzona przez dłuższy czas. Może to " +"poprawić jakość drobnych szczegółów i małych detali" msgid "Normal printing" msgstr "Normalne drukowanie" @@ -9531,8 +10280,8 @@ msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"Domyślne przyspieszenie zarówno normalnego druku, jak i podróży, z wyjątkiem " -"pierwszej warstwy" +"Domyślne przyspieszenie zarówno normalnego druku, jak i prędkości jałowej, z " +"wyjątkiem pierwszej warstwy" msgid "mm/s²" msgstr "mm/s²" @@ -9675,7 +10424,7 @@ msgstr "" "niepotrzebnych mostów." msgid "Disabled" -msgstr "Wyłączona" +msgstr "Wyłączony" msgid "Limited filtering" msgstr "Ograniczona filtracja" @@ -9793,7 +10542,7 @@ msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " "infill be enabled, the concentric pattern will be used for the small area." msgstr "" -"Wzór wewnętrznego pełnego wypełnienia. Jeśli zostanie włączona funkcja " +"Wzór linii wewnętrznego pełnego wypełnienia. Jeśli zostanie włączona funkcja " "wykrywania wąskiego wewnętrznego pełnego wypełnienia, dla małego obszaru " "użyty zostanie wzór koncentryczny." @@ -9900,7 +10649,7 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9908,13 +10657,12 @@ msgid "" msgstr "" "Kolejność drukowania ścian/wypełnienia. Gdy pole wyboru nie jest zaznaczone, " "najpierw drukowane są ściany, co w większości przypadków działa najlepiej.\n" -"\n" -"Drukowanie najpierw ścian, może pomóc przy ekstremalnych nawisach, ponieważ " -"ściany mają sąsiednie wypełnienie, do którego przylegają. Jednak wypełnienie " -"może nieznacznie wypchnąć tam wydrukowane ściany w miejscu gdzie są do nich " -"przymocowane. Skutkuje to gorszym wykończeniem zewnętrznej powierzchni. Może " -"to również spowodować prześwitywanie wypełnienia przez zewnętrzne " -"powierzchnie części." +"Drukowanie najpierw wypełnienia, może pomóc przy ekstremalnych nawisach, " +"ponieważ ściany mają sąsiadujące wypełnienie, do którego przylegają. Jednak " +"wypełnienie może nieznacznie wypchnąć tak wydrukowane ściany w miejscu gdzie " +"są do nich przymocowane. Skutkuje to gorszym wykończeniem zewnętrznej " +"powierzchni. Może to również spowodować prześwitywanie wypełnienia przez " +"zewnętrzne powierzchnie części." msgid "Wall loop direction" msgstr "Kierunek obwodu ściany" @@ -9949,24 +10697,24 @@ msgid "Clockwise" msgstr "Zgodnie" msgid "Height to rod" -msgstr "Wysokość do pręta" +msgstr "Odległość od prowadnicy" msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." msgstr "" -"Odległość od końcówki dyszy do dolnego pręta. Używane do unikania kolizji w " -"druku obiekt-po-obiekcie." +"Odległość od końcówki dyszy do dolnej części prowadnicy. Używane do unikania " +"kolizji w druku według obiektu." msgid "Height to lid" -msgstr "Wysokość do pokrywy" +msgstr "Odległość do pokrywy" msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" "Odległość od końcówki dyszy do pokrywy. Używane do unikania kolizji w druku " -"obiekt-po-obiekcie." +"według obiektu." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " @@ -9975,6 +10723,12 @@ msgstr "" "Promień odstępu wokół extrudera. Używane do unikania kolizji w druku obiekt-" "po-obiekcie." +msgid "Nozzle height" +msgstr "Wysokość dyszy" + +msgid "The height of nozzle tip." +msgstr "Wysokość końcówki dyszy." + msgid "Bed mesh min" msgstr "Min. obszar skanowania stołu" @@ -10068,19 +10822,19 @@ msgstr "" "powierzchnię, gdy występuje lekkie przelewanie lub niedomiar" msgid "Enable pressure advance" -msgstr "Włącz przyspieszenie ciśnienia" +msgstr "Włącz wzrost ciśnienia (PA)" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " "enabled." msgstr "" -"Włącz przyspieszenie ciśnienia, wynik automatycznej kalibracji zostanie " +"Włącz wzrost ciśnienia (PA), wynik automatycznej kalibracji zostanie " "nadpisany po włączeniu." msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "" -"Przyspieszenie ciśnienia (Klipper), znane również jako współczynnik " -"przyspieszenia liniowego (Marlin)." +"Pressure advance (Klipper), znane również jako współczynnik przyspieszenia " +"liniowego (Marlin)." msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " @@ -10100,6 +10854,31 @@ msgstr "" "zatrzymany i będzie pracował przynajmniej z minimalną prędkością, aby " "zmniejszyć częstotliwość włączania i wyłączania" +msgid "Don't slow down outer walls" +msgstr "Nie spowalniaj zewnętrznych ścian" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"Jeśli ta opcja jest włączona, zapewni to, że zewnętrzne obwody nie będą " +"spowalniane, aby spełnić minimalny czas warstwy. Jest to szczególnie pomocne " +"w poniższych sytuacjach:\n" +"\n" +"1. Aby uniknąć zmian połysku podczas drukowania filamentami z połuskiem.\n" +"2. Aby uniknąć zmian prędkości zewnętrznych ścian, które mogą powodować " +"drobne artefakty ścian, przypominające zygzaki.\n" +"3. Aby uniknąć drukowania z prędkościami, które powodują powstawanie " +"drobnych artefaktów (VFA) na zewnętrznych ścianach.\n" + msgid "Layer time" msgstr "Czas warstwy" @@ -10142,8 +10921,8 @@ msgid "" msgstr "" "To ustawienie określa, ile objętości filamentu może być stopione i " "wyciśnięte na sekundę. Prędkość drukowania jest ograniczana przez maksymalną " -"prędkość przepływu, w przypadku zbyt wysokiego i nieuzasadnionego ustawienia " -"prędkości. Nie może wynosić zero" +"prędkość przepływu, w przypadku zbyt wysokiego i nierealistycznego " +"ustawienia prędkości. Nie może wynosić zero" msgid "mm³/s" msgstr "mm³/s" @@ -10258,12 +11037,12 @@ msgid "" "object, Orca Slicer will always prime this amount of material into the wipe " "tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" -"Po zmianie narzędzia dokładna pozycja nowo załadowanego filamentu wewnątrz " -"dyszy może nie być znana, a ciśnienie filamentu prawdopodobnie jeszcze nie " -"jest stabilne. Przed wyczyszczeniem głowicy drukującej do wypełnienia lub " -"obiektu poświęcnego, Orca Slicer zawsze wstępnie poda tę ilość filamentu do " -"wieży czyszczącej, aby niezawodnie produkować kolejne wypełnienia lub " -"ekstruzje obiektów poświęcnych." +"Po zmianie narzędzia (filamentu), dokładna pozycja nowo załadowanego " +"filamentu wewnątrz dyszy może nie być znana, a ciśnienie filamentu " +"prawdopodobnie jeszcze nie jest ustabilizowane. Przed wyczyszczeniem głowicy " +"drukującej do wypełnienia lub do obiektu, OrcaSlicer zawsze wstępnie " +"wytłoczy tę ilość filamentu do wieży czyszczącej, aby zapewnić niezawodną " +"dalszą ekstruzję." msgid "Speed of the last cooling move" msgstr "Prędkość ostatniego ruchu chłodzącego" @@ -10386,14 +11165,29 @@ msgstr "Dostawca filamentu. Tylko do celów prezentacyjnych" msgid "(Undefined)" msgstr "(Nieokreślone)" -msgid "Infill direction" -msgstr "Kierunek wypełnienia" +msgid "Sparse infill direction" +msgstr "Kierunek wzoru wypełnienia" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "" -"Kąt dla wzoru linii wypełnienia, który kontroluje początek lub ich kierunek" +"Kąt dla wzoru wypełnienia, który kontroluje początek lub główny kierunek " +"linii" + +msgid "Solid infill direction" +msgstr "Kierunek wzoru pełnego wypełnienia" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "Kąt wyznaczający główny kierunek linii dla wzoru pełnego wypełnienia" + +msgid "Rotate solid infill direction" +msgstr "Zmień kierunek pełnego wypełnienia" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Zmień kierunek pełnego wypełnienia o 90° dla każdej warstwy." msgid "Sparse infill density" msgstr "Gęstość wypełnienia" @@ -10431,17 +11225,20 @@ msgid "Honeycomb" msgstr "Plaster miodu" msgid "Adaptive Cubic" -msgstr "Adaptacyjny sześcienny" +msgstr "Sześcian adaptacyjny" msgid "3D Honeycomb" msgstr "3D Plaster miodu" msgid "Support Cubic" -msgstr "Podpora sześcienna" +msgstr "Sześcian podparty" msgid "Lightning" msgstr "Piorun" +msgid "Cross Hatch" +msgstr "Krzyżowy podparty" + msgid "Sparse infill anchor length" msgstr "Długość kotwiczenia wypełnienia" @@ -10560,7 +11357,7 @@ msgstr "" "przyczepność do stołu" msgid "Enable accel_to_decel" -msgstr "Włącz przyspieszanie do hamowania" +msgstr "Włącz accel_to_decel" msgid "Klipper's max_accel_to_decel will be adjusted automatically" msgstr "" @@ -10568,7 +11365,7 @@ msgstr "" "automatycznie" msgid "accel_to_decel" -msgstr "przyspieszanie do hamowania" +msgstr "Dopasuj przyspieszenie przed zmianą kierunku" #, c-format, boost-format msgid "" @@ -10613,7 +11410,7 @@ msgstr "" "warstwy może poprawić przyczepność do stołu" msgid "Speed of initial layer except the solid infill part" -msgstr "Prędkość pierwszej warstwy poza pełnym wypełnieniem" +msgstr "Prędkość pierwszej warstwy z wyjątkiem pełnego wypełnienia" msgid "Initial layer infill" msgstr "Wypełnienie pierwszej warstwy" @@ -10649,10 +11446,10 @@ msgstr "Pełna prędkość wentylatora na warstwie" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Prędkość wentylatora będzie stopniowo zwiększana liniowo od zera na warstwie " "\"close_fan_the_first_x_layers\" do maksymalnej na warstwie " @@ -10660,6 +11457,9 @@ msgstr "" "\"close_fan_the_first_x_layers\", to wentylator będzie pracować z maksymalną " "dozwoloną prędkością na warstwie \"close_fan_the_first_x_layers\" + 1." +msgid "layer" +msgstr "warstwa" + msgid "Support interface fan speed" msgstr "Prędkość wentylatora dla warstwy łączącej podpory" @@ -10730,18 +11530,43 @@ msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"Prędkość wypełniania przerw. Przerwa zazwyczaj ma nieregularną szerokość " +"Prędkość wypełniania szczelin. Przerwa zazwyczaj ma nieregularną szerokość " "linii i powinna być drukowana wolniej" +msgid "Precise Z height" +msgstr "Precyzyjna wysokość Z" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Aktywuj tę opcję, aby uzyskać precyzyjną wysokość obiektu po przetworzeniu " +"na warstwy. Precyzyjna wysokość obiektu zostanie uzyskana poprzez dokładne " +"dostosowanie wysokości ostatnich kilku warstw. Należy pamiętać, że jest to " +"parametr eksperymentalny." + msgid "Arc fitting" msgstr "Dopasowanie łuków" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Włącz tę opcję, aby uzyskać plik G-code zawierający ruchy G2 i G3. " -"Tolerancja dopasowania jest taka sama jak rozdzielczość" +"Włącz to, aby uzyskać plik G-code, który zawiera ruchy G2 i G3. Tolerancja " +"dopasowania jest taka sama jak rozdzielczość.\n" +"\n" +"Uwaga: Dla maszyn Klipper, zaleca się wyłączenie tej opcji. Klipper nie " +"korzysta z poleceń łuku, ponieważ są one ponownie dzielone na segmenty linii " +"przez oprogramowanie firmware. Skutkuje to obniżeniem jakości powierzchni, " +"ponieważ segmenty linii są konwertowane na łuki przez slicer, a następnie z " +"powrotem na segmenty linii przez oprogramowanie firmware." msgid "Add line number" msgstr "Dodaj numer linii" @@ -10938,7 +11763,7 @@ msgid "Exclude objects" msgstr "Wyłącz obiekty" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "Włącz tę opcję, aby dodać polecenie EXCLUDE OBJECT do kodu G" +msgstr "Włącz tę opcję, aby dodać polecenie EXCLUDE OBJECT do G-code" msgid "Verbose G-code" msgstr "Rozszerzony G-code" @@ -10959,9 +11784,9 @@ msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"Automatyczne scalanie rzadkiego wypełnienia kilku warstw, aby drukować je " -"jednocześnie, co redukuje czas druku. Ściana jest wciąż drukowana z " -"zachowaniem oryginalnej wysokości warstwy." +"Automatycznie łącz wypełnienie z kilku warstw, aby wydrukować je razem i " +"zaoszczędzić czas. Ściana będzie nadal drukowana z pierwotną wysokością " +"warstwy." msgid "Filament to print internal sparse infill." msgstr "Filament do druku wewnętrznego wypełnienia." @@ -10976,13 +11801,35 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Nakładanie wypełnienia na obrysy" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"Powierzchnia wypełnienia jest delikatnie powiększana, aby zachodziła na " -"ścianę w celu lepszego połączenia. Wartość procentowa jest określona " -"względem szerokości linii rzadkiego wypełnienia" +"Obszar wypełnienia jest nieznacznie powiększony, aby częściowo zachodzić na " +"ścianę i tym zapewnić lepsze połączenie. Wartość procentowa odnosi się do " +"szerokości linii wypełnienia. Ustaw tę wartość na około 10-15%, aby uniknąć " +"nadmiernej ekstruzji materiału, co może prowadzić do nierówności na górnej " +"powierzchni wydruku." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Nachodzenie pełnego wypełnienia na ściany" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"Górny obszar wypełnienia jest nieznacznie powiększony, aby zachodził na " +"ścianę w celu lepszego połączenia i zminimalizowania pojawiania się otworów " +"w miejscu, w którym górne wypełnienie styka się ze ścianami. Wartość 25-30% " +"jest dobrym punktem wyjścia, minimalizującym pojawianie się otworów. Wartość " +"procentowa odnosi się do szerokości linii wypełnienia" msgid "Speed of internal sparse infill" msgstr "Prędkość wewnętrznego wypełnienia" @@ -10995,9 +11842,9 @@ msgid "" "Useful for multi-extruder prints with translucent materials or manual " "soluble support material" msgstr "" -"Wymuszaj generowanie zwartych warstw między sąsiadującymi materiałami/" -"woluminami. Przydatne przy wydrukach z wieloma extruderami z materiałami o " -"przejrzystej strukturze lub ręcznym rozpuszczalnym materiale podporowym" +"Wymuszaj generowanie warstw między sąsiadującymi materiałami/woluminami. " +"Przydatne przy wydrukach z wieloma ekstruderami, materiałów o przejrzystej " +"strukturze lub rozpuszczalnym materiale do drukowania podpór" msgid "Maximum width of a segmented region" msgstr "Maksymalna szerokość segmentowanej strefy" @@ -11049,9 +11896,9 @@ 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 "" -"Ilość filamentu do wytłaczania podczas prasowania. Względem przepływu " -"normalnej wysokości warstwy. Zbyt wysoka wartość powoduje nadmierny wyciek " -"na powierzchni" +"Ilość materiału do wytłoczenia podczas prasowania. Względem przepływu o " +"normalnej wysokości warstwy. Zbyt wysoka wartość powoduje nadmierną " +"ekstruzję na powierzchni" msgid "Ironing line spacing" msgstr "Odstęp między liniami" @@ -11077,7 +11924,7 @@ msgstr "" msgid "This gcode part is inserted at every layer change after lift z" msgstr "" -"Ten fragment kodu G jest wstawiany przy każdej zmianie warstwy po " +"Ten fragment G-code jest wstawiany przy każdej zmianie warstwy po " "podniesieniu osi Z" msgid "Supports silent mode" @@ -11091,7 +11938,7 @@ msgstr "" "przyspieszenia do druku" msgid "Emit limits to G-code" -msgstr "Wysyłaj limity do kodu G" +msgstr "Wysyłaj limity do G-code" msgid "Machine limits" msgstr "Limity maszyny" @@ -11126,7 +11973,7 @@ msgstr "" "jak materiał wypełnienia jest nanoszony na małych obszarach" msgid "Flow Compensation Model" -msgstr "Model kompensacji przepływu" +msgstr "Model Kompensacji Przepływu" msgid "" "Flow Compensation Model, used to adjust the flow for small infill areas. The " @@ -11594,7 +12441,7 @@ msgid "You can put your notes regarding the printer here." msgstr "Tutaj możesz umieścić notatki dotyczące drukarki." msgid "Raft contact Z distance" -msgstr "Odległość kontaktu tratwy Z" +msgstr "Odległość Z kontaktu z tratwą" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" @@ -11675,6 +12522,30 @@ msgstr "" "Pewna ilość materiału w ekstruderze jest cofana, aby zapobiec wyciekowi " "filamentu podczas długiego ruchu. Ustaw zero, aby zablokować retrakcje" +msgid "Long retraction when cut(experimental)" +msgstr "Długość retrakcji przed odcięciem filamentu (eksperymentalna)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Funkcja eksperymentalna. Wycofanie i odcięcie filamentu na większej " +"odległości podczas jego zmian w celu zminimalizowania objętości płukania. " +"Chociaż znacząco zmniejszy to zużycie filamentu, może to również zwiększyć " +"ryzyko zatkania dyszy lub innych problemów podczas drukowania." + +msgid "Retraction distance when cut" +msgstr "Długość retrakcji podczas cięcia" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Funkcja eksperymentalna. Długość retrakcji przed odcięciem podczas zmiany " +"filamentu" + msgid "Z hop when retract" msgstr "Z-hop podczas retrakcji" @@ -11695,8 +12566,9 @@ msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" -"Z-hop będzie działać tylko wtedy, gdy Z jest powyżej tej wartości i poniżej " -"parametru: \"górna granica Z-hop\"" +"Jeśli podana jest dodatnia wartość, oś Z będzie podnosić się tylko poniżej " +"ustawionej tutaj granicy. W ten sposób możesz zablokować podnoszenie się osi " +"Z powyżej ustawionej wysokości." msgid "Z hop upper boundary" msgstr "Górna granica Z-hop" @@ -11705,8 +12577,9 @@ msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" -"Jeśli ta wartość jest dodatnia to Z-hop będzie działał tylko wtedy, gdy oś Z " -"jest powyżej i poniżej parametru: \"dolna granica Z-hop\"" +"Jeśli podano wartość dodatnią, oś Z będzie podnosić się tylko powyżej " +"określonej tutaj wysokości. Dzięki temu możesz wyłączyć podnoszenie osi Z " +"podczas drukowania pierwszych warstw (na początku drukowania)." msgid "Z hop type" msgstr "Typ Z-hop" @@ -11760,13 +12633,13 @@ msgid "Top and Bottom" msgstr "Na górnych i dolnych" msgid "Extra length on restart" -msgstr "Dodatkowa ilość dla powrotu" +msgstr "Dodatkowa długość przed wznowieniem" 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 "" -"Gdy retrakcja jest kompensowana po ruchu jałowym, extruder przepych tę " +"Gdy retrakcja jest kompensowana po ruchu jałowym, ekstruder przepycha tę " "dodatkową ilość filamentu. To opcja jest rzadko potrzebna." msgid "" @@ -11812,8 +12685,8 @@ msgstr "Wyłącz ustawianie pozostałego czasu druku" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" -"Zablokuj generowanie polecenia M73: Ustaw pozostały czas druku w końcowym " -"kodzie G-code" +"Zablokuj generowanie polecenia M73: Ustaw pozostały czas druku w końcowym G-" +"code" msgid "Seam position" msgstr "Pozycja szwu" @@ -11984,9 +12857,9 @@ msgid "" "if a wipe action is executed immediately following an outer wall extrusion, " "the speed of the outer wall extrusion will be utilized for the wipe action." msgstr "" -"Szybkość czyszczenia głowicy jest ustalana na podstawie prędkości aktualnie " -"używanej w procesie ekstruzji. Na przykład, jeżeli czyszczenie jest " -"przeprowadzane zaraz po wydrukowaniu zewnętrznej ścianki modelu, to dla " +"Szybkość czyszczenia głowicy drukującej jest ustalana na podstawie prędkości " +"aktualnie używanej w procesie ekstruzji. Na przykład, jeżeli czyszczenie " +"jest przeprowadzane zaraz po wydrukowaniu zewnętrznej ścianki modelu, to dla " "czyszczenia wykorzystywana jest prędkość, która została zastosowana przy " "drukowaniu tej ścianki." @@ -12052,11 +12925,49 @@ msgstr "Wysokość Skirtu" msgid "How many layers of skirt. Usually only one layer" msgstr "Ile warstw Skirtu. Zwykle tylko jedna warstwa" +msgid "Draft shield" +msgstr "Draft shield" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Draft Shield (\"ochrona przed przeciągiem\")jest przydatna do ochrony " +"wydruku z ABS lub ASA przed wypaczaniem i oderwaniem się od stołu drukarki z " +"powodu podmuchów powietrza. Zazwyczaj jest to potrzebne tylko w przypadku " +"drukarek otwartych, czyli bez obudowy.\n" +"\n" +"Opcje:\n" +"Włączony = Skirt jest takiej samej wysokości, jak najwyższy wydrukowany " +"obiekt.\n" +"Ograniczony =Skirt jest takiej samej wysoki, jak został określony w wysokość " +"Skirtu.\n" +"\n" +"Uwaga: Aktywując funkcję Draft Shield, Skirt zostanie wydrukowany w takiej " +"odległości od obiektu jak określono w odstęp Skirtu od obiektu. Jeśli w tym " +"samym czasie Brim jest też aktywny, może dojść do jego przecięcia się ze " +"Skirt-em. Aby temu zapobiec, zwiększ wartość odległości Skirt - Obiekt\n" + +msgid "Limited" +msgstr "Ograniczony" + +msgid "Enabled" +msgstr "Włączony" + msgid "Skirt loops" msgstr "Ilość pętli Skirtu" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "Liczba pętli Skirtu. Zero oznacza wyłączenie Skirtu" +msgstr "To jest liczba pętli Skirtu. Zero oznacza, wyłączone tej funkcji" msgid "Skirt speed" msgstr "Prędkość Skirtu" @@ -12066,6 +12977,22 @@ msgstr "" "Prędkość Skirtu, w mm/s. Zero oznacza użycie domyślnej prędkości ekstruzji " "warstwy." +msgid "Skirt minimum extrusion length" +msgstr "Minimalna długość ekstruzji Skirtu" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Minimalna długość ekstruzji filamentu podczas drukowania Skirtu, wyrażona w " +"milimetrach. Wartość zero oznacza, że ta funkcja jest wyłączona. \n" +"\n" +"Użycie wartości innej niż 0 jest przydatne, kiedy drukarka jest ustawiona " +"tak aby nie drukowała początkowej linii czyszczącej." + 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" @@ -12081,8 +13008,8 @@ msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" msgstr "" -"Obszar wypełnienia, który jest mniejszy niż wartość progu, jest zastępowany " -"przez wewnętrzne mocniejsze wypełnienie" +"Obszar wypełnienia, który jest mniejszy od wartości progowej zostaje " +"zastąpiony wewnętrznym, pełnym wypełnieniem" msgid "" "Line width of internal solid infill. If expressed as a %, it will be " @@ -12096,9 +13023,6 @@ msgstr "" "Prędkość wewnętrznego pełnego wypełnienia, nie dotyczy górnej i dolnej " "powierzchni" -msgid "Spiral vase" -msgstr "Tryb Wazy" - 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 " @@ -12126,8 +13050,9 @@ msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" -"Maksymalna odległość przesuwania punktów w XY, aby osiągnąć gładką spiralę. " -"Jeśli wyrażona w procentach, będzie obliczona na podstawie średnicy dyszy" +"Maksymalna odległość, o którą można przesunąć punkty w płaszczyźnie XY, aby " +"spróbować uzyskać gładką spiralę. Jeśli wyrażone jako %, będzie obliczane " +"względem średnicy dyszy." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -12143,10 +13068,10 @@ msgstr "" "film poklatkowy (timelapse). Po wydrukowaniu każdej warstwy robione jest " "zdjęcie kamerą w komorze. Wszystkie te zdjęcia są komponowane w film " "poklatkowy po zakończeniu drukowania. Jeśli wybrany jest tryb \"Wygładź\", " -"głowica narzędziowa przesunie się nad wieżę po wydrukowaniu każdej warstwy, " -"a następnie zrobi zdjęcie. Ponieważ stopiony filament może wyciekać z dyszy " -"podczas robienia zdjęcia, wieża czyszcząca jest wymagana w trybie " -"\"Wygładź\" do czyszczenia dyszy." +"głowica drukująca przesunie się w pobliże otworu wyrzutowego przy każdej " +"zmianie warstwy, a następnie zrobi zdjęcie. Ponieważ stopiony filament może " +"wyciekać z dyszy podczas robienia zdjęcia, wieża czyszcząca jest wymagana w " +"trybie \"Wygładź\" do czyszczenia dyszy." msgid "Traditional" msgstr "Tradycyjny" @@ -12203,10 +13128,11 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" -"Jeśli włączone, wieża czyszcząca nie będzie drukowana na warstwach bez zmian " -"narzędzi. Na warstwach ze zmianą narzędzia, extruder przemieści się w dół, " -"aby wydrukować wieżę czyszczącą. Użytkownik jest odpowiedzialny za " -"zapewnienie, że nie dojdzie do kolizji z wydrukiem." +"Jeśli włączone to wieża czyszcząca nie będzie drukowana na warstwach, na " +"których nie ma zmian koloru. Na kolejnych warstwach ze zmianami koloru " +"ekstruder zjedzie w dół, aby kontynuować czyszczenie na wieży. Pamiętaj, że " +"to użytkownik musi upewnić się, że nie dojdzie do kolizji głowicy z " +"wydrukiem." msgid "Prime all printing extruders" msgstr "Przygotuj wszystkie extrudery do drukowania" @@ -12226,10 +13152,10 @@ msgid "" "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania " -"szpar\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może " -"zmniejszyć finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej " -"wartości na rozsądnie niskim poziomie." +"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania szpar" +"\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może zmniejszyć " +"finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej wartości na " +"rozsądnie niskim poziomie." msgid "Slicing Mode" msgstr "Tryb cięcia" @@ -12318,7 +13244,7 @@ msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Twórz tylko podparcie dla krytycznych obszarów, takich jak ostra krawędź, " +"Twórz podpory tylko dla krytycznych obszarów, takich jak ostra krawędź, " "wspornik, itp." msgid "Remove small overhangs" @@ -12331,7 +13257,7 @@ msgid "Top Z distance" msgstr "Odstęp góry w osi Z" msgid "The z gap between the top support interface and object" -msgstr "Odległość w osi Z między górną warstwą łączącą podporę z obiektem" +msgstr "Odstęp osi Z między górną warstwą łączącą podporę z obiektem" msgid "Bottom Z distance" msgstr "Odstęp spodu w osi Z" @@ -12370,7 +13296,7 @@ msgstr "Użyj wzoru pętli dla warstw łączących" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." -msgstr "Pokryj pętlą górną warstwę podpór. Domyślnie wyłączone." +msgstr "Przykryj górną warstwę stykową podpór pętlami. Domyślnie wyłączone." msgid "Support/raft interface" msgstr "Warstwy łączące podpory/tratwy" @@ -12426,7 +13352,7 @@ msgid "Rectilinear grid" msgstr "Siatka prostoliniowa" msgid "Hollow" -msgstr "Pusta" +msgstr "Wydrążony" msgid "Interface pattern" msgstr "Wzór warstwy łączącej" @@ -12469,11 +13395,12 @@ msgid "" msgstr "" "Styl i kształt podpory. Dla normalnego wsparcia, rzutowanie wsparć na " "regularną siatkę stworzy stabilniejsze wsparcia (domyślne), podczas gdy " -"wąskie wieże wsparcia zaoszczędzą filament i zmniejszą uszkodzenia obiektu.\n" +"wąskie wieże podporowe zaoszczędzą filament i zmniejszą uszkodzenia " +"obiektu.\n" "Dla podpory drzewa, stylu Cinkiego i Organicznego połączy gałęzie bardziej " "agresywnie i zaoszczędzi dużo filamentu (domyślnie organiczny), podczas gdy " "styl hybrydowy stworzy podobną strukturę do normalnego wsparcia pod dużymi " -"płaskimi występami." +"płaskimi nawisami." msgid "Snug" msgstr "Przylegający" @@ -12556,11 +13483,10 @@ msgid "" "interfaces instead of a high branch density value if dense interfaces are " "needed." msgstr "" -"Dostosowuje gęstość struktury podpory używanej do generowania końcówek " -"gałęzi. Wyższa wartość skutkuje lepszymi występami, ale podpory są " +"Dostosowuje gęstość konstrukcji nośnej używanej do generowania końcówek " +"gałęzi. Wyższa wartość skutkuje lepszymi nawisami, ale podpory są " "trudniejsze do usunięcia, dlatego zaleca się włączenie górnych łączników " -"podpór zamiast wysokiej wartości gęstości gałęzi, jeśli potrzebne są gęste " -"podpory." +"podpór zamiast wysokiej gęstości gałęzi, jeśli potrzebne są gęste podpory." msgid "Adaptive layer height" msgstr "Adaptacyjna wysokość warstwy" @@ -12636,7 +13562,7 @@ msgid "This setting specify the count of walls around support" msgstr "To ustawienie określa liczbę ścian wokół podpory" msgid "Tree support with infill" -msgstr "Wsparcie drzewa z wypełnieniem" +msgstr "Podpora w formie drzewa z wypełnieniem" msgid "" "This setting specifies whether to add infill inside large hollows of tree " @@ -12669,13 +13595,12 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" -"Wyższa temperatura komory może pomóc w tłumieniu lub zmniejszeniu " -"odkształceń i potencjalnie prowadzić do wyższej wytrzymałości wiązań " -"międzywarstwowych dla filamentów o wysokiej temperaturze, takich jak ABS, " -"ASA, PC, PA i tak dalej. Jednocześnie filtracja powietrza dla ABS i ASA " -"pogorszy się. Natomiast dla PLA, PETG, TPU, PVA i innych filamentów o " -"niskiej temperaturze, rzeczywista temperatura komory nie powinna być wysoka, " -"aby uniknąć zatorów, więc zaleca się ustawienie 0, oznaczające wyłączenie" +"Wyższa temperatura komory może pomóc w redukcji wypaczania i potencjalnie " +"prowadzić do większej siły wiązania międzywarstwowego w przypadku materiałów " +"wysokotemperaturowych, takich jak ABS, ASA, PC, PA itp. Dla filametów PLA, " +"PETG, TPU, PVA i innych materiałów niskotemperaturowych temperatura komory " +"nie powinna być wysoka. Aby uniknąć zatykania sie dyszy zaleca się " +"ustawienia na wartość 0 (wyłączone)." msgid "Nozzle temperature for layers after the initial one" msgstr "Temperatura dyszy dla warstw po początkowej" @@ -12694,7 +13619,7 @@ msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"Ten G-code jest wstawiany podczas zmiany filamentu, w tym komendy T do " +"Ten gcode jest wstawiany podczas zmiany filamentu, w tym komendy T do " "wywołania zmiany narzędzia" msgid "This gcode is inserted when the extrusion role is changed" @@ -12718,12 +13643,13 @@ msgid "" "layer. When the thickness calculated by this value is thinner than top shell " "thickness, the top shell layers will be increased" msgstr "" -"To jest liczba zwartych warstw górnej powłoki, w tym warstwy górnej " -"powierzchni. Gdy grubość obliczona na podstawie tej wartości jest cieńsza " -"niż grubość górnej powłoki, liczba warstw górnej powłoki zostanie zwiększona" +"To jest liczba pełnych warstw górnej powłoki, włączając w to górną " +"powierzchnie. Jeżeli grubość obliczona na podstawie tej wartości jest " +"mniejsza niż grubość górnej powłoki, liczba warstw górnej powłoki zostanie " +"zwiększona" msgid "Top solid layers" -msgstr "Pełne Górne warstwy" +msgstr "Pełne warstwy górne" msgid "Top shell thickness" msgstr "Grubość górnej powłoki" @@ -12752,8 +13678,8 @@ msgid "" "material on nozzle. This can minimize blob when print new part after travel" msgstr "" "Przesuń dyszę wzdłuż ostatniej ścieżki ekstruzji podczas cofania, aby " -"oczyścić wyciekły filament na dyszy. Może to zminimalizować grudkę podczas " -"drukowania nowej części po podróży" +"oczyścić wyciekły filament na dyszy. Może to zminimalizować wystąpienie " +"grudek podczas drukowania nowej części po przejeździe" msgid "Wipe Distance" msgstr "Odległość czyszczenia" @@ -12803,7 +13729,7 @@ msgstr "" "objętości płukania w tabeli." msgid "Prime volume" -msgstr "Objętość Wieży" +msgstr "Objętość czyszczenia" msgid "The volume of material to prime extruder on tower." msgstr "" @@ -12829,11 +13755,53 @@ msgstr "" "czyszczącej. Większy kąt oznacza szerszą podstawę." msgid "Wipe tower purge lines spacing" -msgstr "Rozmieszczenie linii czyszczących" +msgstr "Odległość między liniami na wieży oczyszczającej" msgid "Spacing of purge lines on the wipe tower." msgstr "Rozmieszczenie linii czyszczenia na wieży czyszczącej." +msgid "Maximum wipe tower print speed" +msgstr "Maksymalna prędkość drukowania wieży czyszczącej" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"Jest to funkcja odpowiedzialna za maksymalną prędkość drukowania podczas " +"oczyszczania w wieży czyszczącej i drukowania jej rzadkich warstw. \n" +"Podczas oczyszczania, jeśli prędkość rzadkiego wypełnienia jest niższa od " +"prędkości obliczonej na podstawie maksymalnego natężenia przepływu " +"filamentu, to właśnie ta niższa wartość zostanie wybrana.\n" +"\n" +"Podczas drukowania rzadkich warstw, jeśli prędkość wewnętrznych obrysów lub " +"prędkość obliczona na podstawie maksymalnego natężenia przepływu filamentu " +"jest niższa, zostanie użyta właśnie ta niższa wartość.\n" +"\n" +"Przed zwiększeniem tego parametru powyżej domyślnej wartości 90mm/s, upewnij " +"się, że Twoja drukarka potrafi niezawodnie mostkować przy wyższych " +"prędkościach oraz że wyciek filamentu podczas jego zmiany jest dobrze " +"kontrolowany.\n" +"\n" +"W przypadku zewnętrznych obwodów wieży czyszczącej prędkość jej obwodu " +"wewnętrznego jest niezależna od tego ustawienia." + msgid "Wipe tower extruder" msgstr "Ekstruder dla wieży czyszczącej" @@ -12863,20 +13831,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 "" -"Czyszczenie po zmianie filamentu będzie wykonane wewnątrz wypełnień " -"obiektów. Może to zmniejszyć ilość odpadów i skrócić czas druku. Jeśli " -"ściany są drukowane przezroczystym filamentem, mieszane kolorowe wypełnienie " -"będzie widoczne na zewnątrz. Nie będzie miało efektu, chyba że wieża " -"czyszcząca jest włączona." +"Po zmianie filamentu oczyszczanie odbywa się wewnątrz wypełnienia obiektu. " +"Może to zmniejszyć ilość odpadów i skrócić czas druku. Jeśli ściany są " +"drukowane przezroczystym filamentem, różne kolory wypełnienia będą widoczne " +"na zewnątrz. Ta funkcja jest aktywna tylko wtedy, gdy jest włączona opcja " +"wieży czyszczącej." 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 "" -"Czyszczenie po zmianie filamentu będzie wykonane wewnątrz podpory obiektów. " -"Może to zmniejszyć ilość odpadów i skrócić czas druku. Nie będzie miało " -"efektu, chyba że wieża czyszcząca jest włączona." +"Po zmianie filamentu oczyszczanie odbywa się wewnątrz podpór obiektów. Może " +"to zmniejszyć ilość odpadów i skrócić czas druku. Ta funkcja jest aktywna " +"tylko wtedy, gdy jest włączona opcja wieży czyszczącej." msgid "" "This object will be used to purge the nozzle after a filament change to save " @@ -12998,8 +13966,8 @@ msgid "" "variable extrusion width" msgstr "" "Klasyczny generator ścian tworzy ściany o stałej szerokości ekstruzji, a do " -"bardzo cienkich obszarów używa wypełnienia luk. Silnik Arachne produkuje " -"ściany o zmiennej szerokości ekstruzji." +"bardzo cienkich obszarów używa wypełnienia szczelin. Silnik Arachne generuje " +"ściany o zmiennej szerokości ekstruzji" msgid "Classic" msgstr "Klasyczny" @@ -13017,8 +13985,8 @@ msgid "" msgstr "" "Podczas przechodzenia między różnymi liczbami obrysów, gdy część staje się " "cieńsza, przydzielana jest pewna ilość miejsca na rozdzielenie lub " -"połączenie segmentów obrysu. Jeśli jest wyrażona w procentach (na przykład " -"100%), zostanie obliczona na podstawie średnicy dyszy." +"połączenie segmentów obrysu. Jest wyrażona w procentach i zostanie obliczona " +"na podstawie średnicy dyszy." msgid "Wall transitioning filter margin" msgstr "Margines filtra przejścia ściany" @@ -13032,13 +14000,14 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Zapobiega przejściu w tył i w przód między jedną dodatkową ścianą a jedną " -"mniej. Ten margines rozszerza zakres szerokości ekstruzji, który następuje " -"do [Minimalna szerokość ściany - margines, 2 * Minimalna szerokość ściany + " -"margines]. Zwiększenie tego marginesu zmniejsza liczbę przejść, co zmniejsza " -"liczbę rozpoczęć/zakończeń ekstruzji i czas podróży. Jednak duża zmienność " -"szerokości ekstruzji może prowadzić do problemów z niedo- lub nadmierną " -"ekstruzją. Jest to wyrażone jako procent średnicy dyszy" +"Unikaj zmiany między zbyt grubą a zbyt cienką ścianą. Ten margines rozszerza " +"zakres szerokości ekstruzji na [Minimalną szerokość ściany - margines, 2 * " +"Minimalną szerokość ściany + margines]. Zwiększenie tego marginesu zmniejsza " +"liczbę zmian, co skraca czas wydruku poprzez redukcję liczby startów i " +"zatrzymań ekstruzji. Należy jednak pamiętać, że duże wahania w szerokości " +"ekstruzji mogą prowadzić do problemów z jakością wydruku w postaci " +"nadmiernej lub niewystarczającej ekstruzji. Wartość wyrażana jest jako " +"procent średnicy dyszy" msgid "Wall transitioning threshold angle" msgstr "Kąt progowy przejścia ściany" @@ -13128,9 +14097,8 @@ msgid "" msgstr "" "Szerokość obrysu, który zastąpi cienkie detale modelu (zgodnie z minimalnym " "rozmiarem detalu). Jeśli minimalna szerokość obrysu jest mniejsza niż " -"grubość detalu, obrys będzie miał taką samą grubość jak sam element. Jeśli " -"jest wyrażona w procentach (na przykład 85%), zostanie obliczona na " -"podstawie średnicy dyszy." +"grubość detalu, obrys będzie miał taką samą grubość jak sam element. Jest " +"wyrażona w procentach i zostanie obliczona na podstawie średnicy dyszy." msgid "Detect narrow internal solid infill" msgstr "Wykryj wąskie wewnętrzne pełne wypełnienie" @@ -13168,8 +14136,8 @@ msgstr "Brak sprawdzania" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" -"Nie przeprowadzaj żadnych kontroli ważności, takich jak sprawdzanie " -"konfliktów ścieżek gcode." +"Nie uruchamiaj żadnych testów poprawności, takich jak sprawdzanie konfliktów " +"ścieżek gcode." msgid "Ensure on bed" msgstr "Zapewnij na łóżku" @@ -13298,7 +14266,7 @@ msgstr "Objętość na extruder" msgid "Total filament volume extruded per extruder during the entire print." msgstr "" -"Całkowita objętość filamentu wytłoczona przez każdy extruder podczas całego " +"Całkowita objętość filamentu wytłoczona przez każdy ekstruder podczas całego " "wydruku" msgid "Total toolchanges" @@ -13324,7 +14292,7 @@ msgstr "" "wydruku. Obliczana na podstawie gęstości w sekcji Ustawienia filamentu." msgid "Total weight" -msgstr "Całkowita waga" +msgstr "Waga całkowita" msgid "" "Total weight of the print. Calculated from filament_density value in " @@ -13497,7 +14465,7 @@ msgid "Generating infill toolpath" msgstr "Generowanie ścieżki narzędzia wypełnienia" msgid "Detect overhangs for auto-lift" -msgstr "Wykryj wystające części do automatycznego podnoszenia" +msgstr "Wykrywanie nawisów do automatycznego podnoszenia" msgid "Generating support" msgstr "Generowanie podpór" @@ -13509,7 +14477,7 @@ msgid "floating regions" msgstr "unoszące się obszary" msgid "floating cantilever" -msgstr "nawisająca pozioma konstrukcja (cantilever)" +msgstr "nawisającą konstrukcje (cantilever)" msgid "large overhangs" msgstr "duże nawisy" @@ -13546,34 +14514,34 @@ msgstr "" #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Wsparcie: generuj ścieżkę narzędzia na warstwie %d" +msgstr "Podpory: generuj ścieżkę narzędzia na warstwie %d" msgid "Support: detect overhangs" -msgstr "Wsparcie: wykryj wysięgnięcia" +msgstr "Podpory: wykryj nawisy" msgid "Support: generate contact points" -msgstr "Wsparcie: generuj punkty kontaktowe" +msgstr "Podpory: Tworzenie miejsc kontaktowych" msgid "Support: propagate branches" -msgstr "Wsparcie: rozprzestrzeniaj gałęzie" +msgstr "Podpory: rozprzestrzeniaj gałęzie" msgid "Support: draw polygons" -msgstr "Wsparcie: rysuj poligony" +msgstr "Podpory: rysuj poligony" msgid "Support: generate toolpath" -msgstr "Wsparcie: generuj ścieżkę narzędzia" +msgstr "Podpory: generuj ścieżkę narzędzia" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Wsparcie: generuj poligony na warstwie %d" +msgstr "Podpory: generuj poligony na warstwie %d" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Wsparcie: napraw dziury na warstwie %d" +msgstr "Podpory: napraw dziury na warstwie %d" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Wsparcie: rozprzestrzeniaj gałęzie na warstwie %d" +msgstr "Podpory: rozprzestrzeniaj gałęzie na warstwie %d" msgid "" "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." @@ -13598,6 +14566,9 @@ msgstr "Anulowano" msgid "load_obj: failed to parse" msgstr "load_obj: nie udało się przetworzyć" +msgid "load mtl in obj: failed to parse" +msgstr "load_obj: nie udało się przetworzyć" + msgid "The file contains polygons with more than 4 vertices." msgstr "Plik zawiera wielokąty z więcej niż 4 wierzchołkami." @@ -13611,7 +14582,7 @@ msgid "This OBJ file couldn't be read because it's empty." msgstr "Ten plik OBJ nie mógł zostać odczytany, ponieważ jest pusty." msgid "Flow Rate Calibration" -msgstr "Kalibracja Flow Rate" +msgstr "Kalibracja Natężenie Przepływu" msgid "Max Volumetric Speed Calibration" msgstr "Kalibracja Maks. Prędkości Przepływu" @@ -13669,20 +14640,14 @@ msgid "Extra info" msgstr "Dodatkowe informacje" msgid "Flow Dynamics" -msgstr "Flow Dynamics" +msgstr "Dynamika Przepływu" msgid "Flow Rate" -msgstr "Flow Rate" +msgstr "Natężenie Przepływu" msgid "Max Volumetric Speed" msgstr "Maksymalny przepływ" -msgid "Please enter the name you want to save to printer." -msgstr "Proszę wprowadzić nazwę, którą chcesz zapisać w drukarce." - -msgid "The name cannot exceed 40 characters." -msgstr "Nazwa nie może przekraczać 40 znaków." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13730,6 +14695,18 @@ msgstr "Proszę wybrać filament do kalibracji." msgid "The input value size must be 3." msgstr "Rozmiar wartości wejściowej musi wynosić 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"To urządzenie może przechowywać tylko 16 wyników w historii dla jednej " +"dyszy. Możesz usunąć istniejące wyniki w historii, a następnie rozpocząć " +"kalibrację lub kontynuować, ale nie będzie można tworzyć nowych wyników " +"kalibracji. Czy nadal chcesz kontynuować kalibrację?" + msgid "Connecting to printer..." msgstr "Łączenie z drukarką..." @@ -13739,6 +14716,23 @@ msgstr "Nieudany wynik testu został odrzucony." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Wynik Kalibracji Dynamiki Przepływu został zapisany w drukarce" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"W historii kalibracji istnieje już wynik o nazwie: %s. Czy na pewno chcesz " +"zastąpić poprzedni wynik?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"To urządzenie może przechowywać tylko %d wyników w historii dla jednej " +"dyszy. Ten wynik nie zostanie zapisany." + msgid "Internal Error" msgstr "Błąd wewnętrzny" @@ -13746,7 +14740,7 @@ msgid "Please select at least one filament for calibration" msgstr "Proszę wybrać co najmniej jeden filament do kalibracji" msgid "Flow rate calibration result has been saved to preset" -msgstr "Wynik kalibracji przepływu został zapisany w profilu" +msgstr "Wynik kalibracji natężenia przepływu został zapisany w profilu" msgid "Max volumetric speed calibration result has been saved to preset" msgstr "Wynik kalibracji maksymalnego przepływu został zapisany do profilu" @@ -13787,10 +14781,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -13801,7 +14795,7 @@ msgstr "" "\n" "Zazwyczaj kalibracja nie jest konieczna. Gdy rozpoczynasz druk w jednym " "kolorze/materiale i zaznaczasz opcję \"kalibracja dynamiki przepływu\" w " -"menu rozpoczęcia druku. Drukarka będzie postępować w tradycyjny sposób, " +"menu rozpoczęcia druku - drukarka będzie postępować w tradycyjny sposób, " "kalibrując filament przed rozpoczęciem druku. W przypadku druku w wielu " "kolorach/materiałach drukarka będzie używać domyślnego parametru kompensacji " "dla filamentu podczas każdej jego zmiany, co w większości przypadków daje " @@ -13818,7 +14812,7 @@ msgstr "" "nowych aktualizacjach." msgid "When to use Flow Rate Calibration" -msgstr "Kiedy użyć Kalibracji Przepływu" +msgstr "Kiedy użyć Kalibracji Natężenia Przepływu" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -13849,7 +14843,7 @@ msgid "" "PLA used in RC planes. These materials expand greatly when heated, and " "calibration provides a useful reference flow rate." msgstr "" -"Dodatkowo, kalibracja prędkości przepływu jest kluczowa dla materiałów " +"Dodatkowo, kalibracja natężenia przepływu jest kluczowa dla materiałów " "piankowych, takich jak LW-PLA używane w samolotach RC. Te filamenty znacząco " "się rozprężają pod wpływem temperatury, a kalibracja zapewnia przydatną " "referencyjną prędkość przepływu." @@ -13862,13 +14856,13 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" -"Kalibracja przepływu mierzy stosunek oczekiwanego do rzeczywistego objętości " -"ekstruzji. Domyślne ustawienie dobrze funkcjonuje w drukarkach Bambu Lab i " -"oficjalnych filamentach, ponieważ były one wcześniej skalibrowane i " -"dokładnie dostrojone. Dla zwykłego filamentu zazwyczaj nie będziesz musiał " -"przeprowadzać kalibracji przepływu, chyba że nadzieja widoczne wymienione " -"wady po wykonaniu innych kalibracji. Po więcej szczegółów proszę sprawdzić " -"artykuł w naszej wiki." +"Kalibracja Natężenie Przepływu mierzy stosunek oczekiwanej do rzeczywistej " +"objętości ekstruzji. Domyślne ustawienie dobrze funkcjonuje w drukarkach " +"Bambu Lab i oficjalnych filamentach, ponieważ były one wcześniej " +"skalibrowane i dokładnie dostrojone. Dla zwykłego filamentu zazwyczaj nie " +"będziesz musiał przeprowadzać kalibracji natężenia przepływu, chyba że " +"nadzieja widoczne wymienione wady po wykonaniu innych kalibracji. Po więcej " +"szczegółów proszę sprawdzić artykuł w naszej stronie Wiki." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -13888,10 +14882,10 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" -"Automatyczna kalibracja przepływu wykorzystuje technologię Micro-Lidar firmy " -"Bambu Lab, bezpośrednio mierząc wzorce kalibracyjne. Jednak należy pamiętać, " -"że skuteczność i dokładność tej metody mogą być ograniczone w przypadku " -"konkretnych rodzajów filamentów. Szczególnie filamenty, które są " +"Automatyczna kalibracja natężenia przepływu wykorzystuje technologię Micro-" +"Lidar firmy Bambu Lab, bezpośrednio mierząc wzorce kalibracyjne. Jednak " +"należy pamiętać, że skuteczność i dokładność tej metody mogą być ograniczone " +"w przypadku konkretnych rodzajów filamentów. Szczególnie filamenty, które są " "przezroczyste lub półprzezroczyste, z iskrzącymi cząstkami lub o wysokim " "połysku mogą być nieodpowiednie do tej kalibracji i mogą dawać mniej niż " "pożądane wyniki.\n" @@ -13941,27 +14935,23 @@ msgstr "" msgid "Failed" msgstr "Nieudane" +msgid "Please enter the name you want to save to printer." +msgstr "Proszę wprowadzić nazwę, którą chcesz zapisać w drukarce." + +msgid "The name cannot exceed 40 characters." +msgstr "Nazwa nie może przekraczać 40 znaków." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" "Tylko jeden z wyników o tej samej nazwie zostanie zapisany. Czy na pewno " "chcesz zastąpić inne wyniki?" -#, 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 "" -"Istnieje już historia wyników kalibracji o tej samej nazwie: %s. Tylko jeden " -"z wyników o tej samej nazwie zostanie zapisany. Czy na pewno chcesz zastąpić " -"ten wynik?" - msgid "Please find the best line on your plate" msgstr "Znajdź najlepszą linię na swojej płycie" -msgid "Please find the cornor with perfect degree of extrusion" +msgid "Please find the corner with perfect degree of extrusion" msgstr "Znajdź róg z idealnym stopniem ekstruzji" msgid "Input Value" @@ -14039,12 +15029,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametry drukowania" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Typ Płyty" @@ -14092,12 +15076,6 @@ msgstr "Do wartości K" msgid "Step value" msgstr "Wartość kroku" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Średnica dyszy została zsynchronizowana z ustawień drukarki" @@ -14110,6 +15088,9 @@ msgstr "Do Prędkości Przepływu" msgid "Flow Dynamics Calibration Result" msgstr "Wyniki Kalibracji Dynamiki Przepływu" +msgid "New" +msgstr "Nowy" + msgid "No History Result" msgstr "Brak historii wyników" @@ -14117,14 +15098,28 @@ msgid "Success to get history result" msgstr "Pomyślnie załadowano historie wyników" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "Odświeżanie historii zapisów kalibracji Flow Dynamics" +msgstr "Odświeżanie zapisanej historii kalibracji dynamika przepływu" msgid "Action" msgstr "Akcja" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"To urządzenie może przechowywać tylko %d wyników w historii dla jednej dyszy." + msgid "Edit Flow Dynamics Calibration" msgstr "Edytuj Kalibrację Dynamiki Przepływu" +msgid "New Flow Dynamic Calibration" +msgstr "Nowa Kalibracji Dynamiki Przepływu" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "Należy wybrać filament." + msgid "Network lookup" msgstr "Wyszukiwanie w sieci" @@ -14213,6 +15208,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14311,6 +15309,9 @@ msgstr "" msgid "Upload to storage" msgstr "Prześlij do pamięci" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" @@ -14459,7 +15460,7 @@ msgid "Input Custom Vendor" msgstr "Wprowadź niestandardowego dostawcę" msgid "Can't find vendor I want" -msgstr "Nie mogę znaleźć potrzebnego producenta" +msgstr "Nie mogę znaleźć potrzebnego dostawcy" msgid "Select Type" msgstr "Wybierz typ" @@ -14468,7 +15469,7 @@ msgid "Select Filament Preset" msgstr "Wybierz profil filamentu" msgid "Serial" -msgstr "Rodzaj" +msgstr "Seria" msgid "e.g. Basic, Matte, Silk, Marble" msgstr "np. Basic, Matte, Silk, Marble" @@ -14480,40 +15481,38 @@ msgid "Create" msgstr "Utwórz" msgid "Vendor is not selected, please reselect vendor." -msgstr "Producent nie jest wybrany, proszę ponownie wybrać producenta." +msgstr "Dostawca nie jest wybrany, proszę ponownie wybrać producenta." msgid "Custom vendor is not input, please input custom vendor." msgstr "" -"Nie wprowadzono producenta, proszę wprowadzić niestandardowego producenta." +"Nie wprowadzono dostawcy, proszę wprowadzić niestandardowego producenta." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" -"\"Bambu\" lub \"Generic\" nie mogą być używane jako Producent dla " +"\"Bambu\" lub \"Generic\" nie mogą być używane jako Dostawca dla " "niestandardowych filamentów." msgid "Filament type is not selected, please reselect type." msgstr "Typ filamentu nie jest wybrany, proszę ponownie wybrać typ." msgid "Filament serial is not inputed, please input serial." -msgstr "" -"Numer seryjny filamentu nie jest wprowadzony, proszę wprowadzić numer " -"seryjny." +msgstr "Seria filamentu nie jest wprowadzona, proszę wprowadzić serie." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" -"W polu Producenta lub Numeru seryjnego filamentu mogą występować znaki " -"specjalne. Proszę usunąć i ponownie wprowadzić." +"W polu Dostawcy lub Serii filamentu nie mogą występować znaki specjalne. " +"Proszę usunąć i ponownie wprowadzić." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" -"Wszystkie wprowadzone dane w niestandardowym producencie lub numerze " -"seryjnym to spacje. Proszę wprowadzić ponownie." +"Wszystkie wprowadzone dane w niestandardowym dostawcy lub serii to spacje. " +"Proszę wprowadzić ponownie." msgid "The vendor can not be a number. Please re-enter." -msgstr "Producent nie może być liczbą. Proszę wprowadzić ponownie." +msgstr "Dostawca nie może być liczbą. Proszę wprowadzić ponownie." msgid "" "You have not selected a printer or preset yet. Please select at least one." @@ -14521,6 +15520,16 @@ msgstr "" "Nie wybrałeś jeszcze żadnej drukarki ani ustawień wstępnych. Proszę wybierz " "przynajmniej jedno." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Nazwa filamentu %s, którą utworzyłeś, już istnieje. \n" +"Jeśli będziesz kontynuować, utworzony preset będzie wyświetlany pod swoją " +"pełną nazwą. Czy chcesz kontynuować?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Niektóre istniejące profile nie zostały utworzone:\n" @@ -14532,11 +15541,11 @@ msgstr "" "Czy chcesz go zastąpić?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" -"Nazwa profilu zostanie zmieniona na \"Producent Typ Rodzaj @nazwa drukarki, " +"Nazwa profilu zostanie zmieniona na \"Dostawca Typ Seria @nazwa drukarki, " "którą wybrałeś\".\n" "Aby dodać profil dla innych drukarek, przejdź do wyboru drukarki." @@ -14582,12 +15591,6 @@ msgstr "Prostokąt" msgid "Printable Space" msgstr "Przestrzeń do druku" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "Model Stołu " @@ -14645,7 +15648,7 @@ msgid "" "choose the vendor and model of the printer" msgstr "" "Jeszcze nie dokonano wyboru, na podstawie którego profilu drukarki ma być " -"utworzony nowy profil. Proszę wybrać producenta i model drukarki." +"utworzony nowy profil. Proszę wybrać dostawce i model drukarki." msgid "" "You have entered an illegal input in the printable area section on the first " @@ -14700,8 +15703,8 @@ msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" -"W polu Dostawcy lub Modelu drukarki mogą występować znaki Specjalne. Proszę " -"usunąć i wprowadzić ponownie." +"W polu Dostawcy lub Modelu drukarki nie mogą występować znaki Specjalne. " +"Proszę usunąć i wprowadzić ponownie." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." @@ -14738,21 +15741,32 @@ msgstr "Utworzono Profil Filamentu" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -"Jeśli zajdzie taka potrzeba, proszę przejść do ustawień filamentu, aby " -"edytować swoje zmiany.\n" -"Zwróć uwagę, że temperatura dyszy, temperatura podgrzewanego stołu oraz " -"maksymalna prędkość przepływu mają znaczący wpływ na jakość druku 3D. Proszę " -"ustawić je z rozwagą." +"Jeżeli zajdzie taka potrzeba, przejdź do ustawień filamentu, aby edytować " +"swoje profile. Należy pamiętać, że temperatura dyszy, temperatura stołu i " +"maksymalna prędkość objętościowa mają znaczący wpływ na jakość druku. Proszę " +"ustawiać je ostrożnie." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Orca wykrył, że funkcja synchronizacji profili użytkownika nie jest " +"włączona, co może skutkować niepoprawnymi ustawieniami filamentu na stronie " +"Urządzenia. Kliknij \"Synchronizuj profile użytkownika\", aby włączyć " +"funkcję synchronizacji." msgid "Printer Setting" msgstr "Ustawienia drukarki" -msgid "Export Configs" -msgstr "Eksportuj konfiguracje" - msgid "Printer config bundle(.orca_printer)" msgstr "Zestaw konfiguracji drukarki (.orca_printer)" @@ -14856,6 +15870,11 @@ msgstr "Proszę wybrać przynajmniej jedną drukarkę lub filament." msgid "Please select a type you want to export" msgstr "Proszę wybierz co chcesz wyeksportować" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"Nie udało się utworzyć tymczasowego folderu. Spróbuj ponownie wyeksportować " +"konfiguracje." + msgid "Edit Filament" msgstr "Edytuj Filament" @@ -14935,6 +15954,22 @@ msgstr "Zwiń" msgid "Daily Tips" msgstr "Porada Dnia" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "zapamiętana dysza: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"Średnica Twojej dyszy w profilu nie jest zgodna ze zapamiętaną średnicą " +"dyszy. Czy ostatnio zmieniałeś swoją dyszę?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "" +"*Drukowanie filamentu %s z użyciem %s może spowodować uszkodzenie dyszy" + msgid "Need select printer" msgstr "Konieczny jest wybór drukarki" @@ -14966,6 +16001,12 @@ msgstr "Czy na pewno chcesz się wylogować?" msgid "Refresh Printers" msgstr "Odśwież drukarki" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15134,6 +16175,272 @@ msgstr "" "Treść wiadomości: \"%1%\"\n" "Błąd: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Ta niska wysokość warstwy prowadzi do praktycznie niewidocznych warstw i " +"wysokiej jakości wydruku. Nadaje się do większości standardowych przypadków " +"druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.2 mm, ma niższe " +"prędkości i przyspieszenia, a wzorzec rzadkiego wypełnienia to Gyroidalny. " +"Dlatego daje znacznie lepszą jakość druku, ale znacznie wydłuża czas druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.2 mm, ma " +"nieznacznie większą wysokość warstwy, co skutkuje praktycznie " +"niezauważalnymi liniami warstw i nieco krótszym czasem druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.2 mm, ma większą " +"wysokość warstwy, co skutkuje lekko widocznymi liniami warstw, ale krótszym " +"czasem druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"W porównaniu z domyślnym profilem dyszy o średnicy 0.2 mm, ma mniejszą " +"wysokość warstwy, co prowadzi do praktycznie niewidocznych linii warstw i " +"wyższej jakości druku, ale wydłuża czas druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dyszy 0.2 mm, ma mniejszą wysokość " +"warstwy, niższe prędkości i przyspieszenie, oraz wzór wypełnienia jest " +"gyroidalny. To prowadzi do praktycznie niewidocznych linii warstw i wyższej " +"jakości druku, ale znacznie wydłuża czasu druku." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"W porównaniu ze standardowym profilem dyszy o średnicy 0.2 mm, ten profil ma " +"mniejszą wysokość warstwy, co prowadzi do praktycznie niewidocznych linii " +"warstw i znacznie wyższa jakość wydruku, ale jednocześnie wydłuża jego czas." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"W porównaniu ze standardowym profilem dyszy o średnicy 0.2 mm, ma on " +"mniejszą wysokość warstwy, niższe prędkości i przyspieszenia, a także " +"zastosowany jest wzór wypełnienia Gyroid. To prowadzi do praktycznie " +"niewidocznych warstw i znacznie lepszej jakości wydruku, ale jednocześnie " +"wydłuża jego czas." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Ta standardowa wysokość warstwy zapewnia normalną jakość druku, odpowiednią " +"dla większości standardowych przypadków druku." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"W porównaniu ze standardowym profilem dla dyszy o średnicy 0.4 mm, ten " +"profil ma więcej obwodów i większą gęstość wypełnienia. To zwiększa " +"wytrzymałość wydruku, ale prowadzi także do większego zużycia materiału i " +"dłuższego czasu druku." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"W porównaniu ze standardowym profilem dla dyszy o średnicy 0.4 mm, ten " +"profil ma większą wysokość warstwy. W rezultacie warstwy są bardziej " +"widoczne, co obniża jakość druku, ale jednocześnie delikatnie skraca jego " +"czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"W porównaniu ze standardowym profilem dla dyszy o średnicy 0.4 mm, ten " +"profil ma większą wysokość warstwy. W rezultacie warstwy są bardziej " +"widoczne, co obniża jakość druku, ale jednocześnie skraca jego czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są mniej widoczne, co " +"skutkuje wyższą jakością druku, ale jednocześnie wydłuża się jego czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy, niższe prędkości i przyspieszenia, oraz wzór " +"wypełnienia Gyroidalny. W rezultacie warstwy są mniej widoczne, co prowadzi " +"do znacznie wyższej jakości druku, ale zauważalnie dłuższego czasu druku." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są prawie niewidoczne, co " +"prowadzi do wyższej jakości druku, ale wydłużenia jego czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy, niższe prędkości i przyspieszenia, a także " +"zastosowany wzór wypełnienia gyroidalnego. W rezultacie warstwy są prawie " +"niewidoczne, co prowadzi do znacznie wyższej jakości druku, ale wydłuża jego " +"czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są prawie niewidoczne, co " +"prowadzi do wyższej jakości druku, ale wydłużenia jego czas." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Ta wyższa wysokość warstwy, skutkuje widocznymi liniami warstw i zwykłą " +"jakością i czasem druku." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"więcej obwodów i większą gęstość wypełnienia. Skutkuje to zwiększeniem " +"wytrzymałości wydrukowanego elementu, ale zwiększa zużycie materiału i czas " +"wydruku." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"większą wysokość warstwy. Skutkuje to bardziej zauważalnymi warstwami i " +"obniżeniem jakości druku, chociaż w niektórych przypadkach może skrócić jego " +"czas." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"większą wysokość warstwy. Skutkuje to bardziej zauważalnymi warstwami i " +"znacznym obniżeniem jakości druku, chociaż w niektórych przypadkach może " +"skrócić jego czas." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są mniej zauważalne, co " +"powoduje nieznaczny wzrost jakości druku, ale jednocześnie zwiększa czas " +"wydruku." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są mniej zauważalne, co " +"prowadzi do wyższej jakości druku, ale wydłuża jego czas." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Ta bardzo duża wysokość warstwy skutkuje wyraźnie widocznymi liniami warstw, " +"niską jakością druku, a także standardowym czasem druku." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.8 mm, ten profil ma " +"nieco większą wysokość warstwy. W rezultacie są to wyraźnie widoczne warstwy " +"i znacznie niższa jakość druku, ale w niektórych przypadkach skraca to czas " +"wydruku." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0,8 mm, ten profil ma " +"znacznie większą wysokość warstwy. W rezultacie warstwy są bardzej widoczne, " +"a jakość druku znacznie niższa, ale w niektórych przypadkach znacznie skraca " +"się czas wydruku." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0,8 mm, ten profil ma " +"nieco mniejszą wysokość warstwy. W rezultacie warstwy są nieco mniej " +"widoczne, a jakość druku jest nieco lepsza, ale w niektórych przypadkach " +"czas druku może się nieco wydłużyć." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0,8 mm, ten profil ma " +"mniejszą wysokość warstwy, co prowadzi do mniejszych, ale nadal widocznych " +"warstw i lepszej jakości druku, a w niektórych przypadkach może się wydłużyć " +"czas wydruku." + msgid "Connected to Obico successfully!" msgstr "Pomyślnie połączono z SimplyPrint!" @@ -15146,21 +16453,17 @@ msgstr "Pomyślnie połączono z SimplyPrint!" msgid "Could not connect to SimplyPrint" msgstr "Nie można połączyć się z SimplyPrint" +msgid "Internel error" +msgstr "" + +msgid "Unknown error" +msgstr "Nieznany błąd" + msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" "Nie połączono z kontem SimplyPrint. Przejdź do opcji Połącz, aby go " "skonfigurować." -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." -msgstr "" -"Rozmiar pliku przekracza limit przesyłania 100 MB. Proszę przesłać plik za " -"pomocą panelu." - -msgid "Unknown error" -msgstr "Nieznany błąd" - msgid "Connection to Flashforge works correctly." msgstr "Połączenie z Flashforge działa poprawnie." @@ -15197,10 +16500,10 @@ msgid "" "precision and layer consistency if your model doesn't have very steep " "overhangs?" msgstr "" -"Tryb kanapki\n" -"Czy wiesz, że możesz użyć trybu kanapki (wewnętrzna-zewnętrzna-wewnętrzna) " +"Tryb Sandwich\n" +"Czy wiesz, że możesz użyć trybu sandwich (wewnętrzna-zewnętrzna-wewnętrzna) " "do poprawy precyzji i spójności warstw, jeśli twój model nie ma bardzo " -"stromych występów?" +"stromych nawisów?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -15281,9 +16584,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" -"Narzędzie cięcia\n" +"Narzędzie przecinania\n" "Czy wiesz, że możesz ciąć model pod dowolnym kątem i w dowolnej pozycji za " -"pomocą narzędzia do cięcia?" +"pomocą narzędzia do przecinania?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -15309,7 +16612,7 @@ msgid "" "Did you know that you can auto-arrange all objects in your project?" msgstr "" "Automatyczne rozmieszczanie\n" -"Czy wiesz, że możesz automatycznie ułożyć wszystkie obiekty w swoim " +"Czy wiesz, że możesz automatycznie rozmieścić wszystkie obiekty w swoim " "projekcie?" #: resources/data/hints.ini: [hint:Auto-Orient] @@ -15330,9 +16633,9 @@ msgid "" "F key." msgstr "" "Połóż na powierzchni\n" -"Czy wiesz, że możesz szybko ustawić model tak, aby jedna z jego powierzchni " -"znalazła się na łóżku drukarki? Wybierz funkcję \"Połóż na powierzchni\" lub " -"naciśnij klawisz F." +"Czy wiesz, że możesz szybko ułożyć model tak, aby Czy wiesz, że możesz " +"szybko ustawić model tak, aby jedna z jego ścian znajdowała się na stole " +"roboczym? Wybierz funkcję „Umieść na powierzchni” lub naciśnij F." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -15408,8 +16711,8 @@ msgstr "" "STEP\n" "Czy wiesz, że możesz poprawić jakość swojego druku, krojąc plik STEP zamiast " "STL?\n" -"Orca Slicer wspiera krojenie plików STEP, oferując gładniejsze rezultaty niż " -"STL o niższej rozdzielczości. Wypróbuj to!" +"Orca Slicer wspiera krojenie plików STEP, oferując lepszą jakość niż STL o " +"niższej rozdzielczości. Wypróbuj to!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -15488,10 +16791,10 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"Drukowanie filamentem jedwabnym\n" -"Czy wiesz, że filament jedwabny wymaga szczególnego uwzględnienia, aby go " -"skutecznie wydrukować? Zalecana jest zawsze wyższa temperatura i niższa " -"prędkość, aby osiągnąć najlepsze rezultaty." +"Drukowanie filamentem jedwabnym (Slik)\n" +"Czy wiesz, że filament jedwabny wymaga szczególnej uwagi, aby go skutecznie " +"wydrukować? Zalecana jest zawsze wyższa temperatura i niższa prędkość, aby " +"osiągnąć najlepsze rezultaty." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -15549,11 +16852,11 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" -"Gdy potrzebna jest drukarka z otwartymi drzwiami\n" -"Czy wiesz, że otwarcie drzwi drukarki może zmniejszyć prawdopodobieństwo " -"zapychania się extrudera/głowicy grzejnej podczas drukowania filamentem o " -"niższej temperaturze przy wyższej temperaturze obudowy. Więcej informacji na " -"ten temat znajdziesz w Wiki." +"Kiedy należy drukować przy otwartych drzwiach drukarki? \n" +"Czy wiesz, że otwarcie drzwiczek drukarki może zmniejszyć prawdopodobieństwo " +"zatkania ekstrudera/hotendu podczas drukowania filamentem o niższej " +"temperaturze gdy temperatura obudowy jest wyższa? Więcej informacji na ten " +"temat znajdziesz na Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -15567,6 +16870,431 @@ msgstr "" "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "zmniejszyć prawdopodobieństwo odkształceń." +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "Rozmiar pliku przekracza limit przesyłania 100 MB. Proszę przesłać plik " +#~ "za pomocą panelu." + +#~ msgid "Enable adaptive pressure advance (beta)" +#~ msgstr "Włącz adaptacyjny wzrost ciśnienia (beta)" + +#~ msgid "" +#~ "With increasing print speeds, it has been observed that the effective PA " +#~ "value typically decreases. This means that a single PA value is not 100% " +#~ "optimal for all features and a compromise value is usually used, that " +#~ "does not cause too much bulging on slower features while also not causing " +#~ "gaps on faster features.\n" +#~ "\n" +#~ "This feature aims to address this limitation by modeling the response of " +#~ "your printer's extrusion system depending on the speed it is printing at. " +#~ "Internally it generates a fitted model that can extrapolate the needed " +#~ "pressure advance for any given print speed, which is then emmited to the " +#~ "printer depending on the current print speed.\n" +#~ "\n" +#~ "When enabled the pressure advance value above is overriden. However, a " +#~ "reasonable default value above isstrongly recomended to act as a fallback " +#~ "in case the model calculations fail." +#~ msgstr "" +#~ "Wraz ze wzrostem prędkości druku zaobserwowano, że efektywna wartość PA " +#~ "zazwyczaj maleje. Oznacza to, że pojedyncza wartość PA nie jest w 100% " +#~ "optymalna dla wszystkich elementów i zwykle stosowana jest wartość " +#~ "kompromisowa, która nie powoduje zbyt dużego \"wypuklenia\" na elementach " +#~ "drukowanych wolniej, a jednocześnie nie powoduje przerw na elementach " +#~ "drukowanych szybciej.\n" +#~ "\n" +#~ "Ta funkcja ma na celu rozwiązanie tego ograniczenia poprzez modelowanie " +#~ "reakcji ekstrudera w zależności od prędkości drukowania. Wewnętrznie " +#~ "generuje dopasowany model, który może przewidzieć jakie będzie wymagane " +#~ "ciśnienie dla dowolnej prędkości drukowania, który jest następnie " +#~ "przekazywany do drukarki w zależności od bieżącej prędkości druku.\n" +#~ "\n" +#~ "Po włączeniu powyższa wartość PA jest nadpisywana. Zdecydowanie zaleca " +#~ "się jednak przyjęcie rozsądnej wartości domyślnej, która będzie działać " +#~ "jako rozwiązanie awaryjne w przypadku nieprawidłowych obliczeń dla modelu." + +#~ msgid "Adaptive pressure advance measurements (beta)" +#~ msgstr "Adaptacyjny pomiar ciśnienia (beta)" + +#~ msgid "" +#~ "Add pairs of pressure advance values and the speed they were measured at, " +#~ "separated by a coma. One set of values per line. For example\n" +#~ "0.03,100\n" +#~ "0.027,150 etc.\n" +#~ "\n" +#~ "How to calibrate:\n" +#~ "1. Run the pressure advance test for at least 3 speeds per filament. It " +#~ "is recommended that the test is runfor at least the speed of the external " +#~ "perimeters, the speed of the internal perimeters and the fastest feature " +#~ "print speed in your profile (usually its the sparse or solid infill\n" +#~ "2. Take note of the optimal Pressure advance value for each speed. The PA " +#~ "ideal PA value should be decreasing the faster the speed is. If it is " +#~ "not, confirm that your extruder is functioning correctly3. Enter the " +#~ "pairs of PA values and Speeds in the text box here and save your filament " +#~ "profile" +#~ msgstr "" +#~ "Dodaj pary wartości przyspieszenia ciśnienia i prędkości, przy których " +#~ "zostały zmierzone, oddzielone przecinkiem. Jeden zestaw wartości na " +#~ "wiersz. Na przykład\n" +#~ "0.03,100\n" +#~ "0.027,150 itd.\n" +#~ "\n" +#~ "Jak skalibrować:\n" +#~ "1. Przeprowadź test PA dla co najmniej 3 prędkości na filament. Zaleca " +#~ "się przeprowadzenie testu PA co najmniej dla zewnętrznych obwodów, " +#~ "wewnętrznych obwodów i najszybszej prędkości drukowania cechy w profilu " +#~ "(zwykle jest to rzadkie lub pełne wypełnienie).\n" +#~ "2. Zanotuj optymalną wartość PA dla każdej prędkości. Idealna wartość PA " +#~ "powinna maleć wraz ze wzrostem prędkości. Jeśli tak nie jest, sprawdź, " +#~ "czy ekstruder działa prawidłowo. \n" +#~ "3.Wprowadź pary wartości PA i prędkości w polu tekstowym i zapisz profil " +#~ "filamentu." + +#~ msgid "Flow ratio and Pressure Advance" +#~ msgstr "Współczynnik przepływu i Wzrost ciśnienia (PA)" + +#~ msgid "param_information" +#~ msgstr "param_information" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "" +#~ "Nie udało się nawiązać lokalnego połączenia z drukarką, spróbuj ponownie." + +#, 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 "" +#~ "Istnieje już historia wyników kalibracji o tej samej nazwie: %s. Tylko " +#~ "jeden z wyników o tej samej nazwie zostanie zapisany. Czy na pewno chcesz " +#~ "zastąpić ten wynik?" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " +#~ "PrusaSlicer links from Printable.com" +#~ msgstr "" +#~ "Skojarz OrcaSlicer z linkami \"prusaslicer://\", aby Orca mógł otwierać " +#~ "linki PrusaSlicer z Printable.com." + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Kolejność drukowania ścian/wypełnienia. Gdy pole wyboru nie jest " +#~ "zaznaczone, najpierw drukowane są ściany, co w większości przypadków " +#~ "działa najlepiej.\n" +#~ "\n" +#~ "Drukowanie najpierw ścian, może pomóc przy ekstremalnych nawisach, " +#~ "ponieważ ściany mają sąsiednie wypełnienie, do którego przylegają. Jednak " +#~ "wypełnienie może nieznacznie wypchnąć tam wydrukowane ściany w miejscu " +#~ "gdzie są do nich przymocowane. Skutkuje to gorszym wykończeniem " +#~ "zewnętrznej powierzchni. Może to również spowodować prześwitywanie " +#~ "wypełnienia przez zewnętrzne powierzchnie części." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Maximum print speed when purging" +#~ msgstr "Maksymalna prędkość druku podczas czyszczenia" + +#~ msgid "" +#~ "The maximum print speed when purging in the wipe tower. If the sparse " +#~ "infill speed or calculated speed from the filament max volumetric speed " +#~ "is lower, the lowest speed will be used instead.\n" +#~ "Increasing this speed may affect the tower's stability, as purging can be " +#~ "performed over sparse layers. Before increasing this parameter beyond the " +#~ "default of 90mm/sec, make sure your printer can reliably bridge at the " +#~ "increased speeds." +#~ msgstr "" +#~ "Maksymalna prędkość drukowania podczas oczyszczania w wieży czyszczącej. " +#~ "Jeśli prędkość wypełnienia rzadkiego lub prędkość obliczona na podstawie " +#~ "maksymalnej prędkości przepływu filamentu jest niższa, zostanie użyta " +#~ "najniższa prędkość.\n" +#~ "Zwiększenie tej prędkości może wpłynąć na stabilność wieży, ponieważ " +#~ "oczyszczanie może być wykonywane na rzadkich warstwach. Przed " +#~ "zwiększeniem tego parametru ponad domyślną wartość 90 mm/s należy upewnić " +#~ "się, że drukarka może niezawodnie drukować ze zwiększoną prędkością." + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer opiera się na BambuStudio od Bambulab, które wywodzi się z " +#~ "PrusaSlicer od Prusa Research. PrusaSlicer z kolei bazuje na Slic3r od " +#~ "Alessandro Ranellucci i społeczności RepRap" + +#~ msgid "Open &Studio" +#~ msgstr "Otwórz &Studio" + +#~ msgid "Open Studio" +#~ msgstr "Otwórz Studio" + +#~ msgid "Export &Configs" +#~ msgstr "Eksportuj &konfiguracje" + +#~ msgid "" +#~ "Over 4 systems/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "Więcej niż 4 aplikacje Studio/Handy korzystają z dostępu zdalnego, możesz " +#~ "zamknąć kilka z nich i spróbować ponownie." + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Włącz tę opcję, aby uzyskać plik G-code zawierający ruchy G2 i G3. " +#~ "Tolerancja dopasowania jest taka sama jak rozdzielczość" + +#~ msgid "Export Configs" +#~ msgstr "Eksportuj konfiguracje" + +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Działania dotyczące niezapisanych zmian" + +#~ msgid "Preset Value" +#~ msgstr "Wartość domyślna" + +#~ msgid "Modified Value" +#~ msgstr "Zmieniona wartość" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Przenieś zmienioną wartość" + +#~ msgid "Use Preset Value" +#~ msgstr "Użyj wartości domyślnej" + +#~ msgid "Save Modified Value" +#~ msgstr "Zapisz zmienione wartości" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Czy chciałbyś zapisać te zmienione ustawienia (zmodyfikowaną wartość)?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Czy chciałbyś zachować te zmienione ustawienia (zmodyfikowaną wartość) po " +#~ "przełączeniu profilu?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Wcześniej zmodyfikowałeś swoje ustawienia i masz zamiar nadpisać je " +#~ "nowymi." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Czy chcesz zachować obecnie zmienione ustawienia, czy może chcesz użyć " +#~ "ustawień domyślnych?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Czy chcesz zapisać obecnie zmodyfikowane ustawienia?" + +#~ msgid "Unload Filament" +#~ msgstr "Wyładuj" + +#~ msgid "A problem occured during calibration. Click to view the solution." +#~ msgstr "" +#~ "Wystąpił problem podczas kalibracji. Kliknij, aby zobaczyć rozwiązanie." + +#~ msgid "MC" +#~ msgstr "MC (Płytka główna)" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard (Płyta główna)" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "Stan drukarki (HMS)" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "active" +#~ msgstr "aktywny" + +#~ msgid "Jump to layer" +#~ msgstr "Przejdź do warstwy" + +#~ msgid "Cabin humidity" +#~ msgstr "Wilgotność w kabinie" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Zielony kolor oznacza, że wilgotność w AMS jest normalna, pomarańczowy " +#~ "oznacza wysoką wilgotność, czerwony oznacza zbyt wysoką wilgotność. " +#~ "(Higrometr: im niższa, tym lepiej.)" + +#~ msgid "Desiccant status" +#~ msgstr "Stan wilgotności" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "Stan wilgotności poniżej dwóch kresek oznacza, że sorbent może być " +#~ "nieaktywny. Proszę wymień sorbent. (Im więcej kresek, tym lepiej.)" + +#~ 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 "" +#~ "Uwaga: gdy pokrywa jest otwarta lub zmieniono pakiet sorbentu, może " +#~ "potrwać kilka godzin lub noc, aby wchłonąć wilgoć. Niska temperatura " +#~ "również spowalnia proces. W tym czasie wskaźnik może nie dokładnie " +#~ "odzwierciedlać stan komory." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Uwaga: jeśli podczas drukowania włożony zostanie nowy filament, AMS nie " +#~ "będzie automatycznie odczytywać żadnych informacji do zakończenia " +#~ "drukowania." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Pomyślnie wyeksportowano G-code do %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Inicjalizacja nie powiodła się (Brak urządzenia)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Inicjalizacja nie powiodła się (Brak urządzenia kamery)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "Drukarka jest zajęta pobieraniem. Proszę czekać, aż pobieranie zostanie " +#~ "zakończone." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "" +#~ "Inicjalizacja nie powiodła się (Nieobsługiwane w obecnej wersji drukarki)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Inicjalizacja nie powiodła się (Niedostępne w trybie tylko LAN)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "" +#~ "Inicjalizacja nie powiodła się (Brak adresu IP drukarki w sieci LAN)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Zatrzymano [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Błąd wczytywania [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Brak plików [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Błąd wczytywania [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Nie udało się pobrać informacji o modelach z drukarki." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "Nie udało się sparsować informacji o modelach." + +#~ msgid "Connection lost. Please retry." +#~ msgstr "Utracono połączenie. Proszę spróbować ponownie." + +#~ msgid "File not exists." +#~ msgstr "Plik nie istnieje." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Nie można wykonywać operacji boolowskich na siatkach modeli. Eksportowane " +#~ "będą tylko części dodatnie." + +#, 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 "" +#~ "Zmieniłeś niektóre ustawienia profilu \"%1%\". \n" +#~ "Czy chciałbyś zachować te zmienione ustawienia (nowa wartość) po zmianie " +#~ "profilu?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Zmieniłeś niektóre ustawienia profilu. \n" +#~ "Czy chciałbyś zachować te zmienione ustawienia (nowa wartość) po zmianie " +#~ "profilu?" + +#~ msgid " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "Jeśli zajdzie taka potrzeba, proszę przejść do ustawień filamentu, aby " +#~ "edytować swoje zmiany.\n" +#~ "Zwróć uwagę, że temperatura dyszy, temperatura podgrzewanego stołu oraz " +#~ "maksymalna prędkość przepływu mają znaczący wpływ na jakość druku 3D. " +#~ "Proszę ustawić je z rozwagą." + #~ msgid "Timeout when authenticating with the account server." #~ msgstr "Przekroczono limit czasu serwera podczas uwierzytelniania." @@ -15635,36 +17363,6 @@ msgstr "" #~ "Możesz dostosować ustawienie maksymalnej prędkości w konfiguracji swojej " #~ "drukarki, aby uzyskać wyższe prędkości." -#~ msgid "Choose ZIP file" -#~ msgstr "Wybierz plik ZIP" - -#~ msgid "" -#~ "Could not start URL download. Destination folder is not set. Please " -#~ "choose destination folder in Configuration Wizard." -#~ msgstr "" -#~ "Nie można rozpocząć pobierania pliku z adresu URL. Folder docelowy nie " -#~ "jest ustawiony. Proszę wybrać folder docelowy w Kreatorze Konfiguracji" - -#~ msgid "Import Zip Archive" -#~ msgstr "Importuj archiwum ZIP" - -#~ msgid "Load models contained within a zip archive" -#~ msgstr "Wczytaj modele zawarte w archiwum ZIP" - -#, boost-format -#~ msgid "Loading of a ZIP archive on path %1% has failed." -#~ msgstr "Nie udało załadować się archiwum ZIP z ścieżki %1%." - -#, boost-format -#~ msgid "Failed to unzip file to %1%: %2%" -#~ msgstr "Nie udało się rozpakować pliku do %1%: %2%" - -#, boost-format -#~ msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." -#~ msgstr "" -#~ "Nie udało się znaleźć rozpakowanego pliku pod adresem %1%. Rozpakowywanie " -#~ "pliku nie powiodło się." - #~ msgid "Allow downloads from Printables.com" #~ msgstr "Zezwól na pobieranie modeli z Printables.com" @@ -16149,37 +17847,6 @@ msgstr "" #~ msgid "An error occurred loading " #~ msgstr "Wystąpił błąd podczas ładowania" -#~ msgid "" -#~ "Windows Media Player is required for this task! Do you want to enable " -#~ "'Windows Media Player' for your operation system?" -#~ msgstr "" -#~ "Do wykonania tego zadania wymagany jest Windows Media Player! Czy chcesz " -#~ "włączyć 'Windows Media Player' dla swojego systemu operacyjnego?" - -#~ msgid "" -#~ "BambuSource has not correctly been registered for media playing! Press " -#~ "Yes to re-register it. You will be promoted twice" -#~ msgstr "" -#~ "BambuSource nie został poprawnie zarejestrowany do odtwarzania mediów! " -#~ "Naciśnij Tak, aby ponownie go zarejestrować. Będziesz poproszony dwa razy." - -#~ msgid "" -#~ "Missing BambuSource component registered for media playing! Please re-" -#~ "install BambuStutio or seek after-sales help." -#~ msgstr "" -#~ "Brakujący komponent BambuSource zarejestrowany do odtwarzania mediów! " -#~ "Proszę ponownie zainstalować BambuStudio lub skonsultować się z pomocą " -#~ "posprzedażową." - -#~ msgid "" -#~ "Your system is missing H.264 codecs for GStreamer, which are required to " -#~ "play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" -#~ "libav packages, then restart Orca Slicer?)" -#~ msgstr "" -#~ "Twój system nie posiada kodeków H.264 dla GStreamer, które są wymagane do " -#~ "odtwarzania wideo. (Spróbuj zainstalować pakiety gstreamer1.0-plugins-bad " -#~ "lub gstreamer1.0-libav, a następnie zrestartuj Orca Slicer?)" - #~ msgid "The maximum temperature cannot exceed" #~ msgstr "Maksymalna temperatura nie może przekroczyć" @@ -16198,9 +17865,6 @@ msgstr "" #~ msgid "Font doesn't have any shape for given text." #~ msgstr "Czcionka nie ma żadnego kształtu dla danego tekstu." -#~ msgid "There is no valid surface for text projection." -#~ msgstr "Nie istnieje żadna prawidłowa powierzchnia do rzutowania tekstu." - #~ msgid "An unexpected error occured" #~ msgstr "Wystąpił nieoczekiwany błąd" @@ -16253,9 +17917,6 @@ msgstr "" #~ msgid "Balanced" #~ msgstr "Zrównoważone" -#~ msgid "Quick" -#~ msgstr "Szybkie" - #~ msgid "Movement:" #~ msgstr "Ruch:" @@ -16455,8 +18116,8 @@ msgstr "" #~ "Elevation is too low for object. Use the \"Pad around object\" feature to " #~ "print the object without elevation." #~ msgstr "" -#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół " -#~ "modelu\", aby wydrukować model bez podniesienia." +#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół modelu" +#~ "\", aby wydrukować model bez podniesienia." #~ msgid "" #~ "The endings of the support pillars will be deployed on the gap between " @@ -16777,10 +18438,6 @@ msgstr "" #~ msgid "Connection to the printer failed" #~ msgstr "Nie udało się połączyć z drukarką" -#~ msgid "A problem occurred during calibration. Click to view the solution." -#~ msgstr "" -#~ "Wystąpił problem podczas kalibracji. Kliknij, aby zobaczyć rozwiązanie." - #~ msgid "" #~ "All the selected objects are on the locked plate,\n" #~ "We cannot do auto-arrange on these objects." @@ -16907,9 +18564,6 @@ msgstr "" #~ msgid "Only the object being edited is visible." #~ msgstr "Widoczny jest tylko edytowany obiekt." -#~ msgid "Disable" -#~ msgstr "Rozłącz" - #~ msgid "Connect Printer (LAN)" #~ msgstr "Podłącz drukarkę (LAN)" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po new file mode 100644 index 0000000000..90efdb34fa --- /dev/null +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -0,0 +1,16893 @@ +# +msgid "" +msgstr "" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"PO-Revision-Date: 2024-06-01 21:51-0300\n" +"Last-Translator: \n" +"Language-Team: Portuguese, Brazilian\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-File: OrcaSlicer.pot\n" +"X-Crowdin-File-ID: 10\n" +"X-Crowdin-Language: pt-BR\n" +"X-Crowdin-Project: orcaslicer-pt-br\n" +"X-Crowdin-Project-ID: 664934\n" +"X-Generator: Poedit 3.4.4\n" + +msgid "Supports Painting" +msgstr "Pintura de Suportes" + +msgid "Alt + Mouse wheel" +msgstr "Alt + Roda do Mouse" + +msgid "Section view" +msgstr "Vista Planar" + +msgid "Reset direction" +msgstr "Redefinir direção" + +msgid "Ctrl + Mouse wheel" +msgstr "Ctrl + Roda do Mouse" + +msgid "Pen size" +msgstr "Tamanho" + +msgid "Left mouse button" +msgstr "Botão esquerdo do mouse" + +msgid "Enforce supports" +msgstr "Forçar suportes" + +msgid "Right mouse button" +msgstr "Botão direito do mouse" + +msgid "Block supports" +msgstr "Bloquear suportes" + +msgid "Shift + Left mouse button" +msgstr "Shift + Botão esquerdo do mouse" + +msgid "Erase" +msgstr "Apagar" + +msgid "Erase all painting" +msgstr "Apagar toda a pintura" + +msgid "Highlight overhang areas" +msgstr "Destacar áreas com 'overhangs'" + +msgid "Gap fill" +msgstr "Preenchimento de vão" + +msgid "Perform" +msgstr "Executar" + +msgid "Gap area" +msgstr "Área das lacunas" + +msgid "Tool type" +msgstr "Tipo da Ferramenta" + +msgid "Smart fill angle" +msgstr "" +"Ângulo do\n" +"preench. inteligente" + +msgid "On overhangs only" +msgstr "Apenas em 'overhangs'" + +msgid "Auto support threshold angle: " +msgstr "Ângulo max. do suporte automático: " + +msgid "Circle" +msgstr "Círculo" + +msgid "Sphere" +msgstr "Esfera" + +msgid "Fill" +msgstr "Preencher" + +msgid "Gap Fill" +msgstr "Preencher lacunas" + +#, boost-format +msgid "Allows painting only on facets selected by: \"%1%\"" +msgstr "Permite pintura apenas em facetas selecionadas por: \"%1%\"" + +msgid "Highlight faces according to overhang angle." +msgstr "Realçar faces conforme a inclinação." + +msgid "No auto support" +msgstr "Sem suporte automático" + +msgid "Support Generated" +msgstr "Suporte Gerado" + +msgid "Gizmo-Place on Face" +msgstr "Gizmo-Posicionar na face" + +msgid "Lay on face" +msgstr "Apoiar face à superfície" + +#, 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 "" +"A contagem de filamentos excede o número máximo que a ferramenta de pintura " +"suporta. Apenas os primeiros %1% filamentos estarão disponíveis na " +"ferramenta de pintura." + +msgid "Color Painting" +msgstr "Pintura de cores" + +msgid "Pen shape" +msgstr "Formato da Caneta" + +msgid "Paint" +msgstr "Pintar" + +msgid "Key 1~9" +msgstr "Tecla 1~9" + +msgid "Choose filament" +msgstr "Escolher filamento" + +msgid "Edge detection" +msgstr "Detecção de Borda" + +msgid "Triangles" +msgstr "Triângulos" + +msgid "Filaments" +msgstr "Filamentos" + +msgid "Brush" +msgstr "Pincel" + +msgid "Smart fill" +msgstr "Preenchimento Inteligente" + +msgid "Bucket fill" +msgstr "Balde de preenchimento" + +msgid "Height range" +msgstr "Intervalo de altura" + +msgid "Alt + Shift + Enter" +msgstr "Alt + Shift + Enter" + +msgid "Toggle Wireframe" +msgstr "Alternar Wireframe" + +msgid "Shortcut Key " +msgstr "Tecla " + +msgid "Triangle" +msgstr "Triângulo" + +msgid "Height Range" +msgstr "Intervalo de Altura" + +msgid "Vertical" +msgstr "Vertical" + +msgid "Horizontal" +msgstr "Horizontal" + +msgid "Remove painted color" +msgstr "Remover cor pintada" + +#, boost-format +msgid "Painted using: Filament %1%" +msgstr "Pintado usando: Filamento %1%" + +msgid "Move" +msgstr "Mover" + +msgid "Gizmo-Move" +msgstr "Gizmo-Mover" + +msgid "Rotate" +msgstr "Rotacionar" + +msgid "Gizmo-Rotate" +msgstr "Gizmo-Rotacionar" + +msgid "Optimize orientation" +msgstr "Otimizar orientação" + +msgid "Apply" +msgstr "Aplicar" + +msgid "Scale" +msgstr "Escala" + +msgid "Gizmo-Scale" +msgstr "Gizmo-Dimensionar" + +msgid "Error: Please close all toolbar menus first" +msgstr "Erro: Por favor, feche todos os menus da barra de ferramentas primeiro" + +msgid "in" +msgstr "in" + +msgid "mm" +msgstr "mm" + +msgid "Position" +msgstr "Posição" + +#. TRN - Input label. Be short as possible +#. Angle between Y axis and text line direction. +#. TRN - Input label. Be short as possible +msgid "Rotation" +msgstr "Rotação" + +msgid "Scale ratios" +msgstr "Proporções de escala" + +msgid "Object Operations" +msgstr "Operações do Objeto" + +msgid "Volume Operations" +msgstr "Operações de Volume" + +msgid "Translate" +msgstr "Traduzir" + +msgid "Group Operations" +msgstr "Operações de Grupo" + +msgid "Set Position" +msgstr "Definir Posição" + +msgid "Set Orientation" +msgstr "Definir Orientação" + +msgid "Set Scale" +msgstr "Definir Escala" + +msgid "Reset Position" +msgstr "Redefinir Posição" + +msgid "Reset Rotation" +msgstr "Redefinir Rotação" + +msgid "World coordinates" +msgstr "Coordenadas globais" + +msgid "Object coordinates" +msgstr "Coordenadas do objeto" + +msgid "°" +msgstr "°" + +#. TRN - Input label. Be short as possible +msgid "Size" +msgstr "Tamanho" + +msgid "%" +msgstr "%" + +msgid "uniform scale" +msgstr "Escala uniforme" + +msgid "Planar" +msgstr "Plano" + +msgid "Dovetail" +msgstr "Encaixe" + +msgid "Auto" +msgstr "Auto" + +msgid "Manual" +msgstr "Manual" + +msgid "Plug" +msgstr "Pino" + +msgid "Dowel" +msgstr "Cavilha" + +msgid "Snap" +msgstr "Plugue" + +msgid "Prism" +msgstr "Prisma" + +msgid "Frustum" +msgstr "Tronco" + +msgid "Square" +msgstr "Quadrado" + +msgid "Hexagon" +msgstr "Hexágono" + +msgid "Keep orientation" +msgstr "Manter orientação" + +msgid "Place on cut" +msgstr "Apoiar no corte" + +msgid "Flip upside down" +msgstr "Virar de cabeça para baixo" + +msgid "Connectors" +msgstr "Conectores" + +msgid "Type" +msgstr "Tipo" + +msgid "Style" +msgstr "Estilo" + +msgid "Shape" +msgstr "Forma" + +#. TRN - Input label. Be short as possible +#. Size in emboss direction +#. TRN - Input label. Be short as possible +msgid "Depth" +msgstr "Profundidade" + +msgid "Groove" +msgstr "Cavidade" + +msgid "Width" +msgstr "Largura" + +msgid "Flap Angle" +msgstr "Ângulo do borda" + +msgid "Groove Angle" +msgstr "Ângulo da cavidade" + +msgid "Part" +msgstr "Peça" + +msgid "Object" +msgstr "Objeto" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane" +msgstr "" +"Clique para girar o plano de corte\n" +"Arraste para mover o plano de corte" + +msgid "" +"Click to flip the cut plane\n" +"Drag to move the cut plane\n" +"Right-click a part to assign it to the other side" +msgstr "" +"Clique para girar o plano de corte\n" +"Arraste para mover o plano de corte\n" +"Clique com o botão direito em uma peça para atribuí-la ao outro lado" + +msgid "Move cut plane" +msgstr "Mover plano de corte" + +msgid "Mode" +msgstr "Modo" + +msgid "Change cut mode" +msgstr "Alterar modo de corte" + +msgid "Tolerance" +msgstr "Tolerância" + +msgid "Drag" +msgstr "Arrastar" + +msgid "Draw cut line" +msgstr "Desenhar linha de corte" + +msgid "Left click" +msgstr "Clique esquerdo" + +msgid "Add connector" +msgstr "Adicionar conector" + +msgid "Right click" +msgstr "Clique direito" + +msgid "Remove connector" +msgstr "Remover conector" + +msgid "Move connector" +msgstr "Mover conector" + +msgid "Add connector to selection" +msgstr "Adicionar conector à seleção" + +msgid "Remove connector from selection" +msgstr "Remover conector da seleção" + +msgid "Select all connectors" +msgstr "Selecionar todos os conectores" + +msgid "Cut" +msgstr "Cortar" + +msgid "Rotate cut plane" +msgstr "Rotacionar plano de corte" + +msgid "Remove connectors" +msgstr "Remover conectores" + +msgid "Bulge" +msgstr "Relevo" + +msgid "Bulge proportion related to radius" +msgstr "Proporção de relevo em relação ao raio" + +msgid "Space" +msgstr "Espaço" + +msgid "Space proportion related to radius" +msgstr "Proporção de espaço em relação ao raio" + +msgid "Confirm connectors" +msgstr "Confirmar conectores" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Build Volume" +msgstr "Volume de Impressão" + +msgid "Flip cut plane" +msgstr "Virar plano de corte" + +msgid "Groove change" +msgstr "Alteração de cavidade" + +msgid "Reset" +msgstr "Reiniciar" + +#. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. +msgid "Edited" +msgstr "Editado" + +msgid "Cut position" +msgstr "Posição de corte" + +msgid "Reset cutting plane" +msgstr "Redefinir plano de corte" + +msgid "Edit connectors" +msgstr "Editar conectores" + +msgid "Add connectors" +msgstr "Adicionar conectores" + +msgid "Reset cut" +msgstr "Redefinir corte" + +msgid "Reset cutting plane and remove connectors" +msgstr "Redefinir plano de corte e remover conectores" + +msgid "Upper part" +msgstr "Parte superior" + +msgid "Lower part" +msgstr "Parte inferior" + +msgid "Keep" +msgstr "Manter" + +msgid "Flip" +msgstr "Virar" + +msgid "After cut" +msgstr "Após o corte" + +msgid "Cut to parts" +msgstr "Cortar em peças" + +msgid "Perform cut" +msgstr "Executar corte" + +msgid "Warning" +msgstr "Aviso" + +msgid "Invalid connectors detected" +msgstr "Conectores inválidos detectados" + +#, c-format, boost-format +msgid "%1$d connector is out of cut contour" +msgid_plural "%1$d connectors are out of cut contour" +msgstr[0] "%1$d conector está fora do contorno de corte" +msgstr[1] "%1$d conectores estão fora do contorno de corte" + +#, c-format, boost-format +msgid "%1$d connector is out of object" +msgid_plural "%1$d connectors are out of object" +msgstr[0] "%1$d conector está fora do objeto" +msgstr[1] "%1$d conectores estão fora do objeto" + +msgid "Some connectors are overlapped" +msgstr "Alguns conectores estão sobrepostos" + +msgid "Select at least one object to keep after cutting." +msgstr "Selecione pelo menos um objeto para manter após o corte." + +msgid "Cut plane is placed out of object" +msgstr "Plano de corte está posicionado fora do objeto" + +msgid "Cut plane with groove is invalid" +msgstr "Plano de corte com cavidade é inválido" + +msgid "Connector" +msgstr "Conector" + +msgid "Cut by Plane" +msgstr "Cortar por Plano" + +msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" +msgstr "" +"as arestas abertas podem ser causadas pela ferramenta de corte, você quer " +"corrigi-las agora?" + +msgid "Repairing model object" +msgstr "Reparando objeto do modelo" + +msgid "Cut by line" +msgstr "Corte por linha" + +msgid "Delete connector" +msgstr "Apagar conector" + +msgid "Mesh name" +msgstr "Nome da malha" + +msgid "Detail level" +msgstr "Nível de detalhe" + +msgid "Decimate ratio" +msgstr "Taxa de decimação" + +#, boost-format +msgid "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." +msgstr "" +"Processar modelo '%1%' com mais de 1M de triângulos pode ser lento. É " +"altamente recomendável simplificar o modelo." + +msgid "Simplify model" +msgstr "Simplificar modelo" + +msgid "Simplify" +msgstr "Simplificar" + +msgid "Simplification is currently only allowed when a single part is selected" +msgstr "" +"A simplificação só é permitida quando uma única peça é selecionada no momento" + +msgid "Error" +msgstr "Erro" + +msgid "Extra high" +msgstr "Extra alto" + +msgid "High" +msgstr "Alto" + +msgid "Medium" +msgstr "Médio" + +msgid "Low" +msgstr "Baixo" + +msgid "Extra low" +msgstr "Extra baixo" + +#, c-format, boost-format +msgid "%d triangles" +msgstr "%d triângulos" + +msgid "Show wireframe" +msgstr "Mostrar wireframe" + +#, boost-format +msgid "%1%" +msgstr "%1%" + +msgid "Can't apply when proccess preview." +msgstr "" +"Não é possível aplicar quando a visualização do processo está em andamento." + +msgid "Operation already cancelling. Please wait few seconds." +msgstr "Operação já sendo cancelada. Por favor, aguarde alguns segundos." + +msgid "Face recognition" +msgstr "Reconhecimento facial" + +msgid "Perform Recognition" +msgstr "Realizar Reconhecimento" + +msgid "Brush size" +msgstr "Tamanho" + +msgid "Brush shape" +msgstr "Formato do pincel" + +msgid "Enforce seam" +msgstr "Forçar costura" + +msgid "Block seam" +msgstr "Bloquear costura" + +msgid "Seam painting" +msgstr "Pintura de costura" + +msgid "Remove selection" +msgstr "Remover seleção" + +msgid "Entering Seam painting" +msgstr "Entrando na pintura de costura" + +msgid "Leaving Seam painting" +msgstr "Saindo da pintura de costura" + +msgid "Paint-on seam editing" +msgstr "Edição de pintura de costura" + +#. TRN - Input label. Be short as possible +#. Select look of letter shape +msgid "Font" +msgstr "Fonte" + +msgid "Thickness" +msgstr "Espessura" + +msgid "Text Gap" +msgstr "Espaço de Texto" + +msgid "Angle" +msgstr "Ângulo" + +msgid "" +"Embeded\n" +"depth" +msgstr "" +"Profundidade\n" +"Integrada" + +msgid "Input text" +msgstr "Texto de entrada" + +msgid "Surface" +msgstr "Superfície" + +msgid "Horizontal text" +msgstr "Texto horizontal" + +msgid "Shift + Mouse move up or dowm" +msgstr "Shift + Mover mouse para cima ou para baixo" + +msgid "Rotate text" +msgstr "Rotacionar texto" + +msgid "Text shape" +msgstr "Formato do texto" + +#. TRN - Title in Undo/Redo stack after rotate with text around emboss axe +msgid "Text rotate" +msgstr "Rotação do texto" + +#. TRN - Title in Undo/Redo stack after move with text along emboss axe - From surface +msgid "Text move" +msgstr "Mover texto" + +msgid "Set Mirror" +msgstr "Definir Espelho" + +msgid "Embossed text" +msgstr "Texto em relevo" + +msgid "Enter emboss gizmo" +msgstr "Entrar no gizmo de relevo" + +msgid "Leave emboss gizmo" +msgstr "Sair do gizmo de relevo" + +msgid "Embossing actions" +msgstr "Ações de relevo" + +msgid "Emboss" +msgstr "Relevo" + +msgid "NORMAL" +msgstr "NORMAL" + +msgid "SMALL" +msgstr "PEQUENO" + +msgid "ITALIC" +msgstr "ITÁLICO" + +msgid "SWISS" +msgstr "SUÍÇO" + +msgid "MODERN" +msgstr "MODERNO" + +msgid "First font" +msgstr "Primeira fonte" + +msgid "Default font" +msgstr "Fonte padrão" + +msgid "Advanced" +msgstr "Avançado" + +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" +"O texto não pode ser escrito usando a fonte selecionada. Por favor, tente " +"escolher uma fonte diferente." + +msgid "Embossed text cannot contain only white spaces." +msgstr "Texto em relevo não pode conter apenas espaços em branco." + +msgid "Text contains character glyph (represented by '?') unknown by font." +msgstr "" +"O texto contém um glifo de caractere (representado por '?') desconhecido " +"pela fonte." + +msgid "Text input doesn't show font skew." +msgstr "A entrada de texto não mostra a inclinação da fonte." + +msgid "Text input doesn't show font boldness." +msgstr "A entrada de texto não mostra a negrito da fonte." + +msgid "Text input doesn't show gap between lines." +msgstr "A entrada de texto não mostra o espaçamento entre linhas." + +msgid "Too tall, diminished font height inside text input." +msgstr "Muito alto, altura da fonte diminuída dentro da entrada de texto." + +msgid "Too small, enlarged font height inside text input." +msgstr "Muito pequeno, altura da fonte aumentada dentro da entrada de texto." + +msgid "Text doesn't show current horizontal alignment." +msgstr "O texto não mostra o alinhamento horizontal atual." + +msgid "Revert font changes." +msgstr "Reverter alterações de fonte." + +#, boost-format +msgid "Font \"%1%\" can't be selected." +msgstr "A fonte \"%1%\" não pode ser selecionada." + +msgid "Operation" +msgstr "Operação" + +msgid "Join" +msgstr "Unir" + +msgid "Click to change text into object part." +msgstr "Clique para mudar o texto para uma peça do objeto." + +msgid "You can't change a type of the last solid part of the object." +msgstr "Você não pode mudar o tipo da última peça sólida do objeto." + +msgctxt "EmbossOperation" +msgid "Cut" +msgstr "Cortar" + +msgid "Click to change part type into negative volume." +msgstr "Clique para mudar o tipo de peça para volume negativo." + +msgid "Modifier" +msgstr "Modificador" + +msgid "Click to change part type into modifier." +msgstr "Clique para mudar o tipo de peça para modificador." + +msgid "Change Text Type" +msgstr "Alterar tipo de texto" + +#, boost-format +msgid "Rename style(%1%) for embossing text" +msgstr "Renomear estilo(%1%) para texto em relevo" + +msgid "Name can't be empty." +msgstr "O nome não pode estar vazio." + +msgid "Name has to be unique." +msgstr "O nome tem que ser único." + +msgid "OK" +msgstr "Certo" + +msgid "Rename style" +msgstr "Renomear estilo" + +msgid "Rename current style." +msgstr "Renomear o estilo atual." + +msgid "Can't rename temporary style." +msgstr "Não é possível renomear estilo temporário." + +msgid "First Add style to list." +msgstr "Primeiro, adicione o estilo à lista." + +#, boost-format +msgid "Save %1% style" +msgstr "Salvar estilo %1%" + +msgid "No changes to save." +msgstr "Não há mudanças para salvar." + +msgid "New name of style" +msgstr "Novo nome do estilo" + +msgid "Save as new style" +msgstr "Salvar como novo estilo" + +msgid "Only valid font can be added to style." +msgstr "Somente uma fonte válida pode ser adicionada ao estilo." + +msgid "Add style to my list." +msgstr "Adicionar estilo à minha lista." + +msgid "Save as new style." +msgstr "Salvar como novo estilo." + +msgid "Remove style" +msgstr "Remover estilo" + +msgid "Can't remove the last existing style." +msgstr "Não é possível remover o último estilo existente." + +#, boost-format +msgid "Are you sure you want to permanently remove the \"%1%\" style?" +msgstr "Tem certeza de que deseja remover permanentemente o estilo \"%1%\"?" + +#, boost-format +msgid "Delete \"%1%\" style." +msgstr "Excluir o estilo \"%1%\"." + +#, boost-format +msgid "Can't delete \"%1%\". It is last style." +msgstr "Não é possível excluir \"%1%\". É o último estilo." + +#, boost-format +msgid "Can't delete temporary style \"%1%\"." +msgstr "Não é possível excluir o estilo temporário \"%1%\"." + +#, boost-format +msgid "Modified style \"%1%\"" +msgstr "Estilo modificado \"%1%\"" + +#, boost-format +msgid "Current style is \"%1%\"" +msgstr "O estilo atual é \"%1%\"" + +#, boost-format +msgid "" +"Changing style to \"%1%\" will discard current style modification.\n" +"\n" +"Would you like to continue anyway?" +msgstr "" +"Mudar o estilo para \"%1%\" descartará a modificação atual do estilo.\n" +"\n" +"Você gostaria de continuar mesmo assim?" + +msgid "Not valid style." +msgstr "Estilo inválido." + +#, boost-format +msgid "Style \"%1%\" can't be used and will be removed from a list." +msgstr "O estilo \"%1%\" não pode ser usado e será removido da lista." + +msgid "Unset italic" +msgstr "Desativar Itálico" + +msgid "Set italic" +msgstr "Ativar Itálico" + +msgid "Unset bold" +msgstr "Desativar Negrito" + +msgid "Set bold" +msgstr "Ativar negrito" + +msgid "Revert text size." +msgstr "Reverter tamanho do texto." + +msgid "Revert embossed depth." +msgstr "Reverter profundidade em relevo." + +msgid "" +"Advanced options cannot be changed for the selected font.\n" +"Select another font." +msgstr "" +"As opções avançadas não podem ser alteradas para a fonte selecionada.\n" +"Selecione outra fonte." + +msgid "Revert using of model surface." +msgstr "Reverter uso da superfície do modelo." + +msgid "Revert Transformation per glyph." +msgstr "Reverter Transformação por glifo." + +msgid "Set global orientation for whole text." +msgstr "Definir orientação global para todo o texto." + +msgid "Set position and orientation per glyph." +msgstr "Definir posição e orientação por glifo." + +msgctxt "Alignment" +msgid "Left" +msgstr "Esquerda" + +msgctxt "Alignment" +msgid "Center" +msgstr "Centro" + +msgctxt "Alignment" +msgid "Right" +msgstr "Direita" + +msgctxt "Alignment" +msgid "Top" +msgstr "Topo" + +msgctxt "Alignment" +msgid "Middle" +msgstr "Meio" + +msgctxt "Alignment" +msgid "Bottom" +msgstr "Fundo" + +msgid "Revert alignment." +msgstr "Reverter alinhamento." + +#. TRN EmbossGizmo: font units +msgid "points" +msgstr "pontos" + +msgid "Revert gap between characters" +msgstr "Reverter espaçamento entre caracteres" + +msgid "Distance between characters" +msgstr "Distância entre caracteres" + +msgid "Revert gap between lines" +msgstr "Reverter espaçamento entre linhas" + +msgid "Distance between lines" +msgstr "Distância entre linhas" + +msgid "Undo boldness" +msgstr "Desfazer negrito" + +msgid "Tiny / Wide glyphs" +msgstr "Glifos pequenos / largos" + +msgid "Undo letter's skew" +msgstr "Desfazer inclinação das letras" + +msgid "Italic strength ratio" +msgstr "Proporção de força itálica" + +msgid "Undo translation" +msgstr "Desfazer tradução" + +msgid "Distance of the center of the text to the model surface." +msgstr "Distância do centro do texto para a superfície do modelo." + +msgid "Undo rotation" +msgstr "Desfazer rotação" + +msgid "Rotate text Clock-wise." +msgstr "Girar o texto no sentido horário." + +msgid "Unlock the text's rotation when moving text along the object's surface." +msgstr "" +"Desbloquear a rotação do texto ao movê-lo ao longo da superfície do objeto." + +msgid "Lock the text's rotation when moving text along the object's surface." +msgstr "" +"Bloquear a rotação do texto ao movê-lo ao longo da superfície do objeto." + +msgid "Select from True Type Collection." +msgstr "Selecionar da Coleção True Type." + +msgid "Set text to face camera" +msgstr "Fazer texto para virar para a câmera" + +msgid "Orient the text towards the camera." +msgstr "Orientar o texto em direção à câmera." + +#, boost-format +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" +"Não é possível carregar a mesma fonte exatamente (\"%1%\"). A aplicação " +"selecionou uma similar (\"%2%\"). Você deve especificar uma fonte para " +"habilitar a edição de texto." + +msgid "No symbol" +msgstr "Sem símbolo" + +msgid "Loading" +msgstr "Carregando" + +msgid "In queue" +msgstr "Na fila" + +#. TRN - Input label. Be short as possible +#. Height of one text line - Font Ascent +msgid "Height" +msgstr "Altura" + +#. TRN - Input label. Be short as possible +#. Copy surface of model on surface of the embossed text +#. TRN - Input label. Be short as possible +msgid "Use surface" +msgstr "Usar superfície" + +#. TRN - Input label. Be short as possible +#. Option to change projection on curved surface +#. for each character(glyph) in text separately +msgid "Per glyph" +msgstr "Por glifo" + +#. TRN - Input label. Be short as possible +#. Align Top|Middle|Bottom and Left|Center|Right +msgid "Alignment" +msgstr "Alinhamento" + +#. TRN - Input label. Be short as possible +msgid "Char gap" +msgstr "Espaço de caractere" + +#. TRN - Input label. Be short as possible +msgid "Line gap" +msgstr "Espaço de linha" + +#. TRN - Input label. Be short as possible +msgid "Boldness" +msgstr "Negrito" + +#. TRN - Input label. Be short as possible +#. Like Font italic +msgid "Skew ratio" +msgstr "Proporção de inclinação" + +#. TRN - Input label. Be short as possible +#. Distance from model surface to be able +#. move text as part fully into not flat surface +#. move text as modifier fully out of not flat surface +#. TRN - Input label. Be short as possible +msgid "From surface" +msgstr "Da superfície" + +#. TRN - Input label. Be short as possible +#. Keep vector from bottom to top of text aligned with printer Y axis +msgid "Keep up" +msgstr "Manter" + +#. TRN - Input label. Be short as possible. +#. Some Font file contain multiple fonts inside and +#. this is numerical selector of font inside font collections +msgid "Collection" +msgstr "Coleção" + +#. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe +msgid "SVG rotate" +msgstr "Rotacionar SVG" + +#. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface +msgid "SVG move" +msgstr "Mover SVG" + +msgid "Enter SVG gizmo" +msgstr "Entrar no gizmo SVG" + +msgid "Leave SVG gizmo" +msgstr "Sair do gizmo SVG" + +msgid "SVG actions" +msgstr "Ações SVG" + +msgid "SVG" +msgstr "SVG" + +#, boost-format +msgid "Opacity (%1%)" +msgstr "Opacidade (%1%)" + +#, boost-format +msgid "Color gradient (%1%)" +msgstr "Gradiente de cor (%1%)" + +msgid "Undefined fill type" +msgstr "Tipo de preenchimento indefinido" + +msgid "Linear gradient" +msgstr "Gradiente linear" + +msgid "Radial gradient" +msgstr "Gradiente radial" + +msgid "Open filled path" +msgstr "Caminho preenchido aberto" + +msgid "Undefined stroke type" +msgstr "Tipo de traço indefinido" + +msgid "Path can't be healed from selfintersection and multiple points." +msgstr "O caminho não pode ser reparado de auto-interseção e pontos múltiplos." + +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" +"A forma final contém auto-interseção ou múltiplos pontos com mesma " +"coordenada." + +#, boost-format +msgid "Shape is marked as invisible (%1%)." +msgstr "A forma está marcada como invisível (%1%)." + +#. TRN: The first placeholder is shape identifier, the second one is text describing the problem. +#, boost-format +msgid "Fill of shape (%1%) contains unsupported: %2%." +msgstr "O preenchimento da forma (%1%) contém não suportado: %2%." + +#, boost-format +msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." +msgstr "O traço da forma (%1%) é muito fino (largura mínima é %2% mm)." + +#, boost-format +msgid "Stroke of shape (%1%) contains unsupported: %2%." +msgstr "O traço da forma (%1%) contém não suportado: %2%." + +msgid "Face the camera" +msgstr "Virar para a câmera" + +#. TRN - Preview of filename after clear local filepath. +msgid "Unknown filename" +msgstr "Nome do arquivo desconhecido" + +#, boost-format +msgid "SVG file path is \"%1%\"" +msgstr "O caminho do arquivo SVG é \"%1%\"." + +msgid "Reload SVG file from disk." +msgstr "Recarregar arquivo SVG do disco." + +msgid "Change file" +msgstr "Alterar arquivo" + +msgid "Change to another .svg file" +msgstr "Mudar para outro arquivo .svg" + +msgid "Forget the file path" +msgstr "Esquecer o caminho do arquivo" + +msgid "" +"Do NOT save local path to 3MF file.\n" +"Also disables 'reload from disk' option." +msgstr "" +"NÃO salve o caminho local para o arquivo 3MF.\n" +"Também desabilita a opção 'recarregar do disco'." + +#. TRN: An menu option to convert the SVG into an unmodifiable model part. +msgid "Bake" +msgstr "Assar" + +#. TRN: Tooltip for the menu item. +msgid "Bake into model as uneditable part" +msgstr "Assar no modelo como peça não editável" + +msgid "Save as" +msgstr "Salvar como" + +msgid "Save SVG file" +msgstr "Salvar arquivo SVG" + +msgid "Save as '.svg' file" +msgstr "Salvar como arquivo '.svg'" + +msgid "Size in emboss direction." +msgstr "Tamanho na direção de relevo." + +#. TRN: The placeholder contains a number. +#, boost-format +msgid "Scale also changes amount of curve samples (%1%)" +msgstr "A escala também altera a quantidade de amostras de curva (%1%)" + +msgid "Width of SVG." +msgstr "Largura do SVG." + +msgid "Height of SVG." +msgstr "Altura do SVG." + +msgid "Lock/unlock the aspect ratio of the SVG." +msgstr "Travar/destravar a proporção de aspecto do SVG." + +msgid "Reset scale" +msgstr "Redefinir escala" + +msgid "Distance of the center of the SVG to the model surface." +msgstr "Distância do centro do SVG até a superfície do modelo." + +msgid "Reset distance" +msgstr "Redefinir distância" + +msgid "Reset rotation" +msgstr "Redefinir rotação" + +msgid "Lock/unlock rotation angle when dragging above the surface." +msgstr "Travar/destravar o ângulo de rotação ao arrastar acima da superfície." + +msgid "Mirror vertically" +msgstr "Espelhar verticalmente" + +msgid "Mirror horizontally" +msgstr "Espelhar horizontalmente" + +#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). +msgid "Change SVG Type" +msgstr "Alterar tipo de SVG" + +#. TRN - Input label. Be short as possible +msgid "Mirror" +msgstr "Espelhar" + +msgid "Choose SVG file for emboss:" +msgstr "Escolher arquivo SVG para relevo:" + +#, boost-format +msgid "File does NOT exist (%1%)." +msgstr "O arquivo NÃO existe (%1%)." + +#, boost-format +msgid "Filename has to end with \".svg\" but you selected %1%" +msgstr "" +"O nome do arquivo precisa terminar com \".svg\", mas você selecionou %1%" + +#, boost-format +msgid "Nano SVG parser can't load from file (%1%)." +msgstr "O analisador Nano SVG não pode carregar do arquivo (%1%)." + +#, boost-format +msgid "SVG file does NOT contain a single path to be embossed (%1%)." +msgstr "O arquivo SVG NÃO contém um único caminho para ser relevado (%1%)." + +msgid "Vertex" +msgstr "Vértice" + +msgid "Edge" +msgstr "Borda" + +msgid "Plane" +msgstr "Plano" + +msgid "Point on edge" +msgstr "Ponto na borda" + +msgid "Point on circle" +msgstr "Ponto no círculo" + +msgid "Point on plane" +msgstr "Ponto no plano" + +msgid "Center of edge" +msgstr "Centro da borda" + +msgid "Center of circle" +msgstr "Centro do círculo" + +msgid "ShiftLeft mouse button" +msgstr "Botão do mouse ShiftLeft" + +msgid "Select feature" +msgstr "Selecionar recurso" + +msgid "Select point" +msgstr "Selecionar ponto" + +msgid "Delete" +msgstr "Excluir" + +msgid "Restart selection" +msgstr "Reiniciar seleção" + +msgid "Esc" +msgstr "Esc" + +msgid "Unselect" +msgstr "Desmarcar" + +msgid "Measure" +msgstr "Medir" + +msgid "Edit to scale" +msgstr "Editar para escala" + +msgctxt "Verb" +msgid "Scale" +msgstr "Escala" + +msgid "None" +msgstr "Nenhum" + +msgid "Diameter" +msgstr "Diâmetro" + +msgid "Length" +msgstr "Comprimento" + +msgid "Selection" +msgstr "Seleção" + +msgid "Copy to clipboard" +msgstr "Copiar para a área de transferência" + +msgid "Perpendicular distance" +msgstr "Distância perpendicular" + +msgid "Distance" +msgstr "Distância" + +msgid "Direct distance" +msgstr "Distância direta" + +msgid "Distance XYZ" +msgstr "Distância XYZ" + +msgid "Ctrl+" +msgstr "Ctrl+" + +msgid "Notice" +msgstr "Aviso" + +msgid "Undefined" +msgstr "Indefinido" + +#, boost-format +msgid "%1% was replaced with %2%" +msgstr "%1% foi substituído por %2%" + +msgid "The configuration may be generated by a newer version of OrcaSlicer." +msgstr "" +"A configuração pode ter sido gerada por uma versão mais recente do " +"OrcaSlicer." + +msgid "Some values have been replaced. Please check them:" +msgstr "Alguns valores foram substituídos. Por favor, verifique-os:" + +msgid "Process" +msgstr "Processo" + +msgid "Filament" +msgstr "Filamento" + +msgid "Machine" +msgstr "Máquina" + +msgid "Configuration package was loaded, but some values were not recognized." +msgstr "" +"O pacote de configuração foi carregado, mas alguns valores não foram " +"reconhecidos." + +#, boost-format +msgid "" +"Configuration file \"%1%\" was loaded, but some values were not recognized." +msgstr "" +"O arquivo de configuração \"%1%\" foi carregado, mas alguns valores não " +"foram reconhecidos." + +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 será encerrado devido à falta de memória. Pode ser um bug. " +"Agradecemos se você relatar o problema para nossa equipe." + +msgid "Fatal error" +msgstr "Erro fatal" + +msgid "" +"OrcaSlicer will terminate because of a localization error. It will be " +"appreciated if you report the specific scenario this issue happened." +msgstr "" +"OrcaSlicer será encerrado devido a um erro de localização. Agradecemos se " +"você relatar o cenário específico em que esse problema ocorreu." + +msgid "Critical error" +msgstr "Erro crítico" + +#, boost-format +msgid "OrcaSlicer got an unhandled exception: %1%" +msgstr "OrcaSlicer encontrou uma exceção não tratada: %1%" + +msgid "Untitled" +msgstr "Sem título" + +msgid "Downloading Bambu Network Plug-in" +msgstr "Baixando o Plug-in de Rede Bambu" + +msgid "Login information expired. Please login again." +msgstr "As informações de login expiraram. Por favor, faça o login novamente." + +msgid "Incorrect password" +msgstr "Senha incorreta" + +#, c-format, boost-format +msgid "Connect %s failed! [SN:%s, code=%s]" +msgstr "Falha na conexão %s! [SN:%s, código=%s]" + +msgid "" +"Orca Slicer requires the Microsoft WebView2 Runtime to operate certain " +"features.\n" +"Click Yes to install it now." +msgstr "" +"Orca Slicer requer o tempo de execução Microsoft WebView2 para operar " +"determinados recursos.\n" +"Clique em Sim para instalá-lo agora." + +msgid "WebView2 Runtime" +msgstr "Tempo de execução WebView2" + +#, c-format, boost-format +msgid "" +"%s\n" +"Do you want to continue?" +msgstr "" +"%s\n" +"Deseja continuar?" + +msgid "Remember my choice" +msgstr "Lembrar minha escolha" + +msgid "Loading configuration" +msgstr "Carregando configuração" + +#, c-format, boost-format +msgid "Click to download new version in default browser: %s" +msgstr "Clique para baixar a nova versão no navegador padrão: %s" + +msgid "The Orca Slicer needs an upgrade" +msgstr "O Orca Slicer precisa ser atualizado" + +msgid "This is the newest version." +msgstr "Esta é a versão mais recente." + +msgid "Info" +msgstr "Informações" + +msgid "" +"The OrcaSlicer configuration file may be corrupted and cannot be parsed.\n" +"OrcaSlicer has attempted to recreate the configuration file.\n" +"Please note, application settings will be lost, but printer profiles will " +"not be affected." +msgstr "" +"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser " +"analisado.\n" +"O OrcaSlicer tentou recriar o arquivo de configuração.\n" +"Por favor, note que as configurações do aplicativo serão perdidas, mas os " +"perfis de impressora não serão afetados." + +msgid "Rebuild" +msgstr "Reconstruindo" + +msgid "Loading current presets" +msgstr "Carregando presets atuais" + +msgid "Loading a mode view" +msgstr "Carregando uma visualização de modo" + +msgid "Choose one file (3mf):" +msgstr "Escolha um arquivo (3mf):" + +msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" +msgstr "Escolha um ou mais arquivos (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" + +msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "Escolha um ou mais arquivos (3mf/step/stl/svg/obj/amf):" + +msgid "Choose ZIP file" +msgstr "Escolha o arquivo ZIP" + +msgid "Choose one file (gcode/3mf):" +msgstr "Escolha um arquivo (gcode/3mf):" + +msgid "Some presets are modified." +msgstr "Alguns presets foram modificados." + +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Você pode manter os modelos modificados no novo projeto, descartar ou salvar " +"as alterações como novos modelos." + +msgid "User logged out" +msgstr "Usuário desconectado" + +msgid "new or open project file is not allowed during the slicing process!" +msgstr "" +"criar ou abrir um arquivo de projeto novo não é permitido durante o processo " +"de fatiamento!" + +msgid "Open Project" +msgstr "Abrir Projeto" + +msgid "" +"The version of Orca Slicer is too low and needs to be updated to the latest " +"version before it can be used normally" +msgstr "" +"A versão do Orca Slicer é muito antiga e precisa ser atualizada para a " +"versão mais recente antes de poder ser usada normalmente" + +msgid "Privacy Policy Update" +msgstr "Atualização da Política de Privacidade" + +msgid "" +"The number of user presets cached in the cloud has exceeded the upper limit, " +"newly created user presets can only be used locally." +msgstr "" +"O número de presets de usuário em cache na nuvem excedeu o limite superior, " +"os presets de usuário recém-criados só podem ser usados localmente." + +msgid "Sync user presets" +msgstr "Sincronizar presets do usuário" + +msgid "Loading user preset" +msgstr "Carregando preset do usuário" + +msgid "Switching application language" +msgstr "Alterando o idioma do aplicativo" + +msgid "Select the language" +msgstr "Selecione o idioma" + +msgid "Language" +msgstr "Idioma" + +msgid "*" +msgstr "*" + +msgid "The uploads are still ongoing" +msgstr "Os envios ainda estão em andamento" + +msgid "Stop them and continue anyway?" +msgstr "Para-los e continuar mesmo assim?" + +msgid "Ongoing uploads" +msgstr "Envios em andamento" + +msgid "Select a G-code file:" +msgstr "Selecione um arquivo G-code:" + +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Não foi possível baixar da URL. A pasta de destino não está definida. Por " +"favor, escolha a pasta de destino no Assistente de Configuração." + +msgid "Import File" +msgstr "Importar Arquivo" + +msgid "Choose files" +msgstr "Escolher arquivos" + +msgid "New Folder" +msgstr "Nova Pasta" + +msgid "Open" +msgstr "Abrir" + +msgid "Rename" +msgstr "Renomear" + +msgid "Orca Slicer GUI initialization failed" +msgstr "Falha na inicialização da interface do Orca Slicer" + +#, boost-format +msgid "Fatal error, exception catched: %1%" +msgstr "Erro fatal, exceção capturada: %1%" + +msgid "Quality" +msgstr "Qualidade" + +msgid "Shell" +msgstr "Parede" + +msgid "Infill" +msgstr "Preenchimento" + +msgid "Support" +msgstr "Suporte" + +msgid "Flush options" +msgstr "Opções de purga" + +msgid "Speed" +msgstr "Velocidade" + +msgid "Strength" +msgstr "Resistência" + +msgid "Top Solid Layers" +msgstr "Camadas Sólidas Superiores" + +msgid "Top Minimum Shell Thickness" +msgstr "Espessura Mínima da Parede Superior" + +msgid "Bottom Solid Layers" +msgstr "Camadas Sólidas Inferiores" + +msgid "Bottom Minimum Shell Thickness" +msgstr "Espessura Mínima da Parede Inferior" + +msgid "Ironing" +msgstr "Passar ferro" + +msgid "Fuzzy Skin" +msgstr "Textura Fuzzy" + +msgid "Extruders" +msgstr "Extrusoras" + +msgid "Extrusion Width" +msgstr "Largura da Extrusão" + +msgid "Wipe options" +msgstr "Opções de limpeza" + +msgid "Bed adhension" +msgstr "Adesão à Mesa" + +msgid "Add part" +msgstr "Adicionar Peça" + +msgid "Add negative part" +msgstr "Adicionar Peça Negativa" + +msgid "Add modifier" +msgstr "Adicionar Modificador" + +msgid "Add support blocker" +msgstr "Adicionar Bloqueador de Suporte" + +msgid "Add support enforcer" +msgstr "Adicionar Reforço de Suporte" + +msgid "Add text" +msgstr "Adicionar Texto" + +msgid "Add negative text" +msgstr "Adicionar Texto Negativo" + +msgid "Add text modifier" +msgstr "Adicionar Modificador de Texto" + +msgid "Add SVG part" +msgstr "Adicionar Peça SVG" + +msgid "Add negative SVG" +msgstr "Adicionar SVG Negativo" + +msgid "Add SVG modifier" +msgstr "Adicionar Modificador SVG" + +msgid "Select settings" +msgstr "Selecionar Configurações" + +msgid "Hide" +msgstr "Ocultar" + +msgid "Show" +msgstr "Mostrar" + +msgid "Del" +msgstr "Apagar" + +msgid "Delete the selected object" +msgstr "Apagar o objeto selecionado" + +msgid "Load..." +msgstr "Carregar..." + +msgid "Cube" +msgstr "Cubo" + +msgid "Cylinder" +msgstr "Cilindro" + +msgid "Cone" +msgstr "Cone" + +msgid "Disc" +msgstr "Disco" + +msgid "Torus" +msgstr "Toro" + +msgid "Orca Cube" +msgstr "Cubo Orca" + +msgid "3DBenchy" +msgstr "3DBenchy" + +msgid "Autodesk FDM Test" +msgstr "Teste Autodesk FDM" + +msgid "Voron Cube" +msgstr "Cubo Voron" + +msgid "Stanford Bunny" +msgstr "Stanford Bunny" + +msgid "Orca String Hell" +msgstr "Orca String Hell" + +msgid "" +"This model features text embossment on the top surface. For optimal results, " +"it is advisable to set the 'One Wall Threshold(min_width_top_surface)' to 0 " +"for the 'Only One Wall on Top Surfaces' to work best.\n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" +"Este modelo possui texto em alto relevo na superfície superior. Para obter " +"os melhores resultados, é aconselhável definir o 'Limiar de perímetro " +"único'\n" +" (min_width_top_surface)' como 0 para que 'Apenas uma Parede nas Superfícies " +"Superiores' funcione melhor.\n" +"Sim - Alterar essas configurações automaticamente\n" +"Não - Não alterar essas configurações para mim" + +msgid "Text" +msgstr "Texto" + +msgid "Height range Modifier" +msgstr "Modificador em altura" + +msgid "Add settings" +msgstr "Adicionar Configurações" + +msgid "Change type" +msgstr "Alterar tipo" + +msgid "Set as an individual object" +msgstr "Definir como objeto individual" + +msgid "Set as individual objects" +msgstr "Definir como objetos individuais" + +msgid "Fill bed with copies" +msgstr "Preencher a mesa com cópias" + +msgid "Fill the remaining area of bed with copies of the selected object" +msgstr "Preencher a área restante da mesa com cópias do objeto selecionado" + +msgid "Printable" +msgstr "Imprimível" + +msgid "Fix model" +msgstr "Corrigir modelo" + +msgid "Export as one STL" +msgstr "Exportar como um STL" + +msgid "Export as STLs" +msgstr "Exportar como STLs" + +msgid "Reload from disk" +msgstr "Recarregar do disco" + +msgid "Reload the selected parts from disk" +msgstr "Recarregar as peças selecionadas do disco" + +msgid "Replace with STL" +msgstr "Substituir por STL" + +msgid "Replace the selected part with new STL" +msgstr "Substituir a peça selecionada por um novo STL" + +msgid "Change filament" +msgstr "Alterar filamento" + +msgid "Set filament for selected items" +msgstr "Definir filamento para itens selecionados" + +msgid "Default" +msgstr "Padrão" + +#, c-format, boost-format +msgid "Filament %d" +msgstr "Filamento %d" + +msgid "current" +msgstr "atual" + +msgid "Scale to build volume" +msgstr "Dimensionar para o volume de impressão" + +msgid "Scale an object to fit the build volume" +msgstr "Dimensionar um objeto para caber no volume de impressão" + +msgid "Flush Options" +msgstr "Opções de Purga" + +msgid "Flush into objects' infill" +msgstr "Purgar no preenchimento dos objetos" + +msgid "Flush into this object" +msgstr "Purgar neste objeto" + +msgid "Flush into objects' support" +msgstr "Purgar nos suportes dos objetos" + +msgid "Edit in Parameter Table" +msgstr "Editar na Tabela de Parâmetros" + +msgid "Convert from inch" +msgstr "Converter de polegada" + +msgid "Restore to inch" +msgstr "Restaurar para polegadas" + +msgid "Convert from meter" +msgstr "Converter de metro" + +msgid "Restore to meter" +msgstr "Restaurar para metros" + +msgid "Assemble" +msgstr "Montar" + +msgid "Assemble the selected objects to an object with multiple parts" +msgstr "Montar os objetos selecionados em um objeto com várias peças" + +msgid "Assemble the selected objects to an object with single part" +msgstr "Montar os objetos selecionados em um objeto com uma única peça" + +msgid "Mesh boolean" +msgstr "Operações booleanas" + +msgid "Mesh boolean operations including union and subtraction" +msgstr "Operações booleanas incluindo união e subtração" + +msgid "Along X axis" +msgstr "Ao longo do eixo X" + +msgid "Mirror along the X axis" +msgstr "Espelhar ao longo do eixo X" + +msgid "Along Y axis" +msgstr "Ao longo do eixo Y" + +msgid "Mirror along the Y axis" +msgstr "Espelhar ao longo do eixo Y" + +msgid "Along Z axis" +msgstr "Ao longo do eixo Z" + +msgid "Mirror along the Z axis" +msgstr "Espelhar ao longo do eixo Z" + +msgid "Mirror object" +msgstr "Espelhar objeto" + +msgid "Edit text" +msgstr "Editar Texto" + +msgid "Ability to change text, font, size, ..." +msgstr "Capacidade de alterar texto, fonte, tamanho, ..." + +msgid "Edit SVG" +msgstr "Editar SVG" + +msgid "Change SVG source file, projection, size, ..." +msgstr "Alterar arquivo fonte SVG, projeção, tamanho, ..." + +msgid "Invalidate cut info" +msgstr "Invalidar informações de corte" + +msgid "Add Primitive" +msgstr "Adicionar Primitivo" + +msgid "Add Handy models" +msgstr "Adicionar Modelos Úteis" + +msgid "Add Models" +msgstr "Adicionar Modelos" + +msgid "Show Labels" +msgstr "Mostrar Etiquetas" + +msgid "To objects" +msgstr "Para Objetos" + +msgid "Split the selected object into multiple objects" +msgstr "Dividir o objeto selecionado em vários objetos" + +msgid "To parts" +msgstr "Para Peças" + +msgid "Split the selected object into multiple parts" +msgstr "Dividir o objeto selecionado em várias peças" + +msgid "Split" +msgstr "Dividir" + +msgid "Split the selected object" +msgstr "Dividir o objeto selecionado" + +msgid "Auto orientation" +msgstr "Orientação Automática" + +msgid "Auto orient the object to improve print quality." +msgstr "" +"Orientar automaticamente o objeto para melhorar a qualidade de impressão." + +msgid "Split the selected object into mutiple objects" +msgstr "Dividir o objeto selecionado em vários objetos" + +msgid "Split the selected object into mutiple parts" +msgstr "Dividir o objeto selecionado em várias peças" + +msgid "Select All" +msgstr "Selecionar Tudo" + +msgid "select all objects on current plate" +msgstr "selecionar todos os objetos na mesa atual" + +msgid "Delete All" +msgstr "Apagar Tudo" + +msgid "delete all objects on current plate" +msgstr "apagar todos os objetos na mesa atual" + +msgid "Arrange" +msgstr "Organizar" + +msgid "arrange current plate" +msgstr "organizar mesa atual" + +msgid "Reload All" +msgstr "Recarregar Tudo" + +msgid "reload all from disk" +msgstr "Recarregar tudo do disco" + +msgid "Auto Rotate" +msgstr "Auto-orientação" + +msgid "auto rotate current plate" +msgstr "girar automaticamente a mesa atual" + +msgid "Delete Plate" +msgstr "Apagar Mesa" + +msgid "Remove the selected plate" +msgstr "Remover a mesa selecionada" + +msgid "Clone" +msgstr "Clonar" + +msgid "Simplify Model" +msgstr "Simplificar Modelo" + +msgid "Center" +msgstr "Centralizar" + +msgid "Edit Process Settings" +msgstr "Editar Configurações de Processo" + +msgid "Edit print parameters for a single object" +msgstr "Editar parâmetros de impressão para um único objeto" + +msgid "Change Filament" +msgstr "Mudar Filamento" + +msgid "Set Filament for selected items" +msgstr "Definir Filamento para itens selecionados" + +msgid "Unlock" +msgstr "Desbloquear" + +msgid "Lock" +msgstr "Bloquear" + +msgid "Edit Plate Name" +msgstr "Editar Nome da Mesa" + +msgid "Name" +msgstr "Nome" + +msgid "Fila." +msgstr "Fila." + +#, c-format, boost-format +msgid "%1$d error repaired" +msgid_plural "%1$d errors repaired" +msgstr[0] "%1$d erro reparado" +msgstr[1] "%1$d erros reparados" + +#, c-format, boost-format +msgid "Error: %1$d non-manifold edge." +msgid_plural "Error: %1$d non-manifold edges." +msgstr[0] "Erro: %1$d aresta não-manifold." +msgstr[1] "Erro: %1$d arestas não-manifold." + +msgid "Remaining errors" +msgstr "Erros restantes" + +#, c-format, boost-format +msgid "%1$d non-manifold edge" +msgid_plural "%1$d non-manifold edges" +msgstr[0] "%1$d aresta não-manifold" +msgstr[1] "%1$d arestas não-manifold" + +msgid "Right click the icon to fix model object" +msgstr "Clique com o botão direito no ícone para corrigir o objeto do modelo" + +msgid "Right button click the icon to drop the object settings" +msgstr "" +"Clique com o botão direito no ícone para descartar as configurações do objeto" + +msgid "Click the icon to reset all settings of the object" +msgstr "Clique no ícone para redefinir todas as configurações do objeto" + +msgid "Right button click the icon to drop the object printable property" +msgstr "" +"Clique com o botão direito no ícone para descartar a propriedade imprimível " +"do objeto" + +msgid "Click the icon to toggle printable property of the object" +msgstr "Clique no ícone para alternar a propriedade imprimível do objeto" + +msgid "Click the icon to edit support painting of the object" +msgstr "Clique no ícone para editar a pintura de suporte do objeto" + +msgid "Click the icon to edit color painting of the object" +msgstr "Clique no ícone para editar a pintura de cor do objeto" + +msgid "Click the icon to shift this object to the bed" +msgstr "Clique no ícone para mover este objeto para a base" + +msgid "Loading file" +msgstr "Carregando arquivo" + +msgid "Error!" +msgstr "Erro!" + +msgid "Failed to get the model data in the current file." +msgstr "Falha ao obter os dados do modelo no arquivo atual." + +msgid "Generic" +msgstr "Genérico" + +msgid "Add Modifier" +msgstr "Adicionar Modificador" + +msgid "Switch to per-object setting mode to edit modifier settings." +msgstr "Mude para o modo de configuração por objeto para editar modificadores." + +msgid "" +"Switch to per-object setting mode to edit process settings of selected " +"objects." +msgstr "" +"Mude para o modo de configuração por objeto para editar processos dos " +"objetos selecionados." + +msgid "Delete connector from object which is a part of cut" +msgstr "Excluir conector do objeto que é parte do corte" + +msgid "Delete solid part from object which is a part of cut" +msgstr "Excluir peça sólida do objeto que é peça do corte" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "Excluir volume negativo do objeto que é parte do corte" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" +"Para salvar a correspondência de corte, você pode excluir todos os " +"conectores de todos os objetos relacionados." + +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 "" +"Esta ação irá quebrar a correspondência de corte.\n" +"Depois disso, a consistência do modelo não pode ser garantida.\n" +"\n" +"Para manipular peças sólidas ou volumes negativos, você deve invalidar as " +"informações de corte primeiro." + +msgid "Delete all connectors" +msgstr "Excluir todos os conectores" + +msgid "Deleting the last solid part is not allowed." +msgstr "Não é permitido excluir a última peça sólida." + +msgid "The target object contains only one part and can not be splited." +msgstr "O objeto de destino contém apenas uma peça e não pode ser dividido." + +msgid "Assembly" +msgstr "Montagem" + +msgid "Cut Connectors information" +msgstr "Informação de Conectores de Corte" + +msgid "Object manipulation" +msgstr "Manipulação de objeto" + +msgid "Group manipulation" +msgstr "Manipulação de grupo" + +msgid "Object Settings to modify" +msgstr "Configurações de objeto para modificar" + +msgid "Part Settings to modify" +msgstr "Configurações de peça para modificar" + +msgid "Layer range Settings to modify" +msgstr "Configurações de Intervalo de Camada para modificar" + +msgid "Part manipulation" +msgstr "Manipulação de peça" + +msgid "Instance manipulation" +msgstr "Manipulação de instância" + +msgid "Height ranges" +msgstr "Intervalos de altura" + +msgid "Settings for height range" +msgstr "Configurações para intervalo de altura" + +msgid "Layer" +msgstr "Camada" + +msgid "Selection conflicts" +msgstr "Conflitos de seleção" + +msgid "" +"If first selected item is an object, the second one should also be object." +msgstr "" +"Se o primeiro item selecionado for um objeto, o segundo também deve ser um " +"objeto." + +msgid "" +"If first selected item is a part, the second one should be part in the same " +"object." +msgstr "" +"Se o primeiro item selecionado for uma peça, o segundo deve ser uma peça no " +"mesmo objeto." + +msgid "The type of the last solid object part is not to be changed." +msgstr "O tipo da última peça do objeto sólido não deve ser alterado." + +msgid "Negative Part" +msgstr "Peça Negativa" + +msgid "Support Blocker" +msgstr "Bloqueador de Suporte" + +msgid "Support Enforcer" +msgstr "Reforço de Suporte" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Choose part type" +msgstr "Escolha o tipo de peça" + +msgid "Enter new name" +msgstr "Digite um novo nome" + +msgid "Renaming" +msgstr "Renomeando" + +msgid "Following model object has been repaired" +msgid_plural "Following model objects have been repaired" +msgstr[0] "O seguinte objeto do modelo foi reparado" +msgstr[1] "Os seguintes objetos do modelo foram reparados" + +msgid "Failed to repair folowing model object" +msgid_plural "Failed to repair folowing model objects" +msgstr[0] "Falha ao reparar o seguinte objeto do modelo" +msgstr[1] "Falha ao reparar os seguintes objetos do modelo" + +msgid "Repairing was canceled" +msgstr "A reparação foi cancelada" + +msgid "Additional process preset" +msgstr "Preset de processo adicional" + +msgid "Remove parameter" +msgstr "Remover parâmetro" + +msgid "to" +msgstr "para" + +msgid "Remove height range" +msgstr "Remover intervalo de altura" + +msgid "Add height range" +msgstr "Adicionar intervalo de altura" + +msgid "Invalid numeric." +msgstr "Número inválido." + +msgid "one cell can only be copied to one or multiple cells in the same column" +msgstr "" +"uma célula só pode ser copiada para uma ou várias células na mesma coluna" + +msgid "multiple cells copy is not supported" +msgstr "a cópia de múltiplas células não é suportada" + +msgid "Outside" +msgstr "Fora da Mesa" + +msgid "Layer height" +msgstr "Altura da camada" + +msgid "Wall loops" +msgstr "Perímetros" + +msgid "Infill density(%)" +msgstr "Densidade do preenchimento(%)" + +msgid "Auto Brim" +msgstr "Borda automática" + +msgid "Mouse ear" +msgstr "Orelha de rato" + +msgid "Outer brim only" +msgstr "Somente borda externa" + +msgid "Inner brim only" +msgstr "Somente borda interna" + +msgid "Outer and inner brim" +msgstr "Borda externa e interna" + +msgid "No-brim" +msgstr "Sem borda" + +msgid "Outer wall speed" +msgstr "Velocidade do perímetro externo" + +msgid "Plate" +msgstr "Mesa" + +msgid "Brim" +msgstr "Borda" + +msgid "Object/Part Setting" +msgstr "Configuração de Objeto/Peça" + +msgid "Reset parameter" +msgstr "Redefinir parâmetro" + +msgid "Multicolor Print" +msgstr "Impressão Multicolorida" + +msgid "Line Type" +msgstr "Tipo de Linha" + +msgid "More" +msgstr "Mais" + +msgid "Open Preferences." +msgstr "Abrir Preferências." + +msgid "Open next tip." +msgstr "Abrir próxima dica." + +msgid "Open Documentation in web browser." +msgstr "Abrir Documentação no navegador." + +msgid "Color" +msgstr "Cor" + +msgid "Pause" +msgstr "Pausa" + +msgid "Template" +msgstr "Modelo" + +msgid "Custom" +msgstr "Personalizado" + +msgid "Pause:" +msgstr "Pausa:" + +msgid "Custom Template:" +msgstr "Modelo Personalizado:" + +msgid "Custom G-code:" +msgstr "G-Code Personalizado:" + +msgid "Custom G-code" +msgstr "G-Code Personalizado" + +msgid "Enter Custom G-code used on current layer:" +msgstr "Insira o G-code personalizado usado na camada atual:" + +msgid "Jump to Layer" +msgstr "Ir para a Camada" + +msgid "Please enter the layer number" +msgstr "Por favor, insira o número da camada" + +msgid "Add Pause" +msgstr "Adicionar Pausa" + +msgid "Insert a pause command at the beginning of this layer." +msgstr "Inserir um comando de pausa no início desta camada." + +msgid "Add Custom G-code" +msgstr "Adicionar G-Code Personalizado" + +msgid "Insert custom G-code at the beginning of this layer." +msgstr "Inserir G-Code personalizado no início desta camada." + +msgid "Add Custom Template" +msgstr "Adicionar Modelo Personalizado" + +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "Inserir modelo de G-Code personalizado no início desta camada." + +msgid "Filament " +msgstr "Filamento " + +msgid "Change filament at the beginning of this layer." +msgstr "Trocar o filamento no início desta camada." + +msgid "Delete Pause" +msgstr "Excluir Pausa" + +msgid "Delete Custom Template" +msgstr "Excluir Modelo Personalizado" + +msgid "Edit Custom G-code" +msgstr "Editar G-Code Personalizado" + +msgid "Delete Custom G-code" +msgstr "Excluir G-Code Personalizado" + +msgid "Delete Filament Change" +msgstr "Excluir Troca de Filamento" + +msgid "No printer" +msgstr "Sem impressora" + +msgid "..." +msgstr "..." + +msgid "Failed to connect to the server" +msgstr "Falha ao conectar ao servidor" + +msgid "Check the status of current system services" +msgstr "Verificar o estado dos serviços de sistema atuais" + +msgid "code" +msgstr "código" + +msgid "Failed to connect to cloud service" +msgstr "Falha ao conectar ao serviço de nuvem" + +msgid "Please click on the hyperlink above to view the cloud service status" +msgstr "" +"Por favor, clique no link acima para visualizar o status do serviço de nuvem" + +msgid "Failed to connect to the printer" +msgstr "Falha ao conectar à impressora" + +msgid "Connection to printer failed" +msgstr "Falha na conexão com a impressora" + +msgid "Please check the network connection of the printer and Orca." +msgstr "Por favor, verifique a conexão de rede da impressora e do Orca." + +msgid "Connecting..." +msgstr "Conectando..." + +msgid "?" +msgstr "?" + +msgid "/" +msgstr "/" + +msgid "Empty" +msgstr "Vazio" + +msgid "AMS" +msgstr "AMS" + +msgid "Auto Refill" +msgstr "Recarga Automática" + +msgid "AMS not connected" +msgstr "AMS não conectado" + +msgid "Load" +msgstr "Carregar" + +msgid "Unload" +msgstr "Descarregar" + +msgid "Ext Spool" +msgstr "Carretel Ext." + +msgid "Tips" +msgstr "Dicas" + +msgid "Guide" +msgstr "Guia" + +msgid "Retry" +msgstr "Tentar Novamente" + +msgid "Calibrating AMS..." +msgstr "Calibrando AMS..." + +msgid "A problem occurred during calibration. Click to view the solution." +msgstr "Ocorreu um problema durante a calibração. Clique para ver a solução." + +msgid "Calibrate again" +msgstr "Calibrar novamente" + +msgid "Cancel calibration" +msgstr "Cancelar calibração" + +msgid "Idling..." +msgstr "Em espera..." + +msgid "Heat the nozzle" +msgstr "Aquecer o bico" + +msgid "Cut filament" +msgstr "Cortar filamento" + +msgid "Pull back current filament" +msgstr "Retirar o filamento atual" + +msgid "Push new filament into extruder" +msgstr "Inserir novo filamento na extrusora" + +msgid "Purge old filament" +msgstr "Purgar filamento antigo" + +msgid "Feed Filament" +msgstr "Alimentar Filamento" + +msgid "Confirm extruded" +msgstr "Confirmar extrusão" + +msgid "Check filament location" +msgstr "Verificar localização do filamento" + +msgid "Grab new filament" +msgstr "Pegar novo filamento" + +msgid "" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filaments." +msgstr "" +"Escolha um slot AMS e pressione o botão \"Carregar\" ou \"Descarregar\" para " +"carregar ou descarregar automaticamente o filamento." + +msgid "Edit" +msgstr "Editar" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-arrange on these objects." +msgstr "" +"Todos os objetos selecionados estão na mesa bloqueada,\n" +"Não podemos fazer o auto-posicionamento nesses objetos." + +msgid "No arrangable objects are selected." +msgstr "Nenhum objeto disponível para posicionamento foi selecionado." + +msgid "" +"This plate is locked,\n" +"We can not do auto-arrange on this plate." +msgstr "" +"Esta mesa está bloqueada,\n" +"Não podemos fazer o auto-posicionamento nesta mesa." + +msgid "Arranging..." +msgstr "Organizando..." + +msgid "Arranging" +msgstr "Organizando" + +msgid "Arranging canceled." +msgstr "Organização cancelada." + +msgid "" +"Arranging is done but there are unpacked items. Reduce spacing and try again." +msgstr "" +"A organização foi concluída, mas há itens desembalados. Reduza o espaçamento " +"e tente novamente." + +msgid "Arranging done." +msgstr "Organização concluída." + +msgid "" +"Arrange failed. Found some exceptions when processing object geometries." +msgstr "" +"Organização falhou. Encontrou algumas exceções ao processar geometrias de " +"objetos." + +#, c-format, boost-format +msgid "" +"Arrangement ignored the following objects which can't fit into a single " +"bed:\n" +"%s" +msgstr "" +"A organização ignorou os seguintes objetos que não podem caber em uma única " +"mesa:\n" +"%s" + +msgid "" +"All the selected objects are on the locked plate,\n" +"We can not do auto-orient on these objects." +msgstr "" +"Todos os objetos selecionados estão na mesa bloqueada,\n" +"Não podemos fazer a auto-orientação nesses objetos." + +msgid "" +"This plate is locked,\n" +"We can not do auto-orient on this plate." +msgstr "" +"Esta mesa está bloqueada,\n" +"Não podemos fazer a auto-orientação nesta mesa." + +msgid "Orienting..." +msgstr "Orientando..." + +msgid "Orienting" +msgstr "Orientando" + +msgid "Orienting canceled." +msgstr "Orientação cancelada." + +msgid "Filling" +msgstr "Preenchendo" + +msgid "Bed filling canceled." +msgstr "Preenchimento da mesa cancelado." + +msgid "Bed filling done." +msgstr "Preenchimento da mesa concluído." + +msgid "Searching for optimal orientation" +msgstr "Buscando melhor orientação" + +msgid "Orientation search canceled." +msgstr "Busca de orientação cancelada." + +msgid "Orientation found." +msgstr "Orientação encontrada." + +msgid "Logging in" +msgstr "Conectando-se" + +msgid "Login failed" +msgstr "Falha no login" + +msgid "Please check the printer network connection." +msgstr "Por favor, verifique a conexão de rede da impressora." + +msgid "Abnormal print file data. Please slice again." +msgstr "Dados de arquivo de impressão anormais. Por favor, fatie novamente." + +msgid "Task canceled." +msgstr "Tarefa cancelada." + +msgid "Upload task timed out. Please check the network status and try again." +msgstr "" +"O tempo para envio da tarefa expirou. Verifique o estado da rede e tente " +"novamente." + +msgid "Cloud service connection failed. Please try again." +msgstr "Falha na conexão com o serviço de nuvem. Por favor, tente novamente." + +msgid "Print file not found. please slice again." +msgstr "Arquivo de impressão não encontrado. Por favor, fatie novamente." + +msgid "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." +msgstr "" +"O arquivo de impressão excede o tamanho máximo permitido (1GB). Por favor, " +"simplifique o modelo e fatie novamente." + +msgid "Failed to send the print job. Please try again." +msgstr "Falha ao enviar o trabalho de impressão. Por favor, tente novamente." + +msgid "Failed to upload file to ftp. Please try again." +msgstr "Falha ao enviar o arquivo via FTP. Por favor, tente novamente." + +msgid "" +"Check the current status of the bambu server by clicking on the link above." +msgstr "Verifique o estado atual do servidor Bambu clicando no link acima." + +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"O tamanho do arquivo de impressão é muito grande. Por favor, ajuste o " +"tamanho do arquivo e tente novamente." + +msgid "Print file not found, Please slice it again and send it for printing." +msgstr "" +"Arquivo de impressão não encontrado. Por favor, fatie-o novamente e envie " +"para impressão." + +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Falha ao enviar o arquivo de impressão via FTP. Por favor, verifique o " +"estado da rede e tente novamente." + +msgid "Sending print job over LAN" +msgstr "Enviando trabalho de impressão via LAN" + +msgid "Sending print job through cloud service" +msgstr "Enviando trabalho de impressão através do serviço de nuvem" + +msgid "Print task sending times out." +msgstr "O envio da tarefa de impressão expirou." + +msgid "Service Unavailable" +msgstr "Serviço Indisponível" + +msgid "Unkown Error." +msgstr "Erro Desconhecido." + +msgid "Sending print configuration" +msgstr "Enviando configuração de impressão" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "" +"Enviado com sucesso. Irá saltar automaticamente para a página do dispositivo " +"em %ss" + +#, c-format, boost-format +msgid "Successfully sent. Will automatically jump to the next page in %ss" +msgstr "" +"Enviado com sucesso. Irá saltar automaticamente para a próxima página em %ss" + +msgid "An SD card needs to be inserted before printing via LAN." +msgstr "Um cartão SD precisa ser inserido antes de imprimir via LAN." + +msgid "Sending gcode file over LAN" +msgstr "Enviando arquivo de G-Code via LAN" + +msgid "Sending gcode file to sdcard" +msgstr "Enviando arquivo de G-Code para o cartão SD" + +#, c-format, boost-format +msgid "Successfully sent. Close current page in %s s" +msgstr "Enviado com sucesso. Feche a página atual em %s s" + +msgid "An SD card needs to be inserted before sending to printer." +msgstr "Um cartão SD precisa ser inserido antes de enviar para a impressora." + +msgid "Importing SLA archive" +msgstr "Importando arquivo SLA" + +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"O arquivo SLA não contém nenhum perfil. Por favor, ative alguns perfis de " +"impressora SLA antes de importar esse arquivo SLA." + +msgid "Importing canceled." +msgstr "Importação cancelada." + +msgid "Importing done." +msgstr "Importação concluída." + +msgid "" +"The imported SLA archive did not contain any presets. The current SLA " +"presets were used as fallback." +msgstr "" +"O arquivo SLA importado não contém nenhum perfil. Os perfis SLA atuais foram " +"usados como alternativa." + +msgid "You cannot load SLA project with a multi-part object on the bed" +msgstr "" +"Você não pode carregar um projeto SLA com um objeto de várias peças na mesa" + +msgid "Please check your object list before preset changing." +msgstr "" +"Por favor, verifique sua lista de objetos antes de mudar a configuração " +"predefinida." + +msgid "Attention!" +msgstr "Atenção!" + +msgid "Downloading" +msgstr "Baixando" + +msgid "Download failed" +msgstr "Falha no download" + +msgid "Cancelled" +msgstr "Cancelado" + +msgid "Install successfully." +msgstr "Instalação concluída com sucesso." + +msgid "Installing" +msgstr "Instalando" + +msgid "Install failed" +msgstr "Falha na instalação" + +msgid "Portions copyright" +msgstr "Partes com direitos autorais" + +msgid "Copyright" +msgstr "Direitos autorais" + +msgid "License" +msgstr "Licença" + +msgid "Orca Slicer is licensed under " +msgstr "O Orca Slicer é licenciado sob " + +msgid "GNU Affero General Public License, version 3" +msgstr "Licença Pública Geral Affero GNU, versão 3" + +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer é baseado no PrusaSlicer e BambuStudio" + +msgid "Libraries" +msgstr "Bibliotecas" + +msgid "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" +msgstr "" +"Este software utiliza componentes open source cujos direitos autorais e " +"outros direitos de propriedade pertencem aos seus respectivos proprietários" + +#, c-format, boost-format +msgid "About %s" +msgstr "Sobre %s" + +msgid "Orca Slicer " +msgstr "Orca Slicer " + +msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." +msgstr "OrcaSlicer é baseado no BambuStudio, PrusaSlicer e SuperSlicer." + +msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." +msgstr "BambuStudio é originalmente baseado no PrusaSlicer pela PrusaResearch." + +msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "" +"PrusaSlicer é originalmente baseado no Slic3r por Alessandro Ranellucci." + +msgid "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." +msgstr "" +"Slic3r foi criado por Alessandro Ranellucci com a ajuda de muitos outros " +"colaboradores." + +msgid "Version" +msgstr "Versão" + +msgid "AMS Materials Setting" +msgstr "Configuração de Materiais AMS" + +msgid "Confirm" +msgstr "Confirmar" + +msgid "Close" +msgstr "Fechar" + +msgid "Colour" +msgstr "Cor" + +msgid "" +"Nozzle\n" +"Temperature" +msgstr "" +"Bico\n" +"Temperatura" + +msgid "max" +msgstr "máx" + +msgid "min" +msgstr "min." + +#, boost-format +msgid "The input value should be greater than %1% and less than %2%" +msgstr "O valor de entrada deve ser maior que %1% e menor que %2%" + +msgid "SN" +msgstr "SN" + +msgid "Setting AMS slot information while printing is not supported" +msgstr "" +"A configuração das informações do slot AMS durante a impressão não é " +"suportada" + +msgid "Factors of Flow Dynamics Calibration" +msgstr "Fatores de Calibração de Dinâmica de Fluxo" + +msgid "PA Profile" +msgstr "Perfil PA" + +msgid "Factor K" +msgstr "Fator K" + +msgid "Factor N" +msgstr "Fator N" + +msgid "Setting Virtual slot information while printing is not supported" +msgstr "" +"A configuração de informações do slot virtual durante a impressão não é " +"suportada" + +msgid "Are you sure you want to clear the filament information?" +msgstr "Tem certeza de que deseja limpar as informações do filamento?" + +msgid "You need to select the material type and color first." +msgstr "Você precisa selecionar o tipo e a cor do material primeiro." + +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "" + +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "" + +msgid "Other Color" +msgstr "Outra Cor" + +msgid "Custom Color" +msgstr "Cor Personalizada" + +msgid "Dynamic flow calibration" +msgstr "Calibração dinâmica do fluxo" + +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 "" +"A temperatura do bico e a fluxo volumétrico máximo afetarão os resultados da " +"calibração. Preencha os mesmos valores que a impressão atual. Eles podem ser " +"preenchidos automaticamente selecionando um perfil de filamento." + +msgid "Nozzle Diameter" +msgstr "Diâmetro do bico" + +msgid "Bed Type" +msgstr "Tipo de Mesa" + +msgid "Nozzle temperature" +msgstr "Temperatura do bico" + +msgid "Bed Temperature" +msgstr "Temperatura da Mesa" + +msgid "Max volumetric speed" +msgstr "Fluxo volumétrico máximo" + +msgid "℃" +msgstr "°C" + +msgid "Bed temperature" +msgstr "Temperatura da mesa" + +msgid "mm³" +msgstr "mm3" + +msgid "Start calibration" +msgstr "Iniciar calibração" + +msgid "Next" +msgstr "Próximo" + +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 "" +"Calibração concluída. Por favor, encontre a linha de extrusão mais uniforme " +"na sua mesa aquecida como na imagem abaixo, e preencha o valor do seu lado " +"esquerdo na caixa de entrada do fator K." + +msgid "Save" +msgstr "Salvar" + +msgid "Last Step" +msgstr "Última Etapa" + +msgid "Example" +msgstr "Exemplo" + +#, c-format, boost-format +msgid "Calibrating... %d%%" +msgstr "Calibrando... %d%%" + +msgid "Calibration completed" +msgstr "Calibração concluída" + +#, c-format, boost-format +msgid "%s does not support %s" +msgstr "%s não suporta %s" + +msgid "Dynamic flow Calibration" +msgstr "Calibração de Fluxo Dinâmico" + +msgid "Step" +msgstr "Passo" + +msgid "AMS Slots" +msgstr "Espaços do AMS" + +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" +"Nota: Apenas os espaços do AMS carregados com o mesmo tipo de material podem " +"ser selecionadas." + +msgid "Enable AMS" +msgstr "Ativar AMS" + +msgid "Print with filaments in the AMS" +msgstr "Imprimir com filamentos no AMS" + +msgid "Disable AMS" +msgstr "Desativar AMS" + +msgid "Print with the filament mounted on the back of chassis" +msgstr "Imprimir com o filamento montado na parte de trás do chassi" + +msgid "Current Cabin humidity" +msgstr "Umidade da cabine atual" + +msgid "" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." +msgstr "" +"Por favor, mude o dessecante quando estiver muito molhado. O indicador pode " +"não representar com precisão nos casos a seguir: quando a tampa está aberta " +"ou quando o dessecante é trocado. Leva horas para absorver a umidade, baixas " +"temperaturas também atrasam o processo." + +msgid "" +"Config which AMS slot should be used for a filament used in the print job" +msgstr "" +"Configure qual espaço do AMS deve ser usado para um filamento usado no " +"trabalho de impressão" + +msgid "Filament used in this print job" +msgstr "Filamento usado neste trabalho de impressão" + +msgid "AMS slot used for this filament" +msgstr "Espaço do AMS usado para este filamento" + +msgid "Click to select AMS slot manually" +msgstr "Clique para selecionar o espaço do AMS" + +msgid "Do not Enable AMS" +msgstr "Não ativar AMS" + +msgid "Print using materials mounted on the back of the case" +msgstr "Imprimir usando materiais montados na parte de trás da caixa" + +msgid "Print with filaments in ams" +msgstr "Imprimir com filamentos no AMS" + +msgid "Print with filaments mounted on the back of the chassis" +msgstr "Imprimir com filamentos montados na parte de trás do chassi" + +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" +"Quando o material atual acabar, a impressora continuará a imprimir na " +"seguinte ordem." + +msgid "Group" +msgstr "Grupo" + +msgid "The printer does not currently support auto refill." +msgstr "A impressora atualmente não suporta recarga automática." + +msgid "" +"AMS filament backup is not enabled, please enable it in the AMS settings." +msgstr "" +"O backup de filamento do AMS não está ativado, por favor, ative-o nas " +"configurações do AMS." + +msgid "" +"If there are two identical filaments in AMS, AMS filament backup will be " +"enabled. \n" +"(Currently supporting automatic supply of consumables with the same brand, " +"material type, and color)" +msgstr "" +"Se houver dois filamentos idênticos no AMS, o backup de filamento do AMS " +"será ativado. \n" +"(Funciona atualmente com recarga automática de filamentos da mesma marca, " +"tipo de material e cor)" + +msgid "DRY" +msgstr "SECO" + +msgid "WET" +msgstr "MOLHADO" + +msgid "AMS Settings" +msgstr "Configurações do AMS" + +msgid "Insertion update" +msgstr "Atualização de inserção" + +msgid "" +"The AMS will automatically read the filament information when inserting a " +"new Bambu Lab filament. This takes about 20 seconds." +msgstr "" +"O AMS irá ler automaticamente as informações do filamento ao inserir um novo " +"filamento da Bambu Lab. Isso leva cerca de 20 segundos." + +msgid "" +"Note: if a new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." +msgstr "" +"Nota: se um novo filamento for inserido durante a impressão, o AMS não irá " +"ler automaticamente nenhuma informação até que a impressão seja concluída." + +msgid "" +"When inserting a new filament, the AMS will not automatically read its " +"information, leaving it blank for you to enter manually." +msgstr "" +"Ao inserir um novo filamento, o AMS não irá ler automaticamente suas " +"informações, deixando-o em branco para você inserir manualmente." + +msgid "Power on update" +msgstr "Atualização de inicialização" + +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 "" +"O AMS irá ler automaticamente as informações do filamento inserido na " +"inicialização. Levará cerca de 1 minuto. O processo de leitura irá girar as " +"bobinas de 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 "" +"O AMS não irá ler automaticamente informações do filamento inserido durante " +"a inicialização e continuará a usar as informações registradas antes do " +"último desligamento." + +msgid "Update remaining capacity" +msgstr "Atualizar capacidade 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 "" +"O AMS irá estimar a capacidade restante do filamento Bambu após as " +"informações do filamento serem atualizadas. Durante a impressão, a " +"capacidade restante será atualizada automaticamente." + +msgid "AMS filament backup" +msgstr "Backup de filamento do AMS" + +msgid "" +"AMS will continue to another spool with the same properties of filament " +"automatically when current filament runs out" +msgstr "" +"O AMS continuará para outra bobina com as mesmas propriedades do filamento " +"automaticamente quando o filamento atual acabar" + +msgid "Air Printing Detection" +msgstr "Detecção de Impressão Aérea" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detecta o entupimento e erosão de filamento, parando a impressão " +"imediatamente para conservar tempo e filamento." + +msgid "File" +msgstr "Arquivo" + +msgid "Calibration" +msgstr "Calibração" + +msgid "" +"Failed to download the plug-in. Please check your firewall settings and vpn " +"software, check and retry." +msgstr "" +"Falha ao baixar o plug-in. Verifique as configurações do seu firewall e " +"software vpn, verifique e tente novamente." + +msgid "" +"Failed to install the plug-in. Please check whether it is blocked or deleted " +"by anti-virus software." +msgstr "" +"Falha ao instalar o plug-in. Verifique se ele está bloqueado ou excluído " +"pelo software antivírus." + +msgid "click here to see more info" +msgstr "clique aqui para ver mais informações" + +msgid "Please home all axes (click " +msgstr "Por favor, mandar a origem todos os eixos (clique " + +msgid "" +") to locate the toolhead's position. This prevents device moving beyond the " +"printable boundary and causing equipment wear." +msgstr "" +") para localizar a posição da extrusora. Isso impede que o dispositivo se " +"mova além do limite imprimível e cause desgaste no equipamento." + +msgid "Go Home" +msgstr "Ir para Ínicio" + +msgid "" +"A error occurred. Maybe memory of system is not enough or it's a bug of the " +"program" +msgstr "" +"Ocorreu um erro. Talvez a memória do sistema não seja suficiente ou seja um " +"bug do programa" + +msgid "Please save project and restart the program. " +msgstr "Por favor, salve o projeto e reinicie o programa. " + +msgid "Processing G-Code from Previous file..." +msgstr "Processando G-Code do arquivo anterior..." + +msgid "Slicing complete" +msgstr "Fatiamento concluído" + +msgid "Access violation" +msgstr "Violação de acesso" + +msgid "Illegal instruction" +msgstr "Instrução ilegal" + +msgid "Divide by zero" +msgstr "Dividir por zero" + +msgid "Overflow" +msgstr "Estouro" + +msgid "Underflow" +msgstr "Subfluxo" + +msgid "Floating reserved operand" +msgstr "Operando flutuante reservado" + +msgid "Stack overflow" +msgstr "Estouro de pilha" + +msgid "Running post-processing scripts" +msgstr "Executando scripts de pós-processamento" + +msgid "Successfully executed post-processing script" +msgstr "Script de pós-processamento executado com êxito" + +msgid "Unknown error occured during exporting G-code." +msgstr "Ocorreu um erro desconhecido ao exportar G-code." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"A cópia do G-code temporário para o G-code de saída falhou. Talvez o cartão " +"SD esteja bloqueado?\n" +"Mensagem de erro: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"A cópia do G-code temporário para o G-code de saída falhou. Pode haver " +"problema com o dispositivo de destino, por favor, tente exportar novamente " +"ou usar outro dispositivo. O G-code de saída corrompido está em %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Renomear o G-code após copiar para a pasta destino selecionada falhou. O " +"caminho atual é %1%.tmp. Por favor, tente exportar novamente." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"A cópia do G-code temporário foi concluída, mas o código original em %1% não " +"pôde ser aberto durante a verificação da cópia. O G-gode de saída está em " +"%2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"A cópia do G-code temporário foi concluída, mas o código exportado não pôde " +"ser aberto durante a verificação da cópia. O G-code de saída está em %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Arquivo G-code exportado para %1%" + +msgid "Unknown error when export G-code." +msgstr "Erro desconhecido ao exportar G-Code." + +#, boost-format +msgid "" +"Failed to save gcode file.\n" +"Error message: %1%.\n" +"Source file %2%." +msgstr "" +"Falha ao salvar arquivo de G-Code.\n" +"Mensagem de erro: %1%.\n" +"Arquivo de origem %2%." + +msgid "Copying of the temporary G-code to the output G-code failed" +msgstr "Cópia do G-Code temporário para o G-Code de saída falhou" + +#, boost-format +msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "" +"Agendando o envio para `%1%`. Veja Janela -> Fila de Envio do Anfitrião de " +"Impressão" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Task Sending" +msgstr "Envio de tarefa" + +msgid "Task Sent" +msgstr "Tarefa Enviada" + +msgid "Edit multiple printers" +msgstr "Editar múltiplas impressoras" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "O número máximo de impressoras que podem ser selecionadas é %d" + +msgid "Offline" +msgstr "Desconectado" + +msgid "No task" +msgstr "Nenhuma tarefa" + +msgid "View" +msgstr "Visualizar" + +msgid "N/A" +msgstr "N/D" + +msgid "Edit Printers" +msgstr "Editar impressoras" + +msgid "Device Name" +msgstr "Nome do Dispositivo" + +msgid "Task Name" +msgstr "Nome da tarefa" + +msgid "Device Status" +msgstr "Status do dispositivo" + +msgid "Actions" +msgstr "Ações" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Por favor, selecione os dispositivos que você gostaria de gerenciar aqui " +"(até 6 dispositivos)" + +msgid "Add" +msgstr "Adicionar" + +msgid "Idle" +msgstr "Inativo" + +msgid "Printing" +msgstr "Imprimindo" + +msgid "Upgrading" +msgstr "Atualizando" + +msgid "Incompatible" +msgstr "Incompatível" + +msgid "syncing" +msgstr "sincronizando" + +msgid "Printing Finish" +msgstr "Impressão finalizada" + +msgid "Printing Failed" +msgstr "Falha na Impressão" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Preparar" + +msgid "Slicing" +msgstr "Fatiando" + +msgid "Pending" +msgstr "Pendente" + +msgid "Sending" +msgstr "Enviando" + +msgid "Sending Finish" +msgstr "Envio Finalizado" + +msgid "Sending Cancel" +msgstr "Cancelar Envio" + +msgid "Sending Failed" +msgstr "Falha no Envio" + +msgid "Print Success" +msgstr "Impressão Bem Sucedida" + +msgid "Print Failed" +msgstr "Impressão Falhou" + +msgid "Removed" +msgstr "Removido" + +msgid "Resume" +msgstr "Continuar" + +msgid "Stop" +msgstr "Parar" + +msgid "Task Status" +msgstr "Status da tarefa" + +msgid "Sent Time" +msgstr "Tempo de envio" + +msgid "There are no tasks to be sent!" +msgstr "Não há tarefas a enviar!" + +msgid "No historical tasks!" +msgstr "Nenhuma tarefa no histórico!" + +msgid "Loading..." +msgstr "Carregando..." + +msgid "No AMS" +msgstr "Nenhum AMS" + +msgid "Send to Multi-device" +msgstr "Enviar para multi-dispositivo" + +msgid "Preparing print job" +msgstr "Preparando trabalho de impressão" + +msgid "Abnormal print file data. Please slice again" +msgstr "Dados de arquivo de impressão anormais. Por favor, fatie novamente" + +msgid "There is no device available to send printing." +msgstr "Não há nenhum dispositivo disponível para enviar impressão." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "O número de impressoras em uso simultaneamente não pode ser igual a 0." + +msgid "Use External Spool" +msgstr "Usar Carretel Externo" + +msgid "Use AMS" +msgstr "Usar AMS" + +msgid "Select Printers" +msgstr "Selecionar impressoras" + +msgid "Ams Status" +msgstr "Status do AMS" + +msgid "Printing Options" +msgstr "Opções de Impressão" + +msgid "Bed Leveling" +msgstr "Nivelamento da mesa" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "Calibração de Fluxo Dinâmico" + +msgid "Send Options" +msgstr "Opções de envio" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"impressoras ao mesmo tempo. (Depende de quantos dispositivos podem ser " +"submetidos ao mesmo tempo.)" + +msgid "Wait" +msgstr "Aguarde" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minuto por cada lote.(Depende de quanto tempo leva para completar o " +"aquecimento.)" + +msgid "Send" +msgstr "Enviar" + +msgid "Name is invalid;" +msgstr "O nome é inválido;" + +msgid "illegal characters:" +msgstr "caracteres ilegais:" + +msgid "illegal suffix:" +msgstr "sufixo ilegal:" + +msgid "The name is not allowed to be empty." +msgstr "O nome não pode ficar vazio." + +msgid "The name is not allowed to start with space character." +msgstr "O nome não pode começar com um espaço." + +msgid "The name is not allowed to end with space character." +msgstr "O nome não pode terminar com um espaço." + +msgid "The name length exceeds the limit." +msgstr "O comprimento do nome excede o limite." + +msgid "Origin" +msgstr "Origem" + +msgid "Size in X and Y of the rectangular plate." +msgstr "Tamanho em X e Y da mesa retangular." + +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "" +"Distância da coordenada do G-Code 0,0 do canto frontal esquerdo do retângulo." + +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"Diâmetro da mesa de impressão. É assumido que a origem (0,0) está localizada " +"no centro." + +msgid "Rectangular" +msgstr "Retangular" + +msgid "Circular" +msgstr "Circular" + +msgid "Load shape from STL..." +msgstr "Carregar forma de STL..." + +msgid "Settings" +msgstr "Configurações" + +msgid "Texture" +msgstr "Textura" + +msgid "Remove" +msgstr "Remover" + +msgid "Not found:" +msgstr "Não encontrado:" + +msgid "Model" +msgstr "Modelo" + +msgid "Choose an STL file to import bed shape from:" +msgstr "Escolha um arquivo STL para importar a forma da mesa:" + +msgid "Invalid file format." +msgstr "Formato de arquivo inválido." + +msgid "Error! Invalid model" +msgstr "Erro! Modelo inválido" + +msgid "The selected file contains no geometry." +msgstr "O arquivo selecionado não contém geometria." + +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"O arquivo selecionado contém várias áreas disjuntas. Isso não é suportado." + +msgid "Choose a file to import bed texture from (PNG/SVG):" +msgstr "Escolha um arquivo para importar a textura da mesa (PNG/SVG):" + +msgid "Choose an STL file to import bed model from:" +msgstr "Escolha um arquivo STL para importar o modelo da mesa:" + +msgid "Bed Shape" +msgstr "Forma da Mesa" + +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"A temperatura mínima recomendada é inferior a 190 graus ou a temperatura " +"máxima recomendada é superior a 300 graus.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"A temperatura mínima recomendada não pode ser superior à temperatura máxima " +"recomendada.\n" + +msgid "Please check.\n" +msgstr "Por favor, verifique.\n" + +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 "" +"O bico pode ficar bloqueado quando a temperatura estiver fora da faixa " +"recomendada.\n" +"Por favor, certifique-se de usar a temperatura para imprimir.\n" +"\n" + +#, c-format, boost-format +msgid "" +"Recommended nozzle temperature of this filament type is [%d, %d] degree " +"centigrade" +msgstr "" +"A temperatura do bico recomendada para este tipo de filamento é [%d, %d] " +"graus centígrados" + +msgid "" +"Too small max volumetric speed.\n" +"Reset to 0.5" +msgstr "" +"Fluxo volumétrico máximo está muito baixo.\n" +"Redefinir para 0,5" + +#, c-format, boost-format +msgid "" +"Current chamber temperature is higher than the material's safe temperature," +"it may result in material softening and clogging.The maximum safe " +"temperature for the material is %d" +msgstr "" +"A temperatura da câmara atual está mais alta do que a temperatura segura do " +"material, pode resultar em amolecimento e entupimento do material. A " +"temperatura máxima segura para o material é %d" + +msgid "" +"Too small layer height.\n" +"Reset to 0.2" +msgstr "" +"Altura da camada muito pequena.\n" +"Redefinir para 0,2" + +msgid "" +"Too small ironing spacing.\n" +"Reset to 0.1" +msgstr "" +"Espaçamento de alisamento muito pequeno.\n" +"Redefinir para 0,1" + +msgid "" +"Zero initial layer height is invalid.\n" +"\n" +"The first layer height will be reset to 0.2." +msgstr "" +"Altura inicial da camada zero é inválida.\n" +"\n" +"A altura da primeira camada será redefinida para 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 "" +"Esta configuração é usada apenas para ajustar o tamanho do modelo com um " +"valor pequeno em alguns casos.\n" +"Por exemplo, quando o tamanho do modelo tem um pequeno erro e é difícil de " +"ser montado.\n" +"Para ajustes de tamanho grandes, por favor, use a função de escala do " +"modelo.\n" +"\n" +"O valor será redefinido para 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 "" +"Uma compensação de pé de elefante muito grande é irrazoável.\n" +"Se realmente tiver um efeito sério de pé de elefante, por favor, verifique " +"outras configurações.\n" +"Por exemplo, se a temperatura da mesa estiver muito alta.\n" +"\n" +"O valor será redefinido para 0." + +msgid "" +"Alternate extra wall does't work well when ensure vertical shell thickness " +"is set to All. " +msgstr "" +"O perímetro extra alternado não funciona bem quando a espessura vertical da " +"está definida para Todos. " + +msgid "" +"Change these settings automatically? \n" +"Yes - Change ensure vertical shell thickness to Moderate and enable " +"alternate extra wall\n" +"No - Dont use alternate extra wall" +msgstr "" +"Alterar essas configurações automaticamente?\n" +"Sim - Alterar a espessura vertical do perímetro para Moderado e ativar o " +"perímetro extra alternado\n" +"Não - Não usar o perímetro extra alternado" + +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 "" +"A Torre Prime não funciona quando a Altura de Camada Adaptativa ou a Altura " +"de Camada de Suporte Independente está ativada.\n" +"Qual você deseja manter?\n" +"SIM — Manter a Torre Prime\n" +"NÃO — Manter a Altura de Camada Adaptativa e a Altura de Camada de Suporte " +"Independente" + +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 "" +"A Torre Prime não funciona quando a Altura de Camada Adaptativa está ativa.\n" +"Qual você deseja manter?\n" +"SIM — Manter a Torre Prime\n" +"NÃO — Manter a Altura de Camada Adaptativa" + +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 "" +"A Torre Prime não funciona quando a Altura da Camada de Suporte Independente " +"está ativa.\n" +"Qual você deseja manter?\n" +"SIM — Manter a Torre Prime\n" +"NÃO — Manter a Altura da Camada de Suporte Independente" + +msgid "" +"While printing by Object, the extruder may collide skirt.\n" +"Thus, reset the skirt layer to 1 to avoid that." +msgstr "" +"Ao imprimir por Objeto, o extrusor pode colidir com a saia.\n" +"Portanto, redefina a camada da saia para 1 para evitar isso." + +msgid "" +"seam_slope_start_height need to be smaller than layer_height.\n" +"Reset to 0." +msgstr "" +"seam_slope_start_height precisa ser menor que layer_height.\n" +"Redefinir para 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 "" +"O modo espiral só funciona quando o perímetro é igual a 1, o suporte está " +"desativado, as camadas de topo são 0, a densidade de preenchimento não " +"sólido é 0 e o tipo de timelapse é tradicional." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Mas máquinas com estrutura I3 não gerarão vídeos de timelapse." + +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 "" +"Alterar essas configurações automaticamente? \n" +"Sim - Alterar essas configurações e ativar o modo espiral automaticamente\n" +"Não - Desistir de usar o modo espiral desta vez" + +msgid "Auto bed leveling" +msgstr "Nivelamento automático da mesa" + +msgid "Heatbed preheating" +msgstr "Pré-aquecimento da mesa" + +msgid "Sweeping XY mech mode" +msgstr "Modo mecânico de varredura XY" + +msgid "Changing filament" +msgstr "Troca de filamento" + +msgid "M400 pause" +msgstr "Pausa M400" + +msgid "Paused due to filament runout" +msgstr "Pausado devido ao esgotamento do filamento" + +msgid "Heating hotend" +msgstr "Aquecendo a hotend" + +msgid "Calibrating extrusion" +msgstr "Calibrando a extrusão" + +msgid "Scanning bed surface" +msgstr "Digitalizando a superfície da mesa" + +msgid "Inspecting first layer" +msgstr "Inspecionando a primeira camada" + +msgid "Identifying build plate type" +msgstr "Identificando o tipo de mesa" + +msgid "Calibrating Micro Lidar" +msgstr "Calibrando Micro Lidar" + +msgid "Homing toolhead" +msgstr "Calibrando cabeça da ferramenta" + +msgid "Cleaning nozzle tip" +msgstr "Limpando a ponta do bico" + +msgid "Checking extruder temperature" +msgstr "Verificando temperatura do extrusor" + +msgid "Printing was paused by the user" +msgstr "A impressão foi pausada pelo usuário" + +msgid "Pause of front cover falling" +msgstr "Pausa de queda da cobertura frontal" + +msgid "Calibrating the micro lida" +msgstr "Calibrando o micro lidar" + +msgid "Calibrating extrusion flow" +msgstr "Calibrando o fluxo de extrusão" + +msgid "Paused due to nozzle temperature malfunction" +msgstr "Pausado devido a mau funcionamento da temperatura do bico" + +msgid "Paused due to heat bed temperature malfunction" +msgstr "Pausado devido a mau funcionamento da temperatura da mesa quente" + +msgid "Filament unloading" +msgstr "Descarregando filamento" + +msgid "Skip step pause" +msgstr "Pausa de passo pulado" + +msgid "Filament loading" +msgstr "Carregando filamento" + +msgid "Motor noise calibration" +msgstr "Calibração de ruído do motor" + +msgid "Paused due to AMS lost" +msgstr "Pausado devido à perda do AMS" + +msgid "Paused due to low speed of the heat break fan" +msgstr "" +"Pausado devido a baixa velocidade do ventilador do bloco de aquecimento" + +msgid "Paused due to chamber temperature control error" +msgstr "Pausado devido a erro no controle de temperatura da câmara" + +msgid "Cooling chamber" +msgstr "Resfriando câmara" + +msgid "Paused by the Gcode inserted by user" +msgstr "Pausado pelo Gcode inserido pelo usuário" + +msgid "Motor noise showoff" +msgstr "Demonstração de barulho do motor" + +msgid "Nozzle filament covered detected pause" +msgstr "Pausado devido a bico coberto por filamento" + +msgid "Cutter error pause" +msgstr "Pausa de erro de corte" + +msgid "First layer error pause" +msgstr "Pausa de erro na primeira camada" + +msgid "Nozzle clog pause" +msgstr "Pausa de obstrução do bico" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Fatal" +msgstr "Fatal" + +msgid "Serious" +msgstr "Grave" + +msgid "Common" +msgstr "Comum" + +msgid "Update successful." +msgstr "Atualização bem-sucedida." + +msgid "Downloading failed." +msgstr "Falha ao baixar." + +msgid "Verification failed." +msgstr "Verificação falhou." + +msgid "Update failed." +msgstr "Atualização falhou." + +msgid "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" +"TPU) is not allowed to be loaded." +msgstr "" +"A temperatura atual da câmara ou a temperatura da câmara alvo excede 45℃. " +"Para evitar obstrução do extrusor, não é permitido carregar filamento de " +"baixa temperatura (PLA/PETG/TPU)." + +msgid "" +"Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " +"avoid extruder clogging,it is not allowed to set the chamber temperature " +"above 45℃." +msgstr "" +"Filamento de baixa temperatura (PLA/PETG/TPU) está carregado na extrusora. " +"Para evitar obstrução do extrusor, não é permitido ajustar a temperatura da " +"câmara acima de 45℃." + +msgid "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated. And the target chamber temperature will " +"automatically be set to 0℃." +msgstr "" +"Quando você definir a temperatura da câmara abaixo de 40℃, o controle de " +"temperatura da câmara não será ativado. E a temperatura alvo da câmara será " +"automaticamente definida como 0℃." + +msgid "Failed to start printing job" +msgstr "Falha ao iniciar o trabalho de impressão" + +msgid "" +"This calibration does not support the currently selected nozzle diameter" +msgstr "Esta calibração não suporta o diâmetro do bico atualmente selecionado" + +msgid "Current flowrate cali param is invalid" +msgstr "O parâmetro de calibração de fluxo atual é inválido" + +msgid "Selected diameter and machine diameter do not match" +msgstr "O diâmetro selecionado e o diâmetro da máquina não correspondem" + +msgid "Failed to generate cali gcode" +msgstr "Falha ao gerar o código G de calibração" + +msgid "Calibration error" +msgstr "Erro de calibração" + +msgid "TPU is not supported by AMS." +msgstr "TPU não é suportado pelo AMS." + +msgid "Bambu PET-CF/PA6-CF is not supported by AMS." +msgstr "Bambu PET-CF/PA6-CF não é suportado pelo AMS." + +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" +"O PVA úmido se tornará flexível e ficará preso dentro do AMS, por favor, " +"tenha cuidado para secá-lo antes de usar." + +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" +"Os filamentos CF/GF são duros e quebradiços, é fácil quebrar ou ficar preso " +"no AMS, por favor, use com cautela." + +msgid "default" +msgstr "padrão" + +#, boost-format +msgid "Edit Custom G-code (%1%)" +msgstr "Editar G-Code personalizado (%1%)" + +msgid "Built-in placeholders (Double click item to add to G-code)" +msgstr "" +"Marcadores de posição incorporados (Clique duas vezes no item para adicionar " +"ao G-code)" + +msgid "Search gcode placeholders" +msgstr "Procurar marcadores de posição do G-code" + +msgid "Add selected placeholder to G-code" +msgstr "Adicionar marcador de posição selecionado ao G-code" + +msgid "Select placeholder" +msgstr "Selecionar marcador de posição" + +msgid "[Global] Slicing State" +msgstr "Estado de fatiamento [Global]" + +msgid "Read Only" +msgstr "Somente leitura" + +msgid "Read Write" +msgstr "Ler Escrever" + +msgid "Slicing State" +msgstr "Estado de fatiamento" + +msgid "Print Statistics" +msgstr "Estatísticas de Impressão" + +msgid "Objects Info" +msgstr "Informações de Objetos" + +msgid "Dimensions" +msgstr "Dimensões" + +msgid "Temperatures" +msgstr "Temperaturas" + +msgid "Timestamps" +msgstr "Carimbos de data/hora" + +#, boost-format +msgid "Specific for %1%" +msgstr "Específico para %1%" + +msgid "Presets" +msgstr "Predefinições" + +msgid "Print settings" +msgstr "Configurações de Impressão" + +msgid "Filament settings" +msgstr "Configurações do Filamento" + +msgid "SLA Materials settings" +msgstr "Configurações de Materiais SLA" + +msgid "Printer settings" +msgstr "Configurações da Impressora" + +msgid "parameter name" +msgstr "nome do parâmetro" + +#, c-format, boost-format +msgid "%s can't be percentage" +msgstr "%s não pode ser percentagem" + +#, c-format, boost-format +msgid "Value %s is out of range, continue?" +msgstr "O valor %s está fora do intervalo, continuar?" + +msgid "Parameter validation" +msgstr "Validação de Parâmetros" + +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Valor %s está fora do intervalo. O intervalo válido é de %d para %d." + +msgid "Value is out of range." +msgstr "O valor está fora do intervalo." + +#, c-format, boost-format +msgid "" +"Is it %s%% or %s %s?\n" +"YES for %s%%, \n" +"NO for %s %s." +msgstr "" +"É %s%% ou %s %s?\n" +"SIM para %s%%, \n" +"NÃO para %s %s." + +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Formato de entrada inválido. Vetor de dimensões esperado no seguinte " +"formato: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Valor de entrada está fora do limite" + +msgid "Some extension in the input is invalid" +msgstr "" + +#, boost-format +msgid "Invalid format. Expected vector format: \"%1%\"" +msgstr "Formato inválido. Formato de vetor esperado: \"%1%\"" + +msgid "Layer Height" +msgstr "Altura da Camada" + +msgid "Line Width" +msgstr "Largura da Linha" + +msgid "Fan Speed" +msgstr "Velocidade do Ventilador" + +msgid "Temperature" +msgstr "Temperatura" + +msgid "Flow" +msgstr "Fluxo" + +msgid "Tool" +msgstr "Ferramenta" + +msgid "Layer Time" +msgstr "Tempo da Camada" + +msgid "Layer Time (log)" +msgstr "Tempo da Camada (log)" + +msgid "Height: " +msgstr "Altura: " + +msgid "Width: " +msgstr "Largura: " + +msgid "Speed: " +msgstr "Velocidade: " + +msgid "Flow: " +msgstr "Fluxo: " + +msgid "Layer Time: " +msgstr "Tempo de Camada: " + +msgid "Fan: " +msgstr "Ventilador: " + +msgid "Temperature: " +msgstr "Temperatura: " + +msgid "Loading G-codes" +msgstr "Carregando G-codes" + +msgid "Generating geometry vertex data" +msgstr "Gerando dados de vértices de geometria" + +msgid "Generating geometry index data" +msgstr "Gerando dados de índice de geometria" + +msgid "Statistics of All Plates" +msgstr "Estatísticas de Todas as Mesas" + +msgid "Display" +msgstr "Exibição" + +msgid "Flushed" +msgstr "Limpo" + +msgid "Tower" +msgstr "Torre" + +msgid "Total" +msgstr "Total:" + +msgid "Total Estimation" +msgstr "Estimativa Total" + +msgid "Total time" +msgstr "Tempo total" + +msgid "Total cost" +msgstr "Custo total" + +msgid "up to" +msgstr "até" + +msgid "above" +msgstr "acima" + +msgid "from" +msgstr "de" + +msgid "Color Scheme" +msgstr "Esquema de Cores" + +msgid "Time" +msgstr "Tempo" + +msgid "Percent" +msgstr "Porcentagem" + +msgid "Used filament" +msgstr "Fil. usado" + +msgid "Layer Height (mm)" +msgstr "Altura da Camada (mm)" + +msgid "Line Width (mm)" +msgstr "Largura da Linha (mm)" + +msgid "Speed (mm/s)" +msgstr "Velocidade (mm/s)" + +msgid "Fan Speed (%)" +msgstr "Velocidade do Ventilador (%)" + +msgid "Temperature (°C)" +msgstr "Temperatura (°C)" + +msgid "Volumetric flow rate (mm³/s)" +msgstr "Fluxo Volumétrico (mm³/s)" + +msgid "Travel" +msgstr "Deslocamento" + +msgid "Seams" +msgstr "Costuras" + +msgid "Retract" +msgstr "Retração" + +msgid "Unretract" +msgstr "Desretração" + +msgid "Filament Changes" +msgstr "Mudanças de Filamento" + +msgid "Wipe" +msgstr "Limpeza" + +msgid "Options" +msgstr "Opções" + +msgid "travel" +msgstr "deslocamento" + +msgid "Extruder" +msgstr "Extrusora" + +msgid "Filament change times" +msgstr "Quantidade de trocas de filamento" + +msgid "Cost" +msgstr "Custo" + +msgid "Color change" +msgstr "Mudança de Cor" + +msgid "Print" +msgstr "Imprimir" + +msgid "Printer" +msgstr "Impressora" + +msgid "Custom g-code" +msgstr "G-Code Personalizado" + +msgid "ToolChange" +msgstr "Mudança de Ferramenta" + +msgid "Time Estimation" +msgstr "Estimativa de Tempo" + +msgid "Normal mode" +msgstr "Modo Normal" + +msgid "Total Filament" +msgstr "Filamento Total" + +msgid "Model Filament" +msgstr "Modelo do Filamento" + +msgid "Prepare time" +msgstr "Tempo de Preparo" + +msgid "Model printing time" +msgstr "Tempo de Impressão do Modelo" + +msgid "Switch to silent mode" +msgstr "Mudar para o modo silencioso" + +msgid "Switch to normal mode" +msgstr "Mudar para o modo normal" + +msgid "Variable layer height" +msgstr "Altura de Camada Variável" + +msgid "Adaptive" +msgstr "Adaptativo" + +msgid "Quality / Speed" +msgstr "Qualidade / Velocidade" + +msgid "Smooth" +msgstr "Suavização" + +msgid "Radius" +msgstr "Raio" + +msgid "Keep min" +msgstr "Manter Mínimo" + +msgid "Left mouse button:" +msgstr "Botão esquerdo do mouse:" + +msgid "Add detail" +msgstr "Adicionar detalhe" + +msgid "Right mouse button:" +msgstr "Botão direito do mouse:" + +msgid "Remove detail" +msgstr "Remover detalhe" + +msgid "Shift + Left mouse button:" +msgstr "Shift + Botão esquerdo do mouse:" + +msgid "Reset to base" +msgstr "Redefinir para a base" + +msgid "Shift + Right mouse button:" +msgstr "Shift + Botão direito do mouse:" + +msgid "Smoothing" +msgstr "Suavização" + +msgid "Mouse wheel:" +msgstr "Roda do mouse:" + +msgid "Increase/decrease edit area" +msgstr "Aumentar/diminuir área de edição" + +msgid "Sequence" +msgstr "Sequência" + +msgid "Mirror Object" +msgstr "Espelhar Objeto" + +msgid "Tool Move" +msgstr "Mover Ferramenta" + +msgid "Tool Rotate" +msgstr "Rotacionar Ferramenta" + +msgid "Move Object" +msgstr "Mover Objeto" + +msgid "Auto Orientation options" +msgstr "Opções de Orientação Automática" + +msgid "Enable rotation" +msgstr "Habilitar rotação" + +msgid "Optimize support interface area" +msgstr "Otimizar a área de interface de suporte" + +msgid "Orient" +msgstr "Orientar" + +msgid "Arrange options" +msgstr "Opções de Organização" + +msgid "Spacing" +msgstr "Espaçamento" + +msgid "0 means auto spacing." +msgstr "0 significa auto-espaçamento." + +msgid "Auto rotate for arrangement" +msgstr "Girar automaticamente para arranjo" + +msgid "Allow multiple materials on same plate" +msgstr "Permitir vários materiais na mesma mesa" + +msgid "Avoid extrusion calibration region" +msgstr "Evitar a região de calibração da extrusão" + +msgid "Align to Y axis" +msgstr "Alinhar com o eixo Y" + +msgid "Add plate" +msgstr "Adicionar mesa" + +msgid "Auto orient" +msgstr "Orientação automática" + +msgid "Arrange all objects" +msgstr "Organizar todos os objetos" + +msgid "Arrange objects on selected plates" +msgstr "Organizar objetos nas mesas selecionadas" + +msgid "Split to objects" +msgstr "Dividir em objetos" + +msgid "Split to parts" +msgstr "Dividir em peças" + +msgid "Assembly View" +msgstr "Visualização de Montagem" + +msgid "Select Plate" +msgstr "Selecionar Mesa" + +msgid "Assembly Return" +msgstr "Retornar à Montagem" + +msgid "return" +msgstr "retornar" + +msgid "Paint Toolbar" +msgstr "Barra de Ferramentas de Pintura" + +msgid "Explosion Ratio" +msgstr "Taxa de Explosão" + +msgid "Section View" +msgstr "Visualização de Seção" + +msgid "Assemble Control" +msgstr "Controle de Montagem" + +msgid "Total Volume:" +msgstr "Volume Total:" + +msgid "Assembly Info" +msgstr "Informações de Montagem" + +msgid "Volume:" +msgstr "Volume:" + +msgid "Size:" +msgstr "Tamanho:" + +#, 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 "" +"Foram encontrados conflitos de caminhos de G-code na camada %d, z = %.2lf " +"mm. Por favor, separe mais os objetos em conflito (%s <-> %s)." + +msgid "An object is layed over the boundary of plate." +msgstr "Um objeto está sobre a borda da mesa." + +msgid "A G-code path goes beyond the max print height." +msgstr "Um caminho de G-code ultrapassa a altura máxima de impressão." + +msgid "A G-code path goes beyond the boundary of plate." +msgstr "Um caminho de G-code ultrapassa a borda da mesa." + +msgid "Only the object being edit is visible." +msgstr "Apenas o objeto em edição está visível." + +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 "" +"Um objeto está sobre a borda da mesa ou ultrapassa o limite de altura.\n" +"Por favor, resolva o problema movendo-o totalmente para dentro ou para fora " +"da mesa, e confirmando que a altura está dentro do volume de impressão." + +msgid "Calibration step selection" +msgstr "Seleção de etapa de calibração" + +msgid "Micro lidar calibration" +msgstr "Calibração do micro lidar" + +msgid "Bed leveling" +msgstr "Nivelamento da mesa" + +msgid "Vibration compensation" +msgstr "Compensação de vibração" + +msgid "Motor noise cancellation" +msgstr "Cancelamento de ruído do motor" + +msgid "Calibration program" +msgstr "Programa de calibração" + +msgid "" +"The calibration program detects the status of your device automatically to " +"minimize deviation.\n" +"It keeps the device performing optimally." +msgstr "" +"O programa de calibração detecta automaticamente o estado do seu dispositivo " +"para minimizar desvios.\n" +"Mantém o dispositivo com desempenho ideal." + +msgid "Calibration Flow" +msgstr "Calibração de Fluxo" + +msgid "Start Calibration" +msgstr "Iniciar Calibração" + +msgid "Completed" +msgstr "Concluído" + +msgid "Calibrating" +msgstr "Calibrando" + +msgid "No step selected" +msgstr "Nenhuma etapa selecionada" + +msgid "Auto-record Monitoring" +msgstr "Monitoramento de Auto-Registro" + +msgid "Go Live" +msgstr "Ir ao Vivo" + +msgid "Liveview Retry" +msgstr "Repetir Liveview" + +msgid "Resolution" +msgstr "Resolução" + +msgid "Enable" +msgstr "Ativar" + +msgid "Hostname or IP" +msgstr "Nome do Host ou IP" + +msgid "Custom camera source" +msgstr "Fonte de câmera personalizada" + +msgid "Show \"Live Video\" guide page." +msgstr "Mostrar página de guia \"Vídeo ao Vivo\"." + +msgid "720p" +msgstr "720p" + +msgid "1080p" +msgstr "1080p" + +msgid "ConnectPrinter(LAN)" +msgstr "Conectar Impressora (LAN)" + +msgid "Please input the printer access code:" +msgstr "Por favor, insira o código de acesso à impressora:" + +msgid "" +"You can find it in \"Settings > Network > Connection code\"\n" +"on the printer, as shown in the figure:" +msgstr "" +"Você pode encontrá-lo em \"Configurações > Rede > Código de Conexão\"\n" +"na impressora, conforme mostrado na figura:" + +msgid "Invalid input." +msgstr "Entrada inválida." + +msgid "New Window" +msgstr "Nova Janela" + +msgid "Open a new window" +msgstr "Abrir uma nova janela" + +msgid "Application is closing" +msgstr "Aplicativo está fechando" + +msgid "Closing Application while some presets are modified." +msgstr "Fechando o aplicativo enquanto alguns perfis estão sendo modificados." + +msgid "Logging" +msgstr "Registro" + +msgid "Preview" +msgstr "Pré-visualizar" + +msgid "Multi-device" +msgstr "Multi-dispositivo" + +msgid "Project" +msgstr "Projeto" + +msgid "Yes" +msgstr "Sim" + +msgid "No" +msgstr "Não" + +msgid "will be closed before creating a new model. Do you want to continue?" +msgstr "será fechado antes de criar um novo modelo. Deseja continuar?" + +msgid "Slice plate" +msgstr "Fatiar Mesa" + +msgid "Print plate" +msgstr "Imprimir mesa" + +msgid "Slice all" +msgstr "Fatiar Tudo" + +msgid "Export G-code file" +msgstr "Exportar arquivo G-code" + +msgid "Export plate sliced file" +msgstr "Exportar arquivo de mesa fatiada" + +msgid "Export all sliced file" +msgstr "Exportar todos os arquivos fatiados" + +msgid "Print all" +msgstr "Imprimir tudo" + +msgid "Send all" +msgstr "Enviar tudo" + +msgid "Keyboard Shortcuts" +msgstr "Atalhos de Teclado" + +msgid "Show the list of the keyboard shortcuts" +msgstr "Mostrar a lista dos atalhos de teclado" + +msgid "Setup Wizard" +msgstr "Assistente de Configuração" + +msgid "Show Configuration Folder" +msgstr "Mostrar Pasta de Configuração" + +msgid "Show Tip of the Day" +msgstr "Mostrar Dica do Dia" + +msgid "Check for Update" +msgstr "Verificar Atualizações" + +msgid "Open Network Test" +msgstr "Abrir Teste de Rede" + +#, c-format, boost-format +msgid "&About %s" +msgstr "&Sobre %s" + +msgid "Upload Models" +msgstr "Enviar Modelos" + +msgid "Download Models" +msgstr "Baixar Modelos" + +msgid "Default View" +msgstr "Visualização Padrão" + +#. TRN To be shown in the main menu View->Top +msgid "Top" +msgstr "Topo" + +msgid "Top View" +msgstr "Visualização Superior" + +#. TRN To be shown in the main menu View->Bottom +msgid "Bottom" +msgstr "Inferior" + +msgid "Bottom View" +msgstr "Visualização Inferior" + +msgid "Front" +msgstr "Frente" + +msgid "Front View" +msgstr "Visualização Frontal" + +msgid "Rear" +msgstr "Traseira" + +msgid "Rear View" +msgstr "Visualização Traseira" + +msgid "Left" +msgstr "Esquerda" + +msgid "Left View" +msgstr "Visualização Esquerda" + +msgid "Right" +msgstr "Direita" + +msgid "Right View" +msgstr "Visualização Direita" + +msgid "Start a new window" +msgstr "Abrir nova janela" + +msgid "New Project" +msgstr "Novo Projeto" + +msgid "Start a new project" +msgstr "Iniciar um novo projeto" + +msgid "Open a project file" +msgstr "Abrir um arquivo de projeto" + +msgid "Recent projects" +msgstr "Projetos recentes" + +msgid "Save Project" +msgstr "Salvar Projeto" + +msgid "Save current project to file" +msgstr "Salvar projeto atual em arquivo" + +msgid "Save Project as" +msgstr "Salvar projeto como" + +msgid "Shift+" +msgstr "Shift+" + +msgid "Save current project as" +msgstr "Salvar o projeto atual como" + +msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" + +msgid "Load a model" +msgstr "Carregar um modelo" + +msgid "Import Zip Archive" +msgstr "Importar Arquivo Zip" + +msgid "Load models contained within a zip archive" +msgstr "Carregar modelos contidos em um arquivo zip" + +msgid "Import Configs" +msgstr "Importar Configurações" + +msgid "Load configs" +msgstr "Carregar configurações" + +msgid "Import" +msgstr "Importar" + +msgid "Export all objects as one STL" +msgstr "Exportar todos os objetos como um único STL" + +msgid "Export all objects as STLs" +msgstr "Exportar todos os objetos como STLs" + +msgid "Export Generic 3MF" +msgstr "Exportar 3MF Genérico" + +msgid "Export 3mf file without using some 3mf-extensions" +msgstr "Exportar arquivo 3mf sem usar algumas extensões 3mf" + +msgid "Export current sliced file" +msgstr "Exportar arquivo fatiado atual" + +msgid "Export all plate sliced file" +msgstr "Exportar todos os arquivos de mesa fatiados" + +msgid "Export G-code" +msgstr "Exportar G-code" + +msgid "Export current plate as G-code" +msgstr "Exportar a mesa atual como G-code" + +msgid "Export Preset Bundle" +msgstr "Exportar Pacote de Presets" + +msgid "Export current configuration to files" +msgstr "Exportar configuração atual para arquivos" + +msgid "Export" +msgstr "Exportar" + +msgid "Quit" +msgstr "Sair" + +msgid "Undo" +msgstr "Desfazer" + +msgid "Redo" +msgstr "Refazer" + +msgid "Cut selection to clipboard" +msgstr "Recortar seleção para área de transferência" + +msgid "Copy" +msgstr "Copiar" + +msgid "Copy selection to clipboard" +msgstr "Copiar seleção para área de transferência" + +msgid "Paste" +msgstr "Colar" + +msgid "Paste clipboard" +msgstr "Colar da área de transferência" + +msgid "Delete selected" +msgstr "Excluir seleção" + +msgid "Deletes the current selection" +msgstr "Exclui a seleção atual" + +msgid "Delete all" +msgstr "Excluir tudo" + +msgid "Deletes all objects" +msgstr "Exclui todos os objetos" + +msgid "Clone selected" +msgstr "Clonar selecionado" + +msgid "Clone copies of selections" +msgstr "Clonar cópias das seleções" + +msgid "Select all" +msgstr "Selecionar tudo" + +msgid "Selects all objects" +msgstr "Seleciona todos os objetos" + +msgid "Deselect all" +msgstr "Desselecionar tudo" + +msgid "Deselects all objects" +msgstr "Desseleciona todos os objetos" + +msgid "Use Perspective View" +msgstr "Usar Vista em Perspectiva" + +msgid "Use Orthogonal View" +msgstr "Usar Vista Ortogonal" + +msgid "Show &G-code Window" +msgstr "Mostrar Janela &G-code" + +msgid "Show g-code window in Previce scene" +msgstr "Mostrar janela de código G na cena anterior" + +msgid "Show 3D Navigator" +msgstr "Mostrar Navegador 3D" + +msgid "Show 3D navigator in Prepare and Preview scene" +msgstr "Mostrar navegador 3D nas cenas de preparação e pré-visualização" + +msgid "Reset Window Layout" +msgstr "Redefinir Layout da Janela" + +msgid "Reset to default window layout" +msgstr "Redefinir layout padrão da janela" + +msgid "Show &Labels" +msgstr "Mostrar & Etiquetas" + +msgid "Show object labels in 3D scene" +msgstr "Mostrar etiquetas de objeto na cena 3D" + +msgid "Show &Overhang" +msgstr "Mostrar &Sobrecarga" + +msgid "Show object overhang highlight in 3D scene" +msgstr "Mostrar destaque de sobrecarga de objeto na cena 3D" + +msgid "Preferences" +msgstr "Preferências" + +msgid "Help" +msgstr "Ajuda" + +msgid "Temperature Calibration" +msgstr "Calibração de Temperatura" + +msgid "Pass 1" +msgstr "Passo 1" + +msgid "Flow rate test - Pass 1" +msgstr "Teste de fluxo - Passo 1" + +msgid "Pass 2" +msgstr "Passo 2" + +msgid "Flow rate test - Pass 2" +msgstr "Teste de fluxo - Passo 2" + +msgid "Flow rate" +msgstr "Fluxo" + +msgid "Pressure advance" +msgstr "Pressure Advance" + +msgid "Retraction test" +msgstr "Teste de retração" + +msgid "Orca Tolerance Test" +msgstr "Teste de Tolerância Orca" + +msgid "Max flowrate" +msgstr "Fluxo máximo" + +msgid "VFA" +msgstr "VFA" + +msgid "More..." +msgstr "Mais..." + +msgid "Tutorial" +msgstr "Tutorial" + +msgid "Calibration help" +msgstr "Ajuda de calibração" + +msgid "More calibrations" +msgstr "Mais calibrações" + +msgid "&Open G-code" +msgstr "&Abrir G-code" + +msgid "Open a G-code file" +msgstr "Abrir um arquivo G-code" + +msgid "Re&load from Disk" +msgstr "Re&carregar do Disco" + +msgid "Reload the plater from disk" +msgstr "Recarregar o bandeija do disco" + +msgid "Export &Toolpaths as OBJ" +msgstr "Exportar &Trilhas de Ferramentas como OBJ" + +msgid "Export toolpaths as OBJ" +msgstr "Exportar trilhas de ferramentas como OBJ" + +msgid "Open &Slicer" +msgstr "Abrir &Fatiador" + +msgid "Open Slicer" +msgstr "Abrir Fatiador" + +msgid "&Quit" +msgstr "&Sair" + +#, c-format, boost-format +msgid "Quit %s" +msgstr "Sair %s" + +msgid "&File" +msgstr "&Arquivo" + +msgid "&View" +msgstr "&Visualizar" + +msgid "&Help" +msgstr "&Ajuda" + +#, c-format, boost-format +msgid "A file exists with the same name: %s, do you want to override it." +msgstr "Já existe um arquivo com o mesmo nome: %s. Deseja substituí-lo?" + +#, c-format, boost-format +msgid "A config exists with the same name: %s, do you want to override it." +msgstr "Já existe uma configuração com o mesmo nome: %s. Deseja substituí-la?" + +msgid "Overwrite file" +msgstr "Substituir arquivo" + +msgid "Yes to All" +msgstr "Sim para Todos" + +msgid "No to All" +msgstr "Não para Todos" + +msgid "Choose a directory" +msgstr "Escolha um diretório" + +#, 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] "" +"Foi exportada uma configuração (%d). (Apenas configurações não do sistema)" +msgstr[1] "" +"Foram exportadas %d configurações. (Apenas configurações não do sistema)" + +msgid "Export result" +msgstr "Resultado da exportação" + +msgid "Select profile to load:" +msgstr "Selecione o perfil para carregar:" + +#, 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] "" +"Foi importada uma configuração (%d). (Apenas configurações compatíveis e não " +"do sistema)" +msgstr[1] "" +"Foram importadas %d configurações. (Apenas configurações compatíveis e não " +"do sistema)" + +msgid "" +"\n" +"Hint: Make sure you have added the corresponding printer before importing " +"the configs." +msgstr "" +"\n" +"Dica: Certifique-se de ter adicionado a impressora correspondente antes de " +"importar as configurações." + +msgid "Import result" +msgstr "Resultado da importação" + +msgid "File is missing" +msgstr "Arquivo não encontrado" + +msgid "The project is no longer available." +msgstr "O projeto não está mais disponível." + +msgid "Filament Settings" +msgstr "Configurações do Filamento" + +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 "" +"Você deseja sincronizar seus dados pessoais da Bambu Cloud? \n" +"Isso inclui as seguintes informações:\n" +"1. Os perfis de Processo\n" +"2. Os perfis de Filamento\n" +"3. Os perfis de Impressora" + +msgid "Synchronization" +msgstr "Sincronização" + +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" +"O dispositivo não pode lidar com mais conversas. Por favor, tente novamente " +"mais tarde." + +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" +"O reprodutor está com problemas. Por favor, reinstale o reprodutor do " +"sistema." + +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"O reprodutor não está carregado, por favor, clique no botão \"Reproduzir\" " +"para tentar novamente." + +msgid "Please confirm if the printer is connected." +msgstr "Por favor, confirme se a impressora está conectada." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"A impressora está sendo baixada no momento. Tente novamente após terminar." + +msgid "Printer camera is malfunctioning." +msgstr "A câmera da impressora está com problemas." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Ocorreu um problema. Por favor, atualize o firmware da impressora e tente " +"novamente." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Liveview via LAN está desativado. Por favor, ative a liveview na tela da " +"impressora." + +msgid "Please enter the IP of printer to connect." +msgstr "Por favor, digite o IP da impressora para conectar." + +msgid "Initializing..." +msgstr "Inicializando..." + +msgid "Connection Failed. Please check the network and try again" +msgstr "Falha na conexão. Por favor, verifique a rede e tente novamente" + +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Por favor, verifique a rede e tente novamente, você pode reiniciar ou " +"atualizar a impressora se o problema persistir." + +msgid "The printer has been logged out and cannot connect." +msgstr "A impressora foi desconectada e não pode se conectar." + +msgid "Stopped." +msgstr "Parado." + +msgid "LAN Connection Failed (Failed to start liveview)" +msgstr "Falha na conexão da LAN (Falha ao iniciar a visualização ao vivo)" + +msgid "" +"Virtual Camera Tools is required for this task!\n" +"Do you want to install them?" +msgstr "" +"É necessário o Virtual Camera Tools para esta tarefa!\n" +"Deseja instalá-los?" + +msgid "Downloading Virtual Camera Tools" +msgstr "Baixando Ferramentas de Câmera Virtual" + +msgid "" +"Another virtual camera is running.\n" +"Orca Slicer supports only a single virtual camera.\n" +"Do you want to stop this virtual camera?" +msgstr "" +"Outra câmera virtual está em execução.\n" +"O Orca Slicer suporta apenas uma única câmera virtual.\n" +"Deseja parar esta câmera virtual?" + +#, c-format, boost-format +msgid "Virtual camera initialize failed (%s)!" +msgstr "Falha na inicialização da câmera virtual (%s)!" + +msgid "Network unreachable" +msgstr "Rede inacessível" + +msgid "Information" +msgstr "Informação" + +msgid "Playing..." +msgstr "Reproduzindo..." + +msgid "Year" +msgstr "Ano" + +msgid "Month" +msgstr "Mês" + +msgid "All Files" +msgstr "Todos os Arquivos" + +msgid "Group files by year, recent first." +msgstr "Agrupar arquivos por ano, mais recentes primeiro." + +msgid "Group files by month, recent first." +msgstr "Agrupar arquivos por mês, mais recentes primeiro." + +msgid "Show all files, recent first." +msgstr "Mostrar todos os arquivos, mais recentes primeiro." + +msgid "Switch to timelapse files." +msgstr "Mudar para arquivos de timelapse." + +msgid "Video" +msgstr "Vídeo" + +msgid "Switch to video files." +msgstr "Mudar para arquivos de vídeo." + +msgid "Switch to 3mf model files." +msgstr "Mudar para arquivos de modelo 3mf." + +msgid "Delete selected files from printer." +msgstr "Excluir arquivos selecionados da impressora." + +msgid "Download" +msgstr "Baixar" + +msgid "Download selected files from printer." +msgstr "Baixar arquivos selecionados da impressora." + +msgid "Select" +msgstr "Selecionar" + +msgid "Batch manage files." +msgstr "Gerenciar arquivos em lote." + +msgid "Refresh" +msgstr "Atualizar" + +msgid "Reload file list from printer." +msgstr "Recarregar lista de arquivos da impressora." + +msgid "No printers." +msgstr "Nenhuma impressora." + +#, c-format, boost-format +msgid "Connect failed [%d]!" +msgstr "Falha ao conectar [%d]!" + +msgid "Loading file list..." +msgstr "Carregando lista de arquivos..." + +msgid "No files" +msgstr "Sem arquivos" + +msgid "Load failed" +msgstr "Falha ao carregar" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Inicialização falhou (Conexão do dispositivo não está pronta)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Procurar arquivo no cartão SD não é suportado no firmware atual. Por favor, " +"atualize o firmware da impressora." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "Inicialização falhou (falha no armazenamento, insira o cartão SD.)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "Falha na conexão LAN (Falha para ver o cartão SD)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Procurar arquivo no cartão SD não é suportado no Modo Somente LAN." + +#, c-format, boost-format +msgid "Initialize failed (%s)!" +msgstr "Inicialização falhou (%s)!" + +#, 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] "" +"Você está prestes a excluir %u arquivo da impressora. Tem certeza de que " +"deseja continuar?" +msgstr[1] "" +"Você está prestes a excluir %u arquivos da impressora. Tem certeza de que " +"deseja continuar?" + +msgid "Delete files" +msgstr "Excluir arquivos" + +#, c-format, boost-format +msgid "Do you want to delete the file '%s' from printer?" +msgstr "Deseja excluir o arquivo '%s' da impressora?" + +msgid "Delete file" +msgstr "Excluir arquivo" + +msgid "Fetching model infomations ..." +msgstr "Obtendo informações do modelo ..." + +msgid "Failed to fetch model information from printer." +msgstr "Falha ao obter informação do modelo da impressora." + +msgid "Failed to parse model information." +msgstr "Falha ao analisar a informação do modelo." + +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " +"and export a new .gcode.3mf file." +msgstr "" +"O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com Orca " +"Slicer e exporte um novo arquivo .gcode.3mf." + +#, c-format, boost-format +msgid "File '%s' was lost! Please download it again." +msgstr "O arquivo '%s' foi perdido! Por favor, baixe-o novamente." + +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Arquivo: %s\n" +"Título: %s\n" + +msgid "Download waiting..." +msgstr "Aguardando download..." + +msgid "Play" +msgstr "Reproduzir" + +msgid "Open Folder" +msgstr "Abrir Pasta" + +msgid "Download finished" +msgstr "Download concluído" + +#, c-format, boost-format +msgid "Downloading %d%%..." +msgstr "Baixando %d%%..." + +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Reconectando a impressora, a operação não pôde ser concluída imediatamente, " +"por favor, tente novamente mais tarde." + +msgid "File does not exist." +msgstr "O arquivo não existe." + +msgid "File checksum error. Please retry." +msgstr "Erro de checksum do arquivo. Por favor, tente novamente." + +msgid "Not supported on the current printer version." +msgstr "Não suportado na versão atual da impressora." + +msgid "Storage unavailable, insert SD card." +msgstr "Armazenamento indisponível, insira um cartão SD." + +#, c-format, boost-format +msgid "Error code: %d" +msgstr "Código de erro: %d" + +msgid "Speed:" +msgstr "Velocidade:" + +msgid "Deadzone:" +msgstr "Zona morta:" + +msgid "Options:" +msgstr "Opções:" + +msgid "Zoom" +msgstr "Ampliar" + +msgid "Translation/Zoom" +msgstr "Tradução/Zoom" + +msgid "3Dconnexion settings" +msgstr "Configurações 3Dconnexion" + +msgid "Swap Y/Z axes" +msgstr "Trocar eixos Y/Z" + +msgid "Invert X axis" +msgstr "Inverter eixo X" + +msgid "Invert Y axis" +msgstr "Inverter eixo Y" + +msgid "Invert Z axis" +msgstr "Inverter eixo Z" + +msgid "Invert Yaw axis" +msgstr "Inverter eixo de guinada" + +msgid "Invert Pitch axis" +msgstr "Inverter eixo de arfagem" + +msgid "Invert Roll axis" +msgstr "Inverter eixo de rotação" + +msgid "Printing Progress" +msgstr "Progresso da Impressão" + +msgid "0" +msgstr "0" + +msgid "Layer: N/A" +msgstr "Camada: N/A" + +msgid "Clear" +msgstr "Limpar" + +msgid "" +"You have completed printing the mall model, \n" +"but the synchronization of rating information has failed." +msgstr "" +"Você concluiu a impressão do modelo de shopping, \n" +"mas a sincronização das informações de avaliação falhou." + +msgid "How do you like this printing file?" +msgstr "O que você achou deste arquivo de impressão?" + +msgid "" +"(The model has already been rated. Your rating will overwrite the previous " +"rating.)" +msgstr "" +"(O modelo já foi avaliado. Sua avaliação substituirá a avaliação anterior.)" + +msgid "Rate" +msgstr "Avaliar" + +msgid "Camera" +msgstr "Câmera" + +msgid "SD Card" +msgstr "Cartão SD" + +msgid "Camera Setting" +msgstr "Configuração da Câmera" + +msgid "Switch Camera View" +msgstr "Trocar Visualização da Câmera" + +msgid "Control" +msgstr "Controle" + +msgid "Printer Parts" +msgstr "Partes da Impressora" + +msgid "Print Options" +msgstr "Opções de Impressão" + +msgid "100%" +msgstr "100%" + +msgid "Lamp" +msgstr "Lâmpada" + +msgid "Aux" +msgstr "Auxiliar" + +msgid "Cham" +msgstr "Filhote" + +msgid "Bed" +msgstr "Mesa" + +msgid "Debug Info" +msgstr "Informações de Depuração" + +msgid "No SD Card" +msgstr "Sem Cartão SD" + +msgid "SD Card Abnormal" +msgstr "Cartão SD Anormal" + +msgid "Cancel print" +msgstr "Cancelar impressão" + +msgid "Are you sure you want to cancel this print?" +msgstr "Tem certeza de que deseja cancelar esta impressão?" + +msgid "Downloading..." +msgstr "Baixando..." + +msgid "Cloud Slicing..." +msgstr "Fatiando na Nuvem..." + +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "Na Fila de Fatiamento na Nuvem, existem %s tarefas na frente." + +#, c-format, boost-format +msgid "Layer: %s" +msgstr "Camada: %s" + +#, c-format, boost-format +msgid "Layer: %d/%d" +msgstr "Camada: %d/%d" + +msgid "" +"Please heat the nozzle to above 170 degree before loading or unloading " +"filament." +msgstr "" +"Aqueça o bico a mais de 170 graus antes de carregar ou descarregar o " +"filamento." + +msgid "Still unload" +msgstr "Ainda descarregando" + +msgid "Still load" +msgstr "Ainda carregando" + +msgid "Please select an AMS slot before calibration" +msgstr "Selecione um slot AMS antes da calibração" + +msgid "" +"Cannot read filament info: the filament is loaded to the tool head,please " +"unload the filament and try again." +msgstr "" +"Não é possível ler as informações do filamento: o filamento está carregado " +"na cabeça da ferramenta, por favor, descarregue o filamento e tente " +"novamente." + +msgid "This only takes effect during printing" +msgstr "Isso só tem efeito durante a impressão" + +msgid "Silent" +msgstr "Silencioso" + +msgid "Standard" +msgstr "Padrão" + +msgid "Sport" +msgstr "Esportivo" + +msgid "Ludicrous" +msgstr "Ludicrous" + +msgid "Can't start this without SD card." +msgstr "Não é possível iniciar sem um cartão SD." + +msgid "Rate the Print Profile" +msgstr "Avaliar o Perfil de Impressão" + +msgid "Comment" +msgstr "Comentário" + +msgid "Rate this print" +msgstr "Avaliar esta impressão" + +msgid "Add Photo" +msgstr "Adicionar Foto" + +msgid "Delete Photo" +msgstr "Excluir Foto" + +msgid "Submit" +msgstr "Enviar" + +msgid "Please click on the star first." +msgstr "Por favor, clique na estrela primeiro." + +msgid "InFo" +msgstr "Info" + +msgid "Get oss config failed." +msgstr "Falha ao obter a configuração oss." + +msgid "Upload Pictrues" +msgstr "Enviar fotos" + +msgid "Number of images successfully uploaded" +msgstr "Número de imagens carregadas com sucesso" + +msgid " upload failed" +msgstr " falha ao enviar" + +msgid " upload config prase failed\n" +msgstr " falha ao analisar a configuração\n" + +msgid " No corresponding storage bucket\n" +msgstr " Nenhum balde de armazenamento correspondente\n" + +msgid " can not be opened\n" +msgstr " não pode ser aberto\n" + +msgid "" +"The following issues occurred during the process of uploading images. Do you " +"want to ignore them?\n" +"\n" +msgstr "" +"Os seguintes problemas ocorreram durante o processo de carregamento das " +"imagens. Você deseja ignorá-los?\n" +"\n" + +msgid "info" +msgstr "informação" + +msgid "Synchronizing the printing results. Please retry a few seconds later." +msgstr "" +"Sincronizando os resultados da impressão. Por favor, tente novamente alguns " +"segundos depois." + +msgid "Upload failed\n" +msgstr "Falha no envio\n" + +msgid "obtaining instance_id failed\n" +msgstr "falha ao obter o instance_id\n" + +msgid "" +"Your comment result cannot be uploaded due to some reasons. As follows:\n" +"\n" +" error code: " +msgstr "" +"O resultado do seu comentário não pode ser enviado devido a alguns motivos. " +"Como segue:\n" +"\n" +" código de erro: " + +msgid "error message: " +msgstr "mensagem de erro: " + +msgid "" +"\n" +"\n" +"Would you like to redirect to the webpage for rating?" +msgstr "" +"\n" +"\n" +"Gostaria de ser redirecionado para a página da web para avaliar?" + +msgid "" +"Some of your images failed to upload. Would you like to redirect to the " +"webpage for rating?" +msgstr "" +"Algumas de suas imagens não puderam ser carregadas. Gostaria de ser " +"redirecionado para a página da web para avaliar?" + +msgid "You can select up to 16 images." +msgstr "Você pode selecionar até 16 imagens." + +msgid "" +"At least one successful print record of this print profile is required \n" +"to give a positive rating(4 or 5stars)." +msgstr "" +"Pelo menos um registro de impressão bem-sucedido deste perfil de impressão é " +"necessário \n" +"para dar uma avaliação positiva (4 ou 5 estrelas)." + +msgid "Status" +msgstr "Status" + +msgid "Update" +msgstr "Atualizar" + +msgid "Don't show again" +msgstr "Não mostrar novamente" + +#, c-format, boost-format +msgid "%s error" +msgstr "Erro %s" + +#, c-format, boost-format +msgid "%s has encountered an error" +msgstr "%s encontrou um erro" + +#, c-format, boost-format +msgid "%s warning" +msgstr "Aviso %s" + +#, c-format, boost-format +msgid "%s has a warning" +msgstr "%s tem um aviso" + +#, c-format, boost-format +msgid "%s info" +msgstr "Informação %s" + +#, c-format, boost-format +msgid "%s information" +msgstr "Informação %s" + +msgid "Skip" +msgstr "Pular" + +msgid "Newer 3mf version" +msgstr "Nova versão 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"A versão 3mf do arquivo está em Beta e é mais nova do que a versão atual do " +"OrcaSlicer." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Se você gostaria de testar o Orca Slicer Beta, clique para" + +msgid "Download Beta Version" +msgstr "Baixar versão beta" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" +"A versão do arquivo 3mf é mais recente que a versão atual do Orca Slicer." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Atualizar seu Orca Slicer poderia permitir todas as funcionalidades do " +"arquivo 3mf." + +msgid "Current Version: " +msgstr "Versão Atual: " + +msgid "Latest Version: " +msgstr "Última Versão: " + +msgid "Not for now" +msgstr "Não por enquanto" + +msgid "3D Mouse disconnected." +msgstr "Mouse 3D desconectado." + +msgid "Configuration can update now." +msgstr "A configuração pode ser atualizada agora." + +msgid "Detail." +msgstr "Detalhes." + +msgid "Integration was successful." +msgstr "A integração foi bem-sucedida." + +msgid "Integration failed." +msgstr "A integração falhou." + +msgid "Undo integration was successful." +msgstr "A desintegração foi bem-sucedida." + +msgid "New network plug-in available." +msgstr "Novo plug-in de rede disponível." + +msgid "Details" +msgstr "Detalhes" + +msgid "New printer config available." +msgstr "Nova configuração de impressora disponível." + +msgid "Wiki" +msgstr "Documentação" + +msgid "Undo integration failed." +msgstr "A desintegração falhou." + +msgid "Exporting." +msgstr "Exportando." + +msgid "Software has New version." +msgstr "O software tem uma nova versão." + +msgid "Goto download page." +msgstr "Ir para a página de download." + +msgid "Open Folder." +msgstr "Abrir Pasta." + +msgid "Safely remove hardware." +msgstr "Remover hardware com segurança." + +#, c-format, boost-format +msgid "%1$d Object has custom supports." +msgid_plural "%1$d Objects have custom supports." +msgstr[0] "%1$d Objeto tem suportes personalizados." +msgstr[1] "%1$d Objetos têm suportes personalizados." + +#, c-format, boost-format +msgid "%1$d Object has color painting." +msgid_plural "%1$d Objects have color painting." +msgstr[0] "%1$d Objeto tem pintura colorida." +msgstr[1] "%1$d Objetos têm pintura colorida." + +#, 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 objeto foi carregado como peça do objeto cortado." +msgstr[1] "%1$d objetos foram carregados como peças do objeto cortado" + +msgid "ERROR" +msgstr "ERRO" + +msgid "COMPLETED" +msgstr "CONCLUÍDO" + +msgid "CANCELED" +msgstr "CANCELADO" + +msgid "Cancel upload" +msgstr "Cancelar envio" + +msgid "Jump to" +msgstr "Ir para" + +msgid "Error:" +msgstr "Erro:" + +msgid "Warning:" +msgstr "Aviso:" + +msgid "Export successfully." +msgstr "Exportação realizada com sucesso." + +msgid "Model file downloaded." +msgstr "Arquivo do modelo baixado." + +msgid "Serious warning:" +msgstr "Aviso sério:" + +msgid " (Repair)" +msgstr " (Reparar)" + +msgid " Click here to install it." +msgstr " Clique aqui para instalar." + +msgid "WARNING:" +msgstr "AVISO:" + +msgid "Your model needs support ! Please make support material enable." +msgstr "Seu modelo precisa de suporte! Por favor, ative o material de suporte." + +msgid "Gcode path overlap" +msgstr "Sobreposição de caminho do Gcode" + +msgid "Support painting" +msgstr "Pintura de suporte" + +msgid "Color painting" +msgstr "Pintura colorida" + +msgid "Cut connectors" +msgstr "Conectores de corte" + +msgid "Layers" +msgstr "Camadas" + +msgid "Range" +msgstr "Intervalo" + +msgid "" +"The application cannot run normally because OpenGL version is lower than " +"2.0.\n" +msgstr "" +"A aplicação não pode ser executada normalmente porque a versão do OpenGL é " +"inferior a 2.0.\n" + +msgid "Please upgrade your graphics card driver." +msgstr "Por favor, atualize o driver da sua placa de vídeo." + +msgid "Unsupported OpenGL version" +msgstr "Versão do OpenGL não suportada" + +#, c-format, boost-format +msgid "" +"Unable to load shaders:\n" +"%s" +msgstr "" +"Incapaz de carregar os shaders:\n" +"%s" + +msgid "Error loading shaders" +msgstr "Erro ao carregar os shaders" + +msgctxt "Layers" +msgid "Top" +msgstr "Superior" + +msgctxt "Layers" +msgid "Bottom" +msgstr "Inferior" + +msgid "Enable AI monitoring of printing" +msgstr "Ativar monitoramento de IA da impressão" + +msgid "Sensitivity of pausing is" +msgstr "Sensibilidade da pausa é" + +msgid "Enable detection of build plate position" +msgstr "Ativar detecção da posição da mesa" + +msgid "" +"The localization tag of build plate is detected, and printing is paused if " +"the tag is not in predefined range." +msgstr "" +"A etiqueta de localização da mesa é detectada e a impressão é pausada se a " +"etiqueta não estiver na faixa predefinida." + +msgid "First Layer Inspection" +msgstr "Inspeção da Primeira Camada" + +msgid "Auto-recovery from step loss" +msgstr "Recuperação automática de perda de passo" + +msgid "Allow Prompt Sound" +msgstr "Permitir som de alerta" + +msgid "Filament Tangle Detect" +msgstr "Detecção de emaranhado de filamento" + +msgid "Nozzle Clumping Detection" +msgstr "Detecção de acúmulo no bico" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Verifica se o bico está com filamento acumulado ou outros objetos estranhos." + +msgid "Nozzle Type" +msgstr "Tipo de bico" + +msgid "Stainless Steel" +msgstr "Aço inoxidável" + +msgid "Hardened Steel" +msgstr "Aço endurecido" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + +msgid "Global" +msgstr "Global" + +msgid "Objects" +msgstr "Objetos" + +msgid "Advance" +msgstr "Avançado" + +msgid "Compare presets" +msgstr "Comparar presets" + +msgid "View all object's settings" +msgstr "Ver todas as configurações do objeto" + +msgid "Remove current plate (if not last one)" +msgstr "Remover a mesa atual (se não for a última)" + +msgid "Auto orient objects on current plate" +msgstr "Orientar automaticamente os objetos na mesa atual" + +msgid "Arrange objects on current plate" +msgstr "Organizar objetos na mesa atual" + +msgid "Unlock current plate" +msgstr "Desbloquear a mesa atual" + +msgid "Lock current plate" +msgstr "Bloquear a mesa atual" + +msgid "Edit current plate name" +msgstr "Editar nome da mesa atual" + +msgid "Customize current plate" +msgstr "Personalizar a mesa atual" + +#, boost-format +msgid " plate %1%:" +msgstr " mesa %1%:" + +msgid "Invalid name, the following characters are not allowed:" +msgstr "Nome inválido, os seguintes caracteres não são permitidos:" + +msgid "Sliced Info" +msgstr "Info. fatiamento" + +msgid "Used Filament (m)" +msgstr "Filamento usado (m)" + +msgid "Used Filament (mm³)" +msgstr "Filamento usado (mm³)" + +msgid "Used Filament (g)" +msgstr "Filamento usado (g)" + +msgid "Used Materials" +msgstr "Materiais usados" + +msgid "Estimated time" +msgstr "Tempo estimado" + +msgid "Filament changes" +msgstr "Mudanças de filamento" + +msgid "Click to edit preset" +msgstr "Clique para editar o preset" + +msgid "Connection" +msgstr "Conexão" + +msgid "Bed type" +msgstr "Tipo de mesa" + +msgid "Flushing volumes" +msgstr "Volumes de Purga" + +msgid "Add one filament" +msgstr "Adicionar um filamento" + +msgid "Remove last filament" +msgstr "Remover o último filamento" + +msgid "Synchronize filament list from AMS" +msgstr "Sincronizar lista de filamentos do AMS" + +msgid "Set filaments to use" +msgstr "Definir filamentos para usar" + +msgid "Search plate, object and part." +msgstr "Pesquisar mesa, objeto e peça." + +msgid "" +"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +msgstr "" +"Sem filamentos AMS. Por favor, selecione uma impressora na página " +"'Dispositivo' para carregar informações AMS." + +msgid "Sync filaments with AMS" +msgstr "Sincronizar filamentos com AMS" + +msgid "" +"Sync filaments with AMS will drop all current selected filament presets and " +"colors. Do you want to continue?" +msgstr "" +"Sincronizar filamentos com AMS eliminará todas os presets de filamento e " +"cores selecionadas atualmente. Deseja continuar?" + +msgid "" +"Already did a synchronization, do you want to sync only changes or resync " +"all?" +msgstr "" +"Já foi feita uma sincronização, deseja sincronizar apenas as alterações ou " +"ressincronizar tudo?" + +msgid "Sync" +msgstr "Sincronizar" + +msgid "Resync" +msgstr "Ressincronizar" + +msgid "There are no compatible filaments, and sync is not performed." +msgstr "Não há filamentos compatíveis, e a sincronização não é realizada." + +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 "" +"Alguns filamentos desconhecidos foram mapeados para preset genérico. Por " +"favor, atualize o Orca Slicer ou reinicie o Orca Slicer para verificar se há " +"uma atualização para presets do sistema." + +#, boost-format +msgid "Do you want to save changes to \"%1%\"?" +msgstr "Deseja salvar as alterações em \"%1%\"?" + +#, c-format, boost-format +msgid "" +"Successfully unmounted. The device %s(%s) can now be safely removed from the " +"computer." +msgstr "" +"Desmontado com sucesso. O dispositivo %s(%s) agora pode ser removido com " +"segurança do computador." + +#, c-format, boost-format +msgid "Ejecting of device %s(%s) has failed." +msgstr "A ejeção do dispositivo %s(%s) falhou." + +msgid "Previous unsaved project detected, do you want to restore it?" +msgstr "Projeto não salvo anterior detectado, deseja restaurá-lo?" + +msgid "Restore" +msgstr "Restaurar" + +msgid "" +"The current hot bed temperature is relatively high. The nozzle may be " +"clogged when printing this filament in a closed enclosure. Please open the " +"front door and/or remove the upper glass." +msgstr "" +"A temperatura atual da mesa aquecida está relativamente alta. A boquilha " +"pode ficar obstruída ao imprimir este filamento em um compartimento fechado. " +"Por favor, abra a porta frontal e/ou remova o vidro superior." + +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 "" +"A dureza do bico necessária pelo filamento é maior do que a dureza padrão do " +"bico da impressora. Por favor, substitua a boquilha endurecida ou o " +"filamento, caso contrário, a boquilha será desgastada ou danificada." + +msgid "" +"Enabling traditional timelapse photography may cause surface imperfections. " +"It is recommended to change to smooth mode." +msgstr "" +"A habilitação da fotografia tradicional em timelapse pode causar " +"imperfeições na superfície. É recomendado mudar para o modo suave." + +msgid "Expand sidebar" +msgstr "Expandir barra lateral" + +msgid "Collapse sidebar" +msgstr "Recolher barra lateral" + +#, c-format, boost-format +msgid "Loading file: %s" +msgstr "Carregando arquivo: %s" + +msgid "The 3mf is not supported by OrcaSlicer, load geometry data only." +msgstr "" +"O 3mf não é suportado pelo OrcaSlicer, carregar apenas dados de geometria." + +msgid "Load 3mf" +msgstr "Carregar 3mf" + +#, c-format, boost-format +msgid "" +"The 3mf's version %s is newer than %s's version %s, Found following keys " +"unrecognized:" +msgstr "" +"A versão %s do 3mf é mais recente do que a versão %s do %s, encontradas as " +"seguintes chaves não reconhecidas:" + +msgid "You'd better upgrade your software.\n" +msgstr "Será melhor atualizar o seu software.\n" + +#, c-format, boost-format +msgid "" +"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " +"software." +msgstr "" +"A versão %s do 3mf é mais recente do que a versão %s do %s, sugerimos " +"atualizar seu software." + +msgid "Invalid values found in the 3mf:" +msgstr "Valores inválidos encontrados no 3mf:" + +msgid "Please correct them in the param tabs" +msgstr "Por favor, corrija-os nas guias de parâmetros" + +msgid "The 3mf has following modified G-codes in filament or printer presets:" +msgstr "" +"O 3mf possui os seguintes G-codes modificados em presets de filamento ou " +"impressora:" + +msgid "" +"Please confirm that these modified G-codes are safe to prevent any damage to " +"the machine!" +msgstr "" +"Por favor, confirme se esses G-codes modificados são seguros para evitar " +"qualquer dano à máquina!" + +msgid "Modified G-codes" +msgstr "G-codes modificados" + +msgid "The 3mf has following customized filament or printer presets:" +msgstr "" +"O 3mf possui os seguintes perfis de filamento ou impressora personalizados:" + +msgid "" +"Please confirm that the G-codes within these presets are safe to prevent any " +"damage to the machine!" +msgstr "" +"Por favor, confirme se os G-codes dentro desses presets são seguros para " +"evitar qualquer dano à máquina!" + +msgid "Customized Preset" +msgstr "Perfil Personalizado" + +msgid "Name of components inside step file is not UTF8 format!" +msgstr "" +"O nome dos componentes dentro do arquivo STEP não está no formato UTF-8!" + +msgid "The name may show garbage characters!" +msgstr "O nome pode exibir caracteres inválidos!" + +msgid "Remember my choice." +msgstr "Lembrar minha escolha." + +#, boost-format +msgid "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "" +"Falha ao carregar o arquivo \"%1%\". Foi encontrada uma configuração " +"inválida." + +msgid "Objects with zero volume removed" +msgstr "Objetos com volume zero removidos" + +msgid "The volume of the object is zero" +msgstr "O volume do objeto é 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 "" +"O objeto do arquivo %s é muito pequeno e pode estar em metros ou polegadas.\n" +"Deseja dimensioná-lo para milímetros?" + +msgid "Object too small" +msgstr "Objeto muito pequeno" + +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 "" +"Este arquivo contém vários objetos posicionados em alturas múltiplas.\n" +"Em vez de considerá-los como múltiplos objetos, o arquivo deve ser " +"carregado\n" +"como um único objeto com múltiplas peças?" + +msgid "Multi-part object detected" +msgstr "Objeto multi-peça detectado" + +msgid "Load these files as a single object with multiple parts?\n" +msgstr "Carregar esses arquivos como um único objeto com múltiplas peças?\n" + +msgid "Object with multiple parts was detected" +msgstr "Objeto com múltiplas peças foi detectado" + +msgid "The file does not contain any geometry data." +msgstr "O arquivo não contém dados de geometria." + +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "" +"Seu objeto parece ser muito grande. Deseja dimensioná-lo para caber na mesa " +"de aquecimento automaticamente?" + +msgid "Object too large" +msgstr "Objeto muito grande" + +msgid "Export STL file:" +msgstr "Exportar arquivo STL:" + +msgid "Export AMF file:" +msgstr "Exportar arquivo AMF:" + +msgid "Save file as:" +msgstr "Salvar arquivo como:" + +msgid "Export OBJ file:" +msgstr "Exportar arquivo OBJ:" + +#, c-format, boost-format +msgid "" +"The file %s already exists\n" +"Do you want to replace it?" +msgstr "" +"O arquivo %s já existe\n" +"Deseja substituí-lo?" + +msgid "Comfirm Save As" +msgstr "Confirmar Salvar Como" + +msgid "Delete object which is a part of cut object" +msgstr "Excluir objeto que é uma peça do objeto cortado" + +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 "" +"Você está tentando excluir um objeto que é peça de um objeto cortado.\n" +"Essa ação quebrará uma correspondência de corte.\n" +"Após isso, a consistência do modelo não pode ser garantida." + +msgid "The selected object couldn't be split." +msgstr "O objeto selecionado não pôde ser dividido." + +msgid "Another export job is running." +msgstr "Outro trabalho de exportação está em execução." + +msgid "Unable to replace with more than one volume" +msgstr "Não é possível substituir por mais de um volume" + +msgid "Error during replace" +msgstr "Erro durante a substituição" + +msgid "Replace from:" +msgstr "Substituir de:" + +msgid "Select a new file" +msgstr "Selecione um novo arquivo" + +msgid "File for the replace wasn't selected" +msgstr "O arquivo para a substituição não foi selecionado" + +msgid "Please select a file" +msgstr "Por favor, selecione um arquivo" + +msgid "Do you want to replace it" +msgstr "Deseja substituí-lo" + +msgid "Message" +msgstr "Mensagem" + +msgid "Reload from:" +msgstr "Recarregar de:" + +msgid "Unable to reload:" +msgstr "Não é possível recarregar:" + +msgid "Error during reload" +msgstr "Erro durante a recarga" + +msgid "There are warnings after slicing models:" +msgstr "Existem avisos após o fatiamento dos modelos:" + +msgid "warnings" +msgstr "advertências" + +msgid "Invalid data" +msgstr "Dados inválidos" + +msgid "Slicing Canceled" +msgstr "Fatiamento Cancelado" + +#, c-format, boost-format +msgid "Slicing Plate %d" +msgstr "Fatiando Mesa %d" + +msgid "Please resolve the slicing errors and publish again." +msgstr "Por favor, resolva os erros de fatiamento e publique novamente." + +msgid "" +"Network Plug-in is not detected. Network related features are unavailable." +msgstr "" +"O plug-in de rede não está detectado. Recursos relacionados à rede estão " +"indisponíveis." + +msgid "" +"Preview only mode:\n" +"The loaded file contains gcode only, Can not enter the Prepare page" +msgstr "" +"Modo somente de visualização:\n" +"O arquivo carregado contém apenas código G, não é possível acessar a página " +"de Preparação" + +msgid "You can keep the modified presets to the new project or discard them" +msgstr "" +"Você pode manter os presets modificados no novo projeto ou descartá-los" + +msgid "Creating a new project" +msgstr "Criando um novo projeto" + +msgid "Load project" +msgstr "Carregar Projeto" + +msgid "" +"Failed to save the project.\n" +"Please check whether the folder exists online or if other programs open the " +"project file." +msgstr "" +"Falha ao salvar o projeto.\n" +"Por favor, verifique se a pasta existe online ou se outros programas estão " +"com o arquivo do projeto aberto." + +msgid "Save project" +msgstr "Salvar Projeto" + +msgid "Importing Model" +msgstr "Importando Modelo" + +msgid "prepare 3mf file..." +msgstr "preparar o arquivo 3mf..." + +msgid "Download failed, unknown file format." +msgstr "Baixar falhou, formato de arquivo desconhecido." + +msgid "downloading project ..." +msgstr "baixando projeto..." + +msgid "Download failed, File size exception." +msgstr "Baixar falhou, erro no tamanho do arquivo." + +#, c-format, boost-format +msgid "Project downloaded %d%%" +msgstr "Projeto baixado %d%%" + +msgid "" +"Importing to Orca Slicer failed. Please download the file and manually " +"import it." +msgstr "" +"A importação para a Orca Slicer falhou. Por favor, baixe o arquivo e importe " +"manualmente." + +msgid "Import SLA archive" +msgstr "Importar arquivo SLA" + +msgid "The selected file" +msgstr "O arquivo selecionado" + +msgid "does not contain valid gcode." +msgstr "não contém código G válido." + +msgid "Error occurs while loading G-code file" +msgstr "Erro ocorreu ao carregar o arquivo de código G" + +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "O carregamento de um arquivo ZIP no caminho %1% falhou." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Falha ao descompactar arquivo para %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Falha ao encontrar arquivo descompactado em %1%. Descompactação do arquivo " +"falhou." + +msgid "Drop project file" +msgstr "Solte o arquivo do projeto" + +msgid "Please select an action" +msgstr "Por favor, selecione uma ação" + +msgid "Open as project" +msgstr "Abrir como projeto" + +msgid "Import geometry only" +msgstr "Importar apenas a geometria" + +msgid "Only one G-code file can be opened at the same time." +msgstr "Apenas um arquivo de código G pode ser aberto de cada vez." + +msgid "G-code loading" +msgstr "Carregamento do G-code" + +msgid "G-code files can not be loaded with models together!" +msgstr "Arquivos de G-code não podem ser carregados junto com modelos!" + +msgid "Can not add models when in preview mode!" +msgstr "Não é possível adicionar modelos no modo de visualização!" + +msgid "All objects will be removed, continue?" +msgstr "Todos os objetos serão removidos, continuar?" + +msgid "The current project has unsaved changes, save it before continue?" +msgstr "O projeto atual tem alterações não salvas, salvar antes de continuar?" + +msgid "Number of copies:" +msgstr "Número de cópias:" + +msgid "Copies of the selected object" +msgstr "Cópias do objeto selecionado" + +msgid "Save G-code file as:" +msgstr "Salvar arquivo de código G como:" + +msgid "Save SLA file as:" +msgstr "Salvar arquivo SLA como:" + +msgid "The provided file name is not valid." +msgstr "O nome de arquivo fornecido não é válido." + +msgid "The following characters are not allowed by a FAT file system:" +msgstr "" +"Os seguintes caracteres não são permitidos por um sistema de arquivos FAT:" + +msgid "Save Sliced file as:" +msgstr "Salvar arquivo fatiado 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 "" +"O arquivo %s foi enviado para o espaço de armazenamento da impressora e pode " +"ser visualizado na impressora." + +msgid "" +"Unable to perform boolean operation on model meshes. Only positive parts " +"will be kept. You may fix the meshes and try agian." +msgstr "" +"Não é possível executar a operação booleana em malhas de modelo. Somente " +"partes positivas serão mantidas. Você pode consertar as malhas e tentar " +"novamente." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Motivo: parte \"%1%\" está vazia." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Motivo: parte \"%1%\" não está vinculada a um volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Motivo: parte \"%1%\" tem auto-intersecção." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Motivo: \"%1%\" e outra parte não tem intersecção." + +msgid "" +"Are you sure you want to store original SVGs with their local paths into the " +"3MF file?\n" +"If you hit 'NO', all SVGs in the project will not be editable any more." +msgstr "" +"Você tem certeza de que deseja armazenar os SVGs originais com seus caminhos " +"locais no arquivo 3MF?\n" +"Se pressionar 'NÃO', todos os SVGs no projeto não serão mais editáveis." + +msgid "Private protection" +msgstr "Proteção privada" + +msgid "Is the printer ready? Is the print sheet in place, empty and clean?" +msgstr "" +"A impressora está pronta? O folha de impressão está no lugar, vazia e limpa?" + +msgid "Upload and Print" +msgstr "Enviar e Imprimir" + +msgid "" +"Print By Object: \n" +"Suggest to use auto-arrange to avoid collisions when printing." +msgstr "" +"Imprimir por objeto: \n" +"Sugere-se usar o auto-arranjo para evitar colisões ao imprimir." + +msgid "Send G-code" +msgstr "Enviar G-code" + +msgid "Send to printer" +msgstr "Enviar para a impressora" + +msgid "Custom supports and color painting were removed before repairing." +msgstr "" +"Os suportes personalizados e a pintura de cores foram removidos antes do " +"reparo." + +msgid "Optimize Rotation" +msgstr "Otimizar Rotação" + +msgid "Invalid number" +msgstr "Número inválido" + +msgid "Plate Settings" +msgstr "Configurações da Mesa" + +#, boost-format +msgid "Number of currently selected parts: %1%\n" +msgstr "Número de peças atualmente selecionadas: %1%\n" + +#, boost-format +msgid "Number of currently selected objects: %1%\n" +msgstr "Número de objetos atualmente selecionados: %1%\n" + +#, boost-format +msgid "Part name: %1%\n" +msgstr "Nome da peça: %1%\n" + +#, boost-format +msgid "Object name: %1%\n" +msgstr "Nome do objeto: %1%\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% in\n" +msgstr "Tamanho: %1% x %2% x %3% pol\n" + +#, boost-format +msgid "Size: %1% x %2% x %3% mm\n" +msgstr "Tamanho: %1% x %2% x %3% mm\n" + +#, boost-format +msgid "Volume: %1% in³\n" +msgstr "Volume: %1% pol³\n" + +#, boost-format +msgid "Volume: %1% mm³\n" +msgstr "Volume: %1% mm3\n" + +#, boost-format +msgid "Triangles: %1%\n" +msgstr "Triângulos: %1%\n" + +msgid "Tips:" +msgstr "Dicas:" + +msgid "" +"\"Fix Model\" feature is currently only on Windows. Please repair the model " +"on Orca Slicer(windows) or CAD softwares." +msgstr "" +"A função \"Corrigir Modelo\" está atualmente disponível apenas no Windows. " +"Por favor, repare o modelo no Orca Slicer (Windows) ou softwares 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 "" +"Mesa %d: %s não é recomendada para ser usada para imprimir filamento %s(%s). " +"Se você ainda quiser fazer esta impressão, por favor, defina a temperatura " +"de mesa deste filamento para zero" + +msgid "Switching the language requires application restart.\n" +msgstr "Mudar o idioma requer reiniciar o aplicativo.\n" + +msgid "Do you want to continue?" +msgstr "Você deseja continuar?" + +msgid "Language selection" +msgstr "Seleção de Idioma" + +msgid "Switching application language while some presets are modified." +msgstr "" +"A mudança do idioma do aplicativo enquanto alguns presets estão modificados." + +msgid "Changing application language" +msgstr "Alterando o idioma do aplicativo" + +msgid "Changing the region will log out your account.\n" +msgstr "Mudar a região fará logout da sua conta.\n" + +msgid "Region selection" +msgstr "Seleção de Região" + +msgid "Second" +msgstr "Segundo" + +msgid "Browse" +msgstr "Procurar" + +msgid "Choose Download Directory" +msgstr "Escolha o Diretório de Download" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "Asia-Pacific" +msgstr "Ásia-Pacífico" + +msgid "China" +msgstr "China" + +msgid "Europe" +msgstr "Europa" + +msgid "North America" +msgstr "América do Norte" + +msgid "Others" +msgstr "Outros" + +msgid "Login Region" +msgstr "Região de Login" + +msgid "Stealth Mode" +msgstr "Modo Oculto" + +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" +"Isso interrompe a transmissão de dados para os serviços de nuvem de Bambu. " +"Os usuários que não usam máquinas BBL ou usar modo LAN só podem ativar esta " +"função com segurança." + +msgid "Enable network plugin" +msgstr "Ativar plugin de rede" + +msgid "Check for stable updates only" +msgstr "Verificar apenas atualizações estáveis" + +msgid "Metric" +msgstr "Métrico" + +msgid "Imperial" +msgstr "Imperial" + +msgid "Units" +msgstr "Unidades" + +msgid "Allow only one OrcaSlicer instance" +msgstr "Permitir apenas uma instância OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"No OSX, sempre há uma instância do aplicativo sendo executado por padrão. No " +"entanto, é permitido executar várias instâncias do mesmo aplicativo a partir " +"da linha de comando. Neste caso, apenas uma instância será permitida." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Se esta opção estiver habilitada, ao iniciar o OrcaSlicer e outra instância " +"do mesmo OrcaSlicer já estiver em execução, essa instância será reativada em " +"vez disso." + +msgid "Home" +msgstr "Início" + +msgid "Default Page" +msgstr "Página Padrão" + +msgid "Set the page opened on startup." +msgstr "Define a página aberta na inicialização." + +msgid "Touchpad" +msgstr "Touchpad" + +msgid "Camera style" +msgstr "Estilo da câmera" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Selecione o estilo de navegação da câmera.\n" +"Padrão: LMB + mover para rotacionar, RMB/MMB + mover para fazer pan.\n" +"Touchpad: Alt+mover para rotacionar, Shift+mover para fazer pan." + +msgid "Zoom to mouse position" +msgstr "Zoom para a posição do mouse" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" +"Dar zoom em direção à posição do ponteiro do mouse na visualização 3D, em " +"vez do centro da janela 2D." + +msgid "Use free camera" +msgstr "Usar câmera livre" + +msgid "If enabled, use free camera. If not enabled, use constrained camera." +msgstr "Se ativado, usa câmera livre. Se não ativado, usa câmera restrita." + +msgid "Reverse mouse zoom" +msgstr "Inverter zoom do mouse" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "Se ativo, inverte a direção de zoom com o mouse" + +msgid "Show splash screen" +msgstr "Mostrar tela de abertura" + +msgid "Show the splash screen during startup." +msgstr "Mostra a tela de abertura durante a inicialização." + +msgid "Show \"Tip of the day\" notification after start" +msgstr "Mostrar notificação \"Dica do dia\" após o início" + +msgid "If enabled, useful hints are displayed at startup." +msgstr "Se ativado, dicas úteis são exibidas na inicialização." + +msgid "Flushing volumes: Auto-calculate everytime the color changed." +msgstr "Volumes de Purga: Auto-calcular toda vez que a cor mudar." + +msgid "If enabled, auto-calculate everytime the color changed." +msgstr "Se ativado, auto-calcular toda vez que a cor mudar." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Volumes de Purga: Auto-calcular toda vez que a cor mudar." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "Se ativo, auto-calcular toda vez que a cor mudar" + +msgid "Remember printer configuration" +msgstr "Lembrar configuração da impressora" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Se ativo, Orca vai lembrar e alternar a configuração de filamento/processo " +"para cada impressora automaticamente." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" +"Gerenciamento de multi-dispositivos(Entra em vigor após reiniciar o Orca)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Com esta opção habilitada, você pode enviar uma tarefa para vários " +"dispositivos ao mesmo tempo e gerenciar vários dispositivos." + +msgid "Network" +msgstr "Rede" + +msgid "Auto sync user presets(Printer/Filament/Process)" +msgstr "" +"Sincronização automática de presets do usuário(Impressora/Filamento/Processo)" + +msgid "User Sync" +msgstr "Sincronização do Usuário" + +msgid "Update built-in Presets automatically." +msgstr "Atualizar presets integrados automaticamente." + +msgid "System Sync" +msgstr "Sincronização do Sistema" + +msgid "Clear my choice on the unsaved presets." +msgstr "Limpar minha escolha nos presets não salvos." + +msgid "Associate files to OrcaSlicer" +msgstr "Associar arquivos ao OrcaSlicer" + +msgid "Associate .3mf files to OrcaSlicer" +msgstr "Associar arquivos .3mf ao OrcaSlicer" + +msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" +msgstr "" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .3mf" + +msgid "Associate .stl files to OrcaSlicer" +msgstr "Associar arquivos .stl ao OrcaSlicer" + +msgid "If enabled, sets OrcaSlicer as default application to open .stl files" +msgstr "" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .stl" + +msgid "Associate .step/.stp files to OrcaSlicer" +msgstr "Associar arquivos .step/.stp ao OrcaSlicer" + +msgid "If enabled, sets OrcaSlicer as default application to open .step files" +msgstr "" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos ." +"step" + +msgid "Associate web links to OrcaSlicer" +msgstr "Associar links da web ao OrcaSlicer" + +msgid "Associate URLs to OrcaSlicer" +msgstr "Associar URLs ao OrcaSlicer" + +msgid "Current association: " +msgstr "Associação atual: " + +msgid "Associate prusaslicer://" +msgstr "Associar prusaslicer://" + +msgid "Not associated to any application" +msgstr "Não associado a nenhum aplicativo" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Associar OrcaSlicer com links prusaslicer:// para que o Orca possa abrir " +"modelos do Printable.com" + +msgid "Associate bambustudio://" +msgstr "Associar bambustudio://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Associar OrcaSlicer com bambustudio:// para que o Orca possa abrir modelos " +"de makerworld.com" + +msgid "Associate cura://" +msgstr "Associar cura://" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Associar OrcaSlicer com links cura:// para que o Orca possa abrir modelos do " +"thingiverse.com" + +msgid "Maximum recent projects" +msgstr "Máximo de projetos recentes" + +msgid "Maximum count of recent projects" +msgstr "Contagem máxima de projetos recentes" + +msgid "Clear my choice on the unsaved projects." +msgstr "Limpar minha escolha nos projetos não salvos." + +msgid "No warnings when loading 3MF with modified G-codes" +msgstr "Sem avisos ao carregar 3MF com códigos G modificados" + +msgid "Auto-Backup" +msgstr "Backup Automático" + +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" +"Faça backup do seu projeto periodicamente para restaurar de falhas " +"ocasionais." + +msgid "every" +msgstr "cada" + +msgid "The peroid of backup in seconds." +msgstr "O período de backup em segundos." + +msgid "Downloads" +msgstr "Downloads" + +msgid "Dark Mode" +msgstr "Modo Escuro" + +msgid "Enable Dark mode" +msgstr "Ativar Modo Escuro" + +msgid "Develop mode" +msgstr "Modo de Desenvolvimento" + +msgid "Skip AMS blacklist check" +msgstr "Pular verificação de lista negra AMS" + +msgid "Home page and daily tips" +msgstr "Página inicial e dicas diárias" + +msgid "Show home page on startup" +msgstr "Mostrar página inicial na inicialização" + +msgid "Sync settings" +msgstr "Sincronizar configurações" + +msgid "User sync" +msgstr "Sincronização do usuário" + +msgid "Preset sync" +msgstr "Sincronização de preset" + +msgid "Preferences sync" +msgstr "Sincronização de preferências" + +msgid "View control settings" +msgstr "Configurações de controle de visualização" + +msgid "Rotate of view" +msgstr "Rotação da visualização" + +msgid "Move of view" +msgstr "Movimento da visualização" + +msgid "Zoom of view" +msgstr "Zoom da visualização" + +msgid "Other" +msgstr "Outro" + +msgid "Mouse wheel reverses when zooming" +msgstr "O botão de roda do mouse inverte ao fazer zoom" + +msgid "Enable SSL(MQTT)" +msgstr "Ativar SSL(MQTT)" + +msgid "Enable SSL(FTP)" +msgstr "Ativar SSL(FTP)" + +msgid "Internal developer mode" +msgstr "Modo de desenvolvedor interno" + +msgid "Log Level" +msgstr "Nível de log" + +msgid "fatal" +msgstr "fatal" + +msgid "error" +msgstr "erro" + +msgid "warning" +msgstr "aviso" + +msgid "debug" +msgstr "depurar" + +msgid "trace" +msgstr "traço" + +msgid "Host Setting" +msgstr "Configuração de host" + +msgid "DEV host: api-dev.bambu-lab.com/v1" +msgstr "Host DEV: api-dev.bambu-lab.com/v1" + +msgid "QA host: api-qa.bambu-lab.com/v1" +msgstr "Host QA: api-qa.bambu-lab.com/v1" + +msgid "PRE host: api-pre.bambu-lab.com/v1" +msgstr "Host PRE: api-pre.bambu-lab.com/v1" + +msgid "Product host" +msgstr "Host de Produto" + +msgid "debug save button" +msgstr "botão de salvar depuração" + +msgid "save debug settings" +msgstr "salvar configurações de depuração" + +msgid "DEBUG settings have saved successfully!" +msgstr "As configurações de depuração foram salvas com sucesso!" + +msgid "Switch cloud environment, Please login again!" +msgstr "Mudar o ambiente de nuvem, Por favor, faça login novamente!" + +msgid "System presets" +msgstr "Presets do sistema" + +msgid "User presets" +msgstr "Presets do usuário" + +msgid "Incompatible presets" +msgstr "Presets incompatíveis" + +msgid "AMS filaments" +msgstr "Filamentos AMS" + +msgid "Click to pick filament color" +msgstr "Clique para escolher a cor do filamento" + +msgid "Please choose the filament colour" +msgstr "Por favor, escolha a cor do filamento" + +msgid "Add/Remove presets" +msgstr "Adicionar/Remover presets" + +msgid "Edit preset" +msgstr "Editar preset" + +msgid "Project-inside presets" +msgstr "Presets dentro do projeto" + +msgid "Add/Remove filaments" +msgstr "Adicionar/Remover filamentos" + +msgid "Add/Remove materials" +msgstr "Adicionar/Remover materiais" + +msgid "Select/Remove printers(system presets)" +msgstr "Selecionar/Remover impressoras (presets do sistema)" + +msgid "Create printer" +msgstr "Criar impressora" + +msgid "The selected preset is null!" +msgstr "O preset selecionada é nulo!" + +msgid "End" +msgstr "Fim" + +msgid "Customize" +msgstr "Personalizar" + +msgid "Other layer filament sequence" +msgstr "Sequência de filamento de outra camada" + +msgid "Please input layer value (>= 2)." +msgstr "Por favor, insira o valor da camada (>= 2)." + +msgid "Plate name" +msgstr "Nome da mesa" + +msgid "Same as Global Print Sequence" +msgstr "Mesmo que a Sequência Global de Impressão" + +msgid "Print sequence" +msgstr "Sequência de impressão" + +msgid "Same as Global" +msgstr "Igual ao Global" + +msgid "Disable" +msgstr "Desativar" + +msgid "Spiral vase" +msgstr "Vaso espiral" + +msgid "First layer filament sequence" +msgstr "Sequência de filamento da primeira camada" + +msgid "Same as Global Plate Type" +msgstr "Mesmo que o Tipo de Mesa Global" + +msgid "Same as Global Bed Type" +msgstr "Mesmo que o Tipo de Mesa Global" + +msgid "By Layer" +msgstr "Por camada" + +msgid "By Object" +msgstr "Por objeto" + +msgid "Accept" +msgstr "Aceitar" + +msgid "Log Out" +msgstr "Sair" + +msgid "Slice all plate to obtain time and filament estimation" +msgstr "Fatiar todas as mesas para obter estimativa de tempo e filamento" + +msgid "Packing project data into 3mf file" +msgstr "Empacotando dados do projeto em arquivo 3mf" + +msgid "Uploading 3mf" +msgstr "Carregando 3mf" + +msgid "Jump to model publish web page" +msgstr "Ir para a página web de publicação de modelos" + +msgid "Note: The preparation may takes several minutes. Please be patiant." +msgstr "" +"Nota: A preparação pode levar vários minutos. Por favor, seja paciente." + +msgid "Publish" +msgstr "Publicar" + +msgid "Publish was cancelled" +msgstr "A publicação foi cancelada" + +msgid "Slicing Plate 1" +msgstr "Fatiando mesa 1" + +msgid "Packing data to 3mf" +msgstr "Empacotando dados em 3mf" + +msgid "Jump to webpage" +msgstr "Ir para a página web" + +#, c-format, boost-format +msgid "Save %s as" +msgstr "Salvar %s como" + +msgid "User Preset" +msgstr "Preset do usuário" + +msgid "Preset Inside Project" +msgstr "Preset dentro do projeto" + +msgid "Name is unavailable." +msgstr "O nome não está disponível." + +msgid "Overwrite a system profile is not allowed" +msgstr "Sobrescrever um perfil de sistema não é permitido" + +#, boost-format +msgid "Preset \"%1%\" already exists." +msgstr "O perfil \"%1%\" já existe." + +#, boost-format +msgid "Preset \"%1%\" already exists and is incompatible with current printer." +msgstr "O perfil \"%1%\" já existe e é incompatível com a impressora atual." + +msgid "Please note that saving action will replace this preset" +msgstr "Por favor, note que a ação de salvar substituirá este perfil" + +msgid "The name cannot be the same as a preset alias name." +msgstr "O nome não pode ser o mesmo que um nome de alias de perfil." + +msgid "Save preset" +msgstr "Salvar perfil" + +msgctxt "PresetName" +msgid "Copy" +msgstr "Cópia" + +#, boost-format +msgid "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "A impressora \"%1%\" está selecionada com o perfil \"%2%\"" + +#, boost-format +msgid "Please choose an action with \"%1%\" preset after saving." +msgstr "Por favor, escolha uma ação com o perfil \"%1%\" após salvar." + +#, boost-format +msgid "For \"%1%\", change \"%2%\" to \"%3%\" " +msgstr "Para \"%1%\", mude \"%2%\" para \"%3%\" " + +#, boost-format +msgid "For \"%1%\", add \"%2%\" as a new preset" +msgstr "Para \"%1%\", adicione \"%2%\" como um novo perfil" + +#, boost-format +msgid "Simply switch to \"%1%\"" +msgstr "Simplesmente mude para \"%1%\"" + +msgid "Task canceled" +msgstr "Tarefa cancelada" + +msgid "(LAN)" +msgstr "(LAN)" + +msgid "Search" +msgstr "Buscar" + +msgid "My Device" +msgstr "Meu dispositivo" + +msgid "Other Device" +msgstr "Outro dispositivo" + +msgid "Online" +msgstr "Disponível" + +msgid "Input access code" +msgstr "Digite o código de acesso" + +msgid "Can't find my devices?" +msgstr "Não consegue encontrar meus dispositivos?" + +msgid "Log out successful." +msgstr "Sessão encerrada com sucesso." + +msgid "Busy" +msgstr "Ocupado" + +msgid "Bambu Cool Plate" +msgstr "Bambu Cool Plate (Mesa Fria)" + +msgid "PLA Plate" +msgstr "Mesa PLA" + +msgid "Bambu Engineering Plate" +msgstr "Mesa de Engenharia Bambu" + +msgid "Bambu Smooth PEI Plate" +msgstr "Mesa de PEI Lisa Bambu" + +msgid "High temperature Plate" +msgstr "Mesa de Alta Temperatura" + +msgid "Bambu Textured PEI Plate" +msgstr "Mesa Texturizada PEI Bambu" + +msgid "Send print job to" +msgstr "Enviar trabalho de impressão para" + +msgid "Flow Dynamics Calibration" +msgstr "Calibração de Dinâmica de Fluxo" + +msgid "Click here if you can't connect to the printer" +msgstr "Clique aqui se não conseguir conectar-se à impressora" + +msgid "send completed" +msgstr "enviado completo" + +msgid "Error code" +msgstr "Código de erro" + +msgid "No login account, only printers in LAN mode are displayed" +msgstr "Sem conta de login, apenas as impressoras em modo LAN são exibidas" + +msgid "Connecting to server" +msgstr "Conectando ao servidor" + +msgid "Synchronizing device information" +msgstr "Sincronizando informações do dispositivo" + +msgid "Synchronizing device information time out" +msgstr "Tempo limite de sincronização das informações do dispositivo" + +msgid "Cannot send the print job when the printer is updating firmware" +msgstr "" +"Não é possível enviar o trabalho de impressão quando a impressora está " +"atualizando o firmware" + +msgid "" +"The printer is executing instructions. Please restart printing after it ends" +msgstr "" +"A impressora está executando instruções. Por favor, reinicie a impressão " +"após terminar" + +msgid "The printer is busy on other print job" +msgstr "A impressora está ocupada com outro trabalho de impressão" + +#, c-format, boost-format +msgid "" +"Filament %s exceeds the number of AMS slots. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" +"O filamento %s excede o número de slots AMS. Por favor, atualize o firmware " +"da impressora para suportar a atribuição de slots AMS." + +msgid "" +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." +msgstr "" +"O filamento excede o número de slots AMS. Por favor, atualize o firmware da " +"impressora para suportar a atribuição de slots AMS." + +msgid "" +"Filaments to AMS slots mappings have been established. You can click a " +"filament above to change its mapping AMS slot" +msgstr "" +"Foram estabelecidos mapeamentos de filamentos para slots AMS. Você pode " +"clicar em um filamento acima para mudar seu slot AMS mapeado" + +msgid "" +"Please click each filament above to specify its mapping AMS slot before " +"sending the print job" +msgstr "" +"Por favor, clique em cada filamento acima para especificar seu slot AMS " +"mapeado antes de enviar o trabalho de impressão" + +#, 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 "" +"O filamento %s não corresponde ao filamento no slot AMS %s. Por favor, " +"atualize o firmware da impressora para suportar a atribuição de slots AMS." + +msgid "" +"Filament does not match the filament in AMS slot. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" +"O filamento não corresponde ao filamento no slot AMS. Por favor, atualize o " +"firmware da impressora para suportar a atribuição de slots AMS." + +msgid "" +"The printer firmware only supports sequential mapping of filament => AMS " +"slot." +msgstr "" +"O firmware da impressora só suporta mapeamento sequencial de filamento => " +"slot AMS." + +msgid "An SD card needs to be inserted before printing." +msgstr "Um cartão SD precisa ser inserido antes de imprimir." + +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"A impressora selecionada (%s) é incompatível com o perfil escolhido de " +"impressora no fatiador (%s)." + +msgid "An SD card needs to be inserted to record timelapse." +msgstr "Um cartão SD precisa ser inserido para gravar o timelapse." + +msgid "" +"Cannot send the print job to a printer whose firmware is required to get " +"updated." +msgstr "" +"Não é possível enviar o trabalho de impressão para uma impressora cujo " +"firmware precisa ser atualizado." + +msgid "Cannot send the print job for empty plate" +msgstr "Não é possível enviar o trabalho de impressão para uma mesa vazia" + +msgid "This printer does not support printing all plates" +msgstr "Esta impressora não suporta a impressão em todas as mesas" + +msgid "" +"When enable spiral vase mode, machines with I3 structure will not generate " +"timelapse videos." +msgstr "" +"Quando o modo vaso espiral está ativado, máquinas com estrutura I3 não irão " +"gerar vídeos timelapse." + +msgid "" +"Timelapse is not supported because Print sequence is set to \"By object\"." +msgstr "" +"Timelapse não é suportado porque a sequência de impressão está configurada " +"para \"Por objeto\"." + +msgid "Errors" +msgstr "Erros" + +msgid "Please check the following:" +msgstr "Por favor, verifique o seguinte:" + +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 "" +"O tipo de impressora selecionado ao gerar o G-Code não está consistente com " +"a impressora atualmente selecionada. É recomendado que você use o mesmo tipo " +"de impressora para fatiar." + +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 "" +"Há alguns filamentos desconhecidos nos mapeamentos AMS. Por favor, verifique " +"se eles são os filamentos necessários. Se estiverem corretos, pressione " +"\"Confirmar\" para iniciar a impressão." + +#, c-format, boost-format +msgid "nozzle in preset: %s %s" +msgstr "bico no perfil: %s %s" + +#, c-format, boost-format +msgid "nozzle memorized: %.2f %s" +msgstr "bico memorizado: %.2f %s" + +msgid "" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." +msgstr "" +"Seu diâmetro de bico no arquivo fatiado não é consistente com o bico " +"memorizado. Se você mudou seu bico recentemente, vá para Dispositivo > " +"Partes da impressora para alterar as configurações." + +#, c-format, boost-format +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"Imprimir material de temperatura alta (material %s) com %s poderá causar " +"danos ao bico" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Por favor, corrija o erro acima, caso contrário a impressão não poderá " +"continuar." + +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" +"Por favor, clique no botão de confirmação se ainda deseja prosseguir com a " +"impressão." + +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" +"Conectando à impressora. Não é possível cancelar durante o processo de " +"conexão." + +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" +"Cuidado ao usar! A calibração de fluxo no PEI Texturizado pode falhar devido " +"à superfície irregular." + +msgid "Automatic flow calibration using Micro Lidar" +msgstr "Calibração automática de fluxo usando Micro Lidar" + +msgid "Modifying the device name" +msgstr "Modificando o nome do dispositivo" + +msgid "Bind with Pin Code" +msgstr "Vincular com Código PIN" + +msgid "Send to Printer SD card" +msgstr "Enviar para o cartão SD da impressora" + +msgid "Cannot send the print task when the upgrade is in progress" +msgstr "" +"Não é possível enviar a tarefa de impressão quando a atualização está em " +"progresso" + +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"A impressora selecionada é incompatível com os perfis de impressora " +"escolhidos." + +msgid "An SD card needs to be inserted before send to printer SD card." +msgstr "" +"Um cartão SD precisa ser inserido antes de enviar para o cartão SD da " +"impressora." + +msgid "The printer is required to be in the same LAN as Orca Slicer." +msgstr "A impressora deve estar na mesma LAN do Orca Slicer." + +msgid "The printer does not support sending to printer SD card." +msgstr "A impressora não suporta enviar para o cartão SD da impressora." + +msgid "Slice ok." +msgstr "Fatiamento ok." + +msgid "View all Daily tips" +msgstr "Ver todas as dicas diárias" + +msgid "Failed to create socket" +msgstr "Falha ao criar o socket" + +msgid "Failed to connect socket" +msgstr "Falha ao conectar o socket" + +msgid "Failed to publish login request" +msgstr "Falha ao publicar a solicitação de login" + +msgid "Get ticket from device timeout" +msgstr "Tempo esgotado ao obter o ticket do dispositivo" + +msgid "Get ticket from server timeout" +msgstr "Tempo esgotado ao obter o ticket do servidor" + +msgid "Failed to post ticket to server" +msgstr "Falha ao enviar o ticket para o servidor" + +msgid "Failed to parse login report reason" +msgstr "Falha ao analisar o motivo do relatório de login" + +msgid "Receive login report timeout" +msgstr "Tempo esgotado ao receber o relatório de login" + +msgid "Unknown Failure" +msgstr "Falha desconhecida" + +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Encontre o Código PIN na página da conta na tela da impressora,\n" +" e digite o Código PIN abaixo." + +msgid "Can't find Pin Code?" +msgstr "Não consegue encontrar o Código PIN?" + +msgid "Pin Code" +msgstr "Código PIN" + +msgid "Binding..." +msgstr "Vinculando..." + +msgid "Please confirm on the printer screen" +msgstr "Confirme na tela da impressora" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Login falhou. Por favor, verifique o Código PIN." + +msgid "Log in printer" +msgstr "Entrar na impressora" + +msgid "Would you like to log in this printer with current account?" +msgstr "Você gostaria de entrar nesta impressora com a conta atual?" + +msgid "Check the reason" +msgstr "Verifique o motivo" + +msgid "Read and accept" +msgstr "Ler e aceitar" + +msgid "Terms and Conditions" +msgstr "Termos e Condições" + +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 "" +"Obrigado por adquirir um dispositivo Bambu Lab. Antes de usar seu " +"dispositivo Bambu Lab, leia os termos e condições. Ao clicar para concordar " +"em usar seu dispositivo Bambu Lab, você concorda em cumprir a Política de " +"Privacidade e os Termos de Uso (coletivamente, os \"Termos\"). Se você não " +"concordar ou não cumprir com a Política de Privacidade da Bambu Lab, não use " +"os equipamentos e serviços da Bambu Lab." + +msgid "and" +msgstr "e" + +msgid "Privacy Policy" +msgstr "Política de Privacidade" + +msgid "We ask for your help to improve everyone's printer" +msgstr "Pedimos sua ajuda para melhorar a impressora de todos" + +msgid "Statement about User Experience Improvement Program" +msgstr "Declaração sobre o Programa de Melhoria da Experiência do Usuário" + +#, 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 "" +"Na comunidade de Impressão 3D, aprendemos com os sucessos e falhas uns dos " +"outros para ajustar nossos próprios parâmetros de fatiamento e " +"configurações. %s segue o mesmo princípio e utiliza aprendizado de máquina " +"para melhorar seu desempenho a partir dos sucessos e falhas do grande número " +"de impressões feitas por nossos usuários. Estamos treinando %s para ser mais " +"inteligente alimentando-os com dados do mundo real. Se você concordar, este " +"serviço acessará informações de seus registros de erros e registros de uso, " +"que podem incluir informações descritas na Política de Privacidade. Não " +"coletaremos quaisquer Dados Pessoais pelos quais um indivíduo possa ser " +"identificado diretamente ou indiretamente, incluindo, sem limitação, nomes, " +"endereços, informações de pagamento ou números de telefone. Ao ativar este " +"serviço, você concorda com estes termos e com a declaração sobre a Política " +"de Privacidade." + +msgid "Statement on User Experience Improvement Plan" +msgstr "Declaração sobre o Plano de Melhoria da Experiência do Usuário" + +msgid "Log in successful." +msgstr "Entrada bem-sucedida." + +msgid "Log out printer" +msgstr "Desconectar a impressora" + +msgid "Would you like to log out the printer?" +msgstr "Deseja desconectar a impressora?" + +msgid "Please log in first." +msgstr "Por favor, faça login primeiro." + +msgid "There was a problem connecting to the printer. Please try again." +msgstr "" +"Houve um problema ao conectar-se à impressora. Por favor, tente novamente." + +msgid "Failed to log out." +msgstr "Falha ao desconectar." + +#. TRN "Save current Settings" +#, c-format, boost-format +msgid "Save current %s" +msgstr "Salvar %s atual" + +msgid "Delete this preset" +msgstr "Excluir este preset" + +msgid "Search in preset" +msgstr "Pesquisar nos presets" + +msgid "Click to reset all settings to the last saved preset." +msgstr "" +"Clique para redefinir todas as configurações para o último preset salvo." + +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 "" +"A Torre Prime é necessária para um timelapse suave. Pode haver falhas no " +"modelo sem a torre prime. Tem certeza de que deseja desativar a torre prime?" + +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 "" +"A Torre Prime é necessária para um timelapse suave. Pode haver falhas no " +"modelo sem a torre prime. Deseja ativar a torre prime?" + +msgid "Still print by object?" +msgstr "Ainda imprimir por objeto?" + +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 "" +"Adicionamos um estilo experimental \"Tree Slim\" que apresenta um volume de " +"suporte menor, mas uma resistência mais fraca.\n" +"Recomendamos usar com: 0 camadas de interface, 0 distância superior, 2 " +"paredes." + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings automatically\n" +"No - Do not change these settings for me" +msgstr "" +"Alterar essas configurações automaticamente? \n" +"Sim - Alterar essas configurações automaticamente\n" +"Não - Não alterar essas configurações para mim" + +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 os estilos \"Tree Strong\" e \"Tree Hybrid\", recomendamos as seguintes " +"configurações: pelo menos 2 camadas de interface, pelo menos 0.1mm de " +"distância superior em z ou uso de materiais de suporte na interface." + +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 "" +"Ao usar material de suporte para a interface de suporte, recomendamos as " +"seguintes configurações:\n" +"distância z superior 0, espaçamento de interface 0, padrão concêntrico e " +"desabilitar altura de camada de suporte independente" + +msgid "" +"Enabling this option will modify the model's shape. If your print requires " +"precise dimensions or is part of an assembly, it's important to double-check " +"whether this change in geometry impacts the functionality of your print." +msgstr "" +"Habilitar esta opção modificará a forma do modelo. Se sua impressão exigir " +"dimensões precisas ou fizer parte de uma montagem, é importante verificar " +"duplamente se essa mudança na geometria afeta a funcionalidade da sua " +"impressão." + +msgid "Are you sure you want to enable this option?" +msgstr "Tem certeza de que deseja habilitar esta opção?" + +msgid "" +"Layer height is too small.\n" +"It will set to min_layer_height\n" +msgstr "" +"A altura da camada é muito pequena.\n" +"Ela será definida como altura mínima da camada\n" +"A altura da camada é muito pequena.\n" +"Ela será definida como altura mínima da camada\n" + +msgid "" +"Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " +"height limits ,this may cause printing quality issues." +msgstr "" +"A altura da camada excede o limite em Configurações da Impressora -> " +"Extrusora -> Limites de altura da camada, isso pode causar problemas de " +"qualidade de impressão." + +msgid "Adjust to the set range automatically? \n" +msgstr "Ajustar automaticamente à faixa definida? \n" + +msgid "Adjust" +msgstr "Ajustar" + +msgid "Ignore" +msgstr "Ignorar" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Recurso experimental: Retrair e cortar o filamento a uma distância maior " +"durante mudanças de filamento para minimizar a purga. Embora possa reduzir " +"notavelmente a purga, ele também pode elevar o risco de bolhas no bico ou " +"outras complicações de impressão." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Recurso experimental: Retrair e cortar o filamento a uma distância maior " +"durante as trocas de filamento para minimizar a purga. Embora isso possa " +"reduzir consideravelmente a purga, também pode aumentar o risco de " +"obstruções no bico ou outras complicações de impressão. Por favor, use com o " +"firmware mais recente da impressora." + +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 "" +"Ao gravar um timelapse sem o hotend aparecer, é recomendável adicionar uma " +"\"Torre Prime para Timelapse\" \n" +"clique com o botão direito na posição vazia da mesa e escolha \"Adicionar " +"Primitivo\"->\"Torre Prime para Timelapse\"." + +msgid "Line width" +msgstr "Largura da linha" + +msgid "Seam" +msgstr "Costura" + +msgid "Precision" +msgstr "Precisão" + +msgid "Wall generator" +msgstr "Gerador de perímetros" + +msgid "Walls and surfaces" +msgstr "Perímetros e superfícies" + +msgid "Bridging" +msgstr "Ponte" + +msgid "Overhangs" +msgstr "Overhangs" + +msgid "Walls" +msgstr "Perímetros" + +msgid "Top/bottom shells" +msgstr "Camadas de topo/base" + +msgid "Initial layer speed" +msgstr "Velocidade da primeira camada" + +msgid "Other layers speed" +msgstr "Velocidade de outras camadas" + +msgid "Overhang speed" +msgstr "Velocidade em overhangs" + +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 "" +"Esta é a velocidade para vários graus de avanço. Os graus de avanço são " +"expressos como uma porcentagem da largura da linha. A velocidade 0 significa " +"que não há desaceleração para o intervalo de graus de avanço e a velocidade " +"do perímetro é usada" + +msgid "Bridge" +msgstr "Ponte" + +msgid "Set speed for external and internal bridges" +msgstr "Definir velocidade para pontes externas e internas" + +msgid "Travel speed" +msgstr "Velocidade de deslocamento" + +msgid "Acceleration" +msgstr "Aceleração" + +msgid "Jerk(XY)" +msgstr "Jerk(XY)" + +msgid "Raft" +msgstr "Jangada" + +msgid "Support filament" +msgstr "Filamento de suporte" + +msgid "Tree supports" +msgstr "Suportes de árvore" + +msgid "Skirt" +msgstr "Saia" + +msgid "Prime tower" +msgstr "Torre Prime" + +msgid "Special mode" +msgstr "Modo especial" + +msgid "G-code output" +msgstr "Opções do G-code" + +msgid "Post-processing Scripts" +msgstr "Scripts de pós-processamento" + +msgid "Notes" +msgstr "Notas" + +msgid "Frequent" +msgstr "Frequente" + +#, 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] "" +"A linha %s seguinte contém palavras-chave reservadas.\n" +"Por favor, remova-a, ou afetará a visualização do código G e a estimativa de " +"tempo de impressão." +msgstr[1] "" +"As linhas %s seguintes contêm palavras-chave reservadas.\n" +"Por favor, remova-as, ou afetará a visualização do código G e a estimativa " +"de tempo de impressão." + +msgid "Reserved keywords found" +msgstr "Palavras-chave reservadas encontradas" + +msgid "Setting Overrides" +msgstr "Sobrescrever configurações" + +msgid "Retraction" +msgstr "Retração" + +msgid "Basic information" +msgstr "Informações básicas" + +msgid "Recommended nozzle temperature" +msgstr "Temperatura recomendada do bico" + +msgid "Recommended nozzle temperature range of this filament. 0 means no set" +msgstr "" +"Faixa de temperatura recomendada para esta boquilha. 0 significa não definido" + +msgid "Print chamber temperature" +msgstr "Temperatura da câmara de impressão" + +msgid "Print temperature" +msgstr "Temperatura de impressão" + +msgid "Nozzle" +msgstr "Bico" + +msgid "Nozzle temperature when printing" +msgstr "Temperatura do bico ao imprimir" + +msgid "Cool plate" +msgstr "Mesa fria" + +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate" +msgstr "" +"Temperatura da mesa quando a cool plate (mesa fria) está instalada. Valor 0 " +"significa que o filamento não suporta impressão na cool plate" + +msgid "Engineering plate" +msgstr "Mesa de engenharia" + +msgid "" +"Bed temperature when engineering plate is installed. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"Temperatura da mesa quando a mesa de engenharia está instalada. Valor 0 " +"significa que o filamento não suporta impressão na Mesa de Engenharia" + +msgid "Smooth PEI Plate / High Temp Plate" +msgstr "Mesa PEI lisa / Mesa de alta temperatura" + +msgid "" +"Bed temperature when Smooth PEI Plate/High temperature plate is installed. " +"Value 0 means the filament does not support to print on the Smooth PEI Plate/" +"High Temp Plate" +msgstr "" +"Temperatura da mesa quando a mesa PEI lisa/ de alta temperatura está " +"instalada. O valor 0 significa que o filamento não suporta a impressão na " +"Mesa PEI lisa/Mesa de Alta Temperatura" + +msgid "Textured PEI Plate" +msgstr "Mesa 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 da mesa quando a mesa PEI texturizada está instalada. O valor 0 " +"significa que o filamento não suporta impressão na mesa PEI texturizada" + +msgid "Volumetric speed limitation" +msgstr "Limitação de fluxo volumétrico" + +msgid "Cooling" +msgstr "Resfriamento" + +msgid "Cooling for specific layer" +msgstr "Resfriamento para camada específica" + +msgid "Part cooling fan" +msgstr "Ventilador de resfriamento da peça" + +msgid "Min fan speed threshold" +msgstr "Limiar de velocidade mínima do ventilador" + +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 "" +"A velocidade do ventilador de resfriamento da peça começará a funcionar na " +"velocidade mínima quando o tempo estimado da camada não for mais longo do " +"que o tempo da camada ajustado. Quando o tempo da camada for menor que o " +"limite, a velocidade do ventilador é interpolada entre a velocidade mínima e " +"máxima de acordo com o tempo de impressão da camada" + +msgid "Max fan speed threshold" +msgstr "Limiar de velocidade máxima do ventilador" + +msgid "" +"Part cooling fan speed will be max when the estimated layer time is shorter " +"than the setting value" +msgstr "" +"A velocidade do ventilador de resfriamento da peça será máxima quando o " +"tempo estimado da camada for menor que o valor ajustado" + +msgid "Auxiliary part cooling fan" +msgstr "Ventilador auxiliar de resfriamento da peça" + +msgid "Exhaust fan" +msgstr "Ventilador de exaustão" + +msgid "During print" +msgstr "Durante a impressão" + +msgid "Complete print" +msgstr "Impressão concluída" + +msgid "Filament start G-code" +msgstr "G-code de início do filamento" + +msgid "Filament end G-code" +msgstr "G-code final do filamento" + +msgid "Multimaterial" +msgstr "Multimaterial" + +msgid "Wipe tower parameters" +msgstr "Parâmetros da Torre Prime" + +msgid "Toolchange parameters with single extruder MM printers" +msgstr "" +"Parâmetros de troca de ferramentas com impressoras MM de extrusora única" + +msgid "Ramming settings" +msgstr "Configurações de moldeamento" + +msgid "Toolchange parameters with multi extruder MM printers" +msgstr "" +"Parâmetros de troca de ferramentas com impressoras MM de múltiplas extrusoras" + +msgid "Printable space" +msgstr "Espaço de impressão" + +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + +msgid "Cooling Fan" +msgstr "Ventilador de resfriamento" + +msgid "Fan speed-up time" +msgstr "Tempo de aceleração do ventilador" + +msgid "Extruder Clearance" +msgstr "Margem da extrusora" + +msgid "Adaptive bed mesh" +msgstr "Bed Mesh adaptativo" + +msgid "Accessory" +msgstr "Acessório" + +msgid "Machine gcode" +msgstr "G-Code da máquina" + +msgid "Machine start G-code" +msgstr "G-Code de início da máquina" + +msgid "Machine end G-code" +msgstr "G-Code final da máquina" + +msgid "Printing by object G-code" +msgstr "G-Code de impressão por objeto" + +msgid "Before layer change G-code" +msgstr "G-Code antes da mudança de camada" + +msgid "Layer change G-code" +msgstr "G-Code de mudança de camada" + +msgid "Time lapse G-code" +msgstr "G-Code de timelapse" + +msgid "Change filament G-code" +msgstr "G-Code de mudança de filamento" + +msgid "Change extrusion role G-code" +msgstr "G-Code de mudança de tipo de extrusão" + +msgid "Pause G-code" +msgstr "G-Code de pausa" + +msgid "Template Custom G-code" +msgstr "G-Code personalizado do modelo" + +msgid "Motion ability" +msgstr "Movimento" + +msgid "Normal" +msgstr "normal" + +msgid "Speed limitation" +msgstr "Limitação de velocidade" + +msgid "Acceleration limitation" +msgstr "Limitação de aceleração" + +msgid "Jerk limitation" +msgstr "Limitação de Jerk" + +msgid "Single extruder multimaterial setup" +msgstr "Configuração de múltiplos materiais com um único extrusor" + +msgid "Wipe tower" +msgstr "Torre Prime" + +msgid "Single extruder multimaterial parameters" +msgstr "Parâmetros de múltiplos materiais com um único extrusor" + +msgid "Layer height limits" +msgstr "Limites de altura da camada" + +msgid "Lift Z Enforcement" +msgstr "Aplicação do Z hop" + +msgid "Retraction when switching material" +msgstr "Retração ao trocar 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 "" +"A opção de Limpeza não está disponível ao usar o modo de Retração de " +"Firmware.\n" +"\n" +"Deseja desativá-lo para habilitar a Retração de Firmware?" + +msgid "Firmware Retraction" +msgstr "Retração de Firmware" + +msgid "Detached" +msgstr "Desanexado" + +#, c-format, boost-format +msgid "" +"%d Filament Preset and %d Process Preset is attached to this printer. Those " +"presets would be deleted if the printer is deleted." +msgstr "" +"%d Preset de Filamento e %d Preset de Processo estão vinculados a esta " +"impressora. Esses presets serão excluídos se a impressora for deletada." + +msgid "Presets inherited by other presets can not be deleted!" +msgstr "Os perfis herdados por outros perfis não podem ser excluídos!" + +msgid "The following presets inherit this preset." +msgid_plural "The following preset inherits this preset." +msgstr[0] "Os seguintes perfis herdam este perfil." +msgstr[1] "O seguinte perfil herda este perfil." + +#. TRN Remove/Delete +#, boost-format +msgid "%1% Preset" +msgstr "%1% Perfil" + +msgid "Following preset will be deleted too." +msgid_plural "Following presets will be deleted too." +msgstr[0] "O seguinte perfil também será excluído." +msgstr[1] "Os seguintes perfis também serão excluídos." + +msgid "" +"Are you sure to delete the selected preset? \n" +"If the preset corresponds to a filament currently in use on your printer, " +"please reset the filament information for that slot." +msgstr "" +"Tem certeza de que deseja excluir o perfil selecionado? \n" +"Se o perfil corresponde a um filamento atualmente em uso em sua impressora, " +"redefina as informações do filamento para esse slot." + +#, boost-format +msgid "Are you sure to %1% the selected preset?" +msgstr "Tem certeza de %1% o perfil selecionado?" + +msgid "All" +msgstr "Todos" + +msgid "Set" +msgstr "Definir" + +msgid "Click to reset current value and attach to the global value." +msgstr "Clique para redefinir o valor atual e anexá-lo ao valor global." + +msgid "Click to drop current modify and reset to saved value." +msgstr "" +"Clique para descartar a modificação atual e redefinir para o valor salvo." + +msgid "Process Settings" +msgstr "Configurações do Processo" + +msgid "Undef" +msgstr "Indefinido" + +msgid "Unsaved Changes" +msgstr "Alterações não salvas" + +msgid "Transfer or discard changes" +msgstr "Transferir ou descartar alterações" + +msgid "Old Value" +msgstr "Valor Antigo" + +msgid "New Value" +msgstr "Novo Valor" + +msgid "Transfer" +msgstr "Transferir" + +msgid "Don't save" +msgstr "Não salvar" + +msgid "Discard" +msgstr "Descartar" + +msgid "Click the right mouse button to display the full text." +msgstr "Clique com o botão direito do mouse para exibir o texto completo." + +msgid "All changes will not be saved" +msgstr "Todas as alterações não serão salvas" + +msgid "All changes will be discarded." +msgstr "Todas as alterações serão descartadas." + +msgid "Save the selected options." +msgstr "Salvar as opções selecionadas." + +msgid "Keep the selected options." +msgstr "Manter as opções selecionadas." + +msgid "Transfer the selected options to the newly selected preset." +msgstr "Transferir as opções selecionadas para o perfil recém-selecionado." + +#, boost-format +msgid "" +"Save the selected options to preset \n" +"\"%1%\"." +msgstr "" +"Salvar as opções selecionadas para o perfil \n" +"\"%1%\"." + +#, boost-format +msgid "" +"Transfer the selected options to the newly selected preset \n" +"\"%1%\"." +msgstr "" +"Transferir as opções selecionadas para o perfil recém-selecionado \n" +"\"%1%\"." + +#, boost-format +msgid "Preset \"%1%\" contains the following unsaved changes:" +msgstr "O perfil \"%1%\" contém as seguintes alterações não salvas:" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" +msgstr "" +"O perfil \"%1%\" não é compatível com o novo perfil da impressora e contém " +"as seguintes alterações não salvas:" + +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"O perfil \"%1%\" não é compatível com o novo perfil de processo e contém as " +"seguintes alterações não salvas:" + +#, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Você alterou algumas configurações do preset \"%1%\". " + +msgid "" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"Você pode salvar ou descartar os valores predefinidos que você modificou." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Você pode salvar ou descartar os valores predefinidos que você modificou, ou " +"escolher transferir os valores modificados para o novo preset." + +msgid "You have previously modified your settings." +msgstr "Você modificou suas configurações anteriormente." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Você pode descartar os valores predefinidos que você modificou, ou escolher " +"transferir os valores modificados para o novo projeto." + +msgid "Extruders count" +msgstr "Número de extrusoras" + +msgid "General" +msgstr "Geral" + +msgid "Capabilities" +msgstr "Capacidades" + +msgid "Show all presets (including incompatible)" +msgstr "Mostrar todos os perfis (incluindo os incompatíveis)" + +msgid "Select presets to compare" +msgstr "Selecione os perfis para comparar" + +msgid "" +"You can only transfer to current active profile because it has been modified." +msgstr "" +"Só é possível transferir para o perfil ativo atual porque ele foi modificado." + +msgid "" +"Transfer the selected options from left preset to the right.\n" +"Note: New modified presets will be selected in settings tabs after close " +"this dialog." +msgstr "" +"Transfira as opções selecionadas do perfil à esquerda para o da direita.\n" +"Nota: Novos perfis modificados serão selecionados nas guias de configurações " +"após fechar este diálogo." + +msgid "Transfer values from left to right" +msgstr "Transferir valores da esquerda para a direita" + +msgid "" +"If enabled, this dialog can be used for transfer selected values from left " +"to right preset." +msgstr "" +"Se ativo, este diálogo pode ser usado para transferir valores selecionados " +"do perfil à esquerda para o da direita." + +msgid "Add File" +msgstr "Adicionar arquivo" + +msgid "Set as cover" +msgstr "Definir como capa" + +msgid "Cover" +msgstr "Capa" + +#, boost-format +msgid "The name \"%1%\" already exists." +msgstr "O nome \"%1%\" já existe." + +msgid "Basic Info" +msgstr "Informações Básicas" + +msgid "Pictures" +msgstr "Imagens" + +msgid "Bill of Materials" +msgstr "Lista de Materiais" + +msgid "Assembly Guide" +msgstr "Guia de Montagem" + +msgid "Author" +msgstr "Autor" + +msgid "Model Name" +msgstr "Nome do Modelo" + +#, c-format, boost-format +msgid "%s Update" +msgstr "%s Atualizar" + +msgid "A new version is available" +msgstr "Uma nova versão está disponível" + +msgid "Configuration update" +msgstr "Atualização de configuração" + +msgid "A new configuration package available, Do you want to install it?" +msgstr "Um novo pacote de configuração está disponível, Deseja instalá-lo?" + +msgid "Description:" +msgstr "Descrição:" + +msgid "Configuration incompatible" +msgstr "Configuração incompatível" + +msgid "the configuration package is incompatible with current application." +msgstr "o pacote de configuração é incompatível com a aplicação atual." + +#, 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 "" +"O pacote de configuração é incompatível com a aplicação atual.\n" +"%s atualizará o pacote de configuração, caso contrário, não será possível " +"iniciar" + +#, c-format, boost-format +msgid "Exit %s" +msgstr "Sair %s" + +msgid "the Configuration package is incompatible with current APP." +msgstr "o pacote de configuração é incompatível com o APP atual." + +msgid "Configuration updates" +msgstr "Atualizações de configuração" + +msgid "No updates available." +msgstr "Nenhuma atualização disponível." + +msgid "The configuration is up to date." +msgstr "A configuração está atualizada." + +msgid "Obj file Import color" +msgstr "" + +msgid "Specify number of colors:" +msgstr "" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "" + +msgid "Recommended " +msgstr "" + +msgid "Current filament colors:" +msgstr "" + +msgid "Quick set:" +msgstr "" + +msgid "Color match" +msgstr "" + +msgid "Approximate color matching." +msgstr "" + +msgid "Append" +msgstr "" + +msgid "Add consumable extruder after existing extruders." +msgstr "" + +msgid "Reset mapped extruders." +msgstr "" + +msgid "Cluster colors" +msgstr "" + +msgid "Map Filament" +msgstr "" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" + +msgid "Ramming customization" +msgstr "Customização de moldeamento" + +msgid "" +"Ramming denotes the rapid extrusion just before a tool change in a single-" +"extruder MM printer. Its purpose is to properly shape the end of the " +"unloaded filament so it does not prevent insertion of the new filament and " +"can itself be reinserted later. This phase is important and different " +"materials can require different extrusion speeds to get the good shape. For " +"this reason, the extrusion rates during ramming are adjustable.\n" +"\n" +"This is an expert-level setting, incorrect adjustment will likely lead to " +"jams, extruder wheel grinding into filament etc." +msgstr "" +"O moldeamento denota a extrusão rápida logo antes de uma troca de " +"ferramentas em uma impressora MM de extrusão única. Seu propósito é dar " +"forma adequadamente à ponta do filamento descarregado para que não impeça a " +"inserção do novo filamento e possa ser reinserido posteriormente. Essa fase " +"é importante e diferentes materiais podem exigir velocidades de extrusão " +"diferentes para obter uma boa forma. Por esse motivo, as taxas de extrusão " +"durante o moldeamento são ajustáveis.\n" +"\n" +"Esta é uma configuração de nível especialista, ajustes incorretos " +"provavelmente resultarão em travamentos, moagem da roda de extrusão no " +"filamento, etc." + +msgid "Total ramming time" +msgstr "Tempo total de moldeamento" + +msgid "s" +msgstr "s" + +msgid "Total rammed volume" +msgstr "Volume total de moldeamento de extremidade" + +msgid "Ramming line width" +msgstr "Largura da linha de moldeamento" + +msgid "Ramming line spacing" +msgstr "Espaçamento da linha de moldeamento" + +msgid "Auto-Calc" +msgstr "Auto-Calc" + +msgid "Re-calculate" +msgstr "Recalcular" + +msgid "Flushing volumes for filament change" +msgstr "Volumes de purga para troca de filamento" + +msgid "" +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" +msgstr "" +"O Orca recalculará seus volumes de purga toda vez que a cor dos filamentos " +"for alterada. Você pode desativar o cálculo automático em Orca Slicer > " +"Preferências" + +msgid "Flushing volume (mm³) for each filament pair." +msgstr "Volume de purga (mm³) para cada par de filamentos." + +#, c-format, boost-format +msgid "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "Sugestão: Volume de Purga no intervalo [%d, %d]" + +#, c-format, boost-format +msgid "The multiplier should be in range [%.2f, %.2f]." +msgstr "O multiplicador deve estar no intervalo [%.2f, %.2f]." + +msgid "Multiplier" +msgstr "Multiplicador" + +msgid "unloaded" +msgstr "descarregado" + +msgid "loaded" +msgstr "carregado" + +msgid "Filament #" +msgstr "Filamento #" + +msgid "From" +msgstr "De" + +msgid "To" +msgstr "Para" + +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "Plug-in de Rede Bambu não detectado." + +msgid "Click here to download it." +msgstr "Clique aqui para baixá-lo." + +msgid "Login" +msgstr "Entrar" + +msgid "The configuration package is changed in previous Config Guide" +msgstr "O pacote de configuração é alterado no Guia de Configuração anterior" + +msgid "Configuration package changed" +msgstr "Pacote de configuração alterado" + +msgid "Toolbar" +msgstr "Barra de ferramentas" + +msgid "Objects list" +msgstr "Lista de objetos" + +msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" +msgstr "Importar dados de geometria de arquivos STL/STEP/3MF/OBJ/AMF" + +msgid "⌘+Shift+G" +msgstr "⌘+Shift+G" + +msgid "Ctrl+Shift+G" +msgstr "Ctrl+Shift+G" + +msgid "Paste from clipboard" +msgstr "Colar da área de transferência" + +msgid "Show/Hide 3Dconnexion devices settings dialog" +msgstr "Mostrar/Ocultar diálogo de configurações de dispositivos 3Dconnexion" + +msgid "Switch table page" +msgstr "Trocar página da tabela" + +msgid "Show keyboard shortcuts list" +msgstr "Mostrar lista de atalhos de teclado" + +msgid "Global shortcuts" +msgstr "Atalhos globais" + +msgid "Rotate View" +msgstr "Rotacionar visualização" + +msgid "Pan View" +msgstr "Movimentar visualização" + +msgid "Mouse wheel" +msgstr "Roda do mouse" + +msgid "Zoom View" +msgstr "Aproximar visualização" + +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 "" +"Orienta automaticamente os objetos selecionados ou todos os objetos. Se " +"houver objetos selecionados, ele apenas orientará os selecionados. Caso " +"contrário, orientará todos os objetos no disco atual." + +msgid "Shift+Tab" +msgstr "Shift+Tab" + +msgid "Collapse/Expand the sidebar" +msgstr "Recolher/Expandir a barra lateral" + +msgid "⌘+Any arrow" +msgstr "⌘+Qualquer seta" + +msgid "Movement in camera space" +msgstr "Movimento no espaço da câmera" + +msgid "⌥+Left mouse button" +msgstr "Botão esquerdo do mouse ⌥+" + +msgid "Select a part" +msgstr "Selecionar uma peça" + +msgid "⌘+Left mouse button" +msgstr "Botão esquerdo do mouse ⌘+" + +msgid "Select multiple objects" +msgstr "Selecionar vários objetos" + +msgid "Ctrl+Any arrow" +msgstr "Ctrl+Qualquer seta" + +msgid "Alt+Left mouse button" +msgstr "Botão esquerdo do mouse Alt+" + +msgid "Ctrl+Left mouse button" +msgstr "Botão esquerdo do mouse Ctrl+" + +msgid "Shift+Left mouse button" +msgstr "Botão esquerdo do mouse Shift+" + +msgid "Select objects by rectangle" +msgstr "Selecionar objetos por retângulo" + +msgid "Arrow Up" +msgstr "Seta para cima" + +msgid "Move selection 10 mm in positive Y direction" +msgstr "Mover seleção 10 mm na direção Y positiva" + +msgid "Arrow Down" +msgstr "Seta para baixo" + +msgid "Move selection 10 mm in negative Y direction" +msgstr "Mover seleção 10 mm na direção Y negativa" + +msgid "Arrow Left" +msgstr "Seta para esquerda" + +msgid "Move selection 10 mm in negative X direction" +msgstr "Mover seleção 10 mm na direção X negativa" + +msgid "Arrow Right" +msgstr "Seta para direita" + +msgid "Move selection 10 mm in positive X direction" +msgstr "Mover seleção 10 mm na direção X positiva" + +msgid "Shift+Any arrow" +msgstr "Shift+Qualquer seta" + +msgid "Movement step set to 1 mm" +msgstr "Passo de movimento configurado para 1 mm" + +msgid "keyboard 1-9: set filament for object/part" +msgstr "teclado 1-9: ajustar filamento para objeto/peça" + +msgid "Camera view - Default" +msgstr "Visualização da câmera - Padrão" + +msgid "Camera view - Top" +msgstr "Visualização da câmera - Superior" + +msgid "Camera view - Bottom" +msgstr "Visualização da câmera - Inferior" + +msgid "Camera view - Front" +msgstr "Visualização da câmera - Frontal" + +msgid "Camera view - Behind" +msgstr "Visualização da câmera - Posterior" + +msgid "Camera Angle - Left side" +msgstr "Ângulo da câmera - Lado esquerdo" + +msgid "Camera Angle - Right side" +msgstr "Ângulo da câmera - Lado direito" + +msgid "Select all objects" +msgstr "Selecionar todos os objetos" + +msgid "Gizmo move" +msgstr "Mover gizmo" + +msgid "Gizmo scale" +msgstr "Escala do gizmo" + +msgid "Gizmo rotate" +msgstr "Rotacionar gizmo" + +msgid "Gizmo cut" +msgstr "Cortar gizmo" + +msgid "Gizmo Place face on bed" +msgstr "Posicionar face do gizmo na mesa" + +msgid "Gizmo SLA support points" +msgstr "Pontos de suporte SLA do gizmo" + +msgid "Gizmo FDM paint-on seam" +msgstr "Costura de pintura FDM do gizmo" + +msgid "Gizmo Text emboss / engrave" +msgstr "Texturizar / gravar texto no gizmo" + +msgid "Zoom in" +msgstr "Dar zoom" + +msgid "Zoom out" +msgstr "Dar zoom" + +msgid "Switch between Prepare/Preview" +msgstr "Alternar entre Preparar/Visualizar" + +msgid "Plater" +msgstr "Mesa" + +msgid "Move: press to snap by 1mm" +msgstr "Mover: pressione para ajustar em 1mm" + +msgid "⌘+Mouse wheel" +msgstr "⌘+Roda do mouse" + +msgid "Support/Color Painting: adjust pen radius" +msgstr "Suporte/Pintura em cores: ajustar o raio da caneta" + +msgid "⌥+Mouse wheel" +msgstr "⌥+Roda do mouse" + +msgid "Support/Color Painting: adjust section position" +msgstr "Suporte/Pintura em cores: ajustar a posição da seção" + +msgid "Ctrl+Mouse wheel" +msgstr "Ctrl+Roda do mouse" + +msgid "Alt+Mouse wheel" +msgstr "Alt+Roda do mouse" + +msgid "Gizmo" +msgstr "Gizmo" + +msgid "Set extruder number for the objects and parts" +msgstr "Definir o número da extrusora para os objetos e peças" + +msgid "Delete objects, parts, modifiers " +msgstr "Excluir objetos, peças, modificadores " + +msgid "Select the object/part and press space to change the name" +msgstr "Selecione o objeto/peça e pressione espaço para mudar o nome" + +msgid "Mouse click" +msgstr "Clique do mouse" + +msgid "Select the object/part and mouse click to change the name" +msgstr "Selecione o objeto/peça e clique do mouse para mudar o nome" + +msgid "Objects List" +msgstr "Lista de Objetos" + +msgid "Vertical slider - Move active thumb Up" +msgstr "Controle deslizante vertical - Mover o polegar ativo para cima" + +msgid "Vertical slider - Move active thumb Down" +msgstr "Controle deslizante vertical - Mover o polegar ativo para baixo" + +msgid "Horizontal slider - Move active thumb Left" +msgstr "Controle deslizante horizontal - Mover o polegar ativo para a esquerda" + +msgid "Horizontal slider - Move active thumb Right" +msgstr "Controle deslizante horizontal - Mover o polegar ativo para a direita" + +msgid "On/Off one layer mode of the vertical slider" +msgstr "Ativar/Desativar modo de uma camada do controle deslizante vertical" + +msgid "On/Off g-code window" +msgstr "Ativar/Desativar janela de G-Code" + +msgid "Move slider 5x faster" +msgstr "Mover o controle deslizante 5 vezes mais rápido" + +msgid "Shift+Mouse wheel" +msgstr "Shift+Roda do mouse" + +msgid "Horizontal slider - Move to start position" +msgstr "Barra deslizante horizontal — Mover para a posição inicial" + +msgid "Horizontal slider - Move to last position" +msgstr "Barra deslizante horizontal — Mover para a última posição" + +msgid "Release Note" +msgstr "Nota de lançamento" + +#, c-format, boost-format +msgid "version %s update information :" +msgstr "informações de atualização da versão %s:" + +msgid "Network plug-in update" +msgstr "Atualização do plug-in de rede" + +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Clique em OK para atualizar o plug-in de rede quando o Orca Slicer for " +"iniciado novamente." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "Um novo plug-in de rede (%s) está disponível. Deseja instalá-lo?" + +msgid "New version of Orca Slicer" +msgstr "Nova versão do Orca Slicer" + +msgid "Skip this Version" +msgstr "Pular esta versão" + +msgid "Done" +msgstr "Concluído" + +msgid "resume" +msgstr "retomar" + +msgid "Resume Printing" +msgstr "Retomar impressão" + +msgid "Resume Printing(defects acceptable)" +msgstr "Retomar Impressão (defeitos aceitáveis)" + +msgid "Resume Printing(problem solved)" +msgstr "Retomar Impressão (problema resolvido)" + +msgid "Stop Printing" +msgstr "Parar impressão" + +msgid "Check Assistant" +msgstr "Checar Assistente" + +msgid "Filament Extruded, Continue" +msgstr "Filamento Extrudado, Continuar" + +msgid "Not Extruded Yet, Retry" +msgstr "Não Extrudado, Tente Novamente" + +msgid "Finished, Continue" +msgstr "Concluído, Continuar" + +msgid "Load Filament" +msgstr "Carregar Filamento" + +msgid "Filament Loaded, Resume" +msgstr "Filamento Carregado, Retomar" + +msgid "View Liveview" +msgstr "Exibir vista ao vivo" + +msgid "Confirm and Update Nozzle" +msgstr "Confirmar e Atualizar Bico" + +msgid "LAN Connection Failed (Sending print file)" +msgstr "Falha na conexão LAN (enviando arquivo de impressão)" + +msgid "" +"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +msgstr "" +"Passo 1, por favor, confirme se o Orca Slicer e sua impressora estão na " +"mesma LAN." + +msgid "" +"Step 2, if the IP and Access Code below are different from the actual values " +"on your printer, please correct them." +msgstr "" +"Passo 2, se o IP e o Código de Acesso abaixo forem diferentes dos valores " +"reais na sua impressora, corrija-os." + +msgid "IP" +msgstr "PI" + +msgid "Access Code" +msgstr "Código de Acesso" + +msgid "Where to find your printer's IP and Access Code?" +msgstr "Onde encontrar o IP e o Código de Acesso da sua impressora?" + +msgid "Step 3: Ping the IP address to check for packet loss and latency." +msgstr "" +"Passo 3: Pingue o endereço IP para verificar a perda de pacotes e a latência." + +msgid "Test" +msgstr "Testar" + +msgid "IP and Access Code Verified! You may close the window" +msgstr "IP e Código de Acesso Verificados! Você pode fechar a janela" + +msgid "Connection failed, please double check IP and Access Code" +msgstr "Falha na conexão, por favor, verifique o IP e o Código de Acesso" + +msgid "" +"Connection failed! If your IP and Access Code is correct, \n" +"please move to step 3 for troubleshooting network issues" +msgstr "" +"Conexão falhou! Se o seu IP e Código de Acesso estão corretos, \n" +"por favor, passe para o passo 3 para resolver problemas de rede" + +msgid "Model:" +msgstr "Modelo:" + +msgid "Serial:" +msgstr "Número de série:" + +msgid "Version:" +msgstr "Versão:" + +msgid "Update firmware" +msgstr "Atualizar firmware" + +msgid "Beta version" +msgstr "Versão beta" + +msgid "Latest version" +msgstr "Última versão" + +msgid "Updating" +msgstr "Atualizando" + +msgid "Updating failed" +msgstr "Falha na atualização" + +msgid "Updating successful" +msgstr "Atualização bem-sucedida" + +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 "" +"Tem certeza de que deseja atualizar? Isso levará cerca de 10 minutos. Não " +"desligue a energia enquanto a impressora estiver atualizando." + +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 "" +"Uma atualização importante foi detectada e precisa ser executada antes que a " +"impressão possa continuar. Deseja atualizar agora? Você também pode " +"atualizar posteriormente em 'Atualizar 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 Orca." +msgstr "" +"A versão do firmware está anormal. Reparar e atualizar é necessário antes de " +"imprimir. Você deseja atualizar agora? Você também pode atualizar mais tarde " +"na impressora ou atualizar da próxima vez que iniciar o Orca." + +msgid "Extension Board" +msgstr "Mesa de Extensão" + +msgid "Saving objects into the 3mf failed." +msgstr "Falha ao salvar objetos no formato 3mf." + +msgid "Only Windows 10 is supported." +msgstr "Apenas o Windows 10 é suportado." + +msgid "Failed to initialize the WinRT library." +msgstr "Falha ao inicializar a biblioteca WinRT." + +msgid "Exporting objects" +msgstr "Exportando objetos" + +msgid "Failed loading objects." +msgstr "Falha ao carregar objetos." + +msgid "Repairing object by Windows service" +msgstr "Reparando objeto pelo serviço do Windows" + +msgid "Repair failed." +msgstr "Falha na reparação." + +msgid "Loading repaired objects" +msgstr "Carregando objetos reparados" + +msgid "Exporting 3mf file failed" +msgstr "Falha ao exportar o arquivo 3mf" + +msgid "Import 3mf file failed" +msgstr "Falha ao importar o arquivo 3mf" + +msgid "Repaired 3mf file does not contain any object" +msgstr "O arquivo 3mf reparado não contém nenhum objeto" + +msgid "Repaired 3mf file contains more than one object" +msgstr "O arquivo 3mf reparado contém mais de um objeto" + +msgid "Repaired 3mf file does not contain any volume" +msgstr "O arquivo 3mf reparado não contém nenhum volume" + +msgid "Repaired 3mf file contains more than one volume" +msgstr "O arquivo 3mf reparado contém mais de um volume" + +msgid "Repair finished" +msgstr "Reparo concluído" + +msgid "Repair canceled" +msgstr "Reparo cancelado" + +#, boost-format +msgid "Copying of file %1% to %2% failed: %3%" +msgstr "Falha ao copiar o arquivo %1% para %2%: %3%" + +msgid "Need to check the unsaved changes before configuration updates." +msgstr "" +"É necessário verificar as alterações não salvas antes das atualizações de " +"configuração." + +msgid "Configuration package: " +msgstr "Pacote de configuração: " + +msgid " updated to " +msgstr " atualizado para " + +msgid "Open G-code file:" +msgstr "Abrir arquivo G-code:" + +msgid "" +"One object has empty initial layer and can't be printed. Please Cut the " +"bottom or enable supports." +msgstr "" +"Um objeto tem uma primeira camada vazia e não pode ser impresso. Por favor, " +"corte a base ou habilite os suportes." + +#, boost-format +msgid "Object can't be printed for empty layer between %1% and %2%." +msgstr "" +"O objeto não pode ser impresso devido a uma camada vazia entre %1% e %2%." + +#, boost-format +msgid "Object: %1%" +msgstr "Objeto: %1%" + +msgid "" +"Maybe parts of the object at these height are too thin, or the object has " +"faulty mesh" +msgstr "" +"Talvez partes do objeto nessa altura sejam muito finas, ou o objeto tenha " +"uma malha com falhas" + +msgid "No object can be printed. Maybe too small" +msgstr "Nenhum objeto pode ser impresso. Talvez seja muito pequeno" + +msgid "" +"Failed to generate gcode for invalid custom G-code.\n" +"\n" +msgstr "" +"Falha ao gerar o código G para um G-code personalizado inválido.\n" +"\n" + +msgid "Please check the custom G-code or use the default custom G-code." +msgstr "Verifique o G-code personalizado ou use o G-code personalizado padrão." + +#, boost-format +msgid "Generating G-code: layer %1%" +msgstr "Gerando código G: camada %1%" + +msgid "Inner wall" +msgstr "Perímetro interno" + +msgid "Outer wall" +msgstr "Perímetro externo" + +msgid "Overhang wall" +msgstr "Overhang" + +msgid "Sparse infill" +msgstr "Preenchimento" + +msgid "Internal solid infill" +msgstr "Preenchimento sólido" + +msgid "Top surface" +msgstr "Superfície superior" + +msgid "Bottom surface" +msgstr "Superfície inferior" + +msgid "Internal Bridge" +msgstr "Ponte interna" + +msgid "Gap infill" +msgstr "Preenchimento de vão" + +msgid "Support interface" +msgstr "Interface de suporte" + +msgid "Support transition" +msgstr "Transição de suporte" + +msgid "Multiple" +msgstr "Múltiplo" + +#, boost-format +msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " +msgstr "" +"Falha ao calcular a largura da linha de %1%. Não é possível obter o valor de " +"\"%2%\". " + +msgid "" +"Invalid spacing supplied to Flow::with_spacing(), check your layer height " +"and extrusion width" +msgstr "" +"Espaçamento inválido fornecido para Flow::with_spacing(), verifique a altura " +"da camada e a largura da extrusão." + +msgid "undefined error" +msgstr "erro indefinido" + +msgid "too many files" +msgstr "muitos arquivos" + +msgid "file too large" +msgstr "arquivo muito grande" + +msgid "unsupported method" +msgstr "método não suportado" + +msgid "unsupported encryption" +msgstr "criptografia não suportada" + +msgid "unsupported feature" +msgstr "recurso não suportado" + +msgid "failed finding central directory" +msgstr "falha ao encontrar o diretório central" + +msgid "not a ZIP archive" +msgstr "não é um arquivo ZIP" + +msgid "invalid header or corrupted" +msgstr "cabeçalho inválido ou corrompido" + +msgid "unsupported multidisk" +msgstr "multidisco não suportado" + +msgid "decompression failed" +msgstr "falha na descompressão" + +msgid "compression failed" +msgstr "falha na compressão" + +msgid "unexpected decompressed size" +msgstr "tamanho descomprimido inesperado" + +msgid "CRC check failed" +msgstr "verificação de CRC falhou" + +msgid "unsupported central directory size" +msgstr "tamanho de diretório central não suportado" + +msgid "allocation failed" +msgstr "falha na alocação" + +msgid "file open failed" +msgstr "falha na abertura do arquivo" + +msgid "file create failed" +msgstr "falha na criação do arquivo" + +msgid "file write failed" +msgstr "falha na escrita do arquivo" + +msgid "file read failed" +msgstr "falha na leitura do arquivo" + +msgid "file close failed" +msgstr "falha no fechamento do arquivo" + +msgid "file seek failed" +msgstr "falha na busca do arquivo" + +msgid "file stat failed" +msgstr "falha na estatística do arquivo" + +msgid "invalid parameter" +msgstr "parâmetro inválido" + +msgid "invalid filename" +msgstr "nome de arquivo inválido" + +msgid "buffer too small" +msgstr "buffer muito pequeno" + +msgid "internal error" +msgstr "erro interno" + +msgid "file not found" +msgstr "arquivo não encontrado" + +msgid "archive too large" +msgstr "arquivo muito grande" + +msgid "validation failed" +msgstr "validação falhou" + +msgid "write callback failed" +msgstr "falha na chamada de escrita" + +#, boost-format +msgid "" +"%1% is too close to exclusion area, there may be collisions when printing." +msgstr "" +"%1% está muito perto da área de exclusão, pode haver colisões durante a " +"impressão." + +#, boost-format +msgid "%1% is too close to others, and collisions may be caused." +msgstr "%1% está muito perto de outros, e colisões podem ocorrer." + +#, boost-format +msgid "%1% is too tall, and collisions will be caused." +msgstr "%1% está muito alto, e ocorrerão colisões." + +msgid " is too close to others, there may be collisions when printing." +msgstr " está muito perto de outros, pode haver colisões durante a impressão." + +msgid " is too close to exclusion area, there may be collisions when printing." +msgstr "" +" está muito perto da área de exclusão, pode haver colisões durante a " +"impressão." + +msgid "Prime Tower" +msgstr "Torre Prime" + +msgid " is too close to others, and collisions may be caused.\n" +msgstr " está muito perto de outros, e colisões podem ocorrer.\n" + +msgid " is too close to exclusion area, and collisions will be caused.\n" +msgstr " está muito perto da área de exclusão, e ocorrerão colisões.\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 "" +"Não é possível imprimir vários filamentos que têm grande diferença de " +"temperatura juntos. Caso contrário, o extrusor e a bocal podem ficar " +"bloqueados ou danificados durante a impressão" + +msgid "No extrusions under current settings." +msgstr "Nenhuma extrusão com as configurações atuais." + +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" +"O modo suave do timelapse não é suportado quando a sequência \"por objeto\" " +"está ativada." + +msgid "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." +msgstr "" +"Por favor, selecione a sequência de impressão \"Por objeto\" para imprimir " +"vários objetos no modo vaso espiral." + +msgid "" +"The spiral vase mode does not work when an object contains more than one " +"materials." +msgstr "" +"O modo de vaso espiral não funciona quando um objeto contém mais de um " +"material." + +#, boost-format +msgid "The object %1% exceeds the maximum build volume height." +msgstr "O objeto %1% excede a altura máxima do volume de impressão." + +#, boost-format +msgid "" +"While the object %1% itself fits the build volume, its last layer exceeds " +"the maximum build volume height." +msgstr "" +"Embora o objeto %1% em si se ajuste ao volume de impressão, sua última " +"camada excede a altura máxima do volume de impressão." + +msgid "" +"You might want to reduce the size of your model or change current print " +"settings and retry." +msgstr "" +"Você pode querer reduzir o tamanho do seu modelo ou alterar as configurações " +"de impressão atuais e tentar novamente." + +msgid "Variable layer height is not supported with Organic supports." +msgstr "A altura de camada variável não é suportada com suportes orgânicos." + +msgid "" +"Different nozzle diameters and different filament diameters is not allowed " +"when prime tower is enabled." +msgstr "" +"Diâmetros de bico diferentes e diâmetros de filamento diferentes não são " +"permitidos quando a Torre Prime está ativa." + +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"A Torre Prime atualmente só é suportada com o endereçamento relativo da " +"extrusora (use_relative_e_distances=1)." + +msgid "" +"Ooze prevention is currently not supported with the prime tower enabled." +msgstr "" +"A prevenção de vazamento atualmente não é suportada com a Torre Prime ativa." + +msgid "" +"The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"A Torre Prime atualmente só é suportada para os G-code do tipo Marlin, " +"RepRap/Sprinter, RepRapFirmware e Repetier." + +msgid "The prime tower is not supported in \"By object\" print." +msgstr "A Torre Prime não é suportada na impressão \"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 "" +"A Torre Prime não é suportada quando a altura de camada adaptativa está " +"ativa. Isso requer que todos os objetos tenham a mesma altura de camada." + +msgid "The prime tower requires \"support gap\" to be multiple of layer height" +msgstr "" +"A Torre Prime requer que o \"lacuna de suporte\" seja múltiplo da altura da " +"camada" + +msgid "The prime tower requires that all objects have the same layer heights" +msgstr "" +"A Torre Prime requer que todos os objetos tenham as mesmas alturas de camada" + +msgid "" +"The prime tower requires that all objects are printed over the same number " +"of raft layers" +msgstr "" +"A Torre Prime requer que todos os objetos sejam impressos sobre o mesmo " +"número de camadas da Jangada." + +msgid "" +"The prime tower requires that all objects are sliced with the same layer " +"heights." +msgstr "" +"A Torre Prime requer que todos os objetos sejam fatiados com as mesmas " +"alturas de camada." + +msgid "" +"The prime tower is only supported if all objects have the same variable " +"layer height" +msgstr "" +"A Torre Prime só é suportada se todos os objetos tiverem a mesma altura de " +"camada variável" + +msgid "Too small line width" +msgstr "Largura de linha muito pequena" + +msgid "Too large line width" +msgstr "Largura de linha muito grande" + +msgid "" +"The prime tower requires that support has the same layer height with object." +msgstr "" +"A Torre Prime requer que o suporte tenha a mesma altura de camada do objeto." + +msgid "" +"Organic support tree tip diameter must not be smaller than support material " +"extrusion width." +msgstr "" +"O diâmetro da ponta da árvore de suporte orgânico não deve ser menor do que " +"a largura de extrusão do material de suporte." + +msgid "" +"Organic support branch diameter must not be smaller than 2x support material " +"extrusion width." +msgstr "" +"O diâmetro do ramo de suporte orgânico não deve ser menor do que 2x a " +"largura de extrusão do material de suporte." + +msgid "" +"Organic support branch diameter must not be smaller than support tree tip " +"diameter." +msgstr "" +"O diâmetro do ramo de suporte orgânico não deve ser menor do que o diâmetro " +"da ponta da árvore de suporte." + +msgid "" +"Support enforcers are used but support is not enabled. Please enable support." +msgstr "" +"Os reforços de suporte são usados, mas o suporte não está habilitado. Por " +"favor, habilite o suporte." + +msgid "Layer height cannot exceed nozzle diameter" +msgstr "A altura da camada não pode exceder o diâmetro da bocal" + +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 "" +"O endereçamento relativo do extrusor requer a reinicialização da posição do " +"extrusor em cada camada para evitar perda de precisão de ponto flutuante. " +"Adicione \"G92 E0\" ao código de camada." + +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"\"G92 E0\" foi encontrado em before_layer_gcode, o que é incompatível com o " +"endereçamento absoluto do extrusor." + +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"\"G92 E0\" foi encontrado em layer_gcode, o que é incompatível com o " +"endereçamento absoluto do extrusor." + +#, c-format, boost-format +msgid "Plate %d: %s does not support filament %s" +msgstr "Mesa %d: %s não suporta filamento %s" + +msgid "" +"Setting the jerk speed too low could lead to artifacts on curved surfaces" +msgstr "" +"Definir a velocidade de jerk muito baixa pode levar a artefatos em " +"superfícies curvas" + +msgid "" +"The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/" +"machine_max_jerk_y).\n" +"Orca will automatically cap the jerk speed to ensure it doesn't surpass the " +"printer's capabilities.\n" +"You can adjust the maximum jerk setting in your printer's configuration to " +"get higher speeds." +msgstr "" +"A configuração de jerk excede o jerk máximo da impressora " +"(machine_max_jerk_x/machine_max_jerk_y).\n" +"Orca automaticamente limitará a velocidade do jerk para garantir que não " +"ultrapasse as capacidades da impressora.\n" +"Você pode ajustar a configuração de jerk máximo na configuração da sua " +"impressora para obter velocidades mais altas." + +msgid "" +"The acceleration setting exceeds the printer's maximum acceleration " +"(machine_max_acceleration_extruding).\n" +"Orca will automatically cap the acceleration speed to ensure it doesn't " +"surpass the printer's capabilities.\n" +"You can adjust the machine_max_acceleration_extruding value in your " +"printer's configuration to get higher speeds." +msgstr "" +"A configuração de aceleração excede a aceleração máxima da impressora " +"(machine_max_acceleration_extruding).\n" +"Orca automaticamente limitará a velocidade de aceleração para garantir que " +"não ultrapasse as capacidades da impressora.\n" +"Você pode ajustar o valor de machine_max_acceleration_extruding na " +"configuração da sua impressora para obter velocidades mais altas." + +msgid "" +"The travel acceleration setting exceeds the printer's maximum travel " +"acceleration (machine_max_acceleration_travel).\n" +"Orca will automatically cap the travel acceleration speed to ensure it " +"doesn't surpass the printer's capabilities.\n" +"You can adjust the machine_max_acceleration_travel value in your printer's " +"configuration to get higher speeds." +msgstr "" +"A configuração de aceleração de deslocamento excede a aceleração máxima de " +"deslocamento da impressora (machine_max_acceleration_travel).\n" +"O Orca irá automaticamente limitar a velocidade de aceleração de " +"deslocamento para garantir que não ultrapasse as capacidades da impressora.\n" +"Você pode ajustar o valor de machine_max_acceleration_travel na configuração " +"da sua impressora para obter velocidades mais altas." + +msgid "Generating skirt & brim" +msgstr "Gerando saia e borda" + +msgid "Exporting G-code" +msgstr "Exportando G-code" + +msgid "Generating G-code" +msgstr "Gerando G-code" + +msgid "Failed processing of the filename_format template." +msgstr "Falha no processamento do modelo filename_format." + +msgid "Printable area" +msgstr "Área de impressão" + +msgid "Bed exclude area" +msgstr "Área de exclusão da mesa" + +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 "" +"Área não imprimível no plano XY. Por exemplo, impressoras da série X1 usam o " +"canto esquerdo frontal para cortar o filamento durante a troca de filamento. " +"A área é expressa como um polígono por pontos no seguinte formato: \"XxY, " +"XxY, ...\"" + +msgid "Bed custom texture" +msgstr "Textura personalizada da mesa" + +msgid "Bed custom model" +msgstr "Modelo personalizado da mesa" + +msgid "Elephant foot compensation" +msgstr "Compensação de pé de elefante" + +msgid "" +"Shrink the initial layer on build plate to compensate for elephant foot " +"effect" +msgstr "" +"Reduza a primeira camada na mesa para compensar o efeito de pé de elefante" + +msgid "Elephant foot compensation layers" +msgstr "Camadas de compensação de pé de elefante" + +msgid "" +"The number of layers on which the elephant foot compensation will be active. " +"The first layer will be shrunk by the elephant foot compensation value, then " +"the next layers will be linearly shrunk less, up to the layer indicated by " +"this value." +msgstr "" +"O número de camadas em que a compensação de pé de elefante estará ativa. A " +"primeira camada será reduzida pelo valor de compensação de pé de elefante, e " +"então as próximas camadas serão reduzidas linearmente, até a camada indicada " +"por este valor." + +msgid "layers" +msgstr "camadas" + +msgid "" +"Slicing height for each layer. Smaller layer height means more accurate and " +"more printing time" +msgstr "" +"Altura de fatiamento para cada camada. Altura de camada menor significa mais " +"precisão e mais tempo de impressão" + +msgid "Printable height" +msgstr "Altura de impressão" + +msgid "Maximum printable height which is limited by mechanism of printer" +msgstr "Altura máxima de impressão limitada pelo mecanismo da impressora" + +msgid "Preferred orientation" +msgstr "Orientação preferida" + +msgid "Automatically orient stls on the Z-axis upon initial import" +msgstr "" +"Orientar automaticamente os arquivos STL no eixo Z durante a importação " +"inicial" + +msgid "Printer preset names" +msgstr "Nomes de presets da impressora" + +msgid "Use 3rd-party print host" +msgstr "Usar host de impressão de terceiros" + +msgid "Allow controlling BambuLab's printer through 3rd party print hosts" +msgstr "" +"Permitir o controle da impressora BambuLab por meio de hosts de impressão de " +"terceiros" + +msgid "Hostname, IP or URL" +msgstr "Nome do host, IP ou URL" + +msgid "" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" +msgstr "" +"O Orca Slicer pode enviar arquivos G-code para um host de impressora. Este " +"campo deve conter o nome do host, o endereço IP ou a URL da instância do " +"host de impressora. O host de impressão atrás do HAProxy com autenticação " +"básica ativada pode ser acessado colocando o nome de usuário e senha na URL " +"no seguinte formato: https://username:password@your-octopi-address/" + +msgid "Device UI" +msgstr "Interface do dispositivo" + +msgid "" +"Specify the URL of your device user interface if it's not same as print_host" +msgstr "" +"Especifique a URL da interface do usuário do seu dispositivo se não for a " +"mesma do print_host" + +msgid "API Key / Password" +msgstr "Chave da API / Senha" + +msgid "" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." +msgstr "" +"O Orca Slicer pode enviar arquivos G-code para um host de impressora. Este " +"campo deve conter a Chave da API ou a senha necessária para autenticação." + +msgid "Name of the printer" +msgstr "Nome da impressora" + +msgid "HTTPS CA File" +msgstr "Arquivo CA HTTPS" + +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 "" +"O arquivo de certificado CA personalizado pode ser especificado para " +"conexões HTTPS OctoPrint, no formato crt/pem. Se deixado em branco, o " +"repositório de certificados CA padrão do sistema operacional é usado." + +msgid "User" +msgstr "Usuário" + +msgid "Password" +msgstr "Senha" + +msgid "Ignore HTTPS certificate revocation checks" +msgstr "Ignorar verificações de revogação de certificado 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 verificações de revogação de certificado HTTPS em caso de pontos de " +"distribuição ausentes ou offline. Pode-se querer habilitar esta opção para " +"certificados autoassinados se a conexão falhar." + +msgid "Names of presets related to the physical printer" +msgstr "Nomes dos presets relacionados à impressora física" + +msgid "Authorization Type" +msgstr "Tipo de autorização" + +msgid "API key" +msgstr "API Key" + +msgid "HTTP digest" +msgstr "Digest HTTP" + +msgid "Avoid crossing wall" +msgstr "Evitar perímetros" + +msgid "Detour and avoid to travel across wall which may cause blob on surface" +msgstr "" +"Desvio e evite viajar através do perímetro que pode causar irregularidade na " +"superfície" + +msgid "Avoid crossing wall - Max detour length" +msgstr "Evitar perímetros - Distância máximo do desvio" + +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 "" +"Distância máxima de desvio para evitar atravessar o perímetro. Não desviar " +"se a distância de desvio for maior que esse valor. A distancia do desvio " +"pode ser especificada como um valor absoluto ou como porcentagem (por " +"exemplo, 50%) de um caminho de deslocamento direto. Zero para desativar" + +msgid "mm or %" +msgstr "mm ou %" + +msgid "Other layers" +msgstr "Outras camadas" + +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Cool Plate" +msgstr "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão na Cool Plate (Mesa Fria)" + +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 "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão no Engenharia 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 "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão no Plate 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 da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão no Plate de PEI Texturizado" + +msgid "Initial layer" +msgstr "Primeira camada" + +msgid "Initial layer bed temperature" +msgstr "Temperatura da mesa da primeira camada" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão na Cool Plate (Mesa Fria)" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Engineering Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão no Engenharia Plate" + +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the High Temp Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão no Plate 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 da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão no Plate de PEI Texturizado" + +msgid "Bed types supported by the printer" +msgstr "Tipos de mesa suportadas pela impressora" + +msgid "Cool Plate" +msgstr "Mesa Fria" + +msgid "Engineering Plate" +msgstr "Engenharia Plate" + +msgid "First layer print sequence" +msgstr "Sequência de impressão da primeira camada" + +msgid "Other layers print sequence" +msgstr "Sequência de impressão de outras camadas" + +msgid "The number of other layers print sequence" +msgstr "O número de sequência de impressão de outras camadas" + +msgid "Other layers filament sequence" +msgstr "Sequência de impressão de outros filamentos" + +msgid "This G-code is inserted at every layer change before lifting z" +msgstr "Este código G é inserido em cada mudança de camada antes de levantar z" + +msgid "Bottom shell layers" +msgstr "Camadas de base" + +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 "" +"Este é o número de camadas sólidas da base, incluindo a primeira camada. " +"Quando a espessura calculada por este valor for mais fina do que a espessura " +"da base, o número das camadas da base serão aumentadas" + +msgid "Bottom shell thickness" +msgstr "Espessura da base" + +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 "" +"O número de camadas sólidas da base é aumentado ao fatiar se a espessura " +"calculada pelas camadas da base for mais fina do que este valor. Isso pode " +"evitar que a base seja muito fina quando a altura da camada é pequena. 0 " +"significa que esta configuração está desativada e a espessura da base é " +"absolutamente determinada pelas camadas da base" + +msgid "Apply gap fill" +msgstr "Preenchimento de vão" + +msgid "" +"Enables gap fill for the selected surfaces. The minimum gap length that will " +"be filled can be controlled from the filter out tiny gaps option below.\n" +"\n" +"Options:\n" +"1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces\n" +"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces " +"only\n" +"3. Nowhere: Disables gap fill\n" +msgstr "" +"Ativa o preenchimento de vão para as superfícies selecionadas. O comprimento " +"mínimo do vão que será preenchida pode ser controlado a partir da opção de " +"filtrar pequenas s abaixo.\n" +"\n" +"Opções:\n" +"1. Em todos os lugares: Aplica preenchimento de s às superfícies sólidas " +"superior, inferior e interna\n" +"2. Superfícies superior e inferior: Aplica preenchimento de s apenas às " +"superfícies superior e inferior\n" +"3. Em nenhum lugar: Desativa o preenchimento de s\n" + +msgid "Everywhere" +msgstr "Sempre" + +msgid "Top and bottom surfaces" +msgstr "Superfícies superior e inferior" + +msgid "Nowhere" +msgstr "Nunca" + +msgid "Force cooling for overhang and bridge" +msgstr "Forçar resfriamento para overhangs e pontes" + +msgid "" +"Enable this option to optimize part cooling fan speed for overhang and " +"bridge to get better cooling" +msgstr "" +"Ative esta opção para otimizar a velocidade do ventilador de resfriamento de " +"peças para overhangs e ponte para obter melhor resfriamento" + +msgid "Fan speed for overhang" +msgstr "Velocidade do ventilador para overhangs" + +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 "" +"Forçar o ventilador de resfriamento da peça a ser nesta velocidade ao " +"imprimir ponte ou overhang que tenha um grande grau de inclinação. Forçar o " +"resfriamento para overhang e ponte pode obter melhor qualidade para estas " +"partes" + +msgid "Cooling overhang threshold" +msgstr "Overhang limiar de resfriamento" + +#, 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 "" +"Forçar o ventilador de resfriamento a ser uma velocidade específica quando o " +"grau de inclinação da peça impressa excede este valor. Expresso como " +"porcentagem, que indica quanto da largura da linha sem suporte da camada " +"inferior.Zero significa forçar o resfriamento para toda o perímetro externo, " +"não importa quanto seja o grau de inclinação" + +msgid "Bridge infill direction" +msgstr "Direção de preenchimento de ponte" + +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 "" +"Substituição de ângulo de ponte. Se deixado em zero, o ângulo de ponte será " +"calculado automaticamente. Caso contrário, o ângulo fornecido será usado " +"para pontes externas. Use 180° para ângulo zero." + +msgid "Bridge density" +msgstr "Densidade de ponte" + +msgid "Density of external bridges. 100% means solid bridge. Default is 100%." +msgstr "" +"Densidade de pontes externas. 100% significa ponte sólida. O padrão é 100%." + +msgid "Bridge flow ratio" +msgstr "Fluxo em ponte" + +msgid "" +"Decrease this value slightly(for example 0.9) to reduce the amount of " +"material for bridge, to improve sag" +msgstr "" +"Diminua ligeiramente este valor (por exemplo, 0.9) para reduzir a quantidade " +"de material para ponte, para melhorar a flacidez" + +msgid "Internal bridge flow ratio" +msgstr "Fluxo em ponte interna" + +msgid "" +"This value governs the thickness of the internal bridge layer. This is the " +"first layer over sparse infill. Decrease this value slightly (for example " +"0.9) to improve surface quality over sparse infill." +msgstr "" +"Este valor governa a espessura da camada interna da ponte. Esta é a primeira " +"camada sobre o preenchimento. Diminua ligeiramente este valor (por exemplo, " +"0.9) para melhorar a qualidade da superfície sobre o preenchimento " +"esparsamente." + +msgid "Top surface flow ratio" +msgstr "Fluxo em superfície superior" + +msgid "" +"This factor affects the amount of material for top solid infill. You can " +"decrease it slightly to have smooth surface finish" +msgstr "" +"Este fator afeta a quantidade de material para o preenchimento sólido " +"superior. Você pode diminuí-lo ligeiramente para ter um acabamento de " +"superfície suave" + +msgid "Bottom surface flow ratio" +msgstr "Fluxo em superfície inferior" + +msgid "This factor affects the amount of material for bottom solid infill" +msgstr "" +"Este fator afeta a quantidade de material para o preenchimento sólido " +"inferior" + +msgid "Precise wall" +msgstr "Parede precisa" + +msgid "" +"Improve shell precision by adjusting outer wall spacing. This also improves " +"layer consistency.\n" +"Note: This setting will only take effect if the wall sequence is configured " +"to Inner-Outer" +msgstr "" +"Melhore a precisão da parede ajustando o espaçamento do perímetro externo. " +"Isso também melhora a consistência da camada.\n" +"Nota: Esta configuração só terá efeito se a sequência do perímetro estiver " +"configurada para Interior-Exterior" + +msgid "Only one wall on top surfaces" +msgstr "Perímetro único em superfícies superiores" + +msgid "" +"Use only one wall on flat top surface, to give more space to the top infill " +"pattern" +msgstr "" +"Use apenas um perímetro em superfície superior, para dar mais espaço ao " +"padrão de preenchimento superior" + +msgid "One wall threshold" +msgstr "Limite de perímetro único" + +#, no-c-format, no-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 if you have some thin features " +"on the next layer, like letters. Set this setting to 0 to remove these " +"artifacts." +msgstr "" +"Se uma superfície superior tiver que ser impressa e estiver parcialmente " +"coberta por outra camada, ela não será considerada em uma camada superior " +"onde sua largura estiver abaixo deste valor. Isso pode ser útil para não " +"permitir que o 'um perímetro no topo' seja ativado em uma superfície que " +"deve ser coberta apenas por perímetros. Este valor pode ser em mm ou % da " +"largura de extrusão do perímetro.\n" +"Aviso: Se habilitado, artefatos podem ser criados se você tiver algumas " +"características finas na próxima camada, como letras. Defina esta " +"configuração para 0 para remover esses artefatos." + +msgid "Only one wall on first layer" +msgstr "Perímetro único na primeira camada" + +msgid "" +"Use only one wall on first layer, to give more space to the bottom infill " +"pattern" +msgstr "" +"Use apenas um perímetro na primeira camada, para dar mais espaço ao padrão " +"de preenchimento inferior" + +msgid "Extra perimeters on overhangs" +msgstr "Perímetros extras em overhangs" + +msgid "" +"Create additional perimeter paths over steep overhangs and areas where " +"bridges cannot be anchored. " +msgstr "" +"Crie caminhos de perímetro adicionais em overhangs íngremes e áreas onde " +"pontes não podem ser ancoradas. " + +msgid "Reverse on odd" +msgstr "Inverter em ímpares" + +msgid "Overhang reversal" +msgstr "Reversão de suspensão" + +msgid "" +"Extrude perimeters that have a part over an overhang in the reverse " +"direction on odd layers. This alternating pattern can drastically improve " +"steep overhangs.\n" +"\n" +"This setting can also help reduce part warping due to the reduction of " +"stresses in the part walls." +msgstr "" +"Extruir perímetros, que tenham uma parte sobre um overhang, na direção " +"reversa em camadas ímpares. Este padrão alternado pode melhorar " +"drasticamente perímetros íngremes.\n" +"\n" +"Este ajuste também pode ajudar a reduzir a deformação da peça devido à " +"redução das tensões nas paredes da peça." + +msgid "Reverse only internal perimeters" +msgstr "Inverter apenas os perímetros internos" + +msgid "" +"Apply the reverse perimeters logic only on internal perimeters. \n" +"\n" +"This setting greatly reduces part stresses as they are now distributed in " +"alternating directions. This should reduce part warping while also " +"maintaining external wall quality. This feature can be very useful for warp " +"prone material, like ABS/ASA, and also for elastic filaments, like TPU and " +"Silk PLA. It can also help reduce warping on floating regions over " +"supports.\n" +"\n" +"For this setting to be the most effective, it is recomended to set the " +"Reverse Threshold to 0 so that all internal walls print in alternating " +"directions on odd layers irrespective of their overhang degree." +msgstr "" +"Aplicar a lógica de perímetros reversos apenas em perímetros internos.\n" +"\n" +"Este ajuste reduz muito as tensões na peça, já que agora são distribuídas em " +"direções alternadas. Isso deve reduzir a deformação da peça, mantendo a " +"qualidade do perímetro externo. Este recurso pode ser muito útil para " +"materiais propensos a deformações, como ABS/ASA, e também para filamentos " +"elásticos, como TPU e Silk PLA. Também pode ajudar a reduzir a deformação em " +"regiões flutuantes sobre suportes.\n" +"\n" +"Para que este ajuste seja mais eficaz, recomenda-se definir o Limiar Reverso " +"como 0 para que todos os perímetros internos sejam impressos em direções " +"alternadas em camadas ímpares, independentemente de seu grau de ." + +msgid "Bridge counterbore holes" +msgstr "Pontes para furos rebaixados" + +msgid "" +"This option creates bridges for counterbore holes, allowing them to be " +"printed without support. Available modes include:\n" +"1. None: No bridge is created.\n" +"2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" +"3. Sacrificial Layer: A full sacrificial bridge layer is created." +msgstr "" +"Esta opção cria pontes para furos rebaixados, permitindo que sejam impressos " +"sem suporte. Os modos disponíveis incluem:\n" +"1. Nenhum: Nenhuma ponte é criada.\n" +"2. Parcialmente Ponteada: Apenas uma parte da área não suportada será " +"ponteada.\n" +"3. Camada Sacrificial: Uma camada completa de ponte sacrificial é criada." + +msgid "Partially bridged" +msgstr "Ponte parcial" + +msgid "Sacrificial layer" +msgstr "Camada de sacrifício" + +msgid "Reverse threshold" +msgstr "Limiar de inversão" + +msgid "Overhang reversal threshold" +msgstr "Limiar de inversão de overhang" + +#, no-c-format, no-boost-format +msgid "" +"Number of mm the overhang need to be for the reversal to be considered " +"useful. Can be a % of the perimeter width.\n" +"Value 0 enables reversal on every odd layers regardless." +msgstr "" +"Número de milímetros que o precisa ter para que a reversão seja considerada " +"útil. Pode ser um % da largura do perímetro.\n" +"O valor 0 permite a reversão em todas as camadas ímpares independentemente." + +msgid "Classic mode" +msgstr "Modo clássico" + +msgid "Enable this option to use classic mode" +msgstr "Ative esta opção para usar o modo clássico" + +msgid "Slow down for overhang" +msgstr "Reduzir velocidade em overhangs" + +msgid "Enable this option to slow printing down for different overhang degree" +msgstr "" +"Ative esta opção para diminuir a velocidade de impressão em diferentes graus " +"de inclinação" + +msgid "Slow down for curled perimeters" +msgstr "Reduzir vel. para perímetros encurvados" + +msgid "" +"Enable this option to slow printing down in areas where potential curled " +"perimeters may exist" +msgstr "" +"Ative esta opção para diminuir a velocidade de impressão em áreas onde podem " +"existir potenciais perímetros curvados (warping)" + +msgid "mm/s or %" +msgstr "mm/s ou %" + +msgid "External" +msgstr "Externo" + +msgid "Speed of bridge and completely overhang wall" +msgstr "Velocidade de ponte e paredes compostas completamente de overhangs" + +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 "" +"Velocidade da ponte interna. Se o valor for expresso como porcentagem, será " +"calculado com base na velocidade da ponte. O valor padrão é 150%." + +msgid "Brim width" +msgstr "Largura da borda" + +msgid "Distance from model to the outermost brim line" +msgstr "Distância do modelo até a linha da borda mais externa" + +msgid "Brim type" +msgstr "Tipo de borda" + +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 "" +"Isso controla a geração da borda no lado externo e/ou interno dos modelos. " +"Automático significa que a largura da borda é analisada e calculada " +"automaticamente." + +msgid "Brim-object gap" +msgstr "Espaço entre a borda e objeto" + +msgid "" +"A gap between innermost brim line and object can make brim be removed more " +"easily" +msgstr "" +"Um espaço entre a linha da borda mais interna e o objeto pode facilitar a " +"remoção da borda" + +msgid "Brim ears" +msgstr "Orelhas da borda" + +msgid "Only draw brim over the sharp edges of the model." +msgstr "Desenhe a borda apenas sobre as bordas afiadas do modelo." + +msgid "Brim ear max angle" +msgstr "Ângulo máximo da orelha da borda" + +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 "" +"Ângulo máximo para permitir que uma orelha da borda apareça. \n" +"Se definido como 0, nenhuma borda será criado. \n" +"Se definido como ~180, a borda será criada em tudo, exceto em seções retas." + +msgid "Brim ear detection radius" +msgstr "Raio de detecção da orelha da borda" + +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 "" +"A geometria será decimada antes de detectar ângulos agudos. Este parâmetro " +"indica o comprimento mínimo da divergência para a decimação.\n" +"0 para desativar" + +msgid "Compatible machine" +msgstr "Máquina compatível" + +msgid "upward compatible machine" +msgstr "uáquina compatível ascendente" + +msgid "Compatible machine condition" +msgstr "Condição de máquina compatível" + +msgid "Compatible process profiles" +msgstr "Perfis de processo compatíveis" + +msgid "Compatible process profiles condition" +msgstr "Condição de perfis de processo compatíveis" + +msgid "Print sequence, layer by layer or object by object" +msgstr "Sequência de impressão, camada por camada ou objeto por objeto" + +msgid "By layer" +msgstr "Por camada" + +msgid "By object" +msgstr "Por objeto" + +msgid "Intra-layer order" +msgstr "Ordem intra-camada" + +msgid "Print order within a single layer" +msgstr "Ordem de impressão dentro de uma única camada" + +msgid "As object list" +msgstr "Como lista de objetos" + +msgid "Slow printing down for better layer cooling" +msgstr "Diminuir a velocidade de impressão para melhor resfriamento de camada" + +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 "" +"Ative esta opção para diminuir a velocidade de impressão para que o tempo da " +"camada final não seja menor do que o limite de tempo da camada em \"Limiar " +"de velocidade máxima do ventilador\", para que a camada possa ser resfriada " +"por mais tempo. Isso pode melhorar a qualidade de resfriamento para detalhes " +"pequenos" + +msgid "Normal printing" +msgstr "Impressão normal" + +msgid "" +"The default acceleration of both normal printing and travel except initial " +"layer" +msgstr "" +"A aceleração padrão tanto para a impressão normal quanto para o movimento, " +"exceto na primeira camada" + +msgid "mm/s²" +msgstr "mm/s²" + +msgid "Default filament profile" +msgstr "Perfil de filamento padrão" + +msgid "Default filament profile when switch to this machine profile" +msgstr "Perfil de filamento padrão ao mudar para este perfil de máquina" + +msgid "Default process profile" +msgstr "Perfil de processo padrão" + +msgid "Default process profile when switch to this machine profile" +msgstr "Perfil de processo padrão ao mudar para este perfil de máquina" + +msgid "Activate air filtration" +msgstr "Ativar filtragem de ar" + +msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" +msgstr "" +"Ative para uma melhor filtragem de ar. Comando G-code: M106 P3 S(0-255)" + +msgid "Fan speed" +msgstr "Velocidade do ventilador" + +msgid "" +"Speed of exhaust fan during printing.This speed will overwrite the speed in " +"filament custom gcode" +msgstr "" +"Velocidade do ventilador de exaustão durante a impressão. Esta velocidade " +"substituirá a velocidade no gcode personalizado do filamento" + +msgid "Speed of exhaust fan after printing completes" +msgstr "Velocidade do ventilador de exaustão após a conclusão da impressão" + +msgid "No cooling for the first" +msgstr "Sem resfriamento para as primeiras" + +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 "" +"Feche todos os ventiladores de resfriamento para as primeiras camadas. O " +"ventilador de resfriamento da primeira camada costuma ser desligado para " +"obter uma melhor adesão à mesa" + +msgid "Don't support bridges" +msgstr "Não suportar pontes" + +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 "" +"Não suportar toda a área da ponte que faz com que o suporte seja muito " +"grande. Ponte geralmente pode ser impressa diretamente sem suporte se não " +"for muito longa" + +msgid "Thick bridges" +msgstr "Ponte grossa" + +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 "" +"Se ativado, as pontes são mais confiáveis, podem cobrir distâncias maiores, " +"mas podem parecer piores. Se desativado, as pontes ficam melhores, mas são " +"confiáveis apenas para distâncias de ponte mais curtas." + +msgid "Thick internal bridges" +msgstr "Ponte interna grossa" + +msgid "" +"If enabled, thick internal bridges will be used. It's usually recommended to " +"have this feature turned on. However, consider turning it off if you are " +"using large nozzles." +msgstr "" +"Se ativado, serão usadas pontes internas grossas. Geralmente é recomendado " +"ter este recurso ativado. No entanto, considere desativá-lo se estiver " +"usando bocais grandes." + +msgid "Don't filter out small internal bridges (beta)" +msgstr "Não filtrar pequenas pontes internas (beta)" + +msgid "" +"This option can help reducing pillowing on top surfaces in heavily slanted " +"or curved models.\n" +"\n" +"By default, small internal bridges are filtered out and the internal solid " +"infill is printed directly over the sparse infill. This works well in most " +"cases, speeding up printing without too much compromise on top surface " +"quality. \n" +"\n" +"However, in heavily slanted or curved models especially where too low sparse " +"infill density is used, this may result in curling of the unsupported solid " +"infill, causing pillowing.\n" +"\n" +"Enabling this option will print internal bridge layer over slightly " +"unsupported internal solid infill. The options below control the amount of " +"filtering, i.e. the amount of internal bridges created.\n" +"\n" +"Disabled - Disables this option. This is the default behaviour and works " +"well in most cases.\n" +"\n" +"Limited filtering - Creates internal bridges on heavily slanted surfaces, " +"while avoiding creating uncessesary interal bridges. This works well for " +"most difficult models.\n" +"\n" +"No filtering - Creates internal bridges on every potential internal " +"overhang. This option is useful for heavily slanted top surface models. " +"However, in most cases it creates too many unecessary bridges." +msgstr "" +"Esta opção pode ajudar a reduzir o pillowing nas superfícies superiores em " +"modelos fortemente inclinados ou curvos.\n" +"\n" +"Por padrão, pequenas pontes internas são filtradas e o preenchimento sólido " +"interno é impresso diretamente sobre o preenchimento não sólido. Isso " +"funciona bem na maioria dos casos, acelerando a impressão sem comprometer " +"muito a qualidade da superfície superior. \n" +"\n" +"No entanto, em modelos fortemente inclinados ou curvos, especialmente quando " +"a densidade de preenchimento não sólido é muito baixa, isso pode resultar em " +"enrolamento do preenchimento sólido não suportado, causando pillowing.\n" +"\n" +"Ativar esta opção imprimirá uma camada de ponte interna sobre o " +"preenchimento sólido interno ligeiramente não suportado. As opções abaixo " +"controlam a quantidade de filtragem, ou seja, a quantidade de pontes " +"internas criadas.\n" +"\n" +"Desativado - Desativa esta opção. Este é o comportamento padrão e funciona " +"bem na maioria dos casos.\n" +"\n" +"Filtragem limitada - Cria pontes internas em superfícies fortemente " +"inclinadas, evitando a criação de pontes internas desnecessárias. Isso " +"funciona bem para a maioria dos modelos difíceis.\n" +"\n" +"Sem filtragem - Cria pontes internas em cada inclinação interna potencial. " +"Esta opção é útil para modelos com superfície superior fortemente inclinada. " +"No entanto, na maioria dos casos, cria pontes desnecessárias demais." + +msgid "Disabled" +msgstr "Desativado" + +msgid "Limited filtering" +msgstr "Filtragem limitada" + +msgid "No filtering" +msgstr "Sem filtragem" + +msgid "Max bridge length" +msgstr "Distância de ponte máxima" + +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 "" +"Comprimento máximo de pontes que não precisam de suporte. Defina-o como 0 se " +"desejar que todas as pontes tenham suporte, e defina-o como um valor muito " +"grande se não desejar que nenhuma ponte tenha suporte." + +msgid "End G-code" +msgstr "G-code de finalização" + +msgid "End G-code when finish the whole printing" +msgstr "G-code de finalização ao terminar a impressão completa" + +msgid "Between Object Gcode" +msgstr "G-code entre objetos" + +msgid "" +"Insert Gcode between objects. This parameter will only come into effect when " +"you print your models object by object" +msgstr "" +"Insira o G-code entre objetos. Este parâmetro só terá efeito quando você " +"imprimir seus modelos objeto por objeto" + +msgid "End G-code when finish the printing of this filament" +msgstr "G-code de finalização ao terminar a impressão deste filamento" + +msgid "Ensure vertical shell thickness" +msgstr "Garantir a espessura vertical do perímetro" + +msgid "" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)\n" +"None: No solid infill will be added anywhere. Caution: Use this option " +"carefully if your model has sloped surfaces\n" +"Critical Only: Avoid adding solid infill for walls\n" +"Moderate: Add solid infill for heavily sloping surfaces only\n" +"All: Add solid infill for all suitable sloping surfaces\n" +"Default value is All." +msgstr "" +"Adicione preenchimento sólido próximo a superfícies inclinadas para garantir " +"a espessura vertical (camadas de topo+base)\n" +"Nenhum: Nenhum preenchimento sólido será adicionado em nenhum lugar. " +"Cuidado: Use esta opção com cuidado se o seu modelo tiver superfícies " +"inclinadas\n" +"Apenas crítico: Evite adicionar preenchimento sólido para paredes\n" +"Moderado: Adicione preenchimento sólido apenas para superfícies fortemente " +"inclinadas\n" +"Todos: Adicione preenchimento sólido para todas as superfícies inclinadas " +"adequadas\n" +"O valor padrão é Todos." + +msgid "Critical Only" +msgstr "Apenas crítico" + +msgid "Moderate" +msgstr "Moderado" + +msgid "Top surface pattern" +msgstr "Padrão de superfície superior" + +msgid "Line pattern of top surface infill" +msgstr "Padrão de linha do preenchimento da superfície superior" + +msgid "Concentric" +msgstr "Concêntrico" + +msgid "Rectilinear" +msgstr "Retilíneo" + +msgid "Monotonic" +msgstr "Monótono" + +msgid "Monotonic line" +msgstr "Linha monótona" + +msgid "Aligned Rectilinear" +msgstr "Retilíneo alinhado" + +msgid "Hilbert Curve" +msgstr "Curva de Hilbert" + +msgid "Archimedean Chords" +msgstr "Cordas Arquimedeanas" + +msgid "Octagram Spiral" +msgstr "Espiral de Octagrama" + +msgid "Bottom surface pattern" +msgstr "Padrão de superfície inferior" + +msgid "Line pattern of bottom surface infill, not bridge infill" +msgstr "" +"Padrão de linha do preenchimento da superfície inferior, não do " +"preenchimento da ponte" + +msgid "Internal solid infill pattern" +msgstr "Padrão de preenchimento sólido interno" + +msgid "" +"Line pattern of internal solid infill. if the detect narrow internal solid " +"infill be enabled, the concentric pattern will be used for the small area." +msgstr "" +"Padrão de linha do preenchimento sólido interno. Se a detecção de " +"preenchimento sólido interno estreito estiver ativada, o padrão concêntrico " +"será usado para a área pequena." + +msgid "" +"Line width of outer wall. If expressed as a %, it will be computed over the " +"nozzle diameter." +msgstr "" +"Largura da linha do perímetro externo. Se expresso como porcentagem, será " +"calculado sobre o diâmetro do bico." + +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 "" +"Velocidade do perímetro externo que é o mais externo e visível. Geralmente é " +"mais lenta que a velocidade do perímetro interno para obter melhor qualidade." + +msgid "Small perimeters" +msgstr "Pequenos perímetros" + +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 "" +"Essa configuração separada afetará a velocidade dos perímetros com raio <= " +"small_perimeter_threshold (geralmente buracos). Se expresso como porcentagem " +"(por exemplo: 80%), será calculado com base na configuração de velocidade do " +"perímetro externo acima. Defina como zero para automático." + +msgid "Small perimeters threshold" +msgstr "Limiar de pequenos perímetros" + +msgid "" +"This sets the threshold for small perimeter length. Default threshold is 0mm" +msgstr "" +"Isso define o limite para o comprimento do perímetro pequeno. O limite " +"padrão é 0mm" + +msgid "Walls printing order" +msgstr "Ordem de impressão dos perímetros" + +msgid "" +"Print sequence of the internal (inner) and external (outer) walls. \n" +"\n" +"Use Inner/Outer for best overhangs. This is because the overhanging walls " +"can adhere to a neighouring perimeter while printing. However, this option " +"results in slightly reduced surface quality as the external perimeter is " +"deformed by being squashed to the internal perimeter.\n" +"\n" +"Use Inner/Outer/Inner for the best external surface finish and dimensional " +"accuracy as the external wall is printed undisturbed from an internal " +"perimeter. However, overhang performance will reduce as there is no internal " +"perimeter to print the external wall against. This option requires a minimum " +"of 3 walls to be effective as it prints the internal walls from the 3rd " +"perimeter onwards first, then the external perimeter and, finally, the first " +"internal perimeter. This option is recomended against the Outer/Inner option " +"in most cases. \n" +"\n" +"Use Outer/Inner for the same external wall quality and dimensional accuracy " +"benefits of Inner/Outer/Inner option. However, the z seams will appear less " +"consistent as the first extrusion of a new layer starts on a visible " +"surface.\n" +"\n" +" " +msgstr "" +"Sequência de impressão dos perímetros internos e externos. \n" +"\n" +"Use Interior/Exterior para melhores overhangs. Isso ocorre porque os " +"perímetros salientes podem aderir a um perímetro vizinho durante a " +"impressão. No entanto, esta opção resulta em uma qualidade superficial " +"ligeiramente reduzida, pois o perímetro externo é deformado ao ser esmagado " +"pelo perímetro interno.\n" +"\n" +"Use Interior/Exterior/Interior para o melhor acabamento superficial externo " +"e precisão dimensional, pois o perímetro externo é impresso sem interrupções " +"a partir de um perímetro interno. No entanto, o desempenho da inclinaçãoserá " +"reduzido, pois não há perímetro interno para imprimir o perímetro externo. " +"Esta opção requer um mínimo de 3 perímetros para ser eficaz, pois imprime os " +"perímetros internos a partir do terceiro perímetro em diante primeiro, " +"depois o perímetro externo e, por fim, o primeiro perímetro interno. Esta " +"opção é recomendada em relação à opção Exterior/Interior na maioria dos " +"casos. \n" +"\n" +"Use Exterior/Interior para obter os mesmos benefícios de qualidade de parede " +"externa e precisão dimensional da opção Interior/Exterior/Interior. No " +"entanto, as costuras z aparecerão menos consistentes, pois a primeira " +"extrusão de uma nova camada começa em uma superfície visível.\n" +"\n" +" " + +msgid "Inner/Outer" +msgstr "Interior/Exterior" + +msgid "Outer/Inner" +msgstr "Exterior/Interior" + +msgid "Inner/Outer/Inner" +msgstr "Interior/Exterior/Interior" + +msgid "Print infill first" +msgstr "Preenchimento primeiro" + +msgid "" +"Order of wall/infill. When the tickbox is unchecked the walls are printed " +"first, which works best in most cases.\n" +"\n" +"Printing infill first may help with extreme overhangs as the walls have the " +"neighbouring infill to adhere to. However, the infill will slighly push out " +"the printed walls where it is attached to them, resulting in a worse " +"external surface finish. It can also cause the infill to shine through the " +"external surfaces of the part." +msgstr "" +"Ordem de perímetro/preenchimento. Quando a caixa de seleção não desmarcada, " +"as paredes são impressas primeiro, o que funciona melhor na maioria dos " +"casos.\n" +"\n" +"Imprimir as paredes primeiro pode ajudar com overhangs extremos, pois as " +"paredes têm o preenchimento vizinho para aderir. No entanto, o preenchimento " +"empurrará levemente as paredes impressas onde está conectado a elas, " +"resultando em um acabamento de superfície externa pior. Também pode fazer " +"com que o preenchimento apareça através das superfícies externas da peça." + +msgid "Wall loop direction" +msgstr "Direção da volta do perímetro" + +msgid "" +"The direction which the wall loops are extruded when looking down from the " +"top.\n" +"\n" +"By default all walls are extruded in counter-clockwise, unless Reverse on " +"odd is enabled. Set this to any option other than Auto will force the wall " +"direction regardless of the Reverse on odd.\n" +"\n" +"This option will be disabled if sprial vase mode is enabled." +msgstr "" +"A direção na qual os loops da perímetro são extrudados quando vistos de " +"cima.\n" +"\n" +"Por padrão, todas as paredes são extrudadas no sentido anti-horário, a menos " +"que o Reverso em ímpar esteja ativado. Definir isso como qualquer opção que " +"não seja Automático forçará a direção do perímetro, independentemente do " +"Reverso em ímpar.\n" +"\n" +"Esta opção será desativada se o modo de vaso espiral estiver ativado." + +msgid "Counter clockwise" +msgstr "Sentido anti-horário" + +msgid "Clockwise" +msgstr "Sentido horário" + +msgid "Height to rod" +msgstr "Altura até a haste" + +msgid "" +"Distance of the nozzle tip to the lower rod. Used for collision avoidance in " +"by-object printing." +msgstr "" +"Distância da ponta do bico ao tubo inferior. Usado para evitar colisões na " +"impressão por objeto." + +msgid "Height to lid" +msgstr "Altura até a tampa" + +msgid "" +"Distance of the nozzle tip to the lid. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Distância da ponta do bico à tampa. Usado para evitar colisões na impressão " +"por objeto." + +msgid "" +"Clearance radius around extruder. Used for collision avoidance in by-object " +"printing." +msgstr "" +"Raio de folga ao redor do extrusor. Usado para evitar colisões na impressão " +"por objeto." + +msgid "Nozzle height" +msgstr "Altura do bico" + +msgid "The height of nozzle tip." +msgstr "Altura da ponta do bico." + +msgid "Bed mesh min" +msgstr "Mínimo do bed mesh" + +msgid "" +"This option sets the min point for the allowed bed mesh area. Due to the " +"probe's XY offset, most printers are unable to probe the entire bed. To " +"ensure the probe point does not go outside the bed area, the minimum and " +"maximum points of the bed mesh should be set appropriately. OrcaSlicer " +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " +"exceed these min/max points. This information can usually be obtained from " +"your printer manufacturer. The default setting is (-99999, -99999), which " +"means there are no limits, thus allowing probing across the entire bed." +msgstr "" +"Esta opção define o ponto mínimo para a área permitida do bed mesh. Devido " +"ao deslocamento XY da sonda, a maioria das impressoras não consegue sondar " +"toda a mesa. Para garantir que o ponto da sonda não saia da área da mesa, os " +"pontos mínimo e máximo do bed mesh devem ser configurados adequadamente. O " +"OrcaSlicer garante que os valores adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max não excedam esses pontos mínimo/máximo. Essas " +"informações geralmente podem ser obtidas com o fabricante da sua impressora. " +"A configuração padrão é (-99999, -99999), o que significa que não há " +"limites, permitindo a sondagem em toda a mesa." + +msgid "Bed mesh max" +msgstr "Máximo do bed mesh" + +msgid "" +"This option sets the max point for the allowed bed mesh area. Due to the " +"probe's XY offset, most printers are unable to probe the entire bed. To " +"ensure the probe point does not go outside the bed area, the minimum and " +"maximum points of the bed mesh should be set appropriately. OrcaSlicer " +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " +"exceed these min/max points. This information can usually be obtained from " +"your printer manufacturer. The default setting is (99999, 99999), which " +"means there are no limits, thus allowing probing across the entire bed." +msgstr "" +"Esta opção define o ponto máximo para a área permitida do bed mesh. Devido " +"ao deslocamento XY da sonda, a maioria das impressoras não consegue sondar " +"toda a mesa. Para garantir que o ponto da sonda não saia da área da mesa, os " +"pontos mínimo e máximo do bed mesh devem ser configurados adequadamente. O " +"OrcaSlicer garante que os valores adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max não excedam esses pontos mínimo/máximo. Essas " +"informações geralmente podem ser obtidas com o fabricante da sua impressora. " +"A configuração padrão é (99999, 99999), o que significa que não há limites, " +"permitindo a sondagem em toda a mesa." + +msgid "Probe point distance" +msgstr "Distância entre pontos de sonda" + +msgid "" +"This option sets the preferred distance between probe points (grid size) for " +"the X and Y directions, with the default being 50mm for both X and Y." +msgstr "" +"Esta opção define a distância preferencial entre pontos de sonda (tamanho da " +"grade) para as direções X e Y, sendo o padrão 50mm para ambas as direções X " +"e Y." + +msgid "Mesh margin" +msgstr "Margem da malha" + +msgid "" +"This option determines the additional distance by which the adaptive bed " +"mesh area should be expanded in the XY directions." +msgstr "" +"Esta opção determina a distância adicional pela qual a área do bed mesh " +"adaptável deve ser expandida nas direções XY." + +msgid "Extruder Color" +msgstr "Cor do extrusor" + +msgid "Only used as a visual help on UI" +msgstr "Usado apenas como ajuda visual na interface do usuário" + +msgid "Extruder offset" +msgstr "Offset da Extrusora" + +msgid "Flow ratio" +msgstr "Fluxo" + +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 "" +"O material pode ter mudança volumétrica após a troca entre o estado fundido " +"e o estado cristalino. Esta configuração altera todo o fluxo de extrusão " +"deste filamento no gcode proporcionalmente. A faixa de valores recomendada " +"está entre 0.95 e 1.05. Talvez você possa ajustar esse valor para obter uma " +"superfície plana agradável quando houver um leve transbordamento ou subfluxo" + +msgid "Enable pressure advance" +msgstr "Habilitar Pressure advance" + +msgid "" +"Enable pressure advance, auto calibration result will be overwriten once " +"enabled." +msgstr "" +"Habilitar Pressure advance, o resultado da calibração automática será " +"sobrescrito uma vez habilitado." + +msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" +msgstr "" +"Pressure advance(Klipper) também conhecido como Linear advance factor(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." +msgstr "" +"Largura de linha padrão se outras larguras de linha estiverem definidas como " +"0. Se expresso como %, será calculado sobre o diâmetro do bico." + +msgid "Keep fan always on" +msgstr "Manter o ventilador sempre ligado" + +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 "" +"Se habilitar esta configuração, o ventilador de resfriamento da peça nunca " +"será desligado e funcionará pelo menos na velocidade mínima para reduzir a " +"frequência de início e parada" + +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + +msgid "Layer time" +msgstr "Tempo da camada" + +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 "" +"O ventilador de resfriamento da peça será ativado para camadas cujo tempo " +"estimado seja menor que esse valor. A velocidade do ventilador é interpolada " +"entre as velocidades mínima e máxima do ventilador de acordo com o tempo de " +"impressão da camada" + +msgid "Default color" +msgstr "Cor padrão" + +msgid "Default filament color" +msgstr "Cor padrão do filamento" + +msgid "Filament notes" +msgstr "Observações do filamento" + +msgid "You can put your notes regarding the filament here." +msgstr "Você pode colocar suas observações sobre o filamento aqui." + +msgid "Required nozzle HRC" +msgstr "HRC do bico requerido" + +msgid "" +"Minimum HRC of nozzle required to print the filament. Zero means no checking " +"of nozzle's HRC." +msgstr "" +"HRC mínimo do bico necessário para imprimir o filamento. Zero significa que " +"não há verificação do HRC do bico." + +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 "" +"Essa configuração representa quanto volume de filamento pode ser derretido e " +"extrudado por segundo. A velocidade de impressão é limitada pela fluxo " +"volumétrico máximo, no caso de configurações de velocidade muito altas e " +"irrazoáveis. Não pode ser zero" + +msgid "mm³/s" +msgstr "mm³/s" + +msgid "Filament load time" +msgstr "Tempo de carga do filamento" + +msgid "Time to load new filament when switch filament. For statistics only" +msgstr "" +"Tempo para carregar novo filamento ao trocar de filamento. Apenas para " +"estatísticas" + +msgid "Filament unload time" +msgstr "Tempo de descarga do filamento" + +msgid "Time to unload old filament when switch filament. For statistics only" +msgstr "" +"Tempo para descarregar o filamento antigo ao trocar de filamento. Apenas " +"para estatísticas" + +msgid "" +"Filament diameter is used to calculate extrusion in gcode, so it's important " +"and should be accurate" +msgstr "" +"O diâmetro do filamento é usado para calcular a extrusão no gcode, portanto, " +"é importante e deve ser preciso" + +msgid "Shrinkage" +msgstr "Retração" + +#, no-c-format, no-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 "" +"Informe a porcentagem de retração que o filamento terá após o resfriamento " +"(94% se você medir 94mm em vez de 100mm). A peça será escalada em xy para " +"compensar. Apenas o filamento usado para o perímetro é levado em " +"consideração.\n" +"Certifique-se de permitir espaço suficiente entre objetos, pois essa " +"compensação é feita após as verificações." + +msgid "Loading speed" +msgstr "Velocidade de carregamento" + +msgid "Speed used for loading the filament on the wipe tower." +msgstr "Velocidade usada para carregar o filamento na Torre Prime" + +msgid "Loading speed at the start" +msgstr "Velocidade de carregamento no início" + +msgid "Speed used at the very beginning of loading phase." +msgstr "Velocidade usada no início da fase de carregamento." + +msgid "Unloading speed" +msgstr "Velocidade de descarregamento" + +msgid "" +"Speed used for unloading the filament on the wipe tower (does not affect " +"initial part of unloading just after ramming)." +msgstr "" +"Velocidade usada para descarregar o filamento na Torre Prime (não afeta a " +"parte inicial do descarregamento logo após o moldeamento)." + +msgid "Unloading speed at the start" +msgstr "Velocidade de descarregamento no início" + +msgid "" +"Speed used for unloading the tip of the filament immediately after ramming." +msgstr "" +"Velocidade usada para descarregar a ponta do filamento imediatamente após o " +"moldeamento." + +msgid "Delay after unloading" +msgstr "Atraso após o descarregamento" + +msgid "" +"Time to wait after the filament is unloaded. May help to get reliable " +"toolchanges with flexible materials that may need more time to shrink to " +"original dimensions." +msgstr "" +"Tempo de espera após o filamento ser descarregado. Pode ajudar a obter " +"trocas de ferramentas confiáveis com materiais flexíveis que podem precisar " +"de mais tempo para encolher para as dimensões originais." + +msgid "Number of cooling moves" +msgstr "Número de movimentos de resfriamento" + +msgid "" +"Filament is cooled by being moved back and forth in the cooling tubes. " +"Specify desired number of these moves." +msgstr "" +"O filamento é resfriado movendo-se para frente e para trás nos tubos de " +"resfriamento. Especifique o número desejado desses movimentos." + +msgid "Speed of the first cooling move" +msgstr "Velocidade do primeiro movimento de resfriamento" + +msgid "Cooling moves are gradually accelerating beginning at this speed." +msgstr "" +"Os movimentos de resfriamento estão gradualmente acelerando a partir desta " +"velocidade." + +msgid "Minimal purge on wipe tower" +msgstr "Purga mínima na Torre Prime" + +msgid "" +"After a tool change, the exact position of the newly loaded filament inside " +"the nozzle may not be known, and the filament pressure is likely not yet " +"stable. Before purging the print head into an infill or a sacrificial " +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." +msgstr "" +"Após uma troca de filamento, a posição exata do filamento recém-carregado " +"dentro do bico pode não ser conhecida, e a pressão do filamento " +"provavelmente ainda não está estável. Antes de purgar a cabeça de impressão " +"em um preenchimento ou em um objeto de sacrifício, o Orca Slicer sempre " +"preparará essa quantidade de material na Torre Prime para produzir extrusões " +"sucessivas de preenchimento ou de objeto de sacrifício de forma confiável." + +msgid "Speed of the last cooling move" +msgstr "Velocidade do último movimento de resfriamento" + +msgid "Cooling moves are gradually accelerating towards this speed." +msgstr "" +"Os movimentos de resfriamento estão gradualmente acelerando em direção a " +"esta velocidade." + +msgid "" +"Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " +"filament during a tool change (when executing the T code). This time is " +"added to the total print time by the G-code time estimator." +msgstr "" +"Tempo para o firmware da impressora (ou a Unidade de Material Multi 2.0) " +"carregar um novo filamento durante uma troca de ferramenta (ao executar o " +"código T). Este tempo é adicionado ao tempo total de impressão pelo " +"estimador de tempo do G-code." + +msgid "Ramming parameters" +msgstr "Parâmetros de moldeamento" + +msgid "" +"This string is edited by RammingDialog and contains ramming specific " +"parameters." +msgstr "" +"Esta frase é editada pelo RammingDialog e contém parâmetros específicos de " +"moldeamento." + +msgid "" +"Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " +"filament during a tool change (when executing the T code). This time is " +"added to the total print time by the G-code time estimator." +msgstr "" +"Tempo para o firmware da impressora (ou a Unidade de Material Multi 2.0) " +"descarregar um filamento durante uma troca de ferramenta (ao executar o " +"código T). Este tempo é adicionado ao tempo total de impressão pelo " +"estimador de tempo do G-code." + +msgid "Enable ramming for multitool setups" +msgstr "Habilitar moldeamento para configurações de multi-extrusora" + +msgid "" +"Perform ramming when using multitool printer (i.e. when the 'Single Extruder " +"Multimaterial' in Printer Settings is unchecked). When checked, a small " +"amount of filament is rapidly extruded on the wipe tower just before the " +"toolchange. This option is only used when the wipe tower is enabled." +msgstr "" +"Realizar moldeamentoao usando impressora multi-extrusora(ou seja, quando a " +"opção 'Único Extrusor Multimaterial' em Configurações de Impressora está " +"desmarcada). Quando ativo, uma pequena quantidade de filamento é rapidamente " +"extrudado na Torre Prime logo antes da troca de extrusora. Esta opção é " +"usada apenas quando a Torre Prime está habilitada." + +msgid "Multitool ramming volume" +msgstr "Volume de moldeamento multi-extrusora" + +msgid "The volume to be rammed before the toolchange." +msgstr "O volume a ser esmagado antes da troca de ferramenta." + +msgid "Multitool ramming flow" +msgstr "Fluxo de esmagamento multi-extrusora" + +msgid "Flow used for ramming the filament before the toolchange." +msgstr "Fluxo usado para moldar o filamento antes da troca de extrusora." + +msgid "Density" +msgstr "Densidade" + +msgid "Filament density. For statistics only" +msgstr "Densidade do filamento. Apenas para estatísticas" + +msgid "g/cm³" +msgstr "g/cm3" + +msgid "The material type of filament" +msgstr "O tipo de material do filamento" + +msgid "Soluble material" +msgstr "Material solúvel" + +msgid "" +"Soluble material is commonly used to print support and support interface" +msgstr "" +"O material solúvel é comumente usado para imprimir suporte e interface de " +"suporte" + +msgid "Support material" +msgstr "Material de suporte" + +msgid "" +"Support material is commonly used to print support and support interface" +msgstr "" +"O material de suporte é comumente usado para imprimir suporte e interface de " +"suporte" + +msgid "Softening temperature" +msgstr "Temperatura de amolecimento" + +msgid "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than it, it's highly recommended to open the front door " +"and/or remove the upper glass to avoid cloggings." +msgstr "" +"O material amolece a esta temperatura, portanto, quando a temperatura da " +"mesa for igual ou maior que ela, é altamente recomendável abrir a porta da " +"frente e/ou remover o vidro superior para evitar entupimentos." + +msgid "Price" +msgstr "Preço" + +msgid "Filament price. For statistics only" +msgstr "Preço do filamento. Apenas para estatísticas" + +msgid "money/kg" +msgstr "dinheiro/kg" + +msgid "Vendor" +msgstr "Fornecedor" + +msgid "Vendor of filament. For show only" +msgstr "Fornecedor do filamento. Apenas para mostrar" + +msgid "(Undefined)" +msgstr "(Indefinido)" + +msgid "Sparse infill direction" +msgstr "Direção do preenchimento" + +msgid "" +"Angle for sparse infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Ângulo para o padrão de preenchimento não sólido, que controla o início ou a " +"direção principal da linha" + +msgid "Solid infill direction" +msgstr "Direção do preenchimento sólido" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Ângulo para padrão de preenchimento sólido, que controla a direção inicial " +"ou principal da linha" + +msgid "Rotate solid infill direction" +msgstr "Rotaciona a direção do preenchimento sólido" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Rotaciona a direção do preenchimento em 90° para cada camada." + +msgid "Sparse infill density" +msgstr "Densidade do preenchimento" + +#, no-c-format, no-boost-format +msgid "" +"Density of internal sparse infill, 100% turns all sparse infill into solid " +"infill and internal solid infill pattern will be used" +msgstr "" +"Densidade do preenchimento não sólido interno, 100% transforma todo o " +"preenchimento não sólido em preenchimento sólido e será usado o padrão de " +"preenchimento sólido interno" + +msgid "Sparse infill pattern" +msgstr "Padrão de preenchimento" + +msgid "Line pattern for internal sparse infill" +msgstr "Padrão de linha para preenchimento interno" + +msgid "Grid" +msgstr "Grade" + +msgid "Line" +msgstr "Linha" + +msgid "Cubic" +msgstr "Cúbico" + +msgid "Tri-hexagon" +msgstr "Tri-hexágono" + +msgid "Gyroid" +msgstr "Giroide" + +msgid "Honeycomb" +msgstr "Honeycomb" + +msgid "Adaptive Cubic" +msgstr "Cúbico Adaptativo" + +msgid "3D Honeycomb" +msgstr "Honeycomb 3D" + +msgid "Support Cubic" +msgstr "Cúbico de Suporte" + +msgid "Lightning" +msgstr "Relâmpago" + +msgid "Cross Hatch" +msgstr "Padrão Cruzado" + +msgid "Sparse infill anchor length" +msgstr "Comp. da âncora de preenchimento" + +msgid "" +"Connect an infill line to an internal perimeter with a short segment of an " +"additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." +msgstr "" +"Conecte uma linha de preenchimento a um perímetro interno com um segmento " +"curto de um perímetro adicional. Se expresso como porcentagem (exemplo: " +"15%), é calculado sobre a largura de extrusão do preenchimento. O Orca " +"Slicer tenta conectar duas linhas de preenchimento próximas a um segmento " +"curto de perímetro. Se nenhum segmento de perímetro mais curto que " +"infill_anchor_max for encontrado, a linha de preenchimento é conectada a um " +"segmento de perímetro em apenas um lado e o comprimento do segmento de " +"perímetro tomado é limitado a este parâmetro, mas não mais do que " +"anchor_length_max. \n" +"Defina este parâmetro como zero para desabilitar os perímetros de ancoragem " +"conectados a uma única linha de preenchimento." + +msgid "0 (no open anchors)" +msgstr "0 (sem ancoras abertas)" + +msgid "1000 (unlimited)" +msgstr "1000 (ilimitado)" + +msgid "Maximum length of the infill anchor" +msgstr "Comp. máx. da âncora de preench." + +msgid "" +"Connect an infill line to an internal perimeter with a short segment of an " +"additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" +"If set to 0, the old algorithm for infill connection will be used, it should " +"create the same result as with 1000 & 0." +msgstr "" +"Conecte uma linha de preenchimento a um perímetro interno com um segmento " +"curto de um perímetro adicional. Se expresso como porcentagem (exemplo: " +"15%), é calculado sobre a largura de extrusão do preenchimento. O Orca " +"Slicer tenta conectar duas linhas de preenchimento próximas a um segmento " +"curto de perímetro. Se nenhum segmento de perímetro mais curto que este " +"parâmetro for encontrado, a linha de preenchimento é conectada a um segmento " +"de perímetro em apenas um lado e o comprimento do segmento de perímetro " +"tomado é limitado a infill_anchor, mas não mais do que este parâmetro. \n" +"Se definido como 0, o antigo algoritmo de conexão de preenchimento será " +"usado, ele deve criar o mesmo resultado que com 1000 e 0." + +msgid "0 (Simple connect)" +msgstr "0 (Conexão simples)" + +msgid "Acceleration of outer walls" +msgstr "Aceleração das paredes externas" + +msgid "Acceleration of inner walls" +msgstr "Aceleração das paredes internas" + +msgid "Acceleration of travel moves" +msgstr "Aceleração dos movimentos de deslocamento" + +msgid "" +"Acceleration of top surface infill. Using a lower value may improve top " +"surface quality" +msgstr "" +"Aceleração do preenchimento da superfície superior. Usar um valor menor pode " +"melhorar a qualidade da superfície superior" + +msgid "Acceleration of outer wall. Using a lower value can improve quality" +msgstr "" +"Aceleração do perímetro externo. Usar um valor menor pode melhorar a " +"qualidade" + +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 "" +"Aceleração das pontes. Se o valor for expresso como uma porcentagem (por " +"exemplo, 50%), será calculado com base na aceleração do perímetro externo." + +msgid "mm/s² or %" +msgstr "mm/s² ou %" + +msgid "" +"Acceleration of sparse infill. If the value is expressed as a percentage (e." +"g. 100%), it will be calculated based on the default acceleration." +msgstr "" +"Aceleração do preenchimento não sólido. Se o valor for expresso como uma " +"porcentagem (por exemplo, 100%), será calculado com base na aceleração " +"padrão." + +msgid "" +"Acceleration of internal solid infill. If the value is expressed as a " +"percentage (e.g. 100%), it will be calculated based on the default " +"acceleration." +msgstr "" +"Aceleração do preenchimento sólido interno. Se o valor for expresso como uma " +"porcentagem (por exemplo, 100%), será calculado com base na aceleração " +"padrão." + +msgid "" +"Acceleration of initial layer. Using a lower value can improve build plate " +"adhesive" +msgstr "" +"Aceleração da primeira camada. Usar um valor menor pode melhorar a adesão à " +"mesa" + +msgid "Enable accel_to_decel" +msgstr "Habilitar accel_to_decel" + +msgid "Klipper's max_accel_to_decel will be adjusted automatically" +msgstr "O max_accel_to_decel do Klipper será ajustado automaticamente" + +msgid "accel_to_decel" +msgstr "accel_to_decel" + +#, c-format, boost-format +msgid "" +"Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" +msgstr "" +"O max_accel_to_decel do Klipper será ajustado para esse %% de aceleração" + +msgid "Jerk of outer walls" +msgstr "Jerk nas paredes externas" + +msgid "Jerk of inner walls" +msgstr "Jerk nas paredes internas" + +msgid "Jerk for top surface" +msgstr "Jerk na superfície superior" + +msgid "Jerk for infill" +msgstr "Jerk no preenchimento" + +msgid "Jerk for initial layer" +msgstr "Jerk na primeira camada" + +msgid "Jerk for travel" +msgstr "Jerk no deslocamento" + +msgid "" +"Line width of initial layer. If expressed as a %, it will be computed over " +"the nozzle diameter." +msgstr "" +"Largura da linha da primeira camada. Se expresso como uma %, será calculado " +"sobre o diâmetro do bico." + +msgid "Initial layer height" +msgstr "Altura da primeira camada" + +msgid "" +"Height of initial layer. Making initial layer height to be thick slightly " +"can improve build plate adhension" +msgstr "" +"Altura da primeira camada. Tornar a altura da primeira camada ligeiramente " +"espessa pode melhorar a adesão à mesa" + +msgid "Speed of initial layer except the solid infill part" +msgstr "Velocidade da primeira camada, exceto a parte de preenchimento sólido" + +msgid "Initial layer infill" +msgstr "Preenchimento da primeira camada" + +msgid "Speed of solid infill part of initial layer" +msgstr "Velocidade da parte de preenchimento sólido da primeira camada" + +msgid "Initial layer travel speed" +msgstr "Velocidade de deslocamento da primeira camada" + +msgid "Travel speed of initial layer" +msgstr "Velocidade de deslocamento da primeira camada" + +msgid "Number of slow layers" +msgstr "Número de camadas 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 "" +"As primeiras camadas são impressas mais lentamente do que o normal. A " +"velocidade é aumentada gradualmente de forma linear sobre o número " +"especificado de camadas." + +msgid "Initial layer nozzle temperature" +msgstr "Temperatura do bico da primeira camada" + +msgid "Nozzle temperature to print initial layer when using this filament" +msgstr "" +"Temperatura do bico para imprimir a primeira camada ao usar este filamento" + +msgid "Full fan speed at layer" +msgstr "Velocidade total do ventilador na camada" + +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 "" +"A velocidade do ventilador aumentará linearmente de zero na camada " +"\"close_fan_the_first_x_layers\" para o máximo na camada " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" será ignorado se for " +"menor que \"close_fan_the_first_x_layers\", caso em que o ventilador " +"funcionará na velocidade máxima permitida na camada " +"\"close_fan_the_first_x_layers\" + 1." + +msgid "layer" +msgstr "" + +msgid "Support interface fan speed" +msgstr "Velocidade do ventilador de interface de suporte" + +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 "" +"Esta velocidade do ventilador é aplicada durante todas as interfaces de " +"suporte, para enfraquecer sua ligação com uma alta velocidade do " +"ventilador.\n" +"Defina como -1 para desativar esta substituição.\n" +"Só pode ser substituído por 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 "" +"Movimento aleatório durante a impressão do perímetro, de modo que a " +"superfície tenha uma aparência áspera. Essa configuração controla a textura " +"fuzzy" + +msgid "Contour" +msgstr "Contorno" + +msgid "Contour and hole" +msgstr "Contorno e furo" + +msgid "All walls" +msgstr "Todas as paredes" + +msgid "Fuzzy skin thickness" +msgstr "Espessura da textura fuzzy" + +msgid "" +"The width within which to jitter. It's adversed to be below outer wall line " +"width" +msgstr "" +"A largura dentro da qual tremer. É desaconselhável que seja menor do que a " +"largura da linha do perímetro externo" + +msgid "Fuzzy skin point distance" +msgstr "Distância do ponto da textura fuzzy" + +msgid "" +"The average diatance between the random points introducded on each line " +"segment" +msgstr "" +"A distância média entre os pontos aleatórios introduzidos em cada segmento " +"de linha" + +msgid "Apply fuzzy skin to first layer" +msgstr "Aplicar texture fuzzy à primeira camada" + +msgid "Whether to apply fuzzy skin on the first layer" +msgstr "Se deve aplicar textura fuzzy na primeira camada" + +msgid "Filter out tiny gaps" +msgstr "Filtrar vazios pequenos" + +msgid "Layers and Perimeters" +msgstr "Camadas e Perímetros" + +msgid "Filter out gaps smaller than the threshold specified" +msgstr "Filtrar vazios menores que o limite especificado" + +msgid "" +"Speed of gap infill. Gap usually has irregular line width and should be " +"printed more slowly" +msgstr "" +"Velocidade de preenchimento de vão. Vazios geralmente têm largura de linha " +"irregular e devem ser impressas mais lentamente" + +msgid "Precise Z height" +msgstr "Altura Z precisa" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Ative isto para obter altura Z precisa do objeto após fatiar. Ele obterá a " +"altura do objeto exata ajustando as alturas da camada das últimas camadas. " +"Observe que este é um parâmetro experimental." + +msgid "Arc fitting" +msgstr "Ajuste de arco (Arc fitting)" + +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." +msgstr "" +"Habilite isso para obter um arquivo de código G, que tenha movimentos G2 e " +"G3. A tolerância adequada é a mesma que a resolução. \n" +"\n" +"Nota: Para máquinas klipper, esta opção é recomendada estar desativada. " +"Klipper não beneficia de comandos de arco pois eles são divididos novamente " +"em segmentos de linha pelo firmware. Isso resulta em uma redução da " +"qualidade de superfície à medida que os segmentos de linha são convertidos " +"em arcos pelo fatiador e depois revertem para segmentos de linha pelo " +"firmware." + +msgid "Add line number" +msgstr "Adicionar número da linha" + +msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" +msgstr "" +"Habilitar isso para adicionar o número da linha (Nx) no início de cada linha " +"do G-Code" + +msgid "Scan first layer" +msgstr "Escanear primeira camada" + +msgid "" +"Enable this to enable the camera on printer to check the quality of first " +"layer" +msgstr "" +"Habilitar isso para ativar a câmera na impressora para verificar a qualidade " +"da primeira camada" + +msgid "Nozzle type" +msgstr "Tipo de bico" + +msgid "" +"The metallic material of nozzle. This determines the abrasive resistance of " +"nozzle, and what kind of filament can be printed" +msgstr "" +"O material metálico do bico. Isso determina a resistência ao desgaste do " +"bico e que tipo de filamento pode ser impresso" + +msgid "Undefine" +msgstr "Não definido" + +msgid "Hardened steel" +msgstr "Aço endurecido" + +msgid "Stainless steel" +msgstr "Aço inoxidável" + +msgid "Brass" +msgstr "Latão" + +msgid "Nozzle HRC" +msgstr "Bico HRC" + +msgid "" +"The nozzle's hardness. Zero means no checking for nozzle's hardness during " +"slicing." +msgstr "" +"A dureza do bico. Zero significa que não há verificação da dureza do bico " +"durante a fatiamento." + +msgid "HRC" +msgstr "RH" + +msgid "Printer structure" +msgstr "Estrutura da impressora" + +msgid "The physical arrangement and components of a printing device" +msgstr "A disposição física e componentes de um dispositivo de impressão" + +msgid "CoreXY" +msgstr "CoreXY" + +msgid "I3" +msgstr "I3" + +msgid "Hbot" +msgstr "Hbot" + +msgid "Delta" +msgstr "Delta" + +msgid "Best object position" +msgstr "Melhor posição do objeto" + +msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." +msgstr "" +"Melhor posição de arranjo automático na faixa [0,1] em relação ao formato da " +"mesa." + +msgid "" +"Enable this option if machine has auxiliary part cooling fan. G-code " +"command: M106 P2 S(0-255)." +msgstr "" +"Habilitar esta opção se a máquina tiver ventilador auxiliar de resfriamento " +"da peça. Comando G-code: M106 P2 S(0-255)." + +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 "" +"Comece o ventilador este número de segundos antes do tempo de início do alvo " +"(você pode usar segundos fracionários). Ele assume aceleração infinita para " +"esta estimativa de tempo e só levará em conta os movimentos G1 e G0 (o " +"ajuste de arco não é suportado).\n" +"Não moverá comandos do ventilador de gcodes personalizados (eles funcionam " +"como uma espécie de 'barreira').\n" +"Não moverá comandos do ventilador para o início do gcode se o 'apenas gcode " +"de início personalizado' estiver ativado.\n" +"Use 0 para desativar." + +msgid "Only overhangs" +msgstr "Apenas overhangs" + +msgid "Will only take into account the delay for the cooling of overhangs." +msgstr "Levará em conta apenas o atraso para o resfriamento dos s." + +msgid "Fan kick-start time" +msgstr "Tempo de inicialização do 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 "" +"Emita um comando de velocidade máxima do ventilador por esta quantidade de " +"segundos antes de reduzir para a velocidade alvo para iniciar o ventilador " +"de resfriamento.\n" +"Isto é útil para ventiladores onde um baixo PWM/potência pode ser " +"insuficiente para fazer o ventilador começar a girar a partir de uma parada, " +"ou para fazer o ventilador alcançar a velocidade mais rapidamente.\n" +"Defina como 0 para desativar." + +msgid "Time cost" +msgstr "Custo de tempo" + +msgid "The printer cost per hour" +msgstr "O custo da impressora por hora" + +msgid "money/h" +msgstr "dinheiro/h" + +msgid "Support control chamber temperature" +msgstr "Controlar a temperatura da câmara de suporte" + +msgid "" +"This option is enabled if machine support controlling chamber temperature\n" +"G-code command: M141 S(0-255)" +msgstr "" +"Esta opção está habilitada se a máquina suportar o controle da temperatura " +"da câmara.\n" +"Comando G-code: M141 S(0-255)" + +msgid "Support air filtration" +msgstr "Filtragem de ar de suporte" + +msgid "" +"Enable this if printer support air filtration\n" +"G-code command: M106 P3 S(0-255)" +msgstr "" +"Esta opção está habilitada se a máquina suportar o controle da temperatura " +"da câmara.\n" +"Comando G-code: M141 S(0-255)" + +msgid "G-code flavor" +msgstr "Tipo de G-code" + +msgid "What kind of gcode the printer is compatible with" +msgstr "Com que tipo de G-code a impressora é compatível" + +msgid "Klipper" +msgstr "Klipper" + +msgid "Support multi bed types" +msgstr "Suportar vários tipos de mesa" + +msgid "Enable this option if you want to use multiple bed types" +msgstr "Ative esta opção se quiser usar vários tipos de mesa" + +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 "" +"Ative isso para adicionar comentários no G-Code etiquetando movimentos de " +"impressão com a qual objeto eles pertencem, o que é útil para o plugin " +"CancelObject do Octoprint. Esta configuração NÃO é compatível com a " +"configuração de Material Múltiplo de Extrusora Única e Limpeza no Objeto / " +"Limpeza no Preenchimento." + +msgid "Exclude objects" +msgstr "Excluir objetos" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "Ative esta opção para adicionar o comando EXCLUDE OBJECT no g-code" + +msgid "Verbose G-code" +msgstr "G-code detalhado" + +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 "" +"Ative isso para obter um arquivo G-code comentado, com cada linha explicada " +"por um texto descritivo. Se você imprimir do cartão SD, o peso adicional do " +"arquivo pode fazer com que o firmware fique mais lento." + +msgid "Infill combination" +msgstr "Combinar preenchimento" + +msgid "" +"Automatically Combine sparse infill of several layers to print together to " +"reduce time. Wall is still printed with original layer height." +msgstr "" +"Combina automaticamente o preenchimento não sólido de várias camadas para " +"imprimir juntas e reduzir o tempo. O perímetro ainda é impresso com a altura " +"original da camada." + +msgid "Filament to print internal sparse infill." +msgstr "Filamento para imprimir preenchimento interno não sólido." + +msgid "" +"Line width of internal sparse infill. If expressed as a %, it will be " +"computed over the nozzle diameter." +msgstr "" +"Largura da linha do preenchimento interno não sólido. Se expresso como %, " +"será calculado sobre o diâmetro do bico." + +msgid "Infill/Wall overlap" +msgstr "Sobreposição de preenchimento/perímetro" + +#, no-c-format, no-boost-format +msgid "" +"Infill area is enlarged slightly to overlap with wall for better bonding. " +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" +"A área de preenchimento é aumentada ligeiramente para se sobrepor à parede " +"para uma melhor ligação. O valor percentual é relativo à largura da linha do " +"preencimento. Defina este valor como ~10-15% para minimizar uma potencial " +"sobre extrusão e acumulo de material resultando em superfícies superiores " +"ásperas." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Sobreposição Superior/Inferior de preenchimento sólido/parede" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"A área de preenchimento sólido é ligeiramente alargada para se sobrepor à " +"parede para melhor ligação e para minimizar a aparência de buracos onde o " +"preenchimento encontra as paredes. Um valor de 25-30% é um bom ponto de " +"partida, minimizando a aparência dos buracos. O valor percentual é relativo " +"à largura da linha do preenchimento" + +msgid "Speed of internal sparse infill" +msgstr "Velocidade do preenchimento" + +msgid "Interface shells" +msgstr "Paredes de interface" + +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 "" +"Força a geração de perímetros sólidos entre materiais/volumes adjacentes. " +"Útil para impressões com múltiplos extrusores com materiais translúcidos ou " +"suporte solúvel manual" + +msgid "Maximum width of a segmented region" +msgstr "Largura máxima de uma região segmentada" + +msgid "Maximum width of a segmented region. Zero disables this feature." +msgstr "" +"Largura máxima de uma região segmentada. Zero desativa essa funcionalidade." + +msgid "Interlocking depth of a segmented region" +msgstr "Profundidade de entrelaçamento de uma região segmentada" + +msgid "Interlocking depth of a segmented region. Zero disables this feature." +msgstr "" +"Profundidade de entrelaçamento de uma região segmentada. Zero desativa essa " +"funcionalidade." + +msgid "Ironing Type" +msgstr "Tipo do passar ferro" + +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 "" +"Passar a ferro utiliza um pequeno fluxo para imprimir na mesma altura da " +"superfície novamente para deixá-la mais lisa. Esta configuração controla " +"qual camada está sendo passada a ferro" + +msgid "No ironing" +msgstr "Desativado" + +msgid "Top surfaces" +msgstr "Superfícies superiores" + +msgid "Topmost surface" +msgstr "Superfície superior mais alta" + +msgid "All solid layer" +msgstr "Todas as camadas sólidas" + +msgid "Ironing Pattern" +msgstr "Padrão do passar ferro" + +msgid "The pattern that will be used when ironing" +msgstr "O padrão que será usado ao passar a ferro" + +msgid "Ironing flow" +msgstr "Fluxo do passar ferro" + +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 "" +"A quantidade de material a extrudar durante o passar a ferro. Relativo ao " +"fluxo da altura normal da camada. Um valor muito alto resulta em " +"superextrusão na superfície" + +msgid "Ironing line spacing" +msgstr "Espaçamento de linha do passar ferro" + +msgid "The distance between the lines of ironing" +msgstr "A distância entre as linhas do passar ferro" + +msgid "Ironing speed" +msgstr "Velocidade do passar ferro" + +msgid "Print speed of ironing lines" +msgstr "Velocidade de impressão das linhas do passar ferro" + +msgid "Ironing angle" +msgstr "Ângulo do passar ferro" + +msgid "" +"The angle ironing is done at. A negative number disables this function and " +"uses the default method." +msgstr "" +"O ângulo em que o passar a ferro é feito. Um número negativo desativa essa " +"função e usa o método padrão." + +msgid "This gcode part is inserted at every layer change after lift z" +msgstr "" +"Esta parte do gcode é inserida em cada mudança de camada após levantar z" + +msgid "Supports silent mode" +msgstr "Suporta modo silencioso" + +msgid "" +"Whether the machine supports silent mode in which machine use lower " +"acceleration to print" +msgstr "" +"Se a máquina suporta o modo silencioso, no qual a máquina usa uma aceleração " +"mais baixa para imprimir" + +msgid "Emit limits to G-code" +msgstr "Emitir limites para o G-code" + +msgid "Machine limits" +msgstr "Limites da máquina" + +msgid "" +"If enabled, the machine limits will be emitted to G-code file.\n" +"This option will be ignored if the g-code flavor is set to Klipper." +msgstr "" +"Se ativado, os limites da máquina serão emitidos para o arquivo de G-code.\n" +"Esta opção será ignorada se o tipo do G-code estiver definido para Klipper." + +msgid "" +"This G-code will be used as a code for the pause print. User can insert " +"pause G-code in gcode viewer" +msgstr "" +"Este G-code será usado como um código para pausar a impressão. O usuário " +"pode inserir o G-code de pausa no visualizador de G-code" + +msgid "This G-code will be used as a custom code" +msgstr "Este G-code será usado como um código personalizado" + +msgid "Small area flow compensation (beta)" +msgstr "Compensação de fluxo de área pequena (beta)" + +msgid "Enable flow compensation for small infill areas" +msgstr "Habilitar compensação de fluxo para áreas de preenchimento pequenas" + +msgid "Flow Compensation Model" +msgstr "Modelo de Compensação de Fluxo" + +msgid "" +"Flow Compensation Model, used to adjust the flow for small infill areas. The " +"model is expressed as a comma separated pair of values for extrusion length " +"and flow correction factors, one per line, in the following format: " +"\"1.234,5.678\"" +msgstr "" +"Modelo de Compensação de Fluxo, usado para ajustar o fluxo para áreas de " +"preenchimento pequenas. O modelo é expresso como um par de valores separados " +"por vírgula para o comprimento de extrusão e os fatores de correção de " +"fluxo, um por linha, no seguinte formato: \"1.234,5.678\"" + +msgid "Maximum speed X" +msgstr "Velocidade máxima X" + +msgid "Maximum speed Y" +msgstr "Velocidade máxima Y" + +msgid "Maximum speed Z" +msgstr "Velocidade máxima Z" + +msgid "Maximum speed E" +msgstr "Velocidade máxima E" + +msgid "Maximum X speed" +msgstr "Velocidade máxima em X" + +msgid "Maximum Y speed" +msgstr "Velocidade máxima em Y" + +msgid "Maximum Z speed" +msgstr "Velocidade máxima em Z" + +msgid "Maximum E speed" +msgstr "Velocidade máxima em E" + +msgid "Maximum acceleration X" +msgstr "Aceleração máxima em X" + +msgid "Maximum acceleration Y" +msgstr "Aceleração máxima em Y" + +msgid "Maximum acceleration Z" +msgstr "Aceleração máxima em Z" + +msgid "Maximum acceleration E" +msgstr "Aceleração máxima em E" + +msgid "Maximum acceleration of the X axis" +msgstr "Aceleração máxima do eixo X" + +msgid "Maximum acceleration of the Y axis" +msgstr "Aceleração máxima do eixo Y" + +msgid "Maximum acceleration of the Z axis" +msgstr "Aceleração máxima do eixo Z" + +msgid "Maximum acceleration of the E axis" +msgstr "Aceleração máxima do eixo E" + +msgid "Maximum jerk X" +msgstr "Jerk máximo em X" + +msgid "Maximum jerk Y" +msgstr "Jerk máximo em Y" + +msgid "Maximum jerk Z" +msgstr "Jerk máximo em Z" + +msgid "Maximum jerk E" +msgstr "Jerk máximo em E" + +msgid "Maximum jerk of the X axis" +msgstr "Jerk máximo do eixo X" + +msgid "Maximum jerk of the Y axis" +msgstr "Jerk máximo do eixo Y" + +msgid "Maximum jerk of the Z axis" +msgstr "Jerk máximo do eixo Z" + +msgid "Maximum jerk of the E axis" +msgstr "Jerk máximo do eixo E" + +msgid "Minimum speed for extruding" +msgstr "Velocidade mínima para extrusão" + +msgid "Minimum speed for extruding (M205 S)" +msgstr "Velocidade mínima para extrusão (M205 S)" + +msgid "Minimum travel speed" +msgstr "Velocidade mínima de movimento" + +msgid "Minimum travel speed (M205 T)" +msgstr "Velocidade mínima de movimento (M205 T)" + +msgid "Maximum acceleration for extruding" +msgstr "Aceleração máxima para extrusão" + +msgid "Maximum acceleration for extruding (M204 P)" +msgstr "Aceleração máxima para extrusão (M204 P)" + +msgid "Maximum acceleration for retracting" +msgstr "Aceleração máxima para retrair" + +msgid "Maximum acceleration for retracting (M204 R)" +msgstr "Aceleração máxima para retrair (M204 R)" + +msgid "Maximum acceleration for travel" +msgstr "Aceleração máxima para deslocamento" + +msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2" +msgstr "" +"Aceleração máxima para deslocamento (M204 T), aplica-se apenas ao Marlin 2" + +msgid "" +"Part cooling fan speed may be increased when auto cooling is enabled. This " +"is the maximum speed limitation of part cooling fan" +msgstr "" +"A velocidade do ventilador de resfriamento da peça pode ser aumentada quando " +"o resfriamento automático está habilitado. Este é o limite máximo de " +"velocidade do ventilador de resfriamento da peça" + +msgid "Max" +msgstr "Máx" + +msgid "" +"The largest printable layer height for extruder. Used tp limits the maximum " +"layer hight when enable adaptive layer height" +msgstr "" +"A maior altura de camada imprimível para o extrusor. Usado para limitar a " +"altura máxima da camada quando a altura da camada adaptativa está ativada" + +msgid "Extrusion rate smoothing" +msgstr "Suavização da extrusão" + +msgid "" +"This parameter smooths out sudden extrusion rate changes that happen when " +"the printer transitions from printing a high flow (high speed/larger width) " +"extrusion to a lower flow (lower speed/smaller width) extrusion and vice " +"versa.\n" +"\n" +"It defines the maximum rate by which the extruded volumetric flow in mm3/sec " +"can change over time. Higher values mean higher extrusion rate changes are " +"allowed, resulting in faster speed transitions.\n" +"\n" +"A value of 0 disables the feature. \n" +"\n" +"For a high speed, high flow direct drive printer (like the Bambu lab or " +"Voron) this value is usually not needed. However it can provide some " +"marginal benefit in certain cases where feature speeds vary greatly. For " +"example, when there are aggressive slowdowns due to overhangs. In these " +"cases a high value of around 300-350mm3/s2 is recommended as this allows for " +"just enough smoothing to assist pressure advance achieve a smoother flow " +"transition.\n" +"\n" +"For slower printers without pressure advance, the value should be set much " +"lower. A value of 10-15mm3/s2 is a good starting point for direct drive " +"extruders and 5-10mm3/s2 for Bowden style. \n" +"\n" +"This feature is known as Pressure Equalizer in Prusa slicer.\n" +"\n" +"Note: this parameter disables arc fitting." +msgstr "" +"Este parâmetro suaviza as mudanças súbitas na taxa de extrusão que ocorrem " +"quando a impressora faz a transição de uma extrusão de alto fluxo (alta " +"velocidade/maior largura) para uma extrusão de baixo fluxo (baixa velocidade/" +"menor largura) e vice-versa.\n" +"\n" +"Define a taxa máxima pela qual o fluxo volumétrico extrudado em mm3/seg pode " +"mudar ao longo do tempo. Valores mais altos significam que mudanças de taxa " +"de extrusão mais altas são permitidas, resultando em transições de " +"velocidade mais rápidas.\n" +"\n" +"Um valor de 0 desativa o recurso.\n" +"\n" +"Para uma impressora de acionamento direto de alta velocidade e alto fluxo " +"(como a Bambu lab ou Voron), esse valor geralmente não é necessário. No " +"entanto, pode fornecer alguns benefícios marginais em certos casos em que as " +"velocidades das características variam muito. Por exemplo, quando há " +"desacelerações agressivas devido a overhangs. Nesses casos, um valor alto de " +"cerca de 300-350mm3/s2 é recomendado, pois isso permite apenas suavização " +"suficiente para ajudar o Pressure advance a alcançar uma transição de fluxo " +"mais suave.\n" +"\n" +"Para impressoras mais lentas sem Pressure advance, o valor deve ser definido " +"muito mais baixo. Um valor de 10-15mm3/s2 é um bom ponto de partida para " +"extrusoras de acionamento direto e 5-10mm3/s2 para estilo Bowden.\n" +"\n" +"Este recurso é conhecido como Equalizador de Pressão no slicer Prusa.\n" +"\n" +"Nota: este parâmetro desativa o ajuste de arco." + +msgid "mm³/s²" +msgstr "mm3/s2" + +msgid "Smoothing segment length" +msgstr "Distancia do segmento de suavização" + +msgid "" +"A lower value results in smoother extrusion rate transitions. However, this " +"results in a significantly larger gcode file and more instructions for the " +"printer to process. \n" +"\n" +"Default value of 3 works well for most cases. If your printer is stuttering, " +"increase this value to reduce the number of adjustments made\n" +"\n" +"Allowed values: 1-5" +msgstr "" +"Um valor menor resulta em transições de extrusão mais suaves. No entanto, " +"isso resulta em um arquivo Gcode significativamente maior e mais instruções " +"para a impressora processar.\n" +"\n" +"O valor padrão de 3 funciona bem para a maioria dos casos. Se sua impressora " +"estiver engasgando, aumente este valor para reduzir o número de ajustes " +"feitos.\n" +"\n" +"Valores permitidos: 1-5" + +msgid "Minimum speed for part cooling fan" +msgstr "Velocidade mínima para o ventilador de resfriamento da peça" + +msgid "" +"Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " +"during printing except the first several layers which is defined by no " +"cooling layers.\n" +"Please enable auxiliary_fan in printer settings to use this feature. G-code " +"command: M106 P2 S(0-255)" +msgstr "" +"Velocidade do ventilador auxiliar de resfriamento de peças. O ventilador " +"auxiliar funcionará nesta velocidade durante a impressão, exceto nas " +"primeiras camadas, que são definidas por camadas sem resfriamento.\n" +"\n" +"Por favor, habilite o ventilador auxiliar nas configurações da impressora " +"para usar esta função. Comando G-code: M106 P2 S(0-255)" + +msgid "Min" +msgstr "Mín" + +msgid "" +"The lowest printable layer height for extruder. Used tp limits the minimum " +"layer hight when enable adaptive layer height" +msgstr "" +"A menor altura de camada imprimível para o extrusor. Usado para limitar a " +"altura mínima da camada ao habilitar a altura de camada adaptativa" + +msgid "Min print speed" +msgstr "Velocidade de impressão mínima" + +msgid "" +"The minimum printing speed that the printer will slow down to to attempt to " +"maintain the minimum layer time above, when slow down for better layer " +"cooling is enabled." +msgstr "" +"A velocidade de impressão mínima para a qual a impressora diminuirá a " +"velocidade para tentar manter o tempo mínimo de camada acima, quando a " +"desaceleração para um melhor resfriamento da camada estiver habilitada." + +msgid "Nozzle diameter" +msgstr "Diâmetro do bico" + +msgid "Diameter of nozzle" +msgstr "Diâmetro do bico" + +msgid "Configuration notes" +msgstr "Notas de configuração" + +msgid "" +"You can put here your personal notes. This text will be added to the G-code " +"header comments." +msgstr "" +"Você pode colocar aqui suas notas pessoais. Este texto será adicionado aos " +"comentários do cabeçalho do G-code." + +msgid "Host Type" +msgstr "Tipo de Host" + +msgid "" +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." +msgstr "" +"O Orca Slicer pode carregar arquivos de código G para um hospedeiro de " +"impressora. Este campo deve conter o tipo de hospedeiro." + +msgid "Nozzle volume" +msgstr "Volume do bico" + +msgid "Volume of nozzle between the cutter and the end of nozzle" +msgstr "Volume do bico entre o cortador e a extremidade do bico" + +msgid "Cooling tube position" +msgstr "Posição do tubo de resfriamento" + +msgid "Distance of the center-point of the cooling tube from the extruder tip." +msgstr "" +"Distância do ponto central do tubo de resfriamento da ponta do extrusor." + +msgid "Cooling tube length" +msgstr "Comprimento do tubo de resfriamento" + +msgid "Length of the cooling tube to limit space for cooling moves inside it." +msgstr "" +"Comprimento do tubo de resfriamento para limitar o espaço para movimentos de " +"resfriamento dentro dele." + +msgid "High extruder current on filament swap" +msgstr "Corrente da extrusora alta na troca de filamento" + +msgid "" +"It may be beneficial to increase the extruder motor current during the " +"filament exchange sequence to allow for rapid ramming feed rates and to " +"overcome resistance when loading a filament with an ugly shaped tip." +msgstr "" +"Pode ser benéfico aumentar a corrente do motor da extrusora durante a " +"sequência de troca de filamento para permitir taxas de moldeamento rápidas e " +"para superar a resistência ao carregar um filamento com uma ponta com forma " +"irregular." + +msgid "Filament parking position" +msgstr "Posição de estacionamento do filamento" + +msgid "" +"Distance of the extruder tip from the position where the filament is parked " +"when unloaded. This should match the value in printer firmware." +msgstr "" +"Distância da ponta do extrusor da posição onde o filamento é estacionado " +"quando descarregado. Isso deve corresponder ao valor no firmware da " +"impressora." + +msgid "Extra loading distance" +msgstr "Distância de carregamento extra" + +msgid "" +"When set to zero, the distance the filament is moved from parking position " +"during load is exactly the same as it was moved back during unload. When " +"positive, it is loaded further, if negative, the loading move is shorter " +"than unloading." +msgstr "" +"Quando definido como zero, a distância que o filamento é movido da posição " +"de estacionamento durante o carregamento é exatamente a mesma que foi movida " +"durante o descarregamento. Quando positivo, é carregado mais longe, se " +"negativo, o movimento de carregamento é mais curto do que o descarregamento." + +msgid "Start end points" +msgstr "Pontos de início e fim" + +msgid "The start and end points which is from cutter area to garbage can." +msgstr "" +"Os pontos de início e fim que vão da área do cortador até a lata de lixo." + +msgid "Reduce infill retraction" +msgstr "Reduzir retração durante o preenchimento" + +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 "" +"Não retrair quando o movimento está na área de preenchimento completamente. " +"Isso significa que o vazamento não pode ser visto. Isso pode reduzir o " +"número de retratações para modelos complexos e economizar tempo de " +"impressão, mas torna a geração de fatiamento e G-code mais lenta" + +msgid "Filename format" +msgstr "Formato do nome do arquivo" + +msgid "User can self-define the project file name when export" +msgstr "O usuário pode auto-definir o nome do arquivo do projeto ao exportar" + +msgid "Make overhangs printable" +msgstr "Overhangs imprimíveis" + +msgid "Modify the geometry to print overhangs without support material." +msgstr "Modifica a geometria para imprimir overhangs sem suporte." + +msgid "Make overhangs printable - Maximum angle" +msgstr "Overhangs imprimíveis - ângulo máx" + +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 "" +"Ângulo máximo do overhang permitido antes de fazer ângulos mais íngremes " +"imprimíveis. 90° não vai fazer nenhuma mudança no modelo e vai permitir " +"qualquer overhang. 0 vai substituir todos overhangs por uma forma cônica." + +msgid "Make overhangs printable - Hole area" +msgstr "Overhangs imprimíveis - área do furo" + +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 "" +"Área maxima de um furo na base do modelo antes que ele seja preenchido por " +"uma forma cônica. Um valor 0 irá preencher todos os furos do modelo." + +msgid "mm²" +msgstr "mm2" + +msgid "Detect overhang wall" +msgstr "Detectar overhangs" + +#, 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 "" +"Detecta a porcentagem relativa de overhang em relação a largura do perímetro " +"e usa uma velocidade diferente de impressão. Para overhangs 100%%, a " +"velocidade de ponte é usada." + +msgid "" +"Line width of inner wall. If expressed as a %, it will be computed over the " +"nozzle diameter." +msgstr "" +"Largura do perímetro interno. Se expressado como %, será computado de acordo " +"com o diâmetro do bico." + +msgid "Speed of inner wall" +msgstr "Velocidade do perímetro interno" + +msgid "Number of walls of every layer" +msgstr "Número de perímetros em cada camada" + +msgid "Alternate extra wall" +msgstr "Parede extra alternada" + +msgid "" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" +"\n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" +"\n" +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." +msgstr "" +"Esta configuração adiciona um perímetro extra a cada duas camadas. Dessa " +"forma, o preenchimento fica encaixado verticalmente entre as paredes, " +"resultando em impressões mais resistentes. \n" +"\n" +"Quando esta opção está ativada, a opção de garantir a espessura vertical do " +"perímetro precisa ser desativada. \n" +"\n" +"Não é recomendado usar o preenchimento rápido juntamente com esta opção, " +"pois há preenchimento limitado para ancorar os perímetros extras." + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and they can access the Orca Slicer config settings by reading " +"environment variables." +msgstr "" +"Se você deseja processar o G-code de saída por meio de scripts " +"personalizados, basta listar seus caminhos absolutos aqui. Separe vários " +"scripts com um ponto e vírgula. Os scripts receberão o caminho absoluto para " +"o arquivo G-code como primeiro argumento, e eles podem acessar as " +"configurações do Orca Slicer lendo variáveis de ambiente." + +msgid "Printer notes" +msgstr "Notas da impressora" + +msgid "You can put your notes regarding the printer here." +msgstr "Você pode inserir suas observações sobre a impressora aqui." + +msgid "Raft contact Z distance" +msgstr "Distância (Z) de contato da Jangada" + +msgid "Z gap between object and raft. Ignored for soluble interface" +msgstr "Lacuna (Z) entre o objeto e a Jangada. Ignorado para interface solúvel" + +msgid "Raft expansion" +msgstr "Expansão da Jangada" + +msgid "Expand all raft layers in XY plane" +msgstr "Expandir todas as camadas da Jangada no plano XY" + +msgid "Initial layer density" +msgstr "Densidade da primeira camada" + +msgid "Density of the first raft or support layer" +msgstr "Densidade da primeira camada da Jangada ou Suporte" + +msgid "Initial layer expansion" +msgstr "Expansão da primeira camada" + +msgid "Expand the first raft or support layer to improve bed plate adhesion" +msgstr "" +"Expanda a primeira camada da Jangada ou Suporte para melhorar a adesão à " +"mesa de impressão" + +msgid "Raft layers" +msgstr "Camadas da Jangada" + +msgid "" +"Object will be raised by this number of support layers. Use this function to " +"avoid wrapping when print ABS" +msgstr "" +"O objeto será elevado por este número de camadas de suporte. Use esta função " +"para evitar o enrugamento ao imprimir 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 "" +"O caminho do G-code é gerado após simplificar o contorno do modelo para " +"evitar muitos pontos e linhas de código G no arquivo de código G. Um valor " +"menor significa maior resolução e mais tempo para fatiar" + +msgid "Travel distance threshold" +msgstr "Limiar de distância de deslocamento" + +msgid "" +"Only trigger retraction when the travel distance is longer than this " +"threshold" +msgstr "" +"Disparar a retração somente quando a distância da deslocamento for maior que " +"este limite" + +msgid "Retract amount before wipe" +msgstr "Quantidade de retração antes da limpeza" + +msgid "" +"The length of fast retraction before wipe, relative to retraction length" +msgstr "" +"O comprimento da retração rápida antes da limpeza, em relação ao comprimento " +"da retração" + +msgid "Retract when change layer" +msgstr "Retrair ao mudar de camada" + +msgid "Force a retraction when changes layer" +msgstr "Forçar uma retração ao mudar de camada" + +msgid "Retraction Length" +msgstr "Distância de retração" + +msgid "" +"Some amount of material in extruder is pulled back to avoid ooze during long " +"travel. Set zero to disable retraction" +msgstr "" +"Alguma quantidade de material no extrusor é puxada para trás para evitar " +"oozing durante viagens longas. Defina zero para desativar a retração" + +msgid "Long retraction when cut(experimental)" +msgstr "Retração longa quando cortado(experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Recurso experimental. Retrair e cortar o filamento a uma distância mais " +"longa durante mudanças para minimizar a purga. Isto reduz significativamente " +"a purga, pode também aumentar o risco de bolhas no bico ou de outros " +"problemas de impressão." + +msgid "Retraction distance when cut" +msgstr "Distância de retração ao cortar" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Funcionalidade experimental. Comprimento de retração antes de cortar durante " +"a mudança de filamento" + +msgid "Z hop when retract" +msgstr "Z hop ao retrair" + +msgid "" +"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 "" +"Sempre que a retração é feita, o bico é levantado um pouco para criar folga " +"entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se " +"mover. Usar linha espiral para levantar z pode evitar stringing" + +msgid "Z hop lower boundary" +msgstr "Limite inferior do Z hop" + +msgid "" +"Z hop will only come into effect when Z is above this value and is below the " +"parameter: \"Z hop upper boundary\"" +msgstr "" +"O Z hop só entrará em vigor quando Z estiver acima deste valor e abaixo do " +"parâmetro: \"Limite superior do Z hop\"" + +msgid "Z hop upper boundary" +msgstr "Limite superior do Z hop" + +msgid "" +"If this value is positive, Z hop will only come into effect when Z is above " +"the parameter: \"Z hop lower boundary\" and is below this value" +msgstr "" +"Se este valor for positivo, o Z hop só entrará em vigor quando Z estiver " +"acima do parâmetro: \"Limite inferior do Z hop\" e abaixo deste valor" + +msgid "Z hop type" +msgstr "Tipo de Z hop" + +msgid "Slope" +msgstr "Declive" + +msgid "Spiral" +msgstr "Espiral" + +msgid "Only lift Z above" +msgstr "Elevar Z apenas acima de" + +msgid "" +"If you set this to a positive value, Z lift will only take place above the " +"specified absolute Z." +msgstr "" +"Se você definir isso como um valor positivo, a elevação de Z só ocorrerá " +"acima do Z absoluto especificado." + +msgid "Only lift Z below" +msgstr "Elevar Z apenas abaixo de" + +msgid "" +"If you set this to a positive value, Z lift will only take place below the " +"specified absolute Z." +msgstr "" +"Se você definir isso como um valor positivo, a elevação de Z só ocorrerá " +"abaixo do Z absoluto especificado." + +msgid "On surfaces" +msgstr "Nas superfícies" + +msgid "" +"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " +"lift Z above/below)." +msgstr "" +"Forçar Z Hop. Essa configuração é impactada pelas configurações acima " +"(Somente elevar Z acima/abaixo)" + +msgid "All Surfaces" +msgstr "Todas as superfícies" + +msgid "Top Only" +msgstr "Somente a parte superior" + +msgid "Bottom Only" +msgstr "Somente a parte inferior" + +msgid "Top and Bottom" +msgstr "Parte superior e inferior" + +msgid "Extra length on restart" +msgstr "Comprimento extra na retração" + +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 "" +"Quando a retração é compensada após o movimento de deslocamento, o extrusor " +"empurrará essa quantidade adicional de filamento. Esta configuração é " +"raramente necessária." + +msgid "" +"When the retraction is compensated after changing tool, the extruder will " +"push this additional amount of filament." +msgstr "" +"Quando a retração é compensada após a troca de ferramenta, o extrusor " +"empurrará essa quantidade adicional de filamento." + +msgid "Retraction Speed" +msgstr "Velocidade de retração" + +msgid "Speed of retractions" +msgstr "Velocidade das retratações" + +msgid "Deretraction Speed" +msgstr "Velocidade de desretração" + +msgid "" +"Speed for reloading filament into extruder. Zero means same speed with " +"retraction" +msgstr "" +"Velocidade para recarregar o filamento no extrusor. Zero significa mesma " +"velocidade de retração" + +msgid "Use firmware retraction" +msgstr "Usar retração 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 configuração experimental usa os comandos G10 e G11 para fazer com que " +"o firmware gerencie a retração. Isso é suportado apenas no Marlin mais " +"recente." + +msgid "Show auto-calibration marks" +msgstr "Mostrar marcas de autocalibração automática" + +msgid "Disable set remaining print time" +msgstr "Desabilitar definir tempo de impressão restante" + +msgid "" +"Disable generating of the M73: Set remaining print time in the final gcode" +msgstr "" +"Desativar a geração do M73: Definir tempo restante de impressão no código " +"final" + +msgid "Seam position" +msgstr "Posição da costura" + +msgid "The start position to print each part of outer wall" +msgstr "A posição inicial para imprimir cada parte do perímetro externo" + +msgid "Nearest" +msgstr "Mais próximo" + +msgid "Aligned" +msgstr "Alinhado" + +msgid "Back" +msgstr "Atrás" + +msgid "Random" +msgstr "Aleatório" + +msgid "Staggered inner seams" +msgstr "Costuras internas escalonadas" + +msgid "" +"This option causes the inner seams to be shifted backwards based on their " +"depth, forming a zigzag pattern." +msgstr "" +"Esta opção faz com que as costuras internas sejam deslocadas para trás com " +"base em sua profundidade, formando um padrão de zigue-zague." + +msgid "Seam gap" +msgstr "Espaço entre costuras" + +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 "" +"Para reduzir a visibilidade da costura em uma extrusão de loop fechado, o " +"loop é interrompido e encurtado por uma quantidade especificada.\n" +"Esta quantidade pode ser especificada em milímetros ou como uma porcentagem " +"do diâmetro atual do extrusor. O valor padrão para este parâmetro é 10%." + +msgid "Scarf joint seam (beta)" +msgstr "Costura Scarf (beta)" + +msgid "Use scarf joint to minimize seam visibility and increase seam strength." +msgstr "" +"Use a Costura Scarf para minimizar a visibilidade da costura e aumentar a " +"resistência da costura." + +msgid "Conditional scarf joint" +msgstr "Costura Scarf condicional" + +msgid "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." +msgstr "" +"Aplique a Costura Scarf apenas em perímetros suaves onde costuras " +"tradicionais não escondem as costuras em cantos agudos de forma eficaz." + +msgid "Conditional angle threshold" +msgstr "Ângulo condicional" + +msgid "" +"This option sets the threshold angle for applying a conditional scarf joint " +"seam.\n" +"If the maximum angle within the perimeter loop exceeds this value " +"(indicating the absence of sharp corners), a scarf joint seam will be used. " +"The default value is 155°." +msgstr "" +"Esta opção define o ângulo limite para aplicar uma costura scarf " +"condicional.\n" +"Se o ângulo máximo dentro do loop do perímetro exceder esse valor (indicando " +"a ausência de cantos afiados), será usada uma costura scarf. O valor padrão " +"é 155°." + +msgid "Conditional overhang threshold" +msgstr "Overhang condicional" + +#, no-c-format, no-boost-format +msgid "" +"This option determines the overhang threshold for the application of scarf " +"joint seams. If the unsupported portion of the perimeter is less than this " +"threshold, scarf joint seams will be applied. The default threshold is set " +"at 40% of the external wall's width. Due to performance considerations, the " +"degree of overhang is estimated." +msgstr "" +"Esta opção determina o limiar de inclinação para a aplicação de costuras " +"Scarf. Se a parte sem suporte do perímetro for inferior a esse limite, as " +"costuras Scarf serão aplicadas. O limite padrão é definido em 40% da largura " +"do perímetro externo. Devido a considerações de desempenho, o grau de " +"inclinação é estimado." + +msgid "Scarf joint speed" +msgstr "Velocidade da Costura Scarf" + +msgid "" +"This option sets the printing speed for scarf joints. It is recommended to " +"print scarf joints at a slow speed (less than 100 mm/s). It's also " +"advisable to enable 'Extrusion rate smoothing' if the set speed varies " +"significantly from the speed of the outer or inner walls. If the speed " +"specified here is higher than the speed of the outer or inner walls, the " +"printer will default to the slower of the two speeds. When specified as a " +"percentage (e.g., 80%), the speed is calculated based on the respective " +"outer or inner wall speed. The default value is set to 100%." +msgstr "" +"Esta opção define a velocidade de impressão para as costuras Scarf. É " +"recomendável imprimir as costuras Scarf em uma velocidade baixa (menor que " +"100 mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' " +"se a velocidade definida variar significativamente da velocidade das paredes " +"externas ou internas. Se a velocidade especificada aqui for maior que a " +"velocidade das paredes externas ou internas, a impressora utilizará a mais " +"lenta das duas velocidades. Quando especificado como uma porcentagem (por " +"exemplo, 80%), a velocidade é calculada com base na velocidade do perímetro " +"externo ou interna respectiva. O valor padrão é definido como 100%." + +msgid "Scarf joint flow ratio" +msgstr "Fluxo da Costura Scarf" + +msgid "This factor affects the amount of material for scarf joints." +msgstr "Este fator afeta a quantidade de material para as costuras Scarf." + +msgid "Scarf start height" +msgstr "Altura inicial da junta Scarf" + +msgid "" +"Start height of the scarf.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." +msgstr "" +"Altura inicial da costura Scarf.\n" +"Esta quantidade pode ser especificada em milímetros ou como uma porcentagem " +"da altura atual da camada. O valor padrão para este parâmetro é 0." + +msgid "Scarf around entire wall" +msgstr "Costura Scarf em torno do perímetro" + +msgid "The scarf extends to the entire length of the wall." +msgstr "A junta Scarf se estende por todo o comprimento do perímetro." + +msgid "Scarf length" +msgstr "Comprimento da Costura Scarf" + +msgid "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." +msgstr "" +"Comprimento da costura Scarf. Definir este parâmetro como zero desabilita a " +"costura Scarf." + +msgid "Scarf steps" +msgstr "Passos da junta Scarf" + +msgid "Minimum number of segments of each scarf." +msgstr "Número mínimo de segmentos de cada costura scarf." + +msgid "Scarf joint for inner walls" +msgstr "Junta Scarf em paredes internas" + +msgid "Use scarf joint for inner walls as well." +msgstr "Usar costura Scarf em paredes internas também." + +msgid "Role base wipe speed" +msgstr "Velocidade base de limpeza da função" + +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 "" +"A velocidade de limpeza é determinada pela velocidade do tipo de extrusão " +"atual. Por exemplo, se uma ação de limpeza for executada imediatamente após " +"uma extrusão de perímetro externo, a velocidade da extrusão do perímetro " +"externo será utilizada para a ação de limpeza." + +msgid "Wipe on loops" +msgstr "Limpeza em loops" + +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 a visibilidade da costura em uma extrusão de loop fechado, é " +"executado um pequeno movimento para dentro antes que o extrusor saia do loop." + +msgid "Wipe before external loop" +msgstr "Limpeza antes do loop externo" + +msgid "" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" +"\n" +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." +msgstr "" +"Para minimizar a visibilidade de sobreextrusão potencial no início de um " +"perímetro externo ao imprimir com a ordem de impressão de perímetro Externo/" +"Interno ou Interno/Externo/Interno, a desretração é executada ligeiramente " +"no interior a partir do início do perímetro externo. Dessa forma, qualquer " +"sobreextrusão potencial é ocultada da superfície externa. \n" +"\n" +"Isso é útil ao imprimir com a ordem de impressão de perímetro Externa/" +"Interna ou Interna/Externa/Interna, pois nesses modos é mais provável que um " +"perímetro externo seja impresso imediatamente após um movimento de " +"desretração." + +msgid "Wipe speed" +msgstr "Velocidade de limpeza" + +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 "" +"A velocidade de limpeza é determinada pela velocidade especificada nesta " +"configuração. Se o valor for expresso como uma porcentagem (por exemplo, " +"80%), será calculado com base na configuração de velocidade de deslocamento " +"acima. O valor padrão para este parâmetro é 80%" + +msgid "Skirt distance" +msgstr "Distância da saia" + +msgid "Distance from skirt to brim or object" +msgstr "Distância da saia para a borda ou objeto" + +msgid "Skirt height" +msgstr "Altura da saia" + +msgid "How many layers of skirt. Usually only one layer" +msgstr "Quantas camadas de saia. Geralmente apenas uma camada" + +msgid "Draft shield" +msgstr "Escudo" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Um escudo é útil para proteger uma impressão ABS ou ASA de empenamento e de " +"se descolar da mesa de impressão devido à corrrentes de ar. Normalmente, só " +"é necessária com impressoras abertas, ou seja, sem câmara fechada. \n" +"\n" +"Opções:\n" +"Ativado = saia tem a mesma altura que o maior objeto a ser impresso.\n" +"Limitado = saia tem altura especificada pela altura de saia.\n" +"\n" +"Nota: Com o escudo ativo, a saia será impressa na distância de saia do " +"objeto. Portanto, se bordas estiverem ativas, pode se interceptar com eles. " +"Para evitar isso, aumente o valor da distância da saia.\n" + +msgid "Limited" +msgstr "Limitada" + +msgid "Enabled" +msgstr "Ativado" + +msgid "Skirt loops" +msgstr "Voltas da saia" + +msgid "Number of loops for the skirt. Zero means disabling skirt" +msgstr "Número de voltas da saia. Zero significa desativar a saia" + +msgid "Skirt speed" +msgstr "Velocidade da saia" + +msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." +msgstr "" +"Velocidade da saia, em mm/s. Zero significa usar a velocidade padrão de " +"extrusão da camada." + +msgid "Skirt minimum extrusion length" +msgstr "Comprimento mínimo de extrusão da saia" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Comprimento mínimo de extrusão de filamento em mm ao imprimir a saia. Zero " +"significa que esta característica está desabilitada.\n" +"\n" +"Usar um valor não zero é útil se a impressora estiver configurada para " +"imprimir sem uma linha de limpeza." + +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 "" +"A velocidade de impressão no gcode exportado será reduzida quando o tempo " +"estimado da camada for menor que esse valor, para obter uma melhor " +"resfriamento para essas camadas" + +msgid "Minimum sparse infill threshold" +msgstr "Limiar mínimo de preenchimento" + +msgid "" +"Sparse infill area which is smaller than threshold value is replaced by " +"internal solid infill" +msgstr "" +"A área de preenchimento não sólido que é menor que o valor de limiar é " +"substituída por preenchimento sólido interno" + +msgid "" +"Line width of internal solid infill. If expressed as a %, it will be " +"computed over the nozzle diameter." +msgstr "" +"Largura da linha de preenchimento sólido interno. Se expresso como uma %, " +"será calculado sobre o diâmetro do bico." + +msgid "Speed of internal solid infill, not the top and bottom surface" +msgstr "" +"Velocidade de preenchimento sólido interno, não a superfície superior e " +"inferior" + +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 "" +"A espiralização suaviza os movimentos z do contorno externo. E transforma um " +"modelo sólido em uma impressão de perímetro único com camadas inferiores " +"sólidas. O modelo final gerado não tem costura" + +msgid "Smooth Spiral" +msgstr "Espiral Suave" + +msgid "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" +msgstr "" +"A Espiral Suave suaviza os movimentos X e Y, resultando em nenhuma costura " +"visível, mesmo nas direções XY em paredes que não são verticais" + +msgid "Max XY Smoothing" +msgstr "Suavização Máxima XY" + +msgid "" +"Maximum distance to move points in XY to try to achieve a smooth spiralIf " +"expressed as a %, it will be computed over nozzle diameter" +msgstr "" +"Distância máxima para mover pontos em XY para tentar obter uma espiral " +"suave. Se expresso como uma %, será calculado sobre o diâmetro do bico" + +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 "" +"Se o modo suave ou tradicional for selecionado, um vídeo em time-lapse será " +"gerado para cada impressão. Após cada camada ser impressa, uma captura de " +"tela é feita com a câmera da câmara. Todas essas capturas de tela são " +"compostas em um vídeo em time-lapse quando a impressão é concluída. Se o " +"modo suave for selecionado, a extrusora se moverá para fora após cada camada " +"ser impressa e então tirará uma captura de tela. Como o filamento derretido " +"pode vazar do bico durante o processo de tirar uma captura de tela, é " +"necessário uma Torre Prime para o modo suave para limpar o bico." + +msgid "Traditional" +msgstr "Tradicional" + +msgid "Temperature variation" +msgstr "Variação de temperatura" + +msgid "Start G-code" +msgstr "Código de Início" + +msgid "Start G-code when start the whole printing" +msgstr "Código de início ao iniciar a impressão completa" + +msgid "Start G-code when start the printing of this filament" +msgstr "Código de início ao iniciar a impressão deste filamento" + +msgid "Single Extruder Multi Material" +msgstr "Múltiplos Materiais com um Extrusor" + +msgid "Use single nozzle to print multi filament" +msgstr "Use um único bico para imprimir múltiplos filamentos" + +msgid "Manual Filament Change" +msgstr "Troca Manual de Filamento" + +msgid "" +"Enable this option to omit the custom Change filament G-code only at the " +"beginning of the print. The tool change command (e.g., T0) will be skipped " +"throughout the entire print. This is useful for manual multi-material " +"printing, where we use M600/PAUSE to trigger the manual filament change " +"action." +msgstr "" +"Ative esta opção para omitir o código G de troca de filamento personalizado " +"apenas no início da impressão. O comando de troca de ferramenta (por " +"exemplo, T0) será ignorado durante toda a impressão. Isso é útil para " +"impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a " +"ação de troca manual de filamento." + +msgid "Purge in prime tower" +msgstr "Purgar na Torre Prime" + +msgid "Purge remaining filament into prime tower" +msgstr "Purgar o filamento restante na Torre Prime" + +msgid "Enable filament ramming" +msgstr "Ativar moldeamento de ponta de filamento" + +msgid "No sparse layers (beta)" +msgstr "Sem camadas esparsas (beta)" + +msgid "" +"If enabled, the wipe tower will not be printed on layers with no " +"toolchanges. On layers with a toolchange, extruder will travel downward to " +"print the wipe tower. User is responsible for ensuring there is no collision " +"with the print." +msgstr "" +"Se ativado, a Torre Prime não será impressa em camadas sem troca de " +"ferramenta. Em camadas com uma troca de ferramenta, a extrusora viajará para " +"baixo para imprimir a Torre Prime. O usuário é responsável por garantir que " +"não haja colisão com a impressão." + +msgid "Prime all printing extruders" +msgstr "Primer todos os extrusores de impressão" + +msgid "" +"If enabled, all printing extruders will be primed at the front edge of the " +"print bed at the start of the print." +msgstr "" +"Se ativado, todos os extrusores de impressão serão iniciados na borda " +"frontal da mesa de impressão no início da impressão." + +msgid "Slice gap closing radius" +msgstr "Tolerância do fatiamento" + +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 "" +"Espaços menores que 2x a tolerância de fatiamentoo serão preenchidas durante " +"o fatiamento da malha. Aumentar a tolerância de fatiamento pode reduzir a " +"resolução final da impressão, portanto, é aconselhável manter o valor " +"razoavelmente baixo." + +msgid "Slicing Mode" +msgstr "Modo de Fatiamento" + +msgid "" +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " +"close all holes in the model." +msgstr "" +"Use \"Par-impar\" para modelos de avião 3DLabPrint. Use \"Fechar buracos\" " +"para fechar todos os buracos no modelo." + +msgid "Regular" +msgstr "Padrão" + +msgid "Even-odd" +msgstr "Par-impar" + +msgid "Close holes" +msgstr "Fechar buracos" + +msgid "Z offset" +msgstr "Deslocamento Z" + +msgid "" +"This value will be added (or subtracted) from all the Z coordinates in the " +"output G-code. It is used to compensate for bad Z endstop position: for " +"example, if your endstop zero actually leaves the nozzle 0.3mm far from the " +"print bed, set this to -0.3 (or fix your endstop)." +msgstr "" +"Este valor será adicionado (ou subtraído) de todas as coordenadas Z no G-" +"code de saída. É usado para compensar a má posição do fim de curso Z: por " +"exemplo, se o zero do seu fim de curso na verdade deixa o bico 0,3 mm longe " +"da mesa de impressão, ajuste isso para -0,3 (ou corrija o seu fim de curso)." + +msgid "Enable support" +msgstr "Ativar suporte" + +msgid "Enable support generation." +msgstr "Ativar a geração de suporte." + +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 "" +"normal(auto) e tree(auto) são usados para gerar suporte automaticamente. Se " +"normal(manual) ou tree(manual) for selecionado, apenas os suportes são " +"gerados" + +msgid "normal(auto)" +msgstr "normal(automático)" + +msgid "tree(auto)" +msgstr "árvore(automático)" + +msgid "normal(manual)" +msgstr "normal(manual)" + +msgid "tree(manual)" +msgstr "árvore(manual)" + +msgid "Support/object xy distance" +msgstr "Distância xy entre suporte e objeto" + +msgid "XY separation between an object and its support" +msgstr "Separação XY entre um objeto e seu suporte" + +msgid "Pattern angle" +msgstr "Ângulo de padrão" + +msgid "Use this setting to rotate the support pattern on the horizontal plane." +msgstr "" +"Use esta configuração para girar o padrão de suporte no plano horizontal." + +msgid "On build plate only" +msgstr "Somente na mesa" + +msgid "Don't create support on model surface, only on build plate" +msgstr "Não criar suporte na superfície do modelo, apenas na mesa" + +msgid "Support critical regions only" +msgstr "Suportar apenas regiões críticas" + +msgid "" +"Only create support for critical regions including sharp tail, cantilever, " +"etc." +msgstr "" +"Crie suporte apenas para regiões críticas, incluindo cauda afiada, balanço, " +"etc." + +msgid "Remove small overhangs" +msgstr "Remover pequenos overhangs" + +msgid "Remove small overhangs that possibly need no supports." +msgstr "Remova pequenos balanços que possivelmente não precisam de suporte." + +msgid "Top Z distance" +msgstr "Distância Z superior" + +msgid "The z gap between the top support interface and object" +msgstr "A diferença z entre a interface superior de suporte e o objeto" + +msgid "Bottom Z distance" +msgstr "Distância Z inferior" + +msgid "The z gap between the bottom support interface and object" +msgstr "A diferença z entre a interface inferior de suporte e o objeto" + +msgid "Support/raft base" +msgstr "Suporte/Jangada" + +msgid "" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" +"Filamento para imprimir Jangada e Suporte. \"Padrão\" significa nenhum " +"filamento específico para Suporte e o filamento atual será usado" + +msgid "Avoid interface filament for base" +msgstr "Evitar o filamento da interface para a base" + +msgid "" +"Avoid using support interface filament to print support base if possible." +msgstr "" +"Evite usar o filamento da interface de suporte para imprimir a base, se " +"possível." + +msgid "" +"Line width of support. If expressed as a %, it will be computed over the " +"nozzle diameter." +msgstr "" +"Largura da linha de suporte. Se expresso como %, será calculado sobre o " +"diâmetro do bico." + +msgid "Interface use loop pattern" +msgstr "Interface usa padrão de loop" + +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" +"Cubra a camada de contato superior dos suportes com loops. Desativado por " +"padrão." + +msgid "Support/raft interface" +msgstr "Interface de Suporte/Jangada" + +msgid "" +"Filament to print support interface. \"Default\" means no specific filament " +"for support interface and current filament is used" +msgstr "" +"Filamento para imprimir a interface de suporte. \"Padrão\" significa nenhum " +"filamento específico para a interface de suporte e o filamento atual é usado" + +msgid "Top interface layers" +msgstr "Camadas de interface superior" + +msgid "Number of top interface layers" +msgstr "Número de camadas de interface superior" + +msgid "Bottom interface layers" +msgstr "Camadas de interface inferior" + +msgid "Number of bottom interface layers" +msgstr "Número de camadas de interface inferior" + +msgid "Same as top" +msgstr "Mesmo que superior" + +msgid "Top interface spacing" +msgstr "Espaçamento da interface superior" + +msgid "Spacing of interface lines. Zero means solid interface" +msgstr "Espaçamento das linhas de interface. Zero significa interface sólida" + +msgid "Bottom interface spacing" +msgstr "Espaçamento da interface inferior" + +msgid "Spacing of bottom interface lines. Zero means solid interface" +msgstr "" +"Espaçamento das linhas de interface inferior. Zero significa interface sólida" + +msgid "Speed of support interface" +msgstr "Velocidade da interface de suporte" + +msgid "Base pattern" +msgstr "Padrão da base" + +msgid "Line pattern of support" +msgstr "Padrão de linha de suporte" + +msgid "Rectilinear grid" +msgstr "Grade reticulada" + +msgid "Hollow" +msgstr "Oco" + +msgid "Interface pattern" +msgstr "Padrão de 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 "" +"Padrão de linha de interface de suporte. O padrão padrão para interface de " +"suporte não solúvel é reticulado, enquanto o padrão padrão para interface de " +"suporte solúvel é concêntrico" + +msgid "Rectilinear Interlaced" +msgstr "Reticulado Interligado" + +msgid "Base pattern spacing" +msgstr "Espaçamento do padrão de base" + +msgid "Spacing between support lines" +msgstr "Espaçamento entre as linhas de suporte" + +msgid "Normal Support expansion" +msgstr "Expansão normal de suporte" + +msgid "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "Expanda (+) ou contraia (-) a extensão horizontal do suporte normal" + +msgid "Speed of support" +msgstr "Velocidade do suporte" + +msgid "" +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, slim and organic style will merge branches more " +"aggressively and save a lot of material (default organic), while hybrid " +"style will create similar structure to normal support under large flat " +"overhangs." +msgstr "" +"Estilo e forma do suporte. Para suporte normal, projetar os suportes em uma " +"grade regular criará suportes mais estáveis (padrão), enquanto torres de " +"suporte ajustadas economizarão material e reduzirão a cicatrização do " +"objeto.\n" +"Para suporte de árvore, estilo fino e orgânico mesclarão os galhos de forma " +"mais agressiva e economizarão muito material (orgânico padrão), enquanto o " +"estilo híbrido criará uma estrutura semelhante ao suporte normal em grandes " +"overhangs planas." + +msgid "Snug" +msgstr "Ajustado" + +msgid "Tree Slim" +msgstr "Árvore Estreita" + +msgid "Tree Strong" +msgstr "Árvore Forte" + +msgid "Tree Hybrid" +msgstr "Árvore Híbrida" + +msgid "Organic" +msgstr "Orgânico" + +msgid "Independent support layer height" +msgstr "Altura independente da camada de suporte" + +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 "" +"A camada de suporte usa uma altura de camada independente da camada do " +"objeto. Isso é para suportar a personalização do z-gap e economizar tempo de " +"impressão. Esta opção será inválida quando a Torre Prime estiver ativa." + +msgid "Threshold angle" +msgstr "Ângulo de limite" + +msgid "" +"Support will be generated for overhangs whose slope angle is below the " +"threshold." +msgstr "" +"O suporte será gerado para overhangs cujo ângulo de inclinação estiver " +"abaixo do limite." + +msgid "Tree support branch angle" +msgstr "Ângulo da ramificação" + +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 "" +"Esta configuração determina o ângulo máximo de inclinação que as " +"ramificações de suporte de árvore podem fazer. Se o ângulo for aumentado, as " +"ramificações podem ser impressas de forma mais horizontal, permitindo que " +"alcancem mais longe." + +msgid "Preferred Branch Angle" +msgstr "Ângulo preferido da ramificação" + +#. TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" +msgid "" +"The preferred angle of the branches, when they do not have to avoid the " +"model. Use a lower angle to make them more vertical and more stable. Use a " +"higher angle for branches to merge faster." +msgstr "" +"O ângulo preferido das ramificações, quando eles não precisam evitar o " +"modelo. Use um ângulo mais baixo para torná-los mais verticais e mais " +"estáveis. Use um ângulo mais alto para que as ramificações se fundam mais " +"rápido." + +msgid "Tree support branch distance" +msgstr "Distância entre ramificações" + +msgid "" +"This setting determines the distance between neighboring tree support nodes." +msgstr "" +"Essa configuração determina a distância entre os nós de suporte de árvore " +"vizinhos." + +msgid "Branch Density" +msgstr "Densidade da ramificação" + +#. TRN PrintSettings: "Organic supports" > "Branch Density" +msgid "" +"Adjusts the density of the support structure used to generate the tips of " +"the branches. A higher value results in better overhangs but the supports " +"are harder to remove, thus it is recommended to enable top support " +"interfaces instead of a high branch density value if dense interfaces are " +"needed." +msgstr "" +"Ajusta a densidade da estrutura de suporte usada para gerar as pontas das " +"ramificações. Um valor mais alto resulta em overhangs melhores, mas os " +"suportes são mais difíceis de remover, portanto, é recomendável ativar as " +"interfaces superiores de suporte em vez de um valor de densidade de ramo " +"alto se forem necessárias interfaces densas." + +msgid "Adaptive layer height" +msgstr "Altura de camada adaptativa" + +msgid "" +"Enabling this option means the height of tree support layer except the " +"first will be automatically calculated " +msgstr "" +"Ao ativar essa opção, a altura da camada de suporte de árvore, exceto a " +"primeira, será calculada automaticamente " + +msgid "Auto brim width" +msgstr "Largura de borda automática" + +msgid "" +"Enabling this option means the width of the brim for tree support will be " +"automatically calculated" +msgstr "" +"Ao ativar essa opção, a largura da borda para suporte de árvore será " +"calculada automaticamente" + +msgid "Tree support brim width" +msgstr "Largura da borda de suporte de árvore" + +msgid "Distance from tree branch to the outermost brim line" +msgstr "Distância do ramo da árvore até a linha de borda mais externa" + +msgid "Tip Diameter" +msgstr "Diâmetro da ponta" + +#. TRN PrintSettings: "Organic supports" > "Tip Diameter" +msgid "Branch tip diameter for organic supports." +msgstr "Diâmetro da ponta do ramo para suportes orgânicos." + +msgid "Tree support branch diameter" +msgstr "Diâmetro do ramo de suporte de árvore" + +msgid "This setting determines the initial diameter of support nodes." +msgstr "Essa configuração determina o diâmetro inicial dos nós de suporte." + +#. TRN PrintSettings: #lmFIXME +msgid "Branch Diameter Angle" +msgstr "Ângulo do diâmetro da ramificação" + +#. TRN PrintSettings: "Organic supports" > "Branch Diameter Angle" +msgid "" +"The angle of the branches' diameter as they gradually become thicker towards " +"the bottom. An angle of 0 will cause the branches to have uniform thickness " +"over their length. A bit of an angle can increase stability of the organic " +"support." +msgstr "" +"O ângulo das ramificações à medida que elas gradualmente se tornam mais " +"espessos em direção à base. Um ângulo de 0 fará com que as ramificações " +"tenham espessura uniforme ao longo de seu comprimento. Um pequeno ângulo " +"pode aumentar a estabilidade do suporte orgânico." + +msgid "Branch Diameter with double walls" +msgstr "Diâmetro da ramificação com perí. duplo" + +#. TRN PrintSettings: "Organic supports" > "Branch Diameter" +msgid "" +"Branches with area larger than the area of a circle of this diameter will be " +"printed with double walls for stability. Set this value to zero for no " +"double walls." +msgstr "" +"Ramificações com área maior do que a área de um círculo com este diâmetro " +"serão impressas com paredes duplas para estabilidade. Defina este valor como " +"zero para não ter paredes duplas." + +msgid "Support wall loops" +msgstr "Perímetros de suporte" + +msgid "This setting specify the count of walls around support" +msgstr "Esta configuração especifica a contagem de paredes ao redor do suporte" + +msgid "Tree support with infill" +msgstr "Suporte de árvore com preenchimento" + +msgid "" +"This setting specifies whether to add infill inside large hollows of tree " +"support" +msgstr "" +"Essa configuração especifica se deve adicionar preenchimento dentro de " +"grandes cavidades do suporte de árvore" + +msgid "Activate temperature control" +msgstr "Ativar controle de temperatura" + +msgid "" +"Enable this option for chamber temperature control. An M191 command will be " +"added before \"machine_start_gcode\"\n" +"G-code commands: M141/M191 S(0-255)" +msgstr "" +"Ative esta opção para controle de temperatura da câmara. Um comando M191 " +"será adicionado antes de \"machine_start_gcode\"\n" +"Comandos G-code: M141/M191 S(0-255)" + +msgid "Chamber temperature" +msgstr "Temperatura da câmara" + +msgid "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on.At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials,the actual chamber temperature should not be " +"high to avoid cloggings, so 0 which stands for turning off is highly " +"recommended" +msgstr "" +"Uma temperatura mais alta na câmara pode ajudar a suprimir ou reduzir o " +"empenamento e potencialmente levar a uma maior resistência de ligação entre " +"camadas para materiais de alta temperatura como ABS, ASA, PC, PA e assim por " +"diante. Ao mesmo tempo, a filtragem de ar de ABS e ASA ficará pior. Para " +"PLA, PETG, TPU, PVA e outros materiais de baixa temperatura, a temperatura " +"real da câmara não deve ser alta para evitar obstruções, portanto, é " +"altamente recomendável usar 0, que significa desligado" + +msgid "Nozzle temperature for layers after the initial one" +msgstr "Temperatura do bico para camadas após a inicial" + +msgid "Detect thin wall" +msgstr "Detectar perímetro fino" + +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 "" +"Detecta paredes finas que não podem conter duas larguras de linha. E usa uma " +"linha única para imprimir. Talvez seja impresso não muito bem, porque não é " +"um loop fechado" + +msgid "" +"This gcode is inserted when change filament, including T command to trigger " +"tool change" +msgstr "" +"Este gcode é inserido ao trocar o filamento, incluindo o comando T para " +"acionar a troca de ferramenta" + +msgid "This gcode is inserted when the extrusion role is changed" +msgstr "Esse gcode é inserido quando o tipo de extrusão muda" + +msgid "" +"Line width for top surfaces. If expressed as a %, it will be computed over " +"the nozzle diameter." +msgstr "" +"Largura da linha para superfícies superiores. Se expressa em %, será " +"calculada sobre o diâmetro do bico." + +msgid "Speed of top surface infill which is solid" +msgstr "Velocidade de preenchimento da superfície superior, que é sólida" + +msgid "Top shell layers" +msgstr "Camadas de topo" + +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 "" +"Este é o número de camadas sólidas do perímetro superior, incluindo a camada " +"da superfície superior. Quando a espessura calculada por este valor for " +"menor do que a espessura do perímetro superior, as camadas do perímetro " +"superior serão aumentadas" + +msgid "Top solid layers" +msgstr "Camadas sólidas superiores" + +msgid "Top shell thickness" +msgstr "Espessura da parede de topo" + +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 "" +"O número de camadas sólidas superiores é aumentado ao fatiar se a espessura " +"calculada pelas camadas da parede superior for menor do que este valor. Isso " +"pode evitar que a parede seja muito fina quando a altura da camada é " +"pequena. 0 significa que esta configuração está desativada e a espessura da " +"parede superior é determinada exclusivamente pelas camadas da parede superior" + +msgid "Speed of travel which is faster and without extrusion" +msgstr "Velocidade de deslocamento mais rápida e sem extrusão" + +msgid "Wipe while retracting" +msgstr "Limpar enquanto retrai" + +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 "" +"Movimentar o bico ao longo do último caminho de extrusão ao retrair para " +"limpar o material vazado no bico. Isso pode minimizar a formação de blob " +"quando imprimir uma nova peça após o deslocamento" + +msgid "Wipe Distance" +msgstr "Distância de limpeza" + +msgid "" +"Discribe how long the nozzle will move along the last path when " +"retracting. \n" +"\n" +"Depending on how long the wipe operation lasts, how fast and long the " +"extruder/filament retraction settings are, a retraction move may be needed " +"to retract the remaining filament. \n" +"\n" +"Setting a value in the retract amount before wipe setting below will perform " +"any excess retraction before the wipe, else it will be performed after." +msgstr "" +"Descreva por quanto tempo o bico se moverá ao longo do último caminho ao " +"retrair. \n" +"\n" +"Dependendo de quanto tempo dura a operação de limpeza, quão rápidas e longas " +"são as configurações de retração do extrusor/filamento, pode ser necessário " +"um movimento de retração para recolher o filamento restante. \n" +"\n" +"Definir um valor na configuração de quantidade de retração antes da limpeza " +"abaixo executará qualquer retração em excesso antes da limpeza, caso " +"contrário, será realizada após." + +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 "" +"A Torre Prime pode ser usada para limpar o resíduo no bico e estabilizar a " +"pressão na câmara dentro do bico, a fim de evitar defeitos de aparência ao " +"imprimir objetos." + +msgid "Purging volumes" +msgstr "Volumes de purga" + +msgid "Flush multiplier" +msgstr "Multiplicador de purga" + +msgid "" +"The actual flushing volumes is equal to the flush multiplier multiplied by " +"the flushing volumes in the table." +msgstr "" +"Os volumes de purga reais são iguais ao multiplicador de purga multiplicado " +"pelos volumes de purga na tabela." + +msgid "Prime volume" +msgstr "Volume de material" + +msgid "The volume of material to prime extruder on tower." +msgstr "O volume de material para preparar a extrusora na torre." + +msgid "Width of prime tower" +msgstr "Largura da Torre Prime" + +msgid "Wipe tower rotation angle" +msgstr "Ângulo de rotação da Torre Prime" + +msgid "Wipe tower rotation angle with respect to x-axis." +msgstr "Ângulo de rotação da Torre Prime em relação ao eixo x." + +msgid "Stabilization cone apex angle" +msgstr "Ângulo do ápice do cone de estabilização" + +msgid "" +"Angle at the apex of the cone that is used to stabilize the wipe tower. " +"Larger angle means wider base." +msgstr "" +"Ângulo no ápice do cone usado para estabilizar a Torre Prime. Um ângulo " +"maior significa uma base mais larga." + +msgid "Wipe tower purge lines spacing" +msgstr "Espaçamento das linhas de purga da Torre Prime" + +msgid "Spacing of purge lines on the wipe tower." +msgstr "Espaçamento das linhas de purga na Torre Prime." + +msgid "Maximum wipe tower print speed" +msgstr "Velocidade máxima de impressão da Torre Prime" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"A velocidade máxima de impressão ao purgar na Torre Prime e ao imprimir as " +"camadas esparsas da Torre Prime. Ao purgar, se a velocidade do preenchimento " +"ou a velocidade calculada a partir da velocidade volumétrica máxima do " +"filamento for menor, a menor será utilizada.\n" +"\n" +"Ao imprimir as camadas esparsas, se a velocidade do perímetro interno ou a " +"velocidade calculada a partir da velocidade volumétrica máxima do filamento " +"for menor, a menor será utilizada.\n" +"\n" +"Aumentar essa velocidade pode afetar a estabilidade da torre, bem como " +"aumentar a força com que o bico colide com quaisquer bolhas que possam ter " +"se formado na Torre Prime.\n" +"\n" +"Antes de aumentar esse parâmetro além do padrão de 90mm/s, certifique-se de " +"que sua impressora pode realizar pontes de forma confiável nas velocidades " +"aumentadas e que a extrusão ao trocar a ferramenta está bem controlada.\n" +"\n" +"Para os perímetros externos da Torre Prime, a velocidade do perímetro " +"interno é utilizada independentemente dessa configuração." + +msgid "Wipe tower extruder" +msgstr "Extrusora da Torre Prime" + +msgid "" +"The extruder to use when printing perimeter of the wipe tower. Set to 0 to " +"use the one that is available (non-soluble would be preferred)." +msgstr "" +"Extrusor a ser usada ao imprimir o perímetro da Torre Prime. Defina como 0 " +"para usar a disponível (não solúvel é preferido)." + +msgid "Purging volumes - load/unload volumes" +msgstr "Volumes de purga - volumes de carga/descarga" + +msgid "" +"This vector saves required volumes to change from/to each tool used on the " +"wipe tower. These values are used to simplify creation of the full purging " +"volumes below." +msgstr "" +"Este vetor salva os volumes necessários para mudar de/para cada ferramenta " +"usada na Torre Prime. Esses valores são usados para simplificar a criação " +"dos volumes de purga completos abaixo." + +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 "" +"A purga após a troca de filamento será feita dentro do preenchimento dos " +"objetos. Isso pode reduzir a quantidade de resíduos e diminuir o tempo de " +"impressão. Se as paredes forem impressas com filamento transparente, o " +"preenchimento de cor mista será visível do lado de fora. Isso não terá " +"efeito, a menos que a Torre Prime esteja ativa." + +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 "" +"A purga após a troca de filamento será feita dentro do suporte dos objetos. " +"Isso pode reduzir a quantidade de resíduos e diminuir o tempo de impressão. " +"Isso não terá efeito, a menos que a Torre Prime esteja ativa." + +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 "" +"Este objeto será usado para purgar o bico após uma troca de filamento para " +"economizar filamento e diminuir o tempo de impressão. As cores dos objetos " +"serão misturadas como resultado. Isso não terá efeito, a menos que a Torre " +"Prime esteja ativa." + +msgid "Maximal bridging distance" +msgstr "Distância máxima de ponte" + +msgid "Maximal distance between supports on sparse infill sections." +msgstr "Distância máxima entre suportes em seções de preenchimento não sólido." + +msgid "X-Y hole compensation" +msgstr "Compensação XY de furos" + +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 "" +"Os furos do objeto serão aumentados ou reduzidos no plano XY pelo valor " +"configurado. Valor positivo aumenta os furos. Valor negativo reduz os furos. " +"Essa função é usada para ajustar ligeiramente o tamanho quando o objeto tem " +"problema de montagem" + +msgid "X-Y contour compensation" +msgstr "Compensação XY de contornos" + +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 "" +"O contorno do objeto será expandido ou reduzido no plano XY pelo valor " +"configurado. Valor positivo aumenta o contorno. Valor negativo diminui o " +"contorno. Essa função é usada para ajustar ligeiramente o tamanho quando o " +"objeto tem problemas de montagem" + +msgid "Convert holes to polyholes" +msgstr "Converter furos em polifuros" + +msgid "" +"Search for almost-circular holes that span more than one layer and convert " +"the geometry to polyholes. Use the nozzle size and the (biggest) diameter to " +"compute the polyhole.\n" +"See http://hydraraptor.blogspot.com/2011/02/polyholes.html" +msgstr "" +"Procura por furos quase circulares que abrangem mais de uma camada e " +"converta a geometria em polifuros. Usa o tamanho do bico e o diâmetro " +"(maior) para calcular o polifuro.\n" +"Consulte http://hydraraptor.blogspot.com/2011/02/polyholes.html" + +msgid "Polyhole detection margin" +msgstr "Margem de detecção de polifuros" + +#, no-c-format, no-boost-format +msgid "" +"Maximum defection of a point to the estimated radius of the circle.\n" +"As cylinders are often exported as triangles of varying size, points may not " +"be on the circle circumference. This setting allows you some leway to " +"broaden the detection.\n" +"In mm or in % of the radius." +msgstr "" +"Máxima deflexão de um ponto para o raio estimado do círculo.\n" +"Como os cilindros frequentemente são exportados como triângulos de tamanho " +"variável, os pontos podem não estar na circunferência do círculo. Esta " +"configuração permite-lhe alguma margem para alargar a detecção.\n" +"Em milímetros ou em % do raio." + +msgid "Polyhole twist" +msgstr "Torção de polifuros" + +msgid "Rotate the polyhole every layer." +msgstr "Girar o polifuro a cada camada." + +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 "" +"Tamanhos das imagens a serem armazenados em arquivos .gcode e .sl1 / .sl1s, " +"no seguinte formato: \"XxY, XxY, ...\"" + +msgid "Format of G-code thumbnails" +msgstr "Formato das miniaturas de G-code" + +msgid "" +"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " +"QOI for low memory firmware" +msgstr "" +"Formato das miniaturas de G-code: PNG para melhor qualidade, JPG para menor " +"tamanho, QOI para firmware de baixa memória" + +msgid "Use relative E distances" +msgstr "Usar distâncias E relativas" + +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 recommended on most " +"printers. Default is checked" +msgstr "" +"A extrusão relativa é recomendada ao usar a opção \"label_objects\". Algumas " +"extrusoras funcionam melhor com esta opção desmarcada (modo de extrusão " +"absoluta). A Torre Prime é compatível apenas com o modo relativo. É " +"recomendado na maioria das impressoras. O padrão é ativado" + +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 "" +"O gerador de perímetro clássico produz paredes com largura de extrusão " +"constante e para áreas muito finas é usado preenchimento de vão. O motor " +"Arachne produz perímetros com largura de extrusão variável" + +msgid "Classic" +msgstr "Clássico" + +msgid "Arachne" +msgstr "Arachne" + +msgid "Wall transition length" +msgstr "Comprimento da transição de perímetro" + +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 "" +"Ao fazer a transição entre diferentes números de paredes à medida que a peça " +"fica mais fina, uma certa quantidade de espaço é designada para dividir ou " +"unir os segmentos do perímetro. É expresso como uma porcentagem sobre o " +"diâmetro do bico" + +msgid "Wall transitioning filter margin" +msgstr "Margem de filtro de transição de perímetro" + +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 "" +"Evita a transição de ida e volta entre um perímetro extra e um a menos. Esta " +"margem amplia o intervalo de larguras de extrusão que seguem para [Largura " +"mínima da perímetro - margem, 2 * Largura mínima da perímetro + margem]. " +"Aumentar esta margem reduz o número de transições, o que reduz o número de " +"inícios / paradas de extrusão e o tempo de deslocamento. No entanto, uma " +"grande variação na largura de extrusão pode levar a problemas de subextrusão " +"ou superextrusão. É expresso como uma porcentagem sobre o diâmetro do bico" + +msgid "Wall transitioning threshold angle" +msgstr "Ângulo de limite de transição de perímetro" + +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 "" +"Quando criar transições entre números pares e ímpares de paredes. Uma forma " +"de cunha com um ângulo maior do que esta configuração não terá transições e " +"nenhumo perímetro será impresso no centro para preencher o espaço restante. " +"Reduzir esta configuração reduz o número e o comprimento dessas paredes " +"centrais, mas pode deixar vazios ou extrusão excessiva" + +msgid "Wall distribution count" +msgstr "Contagem de distribuição de perímetro" + +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 "" +"O número de paredes, contadas a partir do centro, sobre as quais a variação " +"precisa ser espalhada. Valores menores significam que as paredes externas " +"não mudam de largura" + +msgid "Minimum feature size" +msgstr "Tamanho mínimo do elemento" + +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 "" +"Espessura mínima de elementos finos. Elementos do modelo que são mais finos " +"do que este valor não serão impressos, enquanto elementos mais espessos que " +"o tamanho mínimo do elemento serão alargados até a largura mínima do " +"perímetro. É expresso como uma porcentagem sobre o diâmetro do bico" + +msgid "Minimum wall length" +msgstr "Comprimento mínimo do perímetro" + +msgid "" +"Adjust this value to prevent short, unclosed walls from being printed, which " +"could increase print time. Higher values remove more and longer walls.\n" +"\n" +"NOTE: Bottom and top surfaces will not be affected by this value to prevent " +"visual gaps on the ouside of the model. Adjust 'One wall threshold' in the " +"Advanced settings below to adjust the sensitivity of what is considered a " +"top-surface. 'One wall threshold' is only visibile if this setting is set " +"above the default value of 0.5, or if single-wall top surfaces is enabled." +msgstr "" +"Ajuste este valor para evitar que perímetros curtos e não fechados sejam " +"impressos, o que poderia aumentar o tempo de impressão. Valores mais altos " +"removem perímetros mais longos.\n" +"\n" +"NOTA: As superfícies inferior e superior não serão afetadas por este valor " +"para evitar lacunas visuais no exterior do modelo. Ajuste o 'Limiar de um " +"perímetro' nas configurações avançadas abaixo para ajustar a sensibilidade " +"do que é considerado uma superfície superior. 'Limiar de um perímetro' só é " +"visível se esta configuração estiver acima do valor padrão de 0,5, ou se " +"superfícies superiores de uma única parede estiverem habilitadas." + +msgid "First layer minimum wall width" +msgstr "Largura mínima do perímetro da primeira camada" + +msgid "" +"The minimum wall width that should be used for the first layer is " +"recommended to be set to the same size as the nozzle. This adjustment is " +"expected to enhance adhesion." +msgstr "" +"A largura mínima do perímetro que deve ser usada para a primeira camada é " +"recomendada para ser definida com o mesmo tamanho do bico. Este ajuste é " +"esperado para melhorar a aderência." + +msgid "Minimum wall width" +msgstr "Largura mínima do perímetro" + +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 "" +"Largura do perímetro que substituirá elementos finos (de acordo com o " +"tamanho mínimo do elemento) do modelo. Se a Largura mínima do perímetro for " +"mais fina do que a espessura do elemento, o perímetro será tão espesso " +"quanto o próprio elemento. É expresso como uma porcentagem sobre o diâmetro " +"do bico" + +msgid "Detect narrow internal solid infill" +msgstr "Detectar preenchimento sólido interno estreito" + +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 "" +"Esta opção irá detectar automaticamente áreas de preenchimento sólido " +"interno estreito. Se ativada, o padrão concêntrico será usado para a área " +"para acelerar a impressão. Caso contrário, o padrão reticulado é usado por " +"padrão." + +msgid "invalid value " +msgstr "valor inválido " + +msgid "Invalid value when spiral vase mode is enabled: " +msgstr "Valor inválido quando o modo de vaso espiral está ativado: " + +msgid "too large line width " +msgstr "largura de linha muito grande " + +msgid " not in range " +msgstr " fora do intervalo " + +msgid "Minimum save" +msgstr "Salvar mínimo" + +msgid "export 3mf with minimum size." +msgstr "exportar 3mf com tamanho mínimo." + +msgid "No check" +msgstr "Sem verificação" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" +"Não execute nenhuma verificação de validade, como a verificação de conflitos " +"de caminho do gcode." + +msgid "Ensure on bed" +msgstr "Garantir na mesa" + +msgid "" +"Lift the object above the bed when it is partially below. Disabled by default" +msgstr "" +"Eleve o objeto acima da mesa quando estiver parcialmente abaixo. Desativado " +"por padrão" + +msgid "Orient Options" +msgstr "Opções de Orientação" + +msgid "Orient options: 0-disable, 1-enable, others-auto" +msgstr "Opções de orientação: 0-desativar, 1-habilitar, outros-auto" + +msgid "Rotation angle around the Z axis in degrees." +msgstr "Ângulo de rotação ao redor do eixo Z em graus." + +msgid "Rotate around Y" +msgstr "Girar ao redor de Y" + +msgid "Rotation angle around the Y axis in degrees." +msgstr "Ângulo de rotação ao redor do eixo Y em graus." + +msgid "Data directory" +msgstr "Diretório de dados" + +msgid "" +"Load and store settings at the given directory. This is useful for " +"maintaining different profiles or including configurations from a network " +"storage." +msgstr "" +"Carregar e armazenar configurações no diretório fornecido. Isso é útil para " +"manter diferentes perfis ou incluir configurações de um armazenamento em " +"rede." + +msgid "Load custom gcode" +msgstr "Carregar gcode personalizado" + +msgid "Load custom gcode from json" +msgstr "Carregar gcode personalizado do json" + +msgid "Current z-hop" +msgstr "Z-hop atual" + +msgid "Contains z-hop present at the beginning of the custom G-code block." +msgstr "Contém o z-hop presente no início do bloco de G-code personalizado." + +msgid "" +"Position of the extruder at the beginning of the custom G-code block. If the " +"custom G-code travels somewhere else, it should write to this variable so " +"PrusaSlicer knows where it travels from when it gets control back." +msgstr "" +"Posição do extrusor no início do bloco de G-code personalizado. Se o G-code " +"personalizado se deslocar para outro lugar, ele deve escrever nesta variável " +"para que o PrusaSlicer saiba de onde se desloca quando recupera o controle." + +msgid "" +"Retraction state at the beginning of the custom G-code block. If the custom " +"G-code moves the extruder axis, it should write to this variable so " +"PrusaSlicer deretracts correctly when it gets control back." +msgstr "" +"Estado de retração no início do bloco de G-code personalizado. Se o G-code " +"personalizado mover o eixo do extrusor, ele deve escrever nesta variável " +"para que o PrusaSlicer desretraia corretamente quando recupera o controle." + +msgid "Extra deretraction" +msgstr "Desretração extra" + +msgid "Currently planned extra extruder priming after deretraction." +msgstr "Priming de extrusora extra planejado atualmente após a desretração." + +msgid "Current extruder" +msgstr "Extrusora atual" + +msgid "Zero-based index of currently used extruder." +msgstr "Índice base zero da extrusora atualmente utilizada." + +msgid "Current object index" +msgstr "Índice do objeto atual" + +msgid "" +"Specific for sequential printing. Zero-based index of currently printed " +"object." +msgstr "" +"Específico para impressão sequencial. Índice base zero do objeto atualmente " +"impresso." + +msgid "Has wipe tower" +msgstr "Tem Torre Prime" + +msgid "Whether or not wipe tower is being generated in the print." +msgstr "Se a Torre Prime está sendo gerada ou não na impressão." + +msgid "Initial extruder" +msgstr "Extrusora inicial" + +msgid "" +"Zero-based index of the first extruder used in the print. Same as " +"initial_tool." +msgstr "" +"Índice base zero da primeira extrusora utilizada na impressão. Mesmo que " +"ferramenta_inicial." + +msgid "Initial tool" +msgstr "Ferramenta inicial" + +msgid "" +"Zero-based index of the first extruder used in the print. Same as " +"initial_extruder." +msgstr "" +"Índice base zero da primeira extrusora utilizada na impressão. Mesmo que " +"extrusora_inicial." + +msgid "Is extruder used?" +msgstr "Extrusora utilizada?" + +msgid "Vector of bools stating whether a given extruder is used in the print." +msgstr "" +"Vetor de booleanos indicando se uma dada extrusora é utilizada na impressão." + +msgid "Volume per extruder" +msgstr "Volume por extrusora" + +msgid "Total filament volume extruded per extruder during the entire print." +msgstr "" +"Volume total de filamento extrudado por extrusora durante toda a impressão." + +msgid "Total toolchanges" +msgstr "Total de trocas de ferramenta" + +msgid "Number of toolchanges during the print." +msgstr "Número de trocas de ferramenta durante a impressão." + +msgid "Total volume" +msgstr "Volume total" + +msgid "Total volume of filament used during the entire print." +msgstr "Volume total de filamento usado durante toda a impressão." + +msgid "Weight per extruder" +msgstr "Peso por extrusora" + +msgid "" +"Weight per extruder extruded during the entire print. Calculated from " +"filament_density value in Filament Settings." +msgstr "" +"Peso por extrusora extrudido durante toda a impressão. Calculado a partir do " +"valor de densidade do filamento nas configurações de filamento." + +msgid "Total weight" +msgstr "Peso total" + +msgid "" +"Total weight of the print. Calculated from filament_density value in " +"Filament Settings." +msgstr "" +"Peso total da impressão. Calculado a partir do valor de densidade do " +"filamento nas configurações de filamento." + +msgid "Total layer count" +msgstr "Total de camadas" + +msgid "Number of layers in the entire print." +msgstr "Número de camadas em toda a impressão." + +msgid "Number of objects" +msgstr "Número de objetos" + +msgid "Total number of objects in the print." +msgstr "Número total de objetos na impressão." + +msgid "Number of instances" +msgstr "Número de instâncias" + +msgid "Total number of object instances in the print, summed over all objects." +msgstr "" +"Número total de instâncias de objeto na impressão, somadas sobre todos os " +"objetos." + +msgid "Scale per object" +msgstr "Escala por objeto" + +msgid "" +"Contains a string with the information about what scaling was applied to the " +"individual objects. Indexing of the objects is zero-based (first object has " +"index 0).\n" +"Example: 'x:100% y:50% z:100'." +msgstr "" +"Contém uma frase com informações sobre qual escala foi aplicada aos objetos " +"individuais. A indexação dos objetos é baseada em zero (o primeiro objeto " +"tem índice 0).\n" +"Exemplo: 'x:100% y:50% z:100'." + +msgid "Input filename without extension" +msgstr "Nome do arquivo de entrada sem extensão" + +msgid "Source filename of the first object, without extension." +msgstr "Nome do arquivo de origem do primeiro objeto, sem extensão." + +msgid "" +"The vector has two elements: x and y coordinate of the point. Values in mm." +msgstr "" +"O vetor possui dois elementos: coordenada x e y do ponto. Valores em mm." + +msgid "" +"The vector has two elements: x and y dimension of the bounding box. Values " +"in mm." +msgstr "" +"O vetor tem dois elementos: dimensão x e y da caixa delimitadora. Valores em " +"mm." + +msgid "First layer convex hull" +msgstr "Parede convexa da primeira camada" + +msgid "" +"Vector of points of the first layer convex hull. Each element has the " +"following format:'[x, y]' (x and y are floating-point numbers in mm)." +msgstr "" +"Vetor de pontos do perímetro convexo da primeira camada. Cada elemento tem o " +"seguinte formato: '[x, y]' (x e y são números em ponto flutuante em mm)." + +msgid "Bottom-left corner of first layer bounding box" +msgstr "Canto inferior esquerdo da caixa delimitadora da primeira camada" + +msgid "Top-right corner of first layer bounding box" +msgstr "Canto superior direito da caixa delimitadora da primeira camada" + +msgid "Size of the first layer bounding box" +msgstr "Tamanho da caixa delimitadora da primeira camada" + +msgid "Bottom-left corner of print bed bounding box" +msgstr "Canto inferior esquerdo da caixa delimitadora da mesa de impressão" + +msgid "Top-right corner of print bed bounding box" +msgstr "Canto superior direito da caixa delimitadora da mesa de impressão" + +msgid "Size of the print bed bounding box" +msgstr "Tamanho da caixa delimitadora da mesa de impressão" + +msgid "Timestamp" +msgstr "Data/hora" + +msgid "String containing current time in yyyyMMdd-hhmmss format." +msgstr "String contendo a hora atual no formato yyyyMMdd-hhmmss." + +msgid "Day" +msgstr "Dia" + +msgid "Hour" +msgstr "Hora" + +msgid "Minute" +msgstr "Minuto" + +msgid "Print preset name" +msgstr "Nome do perfil de impressão" + +msgid "Name of the print preset used for slicing." +msgstr "Nome do perfil de impressão usado para fatiar." + +msgid "Filament preset name" +msgstr "Nome do perfil de filamento" + +msgid "" +"Names of the filament presets used for slicing. The variable is a vector " +"containing one name for each extruder." +msgstr "" +"Nomes dos perfis de filamento usados para fatiar. A variável é um vetor " +"contendo um nome para cada extrusora." + +msgid "Printer preset name" +msgstr "Nome do perfil de impressora" + +msgid "Name of the printer preset used for slicing." +msgstr "Nome do perfil de impressora usado para fatiar." + +msgid "Physical printer name" +msgstr "Nome da impressora física" + +msgid "Name of the physical printer used for slicing." +msgstr "Nome da impressora física utilizada para fatiar." + +msgid "Layer number" +msgstr "Número da camada" + +msgid "Index of the current layer. One-based (i.e. first layer is number 1)." +msgstr "" +"Índice da camada atual. Baseado em um (ou seja, a primeira camada é o número " +"1)." + +msgid "Layer z" +msgstr "Camada z" + +msgid "" +"Height of the current layer above the print bed, measured to the top of the " +"layer." +msgstr "" +"Altura da camada atual acima da mesa de impressão, medida até o topo da " +"camada." + +msgid "Maximal layer z" +msgstr "Altura máxima da camada z" + +msgid "Height of the last layer above the print bed." +msgstr "Altura da última camada acima da mesa de impressão." + +msgid "Filament extruder ID" +msgstr "ID do extrusor de filamento" + +msgid "The current extruder ID. The same as current_extruder." +msgstr "O ID do extrusor atual. O mesmo que extrusora_atual." + +msgid "Error in zip archive" +msgstr "Erro no arquivo zip" + +msgid "Generating walls" +msgstr "Gerando perímetros" + +msgid "Generating infill regions" +msgstr "Gerando regiões de preenchimento" + +msgid "Generating infill toolpath" +msgstr "Gerando caminho da ferramenta de preenchimento" + +msgid "Detect overhangs for auto-lift" +msgstr "Detectar overhangs para levantamento automático" + +msgid "Generating support" +msgstr "Gerando suporte" + +msgid "Checking support necessity" +msgstr "Verificando necessidade de suporte" + +msgid "floating regions" +msgstr "regiões flutuantes" + +msgid "floating cantilever" +msgstr "balanço flutuante" + +msgid "large overhangs" +msgstr "overhangs grandes" + +#, c-format, boost-format +msgid "" +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." +msgstr "" +"Parece que o objeto %s tem %s. Por favor, reoriente o objeto ou habilite a " +"geração de suporte." + +msgid "Optimizing toolpath" +msgstr "Otimizando caminho da ferramenta" + +msgid "Slicing mesh" +msgstr "Fatiando malha" + +msgid "" +"No layers were detected. You might want to repair your STL file(s) or check " +"their size or thickness and retry.\n" +msgstr "" +"Nenhuma camada foi detectada. Você pode querer reparar seu(s) arquivo(s) STL " +"ou verificar seu tamanho ou espessura e tentar novamente.\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 "" +"A compensação de tamanho XY de um objeto não será usada porque ele também " +"está pintado com cor.\n" +"A compensação de tamanho XY não pode ser combinada com pintura colorida." + +#, c-format, boost-format +msgid "Support: generate toolpath at layer %d" +msgstr "Suporte: gerar caminho da ferramenta na camada %d" + +msgid "Support: detect overhangs" +msgstr "Suporte: detectar overhangs" + +msgid "Support: generate contact points" +msgstr "Suporte: gerar pontos de contato" + +msgid "Support: propagate branches" +msgstr "Suporte: propagar ramificações" + +msgid "Support: draw polygons" +msgstr "Suporte: desenhar polígonos" + +msgid "Support: generate toolpath" +msgstr "Suporte: gerar caminho da ferramenta" + +#, c-format, boost-format +msgid "Support: generate polygons at layer %d" +msgstr "Suporte: gerar polígonos na camada %d" + +#, c-format, boost-format +msgid "Support: fix holes at layer %d" +msgstr "Suporte: corrigir buracos na camada %d" + +#, c-format, boost-format +msgid "Support: propagate branches at layer %d" +msgstr "Suporte: propagar ramificações na camada %d" + +msgid "" +"Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." +msgstr "" +"Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão ." +"stl, .obj, .amf(.xml)." + +msgid "Loading of a model file failed." +msgstr "Falha ao carregar um arquivo de modelo." + +msgid "The supplied file couldn't be read because it's empty" +msgstr "O arquivo fornecido não pôde ser lido porque está vazio" + +msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." +msgstr "" +"Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão .3mf " +"ou .zip.amf." + +msgid "Canceled" +msgstr "Cancelado" + +msgid "load_obj: failed to parse" +msgstr "load_obj: falha ao analisar" + +msgid "load mtl in obj: failed to parse" +msgstr "carregar mtl em obj: falha ao analisar" + +msgid "The file contains polygons with more than 4 vertices." +msgstr "O arquivo contém polígonos com mais de 4 vértices." + +msgid "The file contains polygons with less than 2 vertices." +msgstr "O arquivo contém polígonos com menos de 2 vértices." + +msgid "The file contains invalid vertex index." +msgstr "O arquivo contém um índice de vértice inválido." + +msgid "This OBJ file couldn't be read because it's empty." +msgstr "Este arquivo OBJ não pôde ser lido porque está vazio." + +msgid "Flow Rate Calibration" +msgstr "Calibração de fluxo" + +msgid "Max Volumetric Speed Calibration" +msgstr "Calibração de fluxo volumétrico máximo" + +msgid "Manage Result" +msgstr "Gerenciar Resultado" + +msgid "Manual Calibration" +msgstr "Calibração Manual" + +msgid "Result can be read by human eyes." +msgstr "O resultado pode ser lido por olhos humanos." + +msgid "Auto-Calibration" +msgstr "Auto-Calibração" + +msgid "We would use Lidar to read the calibration result" +msgstr "Usaríamos o Lidar para ler o resultado da calibração" + +msgid "Prev" +msgstr "Anterior" + +msgid "Recalibration" +msgstr "Recalibração" + +msgid "Calibrate" +msgstr "Calibrar" + +msgid "Finish" +msgstr "Terminar" + +msgid "How to use calibration result?" +msgstr "Como usar o resultado da calibração?" + +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "" +"Você pode alterar o Fator de Calibração de Dinâmica de Fluxo na edição de " +"materiais" + +msgid "" +"The current firmware version of the printer does not support calibration.\n" +"Please upgrade the printer firmware." +msgstr "" +"A versão atual do firmware da impressora não suporta calibração.\n" +"Por favor, atualize o firmware da impressora." + +msgid "Calibration not supported" +msgstr "Calibração não suportada" + +msgid "Error desc" +msgstr "Descrição do erro" + +msgid "Extra info" +msgstr "Informação extra" + +msgid "Flow Dynamics" +msgstr "Dinâmica de Fluxo" + +msgid "Flow Rate" +msgstr "Fluxo" + +msgid "Max Volumetric Speed" +msgstr "Velocidade Volumétrica Máxima" + +#, c-format, boost-format +msgid "" +"Please input valid values:\n" +"Start value: >= %.1f\n" +"End value: <= %.1f\n" +"End value: > Start value\n" +"Value step: >= %.3f)" +msgstr "" +"Por favor, insira valores válidos:\n" +"Valor de início: >= %.1f\n" +"Valor de término: <= %.1f\n" +"Valor de término: > Valor de início\n" +"Passo de valor: >= %.3f)" + +msgid "The name cannot be empty." +msgstr "O nome não pode estar vazio." + +#, c-format, boost-format +msgid "The selected preset: %s is not found." +msgstr "O preset selecionado: %s não foi encontrado." + +msgid "The name cannot be the same as the system preset name." +msgstr "O nome não pode ser o mesmo que o nome do preset do sistema." + +msgid "The name is the same as another existing preset name" +msgstr "O nome é o mesmo que outro nome de preset existente" + +msgid "create new preset failed." +msgstr "falha ao criar novo preset." + +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" +"Tem certeza de que deseja cancelar a calibração atual e retornar à página " +"inicial?" + +msgid "No Printer Connected!" +msgstr "Nenhuma impressora conectada!" + +msgid "Printer is not connected yet." +msgstr "A impressora ainda não está conectada." + +msgid "Please select filament to calibrate." +msgstr "Por favor, selecione o filamento para calibrar." + +msgid "The input value size must be 3." +msgstr "O tamanho do valor de entrada deve ser 3." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Esse tipo de máquina só pode manter 16 resultados por bico no histórico. " +"Você pode deletar resultados existentes e então começar a calibração. Ou " +"você pode continuar, mas não poderá criar novos resultados. \n" +"Você ainda quer continuar com a calibração?" + +msgid "Connecting to printer..." +msgstr "Conectando à impressora..." + +msgid "The failed test result has been dropped." +msgstr "O resultado do teste falhado foi descartado." + +msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "O resultado da Calibração de Dinâmica de Fluxo foi salvo na impressora" + +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Já existe um resultado de calibração histórico com o mesmo nome: %s. Apenas " +"um dos resultados com o mesmo nome é salvo. Tem certeza que deseja " +"sobrescrever o resultado histórico?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Este tipo de máquina só pode salvar %d resultados por bico. Este resultado " +"não será salvo." + +msgid "Internal Error" +msgstr "Erro Interno" + +msgid "Please select at least one filament for calibration" +msgstr "Por favor, selecione pelo menos um filamento para calibrar" + +msgid "Flow rate calibration result has been saved to preset" +msgstr "O resultado da calibração de fluxo foi salvo no preset" + +msgid "Max volumetric speed calibration result has been saved to preset" +msgstr "" +"O resultado da calibração de fluxo volumétrico máximo foi salvo no preset" + +msgid "When do you need Flow Dynamics Calibration" +msgstr "Quando você precisa da Calibração de Dinâmica de Fluxo" + +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 "" +"Adicionamos agora a auto-calibração para diferentes filamentos, que é " +"totalmente automatizada e o resultado será salvo na impressora para uso " +"futuro. Você só precisa fazer a calibração nos seguintes casos limitados:\n" +"1. Se você introduzir um novo filamento de marcas/modelos diferentes ou se o " +"filamento estiver úmido;\n" +"2. se o bico estiver desgastado ou substituído por um novo;\n" +"3. Se o fluxo volumétrico máximo ou a temperatura de impressão forem " +"alteradas na configuração do filamento." + +msgid "About this calibration" +msgstr "Sobre esta calibração" + +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 that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" +"\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 "Quando usar a Calibração de Fluxo" + +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 "" +"Depois de usar a Calibração de Dinâmica de Fluxo, ainda pode haver alguns " +"problemas de extrusão, como:\n" +"1. Superextrusão: excesso de material no objeto impresso, formando grumos ou " +"espinhas, ou as camadas parecem mais espessas do que o esperado e não " +"uniformes.\n" +"2. Subextrusão: camadas muito finas, resistência fraca do preenchimento ou " +"vazios na camada superior do modelo, mesmo ao imprimir lentamente.\n" +"3. Baixa Qualidade de Superfície: a superfície de suas impressões parece " +"áspera ou irregular.\n" +"4. Integridade Estrutural Fraca: as impressões quebram facilmente ou não " +"parecem tão robustas quanto deveriam." + +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 "" +"Além disso, a Calibração de Fluxo é crucial para materiais espumantes como " +"LW-PLA usados em aviões RC. Esses materiais se expandem muito quando " +"aquecidos, e a calibração fornece uma taxa de fluxo de referência útil." + +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 "" +"A Calibração de Fluxo mede a relação entre os volumes de extrusão esperados " +"e reais. A configuração padrão funciona bem em impressoras Bambu Lab e " +"filamentos oficiais, pois foram pré-calibrados e ajustados. Para um " +"filamento regular, geralmente você não precisará realizar uma Calibração da " +"Taxa de Fluxo a menos que ainda veja os defeitos listados após ter feito " +"outras calibrações. Para mais detalhes, consulte o artigo na 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 "" +"A Calibração Automática de Fluxo utiliza a tecnologia Micro-Lidar da Bambu " +"Lab, medindo diretamente os padrões de calibração. No entanto, esteja ciente " +"de que a eficácia e precisão deste método podem ser comprometidas com tipos " +"específicos de materiais. Especialmente, filamentos que são transparentes ou " +"semi-transparentes, com partículas brilhantes ou com acabamento altamente " +"reflexivo podem não ser adequados para esta calibração e podem produzir " +"resultados abaixo do desejado.\n" +"\n" +"Os resultados da calibração podem variar entre cada calibração ou filamento. " +"Ainda estamos melhorando a precisão e compatibilidade desta calibração por " +"meio de atualizações de firmware ao longo do tempo.\n" +"\n" +"Atenção: A Calibração da Taxa de Fluxo é um processo avançado, para ser " +"tentado apenas por aqueles que entendem completamente seu propósito e " +"implicações. O uso incorreto pode resultar em impressões de baixa qualidade " +"ou danos à impressora. Certifique-se de ler e entender cuidadosamente o " +"processo antes de fazê-lo." + +msgid "When you need Max Volumetric Speed Calibration" +msgstr "Quando você precisa da Calibração de Velocidade Volumétrica Máxima" + +msgid "Over-extrusion or under extrusion" +msgstr "Sobre-extrusão ou sub-extrusão" + +msgid "Max Volumetric Speed calibration is recommended when you print with:" +msgstr "" +"A calibração de Velocidade Volumétrica Máxima é recomendada quando você " +"imprime com:" + +msgid "material with significant thermal shrinkage/expansion, such as..." +msgstr "material com significativa contração/expansão térmica, como..." + +msgid "materials with inaccurate filament diameter" +msgstr "materiais com diâmetro de filamento impreciso" + +msgid "We found the best Flow Dynamics Calibration Factor" +msgstr "Encontramos o melhor Fator de Calibração de Dinâmica de Fluxo" + +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" +"Parte da calibração falhou! Você pode limpar a mesa e tentar novamente. O " +"resultado do teste falho será descartado." + +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" +"*Recomendamos que você adicione marca, material, tipo e até mesmo nível de " +"umidade no nome" + +msgid "Failed" +msgstr "Falhou" + +msgid "Please enter the name you want to save to printer." +msgstr "Por favor, insira o nome que você deseja salvar na impressora." + +msgid "The name cannot exceed 40 characters." +msgstr "O nome não pode ter mais de 40 caracteres." + +msgid "" +"Only one of the results with the same name will be saved. Are you sure you " +"want to override the other results?" +msgstr "" + +msgid "Please find the best line on your plate" +msgstr "Por favor, encontre a melhor linha em sua mesa" + +msgid "Please find the corner with perfect degree of extrusion" +msgstr "" + +msgid "Input Value" +msgstr "Valor de entrada" + +msgid "Save to Filament Preset" +msgstr "Salvar no Preset de Filamento" + +msgid "Preset" +msgstr "Preset" + +msgid "Record Factor" +msgstr "Registrar Fator" + +msgid "We found the best flow ratio for you" +msgstr "Encontramos o melhor fluxo para você" + +msgid "Flow Ratio" +msgstr "Fluxo" + +msgid "Please input a valid value (0.0 < flow ratio < 2.0)" +msgstr "Por favor, insira um valor válido (0.0 < fluxo < 2.0)" + +msgid "Please enter the name of the preset you want to save." +msgstr "Por favor, insira o nome do preset que você deseja salvar." + +msgid "Calibration1" +msgstr "Calibração1" + +msgid "Calibration2" +msgstr "Calibração2" + +msgid "Please find the best object on your plate" +msgstr "Por favor, encontre o melhor objeto em sua mesa" + +msgid "Fill in the value above the block with smoothest top surface" +msgstr "Preencha o valor acima do bloco com a superfície superior mais lisa" + +msgid "Skip Calibration2" +msgstr "Pular Calibração2" + +#, c-format, boost-format +msgid "flow ratio : %s " +msgstr "fluxo: %s " + +msgid "Please choose a block with smoothest top surface" +msgstr "Por favor, escolha um bloco com a superfície superior mais lisa" + +msgid "Please choose a block with smoothest top surface." +msgstr "Por favor, escolha um bloco com a superfície superior mais lisa." + +msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" +msgstr "" +"Por favor, insira um valor válido (0 <= Velocidade Volumétrica Máxima <= 60)" + +msgid "Calibration Type" +msgstr "Tipo de Calibração" + +msgid "Complete Calibration" +msgstr "Calibração Completa" + +msgid "Fine Calibration based on flow ratio" +msgstr "Calibração Fina baseada no fluxo" + +msgid "Title" +msgstr "Título" + +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" +"Um modelo de teste será impresso. Por favor, limpe a mesa e a coloque de " +"volta na mesa aquecida antes da calibração." + +msgid "Printing Parameters" +msgstr "Parâmetros de Impressão" + +msgid "Plate Type" +msgstr "Tipo de mesa" + +msgid "filament position" +msgstr "posição do filamento" + +msgid "External Spool" +msgstr "Carretel Externo" + +msgid "Filament For Calibration" +msgstr "Filamento Para Calibração" + +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 "" +"Dicas para material de calibração:\n" +"- Materiais que podem compartilhar a mesma temperatura de mesa aquecida\n" +"- Diferentes marcas e famílias de filamentos (Marca = Bambu, Família = " +"Básico, Fosco)" + +msgid "Pattern" +msgstr "Padrão" + +msgid "Method" +msgstr "Método" + +#, c-format, boost-format +msgid "%s is not compatible with %s" +msgstr "%s não é compatível com %s" + +msgid "TPU is not supported for Flow Dynamics Auto-Calibration." +msgstr "TPU não é suportado para Auto-Calibração de Dinâmica de Fluxo." + +msgid "Connecting to printer" +msgstr "Conectando à impressora" + +msgid "From k Value" +msgstr "Do Valor k" + +msgid "To k Value" +msgstr "Para o Valor k" + +msgid "Step value" +msgstr "Valor do Passo" + +msgid "The nozzle diameter has been synchronized from the printer Settings" +msgstr "O diâmetro do bico foi sincronizado das configurações da impressora" + +msgid "From Volumetric Speed" +msgstr "Da Velocidade Volumétrica" + +msgid "To Volumetric Speed" +msgstr "Para a Velocidade Volumétrica" + +msgid "Flow Dynamics Calibration Result" +msgstr "Resultado da Calibração de Dinâmica de Fluxo" + +msgid "New" +msgstr "Novo" + +msgid "No History Result" +msgstr "Nenhum Resultado Anterior" + +msgid "Success to get history result" +msgstr "Sucesso ao obter o resultado anterior" + +msgid "Refreshing the historical Flow Dynamics Calibration records" +msgstr "Atualizando os registros históricos de Calibração de Dinâmica de Fluxo" + +msgid "Action" +msgstr "Ação" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "Este tipo de máquina só pode salvar %d resultados por bico." + +msgid "Edit Flow Dynamics Calibration" +msgstr "Editar Calibração de Dinâmica de Fluxo" + +msgid "New Flow Dynamic Calibration" +msgstr "Nova Calibração de Dinâmica de Fluxo" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "O filamento deve ser selecionado." + +msgid "Network lookup" +msgstr "Procura de Rede" + +msgid "Address" +msgstr "Endereço" + +msgid "Hostname" +msgstr "Nome do Host" + +msgid "Service name" +msgstr "Nome do Serviço" + +msgid "OctoPrint version" +msgstr "Versão do OctoPrint" + +msgid "Searching for devices" +msgstr "Procurando por dispositivos" + +msgid "Finished" +msgstr "Concluído" + +msgid "Multiple resolved IP addresses" +msgstr "Múltiplos endereços IP resolvidos" + +#, boost-format +msgid "" +"There are several IP addresses resolving to hostname %1%.\n" +"Please select one that should be used." +msgstr "" +"Há vários endereços IP resolvendo para o nome do host %1%.\n" +"Por favor, selecione um que deve ser usado." + +msgid "PA Calibration" +msgstr "Calibração de PA" + +msgid "DDE" +msgstr "DDE" + +msgid "Bowden" +msgstr "Tubo" + +msgid "Extruder type" +msgstr "Tipo de Extrusor" + +msgid "PA Tower" +msgstr "Torre de PA" + +msgid "PA Line" +msgstr "Linha de PA" + +msgid "PA Pattern" +msgstr "Padrão de PA" + +msgid "Start PA: " +msgstr "Iniciar PA: " + +msgid "End PA: " +msgstr "Finalizar PA: " + +msgid "PA step: " +msgstr "Passo de PA: " + +msgid "Print numbers" +msgstr "Número de Impressões" + +msgid "" +"Please input valid values:\n" +"Start PA: >= 0.0\n" +"End PA: > Start PA\n" +"PA step: >= 0.001)" +msgstr "" +"Por favor, insira valores válidos:\n" +"Iniciar PA: >= 0.0\n" +"Finalizar PA: > Iniciar PA\n" +"Passo de PA: >= 0.001)" + +msgid "Temperature calibration" +msgstr "Calibração de Temperatura" + +msgid "PLA" +msgstr "PLA" + +msgid "ABS/ASA" +msgstr "ABS/ASA" + +msgid "PETG" +msgstr "PETG" + +msgid "PCTG" +msgstr "" + +msgid "TPU" +msgstr "TPU" + +msgid "PA-CF" +msgstr "PA-CF" + +msgid "PET-CF" +msgstr "PET-CF" + +msgid "Filament type" +msgstr "Tipo de Filamento" + +msgid "Start temp: " +msgstr "Temp. inicial: " + +msgid "End temp: " +msgstr "Temp. final: " + +msgid "Temp step: " +msgstr "Passo de Temperatura: " + +msgid "" +"Please input valid values:\n" +"Start temp: <= 350\n" +"End temp: >= 170\n" +"Start temp > End temp + 5)" +msgstr "" +"Por favor, insira valores válidos:\n" +"Temp. inicial: <= 350\n" +"Temp. final: >= 170\n" +"Temp. inicial > Temp. final + 5)" + +msgid "Max volumetric speed test" +msgstr "Teste de Velocidade Volumétrica Máxima" + +msgid "Start volumetric speed: " +msgstr "Iniciar Velocidade Volumétrica: " + +msgid "End volumetric speed: " +msgstr "Finalizar Velocidade Volumétrica: " + +msgid "step: " +msgstr "passo: " + +msgid "" +"Please input valid values:\n" +"start > 0 \n" +"step >= 0\n" +"end > start + step)" +msgstr "" +"Por favor, insira valores válidos:\n" +"início > 0\n" +"passo >= 0\n" +"fim > início + passo)" + +msgid "VFA test" +msgstr "Teste VFA" + +msgid "Start speed: " +msgstr "Velocidade Inicial: " + +msgid "End speed: " +msgstr "Velocidade Final: " + +msgid "" +"Please input valid values:\n" +"start > 10 \n" +"step >= 0\n" +"end > start + step)" +msgstr "" +"Por favor, insira valores válidos:\n" +"início > 10\n" +"passo >= 0\n" +"fim > início + passo)" + +msgid "Start retraction length: " +msgstr "Distância de Retração Inicial: " + +msgid "End retraction length: " +msgstr "Distância de Retração Final: " + +msgid "mm/mm" +msgstr "mm/mm" + +msgid "Send G-Code to printer host" +msgstr "Enviar G-Code para o host da impressora" + +msgid "Upload to Printer Host with the following filename:" +msgstr "Enviar para o Host da Impressora com o seguinte nome de arquivo:" + +msgid "Use forward slashes ( / ) as a directory separator if needed." +msgstr "" +"Use barras inclinadas ( / ) como separador de diretórios, se necessário." + +msgid "Upload to storage" +msgstr "Enviar para armazenamento" + +msgid "Switch to Device tab after upload." +msgstr "" + +#, c-format, boost-format +msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" +msgstr "O nome do arquivo enviado não termina com \"%s\". Deseja continuar?" + +msgid "Upload" +msgstr "Enviar" + +msgid "Print host upload queue" +msgstr "Fila de envio do host de impressão" + +msgid "ID" +msgstr "ID" + +msgid "Progress" +msgstr "Progresso" + +msgid "Host" +msgstr "Servidor" + +msgctxt "OfFile" +msgid "Size" +msgstr "Tamanho" + +msgid "Filename" +msgstr "Nome do Arquivo" + +msgid "Cancel selected" +msgstr "Cancelar selecionados" + +msgid "Show error message" +msgstr "Mostrar mensagem de erro" + +msgid "Enqueued" +msgstr "Enfileirado" + +msgid "Uploading" +msgstr "Enviando" + +msgid "Cancelling" +msgstr "Cancelando" + +msgid "Error uploading to print host" +msgstr "Erro ao enviar para o host de impressão" + +msgid "Unable to perform boolean operation on selected parts" +msgstr "Não é possível realizar operação booleana nas peças selecionadas" + +msgid "Mesh Boolean" +msgstr "Operações Booleanas" + +msgid "Union" +msgstr "Unir" + +msgid "Difference" +msgstr "Subtrair" + +msgid "Intersection" +msgstr "Interseção" + +msgid "Source Volume" +msgstr "Volume Fonte" + +msgid "Tool Volume" +msgstr "Volume de Ferramenta" + +msgid "Subtract from" +msgstr "Subtrair de" + +msgid "Subtract with" +msgstr "Subtrair com" + +msgid "selected" +msgstr "selecionado" + +msgid "Part 1" +msgstr "Parte 1" + +msgid "Part 2" +msgstr "Parte 2" + +msgid "Delete input" +msgstr "Excluir entrada" + +msgid "Network Test" +msgstr "Teste de Rede" + +msgid "Start Test Multi-Thread" +msgstr "Iniciar Teste Multi-Thread" + +msgid "Start Test Single-Thread" +msgstr "Iniciar Teste de Única Thread" + +msgid "Export Log" +msgstr "Exportar Registro" + +msgid "OrcaSlicer Version:" +msgstr "Versão do OrcaSlicer:" + +msgid "System Version:" +msgstr "Versão do Sistema:" + +msgid "DNS Server:" +msgstr "Servidor DNS:" + +msgid "Test OrcaSlicer(GitHub)" +msgstr "Testar OrcaSlicer (GitHub)" + +msgid "Test OrcaSlicer(GitHub):" +msgstr "Testar OrcaSlicer (GitHub):" + +msgid "Test Bing.com" +msgstr "Testar Bing.com" + +msgid "Test bing.com:" +msgstr "Testar bing.com:" + +msgid "Log Info" +msgstr "Informações do Registro" + +msgid "Select filament preset" +msgstr "Selecionar Preset de Filamento" + +msgid "Create Filament" +msgstr "Criar Filamento" + +msgid "Create Based on Current Filament" +msgstr "Criar com Base no Filamento Atual" + +msgid "Copy Current Filament Preset " +msgstr "Copiar Preset de Filamento Atual " + +msgid "Basic Information" +msgstr "Informações Básicas" + +msgid "Add Filament Preset under this filament" +msgstr "Adicionar Preset de Filamento sob este filamento" + +msgid "We could create the filament presets for your following printer:" +msgstr "Nós criamos presets de filamento para a sua impressora:" + +msgid "Select Vendor" +msgstr "Selecionar Fornecedor" + +msgid "Input Custom Vendor" +msgstr "Inserir Fornecedor Personalizado" + +msgid "Can't find vendor I want" +msgstr "Não consigo encontrar o fornecedor que desejo" + +msgid "Select Type" +msgstr "Selecionar Tipo" + +msgid "Select Filament Preset" +msgstr "Selecionar Preset de Filamento" + +msgid "Serial" +msgstr "Série" + +msgid "e.g. Basic, Matte, Silk, Marble" +msgstr "por exemplo, Básico, Fosco, Seda, Mármore" + +msgid "Filament Preset" +msgstr "Preset de Filamento" + +msgid "Create" +msgstr "Criar" + +msgid "Vendor is not selected, please reselect vendor." +msgstr "Fornecedor não está selecionado, por favor, reselecione o fornecedor." + +msgid "Custom vendor is not input, please input custom vendor." +msgstr "" +"O fornecedor personalizado não foi inserido, por favor insira o fornecedor " +"personalizado." + +msgid "" +"\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." +msgstr "" +"\"Bambu\" ou \"Genérico\" não podem ser usados como fornecedor para " +"filamentos personalizados." + +msgid "Filament type is not selected, please reselect type." +msgstr "" +"O tipo de filamento não está selecionado, por favor, reselecione o tipo." + +msgid "Filament serial is not inputed, please input serial." +msgstr "O serial do filamento não foi inserido, por favor, insira o serial." + +msgid "" +"There may be escape characters in the vendor or serial input of filament. " +"Please delete and re-enter." +msgstr "" +"Pode haver caracteres de escape na entrada de fornecedor ou serial do " +"filamento. Por favor, exclua e insira novamente." + +msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." +msgstr "" +"Todas as entradas no fornecedor personalizado ou serial são espaços. Por " +"favor, insira novamente." + +msgid "The vendor can not be a number. Please re-enter." +msgstr "O fornecedor não pode ser um número. Por favor, insira novamente." + +msgid "" +"You have not selected a printer or preset yet. Please select at least one." +msgstr "" +"Você ainda não selecionou uma impressora ou preset. Por favor, selecione " +"pelo menos um." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"O nome do Filamento %s que você criou já existe. \n" +"Se você continuar a criar, a preset criado será exibido com o seu nome " +"completo. Você quer continuar?" + +msgid "Some existing presets have failed to be created, as follows:\n" +msgstr "Alguns presets existentes falharam ao serem criados, como segue:\n" + +msgid "" +"\n" +"Do you want to rewrite it?" +msgstr "" +"\n" +"Você deseja reescrevê-lo?" + +msgid "" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" +"To add preset for more printers, Please go to printer selection" +msgstr "" +"Renomearíamos os presets como \"Fornecedor Tipo Serial @ impressora que você " +"selecionou\". \n" +"Para adicionar preset para mais impressoras, Por favor, vá para a seleção de " +"impressoras" + +msgid "Create Printer/Nozzle" +msgstr "Criar Impressora/Bico" + +msgid "Create Printer" +msgstr "Criar Impressora" + +msgid "Create Nozzle for Existing Printer" +msgstr "Criar Bico para Impressora Existente" + +msgid "Create from Template" +msgstr "Criar a Partir de um Modelo" + +msgid "Create Based on Current Printer" +msgstr "Criar com Base na Impressora Atual" + +msgid "Import Preset" +msgstr "Importar Preset" + +msgid "Create Type" +msgstr "Tipo de Criação" + +msgid "The model is not fond, place reselect vendor." +msgstr "O modelo não foi encontrado, por favor, reselecione o fornecedor." + +msgid "Select Model" +msgstr "Selecionar Modelo" + +msgid "Select Printer" +msgstr "Selecionar Impressora" + +msgid "Input Custom Model" +msgstr "Inserir Modelo Personalizado" + +msgid "Can't find my printer model" +msgstr "Não consigo encontrar o modelo da minha impressora" + +msgid "Rectangle" +msgstr "Retângulo" + +msgid "Printable Space" +msgstr "Espaço Imprimível" + +msgid "Hot Bed STL" +msgstr "STL da Base Aquecida" + +msgid "Load stl" +msgstr "Carregar STL" + +msgid "Hot Bed SVG" +msgstr "SVG da Base Aquecida" + +msgid "Load svg" +msgstr "Carregar svg" + +msgid "Max Print Height" +msgstr "Altura de impressão máxima" + +#, c-format, boost-format +msgid "The file exceeds %d MB, please import again." +msgstr "O arquivo excede %d MB, por favor, importe novamente." + +msgid "Exception in obtaining file size, please import again." +msgstr "Exceção ao obter o tamanho do arquivo, por favor, importe novamente." + +msgid "Preset path is not find, please reselect vendor." +msgstr "" +"O caminho do preset não é encontrado, por favor, reselecione o fornecedor." + +msgid "The printer model was not found, please reselect." +msgstr "O modelo da impressora não foi encontrado, por favor, reselecione." + +msgid "The nozzle diameter is not fond, place reselect." +msgstr "O diâmetro do bico não foi encontrado, por favor, reselecione." + +msgid "The printer preset is not fond, place reselect." +msgstr "O preset da impressora não foi encontrado, por favor, reselecione." + +msgid "Printer Preset" +msgstr "Preset de Impressora" + +msgid "Filament Preset Template" +msgstr "Modelo de Preset de Filamento" + +msgid "Deselect All" +msgstr "Desselecionar Tudo" + +msgid "Process Preset Template" +msgstr "Processar Modelo de Preset" + +msgid "Back Page 1" +msgstr "Voltar à Página 1" + +msgid "" +"You have not yet chosen which printer preset to create based on. Please " +"choose the vendor and model of the printer" +msgstr "" +"Você ainda não escolheu em qual preset de impressora basear-se. Por favor, " +"escolha o fornecedor e modelo da impressora" + +msgid "" +"You have entered an illegal input in the printable area section on the first " +"page. Please check before creating it." +msgstr "" +"Você inseriu uma entrada ilegal na seção de área imprimível na primeira " +"página. Por favor, verifique antes de criar." + +msgid "The custom printer or model is not inputed, place input." +msgstr "A impressora ou modelo personalizado não foi colocado." + +msgid "" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserve.\n" +"\tCancel: Do not create a preset, return to the creation interface." +msgstr "" +"O modelo de impressora que você criou já possui um modelo com o mesmo nome. " +"Deseja substituí-lo?\n" +" \tSim: Substituir o modelo de impressora com o mesmo nome, e os modelos de " +"filamento e processo com o mesmo nome do modelo serão recriados, \n" +" e os modelos de filamento e processo sem o mesmo nome do modelo serão " +"preservados.\n" +" \tCancelar: Não criar um modelo, retornar para a interface de criação." + +msgid "You need to select at least one filament preset." +msgstr "Você precisa selecionar pelo menos um modelo de filamento." + +msgid "You need to select at least one process preset." +msgstr "Você precisa selecionar pelo menos um modelo de processo." + +msgid "Create filament presets failed. As follows:\n" +msgstr "Falha ao criar modelos de filamento. Como segue:\n" + +msgid "Create process presets failed. As follows:\n" +msgstr "Falha ao criar modelos de processo. Como segue:\n" + +msgid "Vendor is not find, please reselect." +msgstr "Fornecedor não encontrado, por favor selecione novamente." + +msgid "Current vendor has no models, please reselect." +msgstr "O fornecedor atual não possui modelos, por favor, selecione novamente." + +msgid "" +"You have not selected the vendor and model or inputed the custom vendor and " +"model." +msgstr "" +"Você não selecionou um fornecedor e modelo nem colocou fornecer e modelo " +"personalizado." + +msgid "" +"There may be escape characters in the custom printer vendor or model. Please " +"delete and re-enter." +msgstr "" +"Pode haver caracteres de escape no fornecedor ou modelo personalizado da " +"impressora. Por favor, exclua e insira novamente." + +msgid "" +"All inputs in the custom printer vendor or model are spaces. Please re-enter." +msgstr "" +"Todas as entradas no fornecedor ou modelo personalizado da impressora são " +"espaços. Por favor, insira novamente." + +msgid "Please check bed printable shape and origin input." +msgstr "Por favor, verifique a forma imprimível da mesa e a entrada de origem." + +msgid "" +"You have not yet selected the printer to replace the nozzle, please choose." +msgstr "" +"Você ainda não selecionou a impressora para substituir o bico, por favor, " +"escolha." + +msgid "Create Printer Successful" +msgstr "Impressora criada com sucesso" + +msgid "Create Filament Successful" +msgstr "Filamento criado com sucesso" + +msgid "Printer Created" +msgstr "Impressora criada" + +msgid "Please go to printer settings to edit your presets" +msgstr "" +"Por favor vá parar configurações de impressora para editar os seus presets" + +msgid "Filament Created" +msgstr "Filamento criado" + +msgid "" +"Please go to filament setting to edit your presets if you need.\n" +"Please note that nozzle temperature, hot bed temperature, and maximum " +"volumetric speed has a significant impact on printing quality. Please set " +"them carefully." +msgstr "" +"Por favor, vá para as configurações do filamento para editar seus presets, " +"se necessário. \n" +"Por favor, note que a temperatura do bico, temperatura da mesa aquecida e " +"velocidade volumétrica máxima têm um impacto significativo na qualidade de " +"impressão. Por favor, ajuste-os com cuidado." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Orca detectou que a função de sincronização das suas predefinições de " +"usuário não está habilitada, o que pode resultar em falhas nas configurações " +"de Filamento na página do Dispositivo. \n" +"Clique em \"Sincronizar presets do usuário\" para habilitar a função de " +"sincronização." + +msgid "Printer Setting" +msgstr "Configuração da Impressora" + +msgid "Printer config bundle(.orca_printer)" +msgstr "Pacote de configuração da impressora (.orca_printer)" + +msgid "Filament bundle(.orca_filament)" +msgstr "Pacote de filamento (.orca_filament)" + +msgid "Printer presets(.zip)" +msgstr "Presets da impressora (.zip)" + +msgid "Filament presets(.zip)" +msgstr "Presets de filamento (.zip)" + +msgid "Process presets(.zip)" +msgstr "Presets de processo (.zip)" + +msgid "initialize fail" +msgstr "falha na inicialização" + +msgid "add file fail" +msgstr "falha ao adicionar arquivo" + +msgid "add bundle structure file fail" +msgstr "falha ao adicionar arquivo de estrutura de pacote" + +msgid "finalize fail" +msgstr "falha na finalização" + +msgid "open zip written fail" +msgstr "falha ao abrir o arquivo zip para escrita" + +msgid "Export successful" +msgstr "Exportação bem-sucedida" + +#, c-format, boost-format +msgid "" +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it.\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." +msgstr "" +"A pasta '%s' já existe no diretório atual. Deseja limpá-la e reconstruí-la?\n" +"Se não, um sufixo de tempo será adicionado, e você poderá modificar o nome " +"após a criação." + +msgid "" +"Printer and all the filament&&process presets that belongs to the printer. \n" +"Can be shared with others." +msgstr "" +"Presets da impressora e todos os filamentos e processos que pertencem à " +"impressora. \n" +"Pode ser compartilhado com outros." + +msgid "" +"User's fillment preset set. \n" +"Can be shared with others." +msgstr "" +"Conjunto de presets de filamento do usuário. \n" +"Pode ser compartilhado com outros." + +msgid "" +"Only display printer names with changes to printer, filament, and process " +"presets." +msgstr "" +"Só exibir nomes de impressoras com alterações nos presets de impressora, " +"filamento e processo." + +msgid "Only display the filament names with changes to filament presets." +msgstr "" +"Apenas exibir os nomes dos filamentos com alterações nos presets de " +"filamento." + +msgid "" +"Only printer names with user printer presets will be displayed, and each " +"preset you choose will be exported as a zip." +msgstr "" +"Apenas os nomes das impressoras com presets de impressora do usuário serão " +"exibidos, e cada preset escolhido será exportado como um arquivo zip." + +msgid "" +"Only the filament names with user filament presets will be displayed, \n" +"and all user filament presets in each filament name you select will be " +"exported as a zip." +msgstr "" +"Apenas os nomes dos filamentos com presets de filamento do usuário serão " +"exibidos, \n" +"e todas as presets de filamento do usuário em cada nome de filamento " +"selecionado serão exportadas como um arquivo zip." + +msgid "" +"Only printer names with changed process presets will be displayed, \n" +"and all user process presets in each printer name you select will be " +"exported as a zip." +msgstr "" +"Apenas os nomes das impressoras com presets de processo alterados serão " +"exibidos, \n" +"e todos os presets de processo do usuário em cada nome de impressora " +"selecionado serão exportados como um arquivo zip." + +msgid "Please select at least one printer or filament." +msgstr "Por favor, selecione pelo menos uma impressora ou filamento." + +msgid "Please select a type you want to export" +msgstr "Por favor, selecione um tipo que deseja exportar" + +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"Falha ao criar uma pasta temporária, por favor, tente exportar as " +"configurações novamente." + +msgid "Edit Filament" +msgstr "Editar Filamento" + +msgid "Filament presets under this filament" +msgstr "Presets de filamento sob este filamento" + +msgid "" +"Note: If the only preset under this filament is deleted, the filament will " +"be deleted after exiting the dialog." +msgstr "" +"Nota: Se o único preset sob este filamento for excluído, o filamento será " +"excluído após sair da janela." + +msgid "Presets inherited by other presets can not be deleted" +msgstr "Presets herdados por outros presets não podem ser excluídos" + +msgid "The following presets inherits this preset." +msgid_plural "The following preset inherits this preset." +msgstr[0] "Os seguintes presets herdam este preset." +msgstr[1] "A seguinte predefinição herda essa predefinição." + +msgid "Delete Preset" +msgstr "Excluir Preset" + +msgid "Are you sure to delete the selected preset?" +msgstr "Tem certeza de que deseja excluir o preset selecionado?" + +msgid "Delete preset" +msgstr "Excluir preset" + +msgid "+ Add Preset" +msgstr "+ Adicionar Preset" + +msgid "Delete Filament" +msgstr "Excluir Filamento" + +msgid "" +"All the filament presets belong to this filament would be deleted. \n" +"If you are using this filament on your printer, please reset the filament " +"information for that slot." +msgstr "" +"Todos os presets de filamento pertencentes a este filamento seriam " +"excluídas. \n" +"Se você estiver usando este filamento em sua impressora, redefina as " +"informações do filamento para esse slot." + +msgid "Delete filament" +msgstr "Excluir filamento" + +msgid "Add Preset" +msgstr "Adicionar Preset" + +msgid "Add preset for new printer" +msgstr "Adicionar preset para nova impressora" + +msgid "Copy preset from filament" +msgstr "Copiar preset do filamento" + +msgid "The filament choice not find filament preset, please reselect it" +msgstr "" +"O filamento selecionado não encontra preset de filamento, por favor, " +"selecione novamente" + +msgid "[Delete Required]" +msgstr "[Excluir Necessário]" + +msgid "Edit Preset" +msgstr "Editar Preset" + +msgid "For more information, please check out Wiki" +msgstr "Para mais informações, por favor, consulte a Wiki" + +msgid "Collapse" +msgstr "Recolher" + +msgid "Daily Tips" +msgstr "Dicas Diárias" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "bico memorizado: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"O diâmetro do bico no seu perfil não está consistente com o diâmetro do bico " +"memorizado. Você mudou seu bico recentemente?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*Imprimir material %s com %s pode causar danos ao bico" + +msgid "Need select printer" +msgstr "É necessário selecionar uma impressora" + +msgid "The start, end or step is not valid value." +msgstr "O início, fim ou passo não é um valor válido." + +msgid "" +"Unable to calibrate: maybe because the set calibration value range is too " +"large, or the step is too small" +msgstr "" +"Incapaz de calibrar: talvez porque a faixa de valor de calibração definida " +"seja muito grande ou o passo seja muito pequeno" + +msgid "Physical Printer" +msgstr "Impressora Física" + +msgid "Print Host upload" +msgstr "Upload do Host de Impressão" + +msgid "Could not get a valid Printer Host reference" +msgstr "Não foi possível obter uma referência válida do Host de Impressão" + +msgid "Success!" +msgstr "Sucesso!" + +msgid "Are you sure to log out?" +msgstr "Tem certeza de que deseja sair?" + +msgid "Refresh Printers" +msgstr "Atualizar Impressoras" + +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"O arquivo CA HTTPS é opcional. É necessário apenas se você usar HTTPS com um " +"certificado autoassinado." + +msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" +msgstr "" +"Arquivos de certificado (*.crt, *.pem)|*.crt;*.pem|Todos os arquivos|*.*" + +msgid "Open CA certificate file" +msgstr "Abrir arquivo de certificado CA" + +#, c-format, boost-format +msgid "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." +msgstr "" +"Neste sistema, %s usa certificados HTTPS da loja de certificados do sistema " +"ou do Keychain." + +msgid "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." +msgstr "" +"Para usar um arquivo CA personalizado, importe seu arquivo CA para a loja de " +"certificados / Keychain." + +msgid "Login/Test" +msgstr "Login/Teste" + +msgid "Connection to printers connected via the print host failed." +msgstr "" +"A conexão às impressoras conectadas através do host de impressão falhou." + +#, c-format, boost-format +msgid "Mismatched type of print host: %s" +msgstr "Tipo de Host de Impressão incompatível: %s" + +msgid "Connection to AstroBox works correctly." +msgstr "A conexão com o AstroBox funciona corretamente." + +msgid "Could not connect to AstroBox" +msgstr "Não foi possível conectar-se ao AstroBox" + +msgid "Note: AstroBox version at least 1.1.0 is required." +msgstr "Nota: Versão do AstroBox de pelo menos 1.1.0 é necessária." + +msgid "Connection to Duet works correctly." +msgstr "A conexão com o Duet funciona corretamente." + +msgid "Could not connect to Duet" +msgstr "Não foi possível conectar-se ao Duet" + +msgid "Unknown error occured" +msgstr "Ocorreu um erro desconhecido" + +msgid "Wrong password" +msgstr "Senha incorreta" + +msgid "Could not get resources to create a new connection" +msgstr "Não foi possível obter recursos para criar uma nova conexão" + +msgid "Upload not enabled on FlashAir card." +msgstr "Upload não ativado no cartão FlashAir." + +msgid "Connection to FlashAir works correctly and upload is enabled." +msgstr "" +"A conexão com o FlashAir funciona corretamente e o upload está ativado." + +msgid "Could not connect to FlashAir" +msgstr "Não foi possível conectar-se ao FlashAir" + +msgid "" +"Note: FlashAir with firmware 2.00.02 or newer and activated upload function " +"is required." +msgstr "" +"Nota: FlashAir com firmware 2.00.02 ou mais recente e função de upload " +"ativada são necessárias." + +msgid "Connection to MKS works correctly." +msgstr "A conexão com o MKS funciona corretamente." + +msgid "Could not connect to MKS" +msgstr "Não foi possível conectar-se ao MKS" + +msgid "Connection to OctoPrint works correctly." +msgstr "A conexão com o OctoPrint funciona corretamente." + +msgid "Could not connect to OctoPrint" +msgstr "Não foi possível conectar-se ao OctoPrint" + +msgid "Note: OctoPrint version at least 1.1.0 is required." +msgstr "Nota: Versão do OctoPrint de pelo menos 1.1.0 é necessária." + +msgid "Connection to Prusa SL1 / SL1S works correctly." +msgstr "A Conexão com Prusa SL1 / SL1S funciona corretamente." + +msgid "Could not connect to Prusa SLA" +msgstr "Não foi possível conectar-se ao Prusa SLA" + +msgid "Connection to PrusaLink works correctly." +msgstr "A conexão com PrusaLink funciona corretamente." + +msgid "Could not connect to PrusaLink" +msgstr "Não foi possível conectar-se ao PrusaLink" + +msgid "Storages found" +msgstr "Armazenamento encontrado" + +#. TRN %1% = storage path +#, boost-format +msgid "%1% : read only" +msgstr "%1%: somente leitura" + +#. TRN %1% = storage path +#, boost-format +msgid "%1% : no free space" +msgstr "%1% : sem espaço livre" + +#. TRN %1% = host +#, boost-format +msgid "Upload has failed. There is no suitable storage found at %1%." +msgstr "Falha no ‘upload’. Não há armazenamento suficiente em %1%." + +msgid "Connection to Prusa Connect works correctly." +msgstr "A conexão com o Prusa Connect funciona corretamente." + +msgid "Could not connect to Prusa Connect" +msgstr "Não foi possível conectar-se ao Prusa Connect." + +msgid "Connection to Repetier works correctly." +msgstr "A conexão com o Repetier funciona corretamente." + +msgid "Could not connect to Repetier" +msgstr "Não foi possível conectar-se ao Repetier" + +msgid "Note: Repetier version at least 0.90.0 is required." +msgstr "Nota: A versão do Repetier deve ser igual ou maior que 0.90.0" + +#, boost-format +msgid "" +"HTTP status: %1%\n" +"Message body: \"%2%\"" +msgstr "" +"HTTP status: %1%\n" +"Corpo da mensagem: \"%2%\"" + +#, boost-format +msgid "" +"Parsing of host response failed.\n" +"Message body: \"%1%\"\n" +"Error: \"%2%\"" +msgstr "" +"Resposta ao host falhou.\n" +"Corpo da Mensagem \"%1%\"\n" +"Error: \"%2%\"" + +#, boost-format +msgid "" +"Enumeration of host printers failed.\n" +"Message body: \"%1%\"\n" +"Error: \"%2%\"" +msgstr "" +"Enumeração das impressoras host falhou\n" +"Corpo da Mensagem: \"%1%\"\n" +"Error: \"%2%\"" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Possui uma pequena altura de camada, resultando em linhas de camada quase " +"imperceptíveis e alta qualidade de impressão. É adequado para a maioria dos " +"casos gerais de impressão." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, ele tem velocidades e " +"aceleração mais baixas, e o padrão de preenchimento é Giroide. Isso resulta " +"em uma qualidade de impressão muito superior, mas um tempo de impressão " +"muito mais longo." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, tem uma altura de camada " +"um pouco maior, resultando em linhas de camada quase insignificantes e um " +"tempo de impressão ligeiramente menor." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, tem uma altura de camada " +"maior, o que resulta em linhas de camada ligeiramente visíveis, mas um tempo " +"de impressão menor." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, tem uma altura de camada " +"menor, resultando em linhas de camada quase invisíveis e maior qualidade de " +"impressão, mas um tempo de impressão menor." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, tem linhas de camada " +"menores, velocidades e aceleração mais baixas, e o padrão de preenchimento é " +"Giroide. Isso resulta em linhas de camada quase invisíveis e uma qualidade " +"de impressão muito superior, mas um tempo de impressão muito maior." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, tem uma altura de camada " +"menor, resultando em linhas de camada mínimas e maior qualidade de " +"impressão, mas um tempo de impressão menor." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,2 mm, tem linhas de camada " +"menores, velocidades e aceleração mais baixas, e o padrão de preenchimento é " +"Giroide. Isso resulta em linhas de camada mínimas e uma qualidade de " +"impressão muito superior, mas um tempo de impressão muito maior." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Tem uma altura de camada padrão e resulta em linhas de camada e qualidade de " +"impressão padrão. É adequado para a maioria dos casos de impressão." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Comparado com o perfil padrão de uma bico de 0,4 mm, tem mais paredes e uma " +"densidade de preenchimento mais alta. Portanto, resulta em maior " +"resistência, mas com consumo maior de filamento e tempo de impressão mais " +"longo." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Comparado com o perfil padrão de uma bico de 0,4 mm, tem uma altura de " +"camada maior, resultando em linhas de camada mais aparentes e qualidade mais " +"baixa, mas com um tempo de impressão um pouco menor." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Comparado com o perfil padrão de uma bico de 0,4 mm, tem uma altura de " +"camada maior, resultando em linhas de camada mais aparentes e qualidade mais " +"baixa, mas com um tempo de impressão menor." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,4 mm, tem uma altura de camada " +"menor, resultando em linhas de camada menos aparentes e maior qualidade de " +"impressão, mas com um tempo de impressão maior." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,4 mm, tem uma altura de camada " +"menor, velocidades e aceleração mais baixas, e o padrão de preenchimento é " +"Giroide. Portanto, resulta em linhas de camada menos aparentes e qualidade " +"de impressão maior, mas com um tempo de impressão muito maior." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,4 mm, tem uma altura de camada " +"menor, resultando em linhas de camada quase insignificantes e maior " +"qualidade de impressão, mas com um maior tempo de impressão." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,4 mm, tem uma altura de camada " +"menor, velocidades e aceleração mais baixas, e o padrão de preenchimento é " +"Giroide. Portanto, resulta em linhas de camada quase insignificantes e " +"qualidade de impressão muito maior, mas com um tempo de impressão muito " +"maior." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,4 mm, tem uma altura de camada " +"menor, resultando em linhas de camada quase insignificantes, mas com um " +"tempo de impressão maior." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Tem uma altura de camada grande, resultando em linhas de camada aparentes " +"com qualidade e tempo de impressão normais." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,6 mm, tem mais paredes e uma " +"densidade de preenchimento mais alta. Portanto, resulta em uma resistência " +"maior, mas com um consumo de filamento maior e um tempo de impressão mais " +"longo." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,6 mm, tem uma altura de camada " +"maior, resultando em linhas de camada mais aparentes e qualidade mais baixa, " +"mas com um tempo de impressão menor em alguns casos de impressão." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,6 mm, tem uma altura de camada " +"maior, resultando em linhas de camada muito mais aparentes e qualidade muito " +"mais baixa, mas com um tempo de impressão menor em alguns casos de impressão." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,6 mm, tem uma altura de camada " +"menor, resultando em linhas de camada menos aparentes e qualidade " +"ligeiramente maior, mas com um tempo de impressão maior." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,6 mm, tem uma altura de camada " +"menor, resultando em linhas de camada menos aparentes e maior qualidade de " +"impressão, mas com um tempo de impressão maior." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Tem uma altura de camada muito grande, resultando em linhas de camada muito " +"aparentes, com qualidade e tempo de impressão baixo." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,8 mm, tem uma altura de camada " +"maior, resultando em linhas de camada muito aparentes e qualidade muito mais " +"baixa, mas com um tempo de impressão menor em alguns casos de impressão." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,8 mm, tem uma altura de camada " +"muito maior, resultando em linhas de camada extremamente aparentes e " +"qualidade muito mais baixa, mas com um tempo de impressão muito menor em " +"alguns casos de impressão." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,8 mm, tem uma altura de camada " +"ligeiramente menor, resultando em linhas de camada menos aparentes, mas " +"ainda visíveis, e qualidade ligeiramente maior, mas com um tempo de " +"impressão maior em alguns casos de impressão." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Comparado com o perfil padrão de um bico de 0,8 mm, tem uma altura de camada " +"menor, resultando em linhas de camada menos aparentes, mas ainda visíveis, e " +"qualidade ligeiramente maior, mas com um tempo de impressão maior em alguns " +"casos de impressão." + +msgid "Connected to Obico successfully!" +msgstr "Conectado ao Obico com sucesso!" + +msgid "Could not connect to Obico" +msgstr "Não é possível conectar a Obico" + +msgid "Connected to SimplyPrint successfully!" +msgstr "Conectado ao SimplyPrint com sucesso!" + +msgid "Could not connect to SimplyPrint" +msgstr "Não é possível conectar a SimplyPrint" + +msgid "Internel error" +msgstr "" + +msgid "Unknown error" +msgstr "Erro desconhecido" + +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" +"Conta SimplyPrint não vinculada. Vá para as opções de conexão para configurá-" +"la." + +msgid "Connection to Flashforge works correctly." +msgstr "A conexão com a Flashforge está funcionando corretamente." + +msgid "Could not connect to Flashforge" +msgstr "Não é possível conectar a Flashforge" + +msgid "The provided state is not correct." +msgstr "O estado fornecido não está correto." + +msgid "Please give the required permissions when authorizing this application." +msgstr "" +"Por favor, forneça as permissões necessárias ao autorizar este aplicativo." + +msgid "Something unexpected happened when trying to log in, please try again." +msgstr "" +"Algo inesperado aconteceu ao tentar conectar, por favor tente novamente." + +msgid "User cancelled." +msgstr "O usuário cancelou." + +#: resources/data/hints.ini: [hint:Precise wall] +msgid "" +"Precise wall\n" +"Did you know that turning on precise wall can improve precision and layer " +"consistency?" +msgstr "" +"Parede precisa\n" +"Você sabia que ativar o Perímetro Preciso pode melhorar a precisão e a " +"consistência da camada?" + +#: resources/data/hints.ini: [hint:Sandwich mode] +msgid "" +"Sandwich mode\n" +"Did you know that you can use sandwich mode (inner-outer-inner) to improve " +"precision and layer consistency if your model doesn't have very steep " +"overhangs?" +msgstr "" +"Modo sanduíche\n" +"Você sabia que pode usar o modo sanduíche (interno-externo-interno) para " +"melhorar a precisão e a consistência da camada se o seu modelo não tiver " +"overhangs muito íngremes?" + +#: resources/data/hints.ini: [hint:Chamber temperature] +msgid "" +"Chamber temperature\n" +"Did you know that OrcaSlicer supports chamber temperature?" +msgstr "" +"Temperatura da câmara\n" +"Você sabia que o OrcaSlicer suporta temperatura da câmara?" + +#: resources/data/hints.ini: [hint:Calibration] +msgid "" +"Calibration\n" +"Did you know that calibrating your printer can do wonders? Check out our " +"beloved calibration solution in OrcaSlicer." +msgstr "" +"Calibração\n" +"Você sabia que calibrar sua impressora pode fazer maravilhas? Confira nossa " +"amada solução de calibração no OrcaSlicer." + +#: resources/data/hints.ini: [hint:Auxiliary fan] +msgid "" +"Auxiliary fan\n" +"Did you know that OrcaSlicer supports Auxiliary part cooling fan?" +msgstr "" +"Ventilador auxiliar\n" +"Você sabia que o OrcaSlicer suporta ventilador auxiliar de resfriamento de " +"peças?" + +#: resources/data/hints.ini: [hint:Air filtration] +msgid "" +"Air filtration/Exhaust Fan\n" +"Did you know that OrcaSlicer can support Air filtration/Exhaust Fan?" +msgstr "" +"Filtragem de ar/Exaustor\n" +"Você sabia que o OrcaSlicer pode suportar filtragem de ar/exaustor?" + +#: resources/data/hints.ini: [hint:G-code window] +msgid "" +"G-code window\n" +"You can turn on/off the G-code window by pressing the C key." +msgstr "" +"Janela do G-code\n" +"Você pode ligar/desligar a janela do G-code pressionando a tecla C." + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "" +"Switch workspaces\n" +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." +msgstr "" +"Alternar espaços de trabalho\n" +"Você pode alternar entre os espaços de trabalho Preparar e " +"Visualizar pressionando a tecla Tab." + +#: resources/data/hints.ini: [hint:How to use keyboard shortcuts] +msgid "" +"How to use keyboard shortcuts\n" +"Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " +"3D scene operations." +msgstr "" +"Como usar atalhos de teclado\n" +"Você sabia que o Orca Slicer oferece uma ampla gama de atalhos de teclado e " +"operações de cena 3D?" + +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "" +"Reverse on odd\n" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" +msgstr "" +"Inverter em ímpar\n" +"Você sabia que a função Inverter em ímpar pode melhorar " +"significativamente a qualidade da superfície dos overhangs?" + +#: 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 "" +"Ferramenta de corte\n" +"Você sabia que pode cortar um modelo em qualquer ângulo e posição com a " +"ferramenta de corte?" + +#: resources/data/hints.ini: [hint:Fix Model] +msgid "" +"Fix Model\n" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " +"problems on the Windows system?" +msgstr "" +"Corrigir Modelo\n" +"Você sabia que pode corrigir um modelo 3D corrompido para evitar muitos " +"problemas de fatiamento no sistema Windows?" + +#: resources/data/hints.ini: [hint:Timelapse] +msgid "" +"Timelapse\n" +"Did you know that you can generate a timelapse video during each print?" +msgstr "" +"Timelapse\n" +"Você sabia que pode gerar um vídeo de timelapse durante cada impressão?" + +#: 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-arranjo\n" +"Você sabia que pode auto-posicionar todos os objetos em seu projeto?" + +#: 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 "" +"Auto-orientar\n" +"Você sabia que pode girar objetos para uma orientação ideal para impressão " +"com um simples clique?" + +#: 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 "" +"Apoiar face à superfície\n" +"Você sabia que pode rapidamente orientar um modelo para que uma de suas " +"faces fique sobre a base de impressão? Selecione a função \"Apoiar na face\" " +"ou pressione a tecla 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 "" +"Lista de Objetos\n" +"Você sabia que pode visualizar todos os objetos/peças em uma lista e alterar " +"as configurações para cada objeto/peça?" + +#: resources/data/hints.ini: [hint:Search Functionality] +msgid "" +"Search Functionality\n" +"Did you know that you use the Search tool to quickly find a specific Orca " +"Slicer setting?" +msgstr "" +"Funcionalidade de Busca\n" +"Você sabia que pode usar a ferramenta de busca para encontrar rapidamente " +"uma configuração específica do Orca Slicer?" + +#: 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." +msgstr "" +"Simplificar Modelo\n" +"Você sabia que pode reduzir o número de triângulos em uma malha usando a " +"função Simplificar malha? Clique com o botão direito no modelo e selecione " +"Simplificar modelo." + +#: 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 "" +"Tabela de Parâmetros de Fatiamento\n" +"Você sabia que pode visualizar todos os objetos/peças em uma tabela e " +"alterar as configurações para cada objeto/peça?" + +#: 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 "" +"Dividir em Objetos/Peças\n" +"Você sabia que pode dividir um objeto grande em peças menores para facilitar " +"a colorização ou a impressão?" + +#: 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." +msgstr "" +"Subtrair uma Peça\n" +"Você sabia que pode subtrair uma malha da outra usando o modificador de peça " +"negativa? Dessa forma, você pode, por exemplo, criar facilmente furos " +"redimensionáveis diretamente no Orca Slicer." + +#: resources/data/hints.ini: [hint:STEP] +msgid "" +"STEP\n" +"Did you know that you can improve your print quality by slicing a STEP file " +"instead of an STL?\n" +"Orca Slicer supports slicing STEP files, providing smoother results than a " +"lower resolution STL. Give it a try!" +msgstr "" +"STEP\n" +"Você sabia que pode melhorar a qualidade da impressão fatiando um arquivo " +"STEP ao invés de um STL?\n" +"Orca Slicer é compatível com arquivos STEP, gerando resultados mais suaves " +"do que um STL em baixa resolução. Tente!" + +#: 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 "" +"Local da costura\n" +"Você sabia que pode customizar a posição da costura, e até mesmo pintá-la na " +"sua peça, para tê-la em um lugar menos visível? Isso vai aumentar a " +"qualidade geral do seu modelo. Tente!" + +#: 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 "" +"Ajuste fino do fluxo\n" +"Você sabia que o fluxo pode ser ajustado para impressões ainda melhores? " +"Dependendo do material, você pode melhorar o acabamento final da sua peça " +"fazendo alguns ajustes." + +#: 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 "" +"Divida suas impressões em mesas\n" +"Você sabia que pode dividir um modelo que tem diversas peças individuais em " +"mesas distintas prontas para imprimir? Isso vai simplificar o processo e o " +"avanço das impressões." + +#: 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 "" +"Agilize sua impressão com a Altura de Camada Adaptativa\n" +"Você sabia que pode imprimir um modelo ainda mais rápido, usando a opção de " +"Altura de Camada Adaptativa? Tente!" + +#: 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 "" +"Pintura de suporte\n" +"Você sabia que pode pintar a localização dos seus suportes? Essa " +"funcionalidade facilita colocar o material de suporte apenas nas seções do " +"modelo que realmente precisam." + +#: 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 "" +"Diferentes tipos de suportes\n" +"Você sabia que pode escolher entre vários tipos de suportes? Os suportes de " +"árvore funcionam muito bem para modelos orgânicos, enquanto economizam " +"filamento e melhoram a velocidade de impressão. Confira-os!" + +#: 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 "" +"Impressão de Filamento de Seda\n" +"Você sabia que o filamento de seda precisa de considerações especiais para " +"ser impresso com sucesso? Uma temperatura mais alta e uma velocidade mais " +"baixa são sempre recomendadas para obter os melhores resultados." + +#: 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 "" +"Borda para melhor adesão\n" +"Você sabia que, ao imprimir modelos com uma pequena interface de contato com " +"a superfície de impressão, é recomendável usar uma borda?" + +#: 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 "" +"Definir parâmetros para vários objetos\n" +"Você sabia que pode definir parâmetros de fatiamento para todos os objetos " +"selecionados de uma só vez?" + +#: resources/data/hints.ini: [hint:Stack objects] +msgid "" +"Stack objects\n" +"Did you know that you can stack objects as a whole one?" +msgstr "" +"Empilhar objetos\n" +"Você sabia que pode empilhar objetos como um todo?" + +#: 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 "" +"Purga no suporte/objetos/preenchimento\n" +"Você sabia que pode economizar o filamento desperdiçado ao purgar nos " +"suportes/objetos/preenchimento durante a troca de filamento?" + +#: 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 "" +"Melhorar a resistência\n" +"Você sabia que pode usar mais loops de perímetro e densidade de " +"preenchimento não sólido mais alta para melhorar a resistência do modelo?" + +#: resources/data/hints.ini: [hint:When need to print with the printer door +#: opened] +msgid "" +"When need to print with the printer door opened\n" +"Did you know that opening the printer door can reduce the probability of " +"extruder/hotend clogging when printing lower temperature filament with a " +"higher enclosure temperature. More info about this in the Wiki." +msgstr "" +"Quando é necessário imprimir com a porta da impressora aberta\n" +"Você sabia que abrir a porta da impressora pode reduzir a probabilidade de " +"entupimento do extrusor/bico aquecido ao imprimir filamento de temperatura " +"mais baixa com uma temperatura de invólucro mais alta. Mais informações " +"sobre isso na Wiki." + +#: resources/data/hints.ini: [hint:Avoid warping] +msgid "" +"Avoid warping\n" +"Did you know that when printing materials that are prone to warping such as " +"ABS, appropriately increasing the heatbed temperature can reduce the " +"probability of warping." +msgstr "" +"Evitar empenamento\n" +"Você sabia que ao imprimir materiais propensos ao empenamento, como ABS, " +"aumentar adequadamente a temperatura da mesa aquecida pode reduzir a " +"probabilidade de empenamento?" + +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "O tamanho do arquivo excede o limite de envio de 100MB. Por favor, envie " +#~ "seu arquivo através do painel." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Por favor, insira um valor válido (K entre 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Por favor, insira um valor válido (K entre 0~0.3, N entre 0.6~2.0))" + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "Selecione as impressoras conectadas (0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "Selecionar as impressoras conectadas (%d/6)" + +#~ msgid "PrintingPause" +#~ msgstr "Pausa na Impressão" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Falha na conexão local da impressora, por favor, tente novamente." + +#~ 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 "" +#~ "Encontre os detalhes da Calibração de Dinâmica de Fluxo na nossa wiki.\n" +#~ "\n" +#~ "Normalmente, a calibração não é necessária. Quando você inicia uma " +#~ "impressão de cor/material única, com a opção \"calibração de dinâmica de " +#~ "fluxo\" ativada no menu de início da impressão, a impressora seguirá o " +#~ "método antigo, calibrando o filamento antes da impressão; Quando você " +#~ "inicia uma impressão de cor/material múltipla, a impressora usará o " +#~ "parâmetro de compensação padrão para o filamento durante cada troca de " +#~ "filamento, o que resultará em um bom resultado na maioria dos casos.\n" +#~ "\n" +#~ "Por favor, note que existem alguns casos que podem tornar o resultado da " +#~ "calibração não confiável: usar uma mesa texturizada para fazer a " +#~ "calibração; a mesa não tem boa adesão (por favor, lave a mesa ou aplique " +#~ "cola!) ... Você pode encontrar mais informações em nossa wiki.\n" +#~ "\n" +#~ "Os resultados da calibração têm cerca de 10 por cento de oscilação em " +#~ "nossos testes, o que pode fazer com que o resultado não seja exatamente o " +#~ "mesmo em cada calibração. Ainda estamos investigando a causa raiz para " +#~ "fazer melhorias com novas atualizações." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Apenas um dos resultados com o mesmo nome será salvo. Você tem certeza de " +#~ "que deseja substituir os outros resultados?" + +#, 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 "" +#~ "Já existe um resultado de calibração histórico com o mesmo nome: %s. " +#~ "Apenas um dos resultados com o mesmo nome é salvo. Você tem certeza de " +#~ "que deseja substituir o resultado histórico?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Por favor, encontre o canto com o grau perfeito de extrusão" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "A" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 82ceeb5cfb..928886969f 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -5,18 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: OrcaSlicer V2.0.0 RC\n" +"Project-Id-Version: OrcaSlicer V2.0.0 Official Release\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2024-03-30 17:42+0700\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"PO-Revision-Date: 2024-04-12 13:49+0700\n" "Last-Translator: \n" "Language-Team: andylg@yandex.ru\n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" @@ -263,6 +263,9 @@ msgstr "Сброс вращения" msgid "World coordinates" msgstr "Мировая СК" +msgid "Object coordinates" +msgstr "СК модели" + msgid "°" msgstr "°" @@ -1394,9 +1397,6 @@ msgstr "" "Файл конфигурации \"%1%\" был загружен, но некоторые значения не были " "распознаны." -msgid "V" -msgstr "V" - 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." @@ -1507,6 +1507,9 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Выберите один или несколько файлов (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "Выберите ZIP файл" + msgid "Choose one file (gcode/3mf):" msgstr "Выберите один файл (gcode/3mf):" @@ -1577,6 +1580,13 @@ msgstr "Текущие загрузки" msgid "Select a G-code file:" msgstr "Выберите файл G-кода:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Не удалось запустить загрузку по URL-адресу. Не задана папка назначения. " +"Пожалуйста, задайте папку назначения в мастере настройки." + msgid "Import File" msgstr "Импорт файла" @@ -1809,8 +1819,8 @@ msgstr "По умолчанию" msgid "Filament %d" msgstr "Пруток %d" -msgid "active" -msgstr "активный" +msgid "current" +msgstr "текущий" msgid "Scale to build volume" msgstr "Отмасштабировать под область печати" @@ -1903,6 +1913,9 @@ msgstr "Добавить примитив" msgid "Add Handy models" msgstr "Добавьте тестовую модель" +msgid "Add Models" +msgstr "Добавить модель" + msgid "Show Labels" msgstr "Показать имена файлов" @@ -1954,6 +1967,12 @@ msgstr "Расставить" msgid "arrange current plate" msgstr "Расстановка моделей на текущем столе" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Автоповорот" @@ -1987,9 +2006,6 @@ msgstr "Сменить пруток" msgid "Set Filament for selected items" msgstr "Задать пруток для выбранных элементов" -msgid "current" -msgstr "текущий" - msgid "Unlock" msgstr "Разблокировать" @@ -2332,9 +2348,6 @@ msgstr "Введите пользовательский G-код для теку msgid "Jump to Layer" msgstr "Перейти к слою" -msgid "Jump to layer" -msgstr "Перейти к слою" - msgid "Please enter the layer number" msgstr "Пожалуйста, введите номер слоя" @@ -2405,7 +2418,7 @@ msgstr "Не удалось подключиться к принтеру." msgid "Connection to printer failed" msgstr "Не удалось подключиться к принтеру" -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "Пожалуйста, проверьте сетевое подключение принтера с BambuStudio." msgid "Connecting..." @@ -2429,11 +2442,11 @@ msgstr "Дозаправка" msgid "AMS not connected" msgstr "АСПП не подключена" -msgid "Load Filament" +msgid "Load" msgstr "Загрузить" -msgid "Unload Filament" -msgstr "Выгрузить" +msgid "Unload" +msgstr "Выгруз." msgid "Ext Spool" msgstr "Внеш. катушка" @@ -2450,7 +2463,7 @@ msgstr "Повтор" msgid "Calibrating AMS..." msgstr "Калибровка АСПП..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Во время калибровки возникла проблема. Нажмите, чтобы просмотреть решение." @@ -2492,7 +2505,7 @@ msgstr "Загрузка нового прутка" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" "Выберите слот АСПП, затем нажмите кнопку «Загрузить» или «Выгрузить» для " "автоматической загрузки или выгрузки прутка." @@ -2767,14 +2780,8 @@ msgstr "Orca Slicer распространяется под лицензией " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public третьей версии" -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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" -"Orca Slicer основан на BambuStudio от компании Bambulab, которая взяла за " -"основу PrusaSlicer от компании Prusa Research. PrusaSlicer же основан на " -"Slic3r от Alessandro Ranellucci и разработках сообщества RepRap." msgid "Libraries" msgstr "Библиотеки" @@ -2871,13 +2878,13 @@ msgstr "Вы уверены, что хотите удалить информац msgid "You need to select the material type and color first." msgstr "Сначала необходимо выбрать тип материала и цвет." -msgid "Please input a valid value (K in 0~0.3)" -msgstr "Пожалуйста, введите допустимое значение (K в диапазоне 0~0.3)" - -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "" + +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" -"Пожалуйста, введите допустимое значение (K в диапазоне 0~0.3, N в диапазоне " -"0.6~2.0)" msgid "Other Color" msgstr "Другой цвет" @@ -2982,37 +2989,19 @@ msgstr "Отключить АСПП" msgid "Print with the filament mounted on the back of chassis" msgstr "Печать материалом, установленным на задней части корпуса." -msgid "Cabin humidity" -msgstr "Влажность внутри" +msgid "Current 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.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Зелёный цвет означает, что влажность в системе АСПП нормальная, оранжевый - " -"высокая, красный - слишком высокая. Чем ниже значение гигрометра, тем лучше." - -msgid "Desiccant status" -msgstr "Состояние влагопоглотителя" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Состояние влагопоглотителя (силикагеля) ниже двух делений указывает на то, " -"что он может уже не выполнять свою функцию. Пожалуйста, замените его. Чем " -"больше делений на индикаторе, тем лучше." - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Примечание: при открытой крышке или заменённом влагопоглотителе, может " -"потребоваться несколько часов или ночь для поглощения влаги. Кроме того, " -"процесс может замедлиться из-за низкой температуры окружающей среды. В " -"течение этого времени значения индикатора могут быть неточными." +"Пожалуйста, замените влагопоглотитель, если он слишком влажный. Индикатор " +"может показывать неточно в следующих случаях: при открытой крышке или замене " +"влагопоглотителя. Для поглощения влаги требуется несколько часов. Низкая " +"температура окружающей среды также замедляют этот процесс." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3074,6 +3063,12 @@ msgstr "" "(В настоящее время поддерживается автоматическая дозаправка материала только " "одного производителя, типа и цвета)" +msgid "DRY" +msgstr "СУХОЙ" + +msgid "WET" +msgstr "ВЛАЖНЫЙ" + msgid "AMS Settings" msgstr "Настройки АСПП" @@ -3088,7 +3083,7 @@ msgstr "" "катушки Bambu. Это занимает около 20 секунд." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" "Примечание: если во время печати вставляется новая пластиковая нить, АСПП " @@ -3145,6 +3140,14 @@ msgstr "" "АСПП автоматически переключится на другую катушку с тем же типом материала, " "когда текущий закончится." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Файл" @@ -3218,6 +3221,65 @@ msgstr "Плавающий зарезервированный операнд" msgid "Stack overflow" msgstr "Переполнение стека" +msgid "Running post-processing scripts" +msgstr "Запуск скриптов постобработки" + +msgid "Successfully executed post-processing script" +msgstr "Скрипт постобработки успешно выполнен." + +msgid "Unknown error occured during exporting G-code." +msgstr "При экспорте G-кода произошла неизвестная ошибка." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Не удалось скопировать временный G-код в местонахождение выходного файла G-" +"кода. Может ваша SD карта защищена от записи?\n" +"Сообщение об ошибке: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Не удалось скопировать временный G-код в местонахождение выходного файла G-" +"кода. Возможно, проблема с устройством назначения, попробуйте снова " +"выполнить экспорт или использовать другое устройство. Повреждённый выходной " +"файл G-кода находится в %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Не удалось переименовать G-код после копирования в выбранную папку " +"назначения. Текущий путь %1%.tmp. Пожалуйста, попробуйте экспортировать ещё " +"раз." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Копирование временного G-кода завершено, но исходный код в %1% не удалось " +"открыть во время проверки копии. Выходной G-код находится в %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Копирование временного G-кода завершено, но экспортированный код не удалось " +"открыть во время проверки копии. Выходной G-код находится в %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Файл G-кода экспортирован в %1%" + msgid "Unknown error when export G-code." msgstr "Неизвестная ошибка при экспорте G-кода." @@ -3231,13 +3293,6 @@ msgstr "" "Сообщение об ошибке: %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-" @@ -3249,6 +3304,224 @@ msgstr "" "Планирование загрузки на `%1%`. Смотрите Окна -> Очередь загрузки на хост " "печати" +msgid "Device" +msgstr "Принтер" + +msgid "Task Sending" +msgstr "" + +msgid "Task Sent" +msgstr "" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Не в сети" + +msgid "No task" +msgstr "" + +msgid "View" +msgstr "Вид" + +msgid "N/A" +msgstr "Н/Д" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "" + +msgid "Task Name" +msgstr "" + +msgid "Device Status" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Добавить" + +msgid "Idle" +msgstr "Простой" + +msgid "Printing" +msgstr "Печать" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Несовместимы" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Подготовка" + +msgid "Slicing" +msgstr "Нарезка" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Продолжить" + +msgid "Stop" +msgstr "Остановить" + +msgid "Task Status" +msgstr "" + +msgid "Sent Time" +msgstr "" + +msgid "There are no tasks to be sent!" +msgstr "" + +msgid "No historical tasks!" +msgstr "" + +msgid "Loading..." +msgstr "Загрузка..." + +msgid "No AMS" +msgstr "" + +msgid "Send to Multi-device" +msgstr "" + +msgid "Preparing print job" +msgstr "Подготовка задания на печать" + +msgid "Abnormal print file data. Please slice again" +msgstr "Неправильные данные файла печати. Пожалуйста, нарежьте ещё раз." + +msgid "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "" + +msgid "Use AMS" +msgstr "" + +msgid "Select Printers" +msgstr "" + +msgid "Ams Status" +msgstr "" + +msgid "Printing Options" +msgstr "" + +msgid "Bed Leveling" +msgstr "" +"Выравнивание\n" +"стола" + +msgid "Timelapse" +msgstr "Таймлапсы" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" + +msgid "Wait" +msgstr "Подождите" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" + +msgid "Send" +msgstr "Отправить G-код стола на SD-карту" + +msgid "Name is invalid;" +msgstr "Некорректное имя;" + +msgid "illegal characters:" +msgstr "недопустимые символы:" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "Длина имени превышает установленное ограничение." + msgid "Origin" msgstr "Начало координат" @@ -3319,6 +3592,23 @@ msgstr "Выберите STL файл для импорта формы стол msgid "Bed Shape" msgstr "Форма стола" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Минимально рекомендуемая температура меньше 190 градусов или максимально " +"рекомендуемая температура выше 300 градусов.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"Минимально рекомендуемая температура не может быть выше максимально " +"рекомендуемой.\n" + +msgid "Please check.\n" +msgstr "Пожалуйста, проверьте.\n" + 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" @@ -3407,31 +3697,6 @@ msgstr "" "\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 "" -"Для режима печати «Спиральная ваза» необходимо чтобы соблюдались следующие " -"условия:\n" -"- одностеночный периметр\n" -"- отсутствие поддержки\n" -"- отсутствие верхних сплошных слоёв\n" -"- плотность заполнения 0%\n" -"- отключено «Обнаружение тонких стенок»\n" -"- Режим записи таймлапсов - обычный режим" - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Но принтеры с кинематикой I3 не будут писать таймлапс." - -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 "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3501,6 +3766,31 @@ msgstr "" "seam_slope_start_height должна быть меньше высоты слоя.\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 "" +"Для режима печати «Спиральная ваза» необходимо чтобы соблюдались следующие " +"условия:\n" +"- одностеночный периметр\n" +"- отсутствие поддержки\n" +"- отсутствие верхних сплошных слоёв\n" +"- плотность заполнения 0%\n" +"- отключено «Обнаружение тонких стенок»\n" +"- Режим записи таймлапсов - обычный режим" + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Но принтеры с кинематикой I3 не будут писать таймлапс." + +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 "Auto bed leveling" msgstr "Автовыравнивание стола" @@ -3608,18 +3898,6 @@ msgstr "Пауза при ошибке на первом слое" msgid "Nozzle clog pause" msgstr "Пауза при засорении сопла" -msgid "MC" -msgstr "Плата управления" - -msgid "MainBoard" -msgstr "Материнская плата" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Неизвестно" @@ -3780,9 +4058,6 @@ msgstr "Настройки принтера" msgid "parameter name" msgstr "Имя параметра" -msgid "N/A" -msgstr "Н/Д" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s не может быть в процентах" @@ -3794,6 +4069,12 @@ msgstr "Значение %s вне диапазона. Продолжить?" msgid "Parameter validation" msgstr "Проверка корректности параметра" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" +"Значение %s выходит за пределы допустимого диапазона. Допустимый диапазон - " +"от %d до %d." + msgid "Value is out of range." msgstr "Введённое значение вне диапазона." @@ -3807,6 +4088,20 @@ msgstr "" "ДА для %s%%, \n" "НЕТ для %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Неверный входной формат. Ожидаемый вектор размеров в следующем формате: \"%1%" +"\"" + +msgid "Input value is out of range" +msgstr "Введённое значение вне диапазона" + +msgid "Some extension in the input is invalid" +msgstr "Недопустимое расширение на входе" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Недопустимый формат. Ожидаемый векторный формат: \"%1%\"" @@ -3874,12 +4169,12 @@ msgstr "Видимость" msgid "Flushed" msgstr "Очищено" -msgid "Total" -msgstr "Общее" - msgid "Tower" msgstr "Башня" +msgid "Total" +msgstr "Общее" + msgid "Total Estimation" msgstr "Общая оценка" @@ -3982,6 +4277,12 @@ msgstr "Оценка времени" msgid "Normal mode" msgstr "Нормальный режим" +msgid "Total Filament" +msgstr "Всего использовано прутка" + +msgid "Model Filament" +msgstr "Исп. прутка для моделей" + msgid "Prepare time" msgstr "Время подготовки" @@ -4075,6 +4376,9 @@ msgstr "Параметры расстановки" msgid "Spacing" msgstr "Интервал" +msgid "0 means auto spacing." +msgstr "0 - автоматический интервал." + msgid "Auto rotate for arrangement" msgstr "Разрешить вращение при расстановке" @@ -4087,9 +4391,6 @@ msgstr "Избегать зону калибровки экструзии" msgid "Align to Y axis" msgstr "Выравнивать по оси Y" -msgid "Add" -msgstr "Добавить" - msgid "Add plate" msgstr "Добавить стол" @@ -4222,6 +4523,9 @@ msgstr "Автозапись мониторинга" msgid "Go Live" msgstr "Запустить трансляцию" +msgid "Liveview Retry" +msgstr "Повторить попытку просмотра" + msgid "Resolution" msgstr "Разрешение" @@ -4275,14 +4579,11 @@ msgstr "Закрытие приложения, при имеющихся изм msgid "Logging" msgstr "Авторизация" -msgid "Prepare" -msgstr "Подготовка" - msgid "Preview" msgstr "Предпросмотр нарезки" -msgid "Device" -msgstr "Принтер" +msgid "Multi-device" +msgstr "" msgid "Project" msgstr "Проект" @@ -4308,9 +4609,6 @@ msgstr "Нарезать все столы" msgid "Export G-code file" msgstr "Экспорт в G-код" -msgid "Send" -msgstr "Отправить G-код стола на SD-карту" - msgid "Export plate sliced file" msgstr "Экспорт стола в файл проекта" @@ -4431,6 +4729,12 @@ msgstr "Импортировать 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Загрузка модели" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Импортировать конфигурацию" @@ -4464,8 +4768,8 @@ msgstr "Экспорт в G-код" msgid "Export current plate as G-code" msgstr "Экспортировать текущие модели со стола в G-код" -msgid "Export &Configs" -msgstr "Экспорт конфигурации" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Экспортировать текущую конфигурацию в файл" @@ -4567,9 +4871,6 @@ msgstr "Подсвечивать нависания у модели в 3D-сце msgid "Preferences" msgstr "Параметры" -msgid "View" -msgstr "Вид" - msgid "Help" msgstr "Помощь" @@ -4637,10 +4938,10 @@ msgstr "Экспорт траектории &инструмента в OBJ" msgid "Export toolpaths as OBJ" msgstr "Экспортировать траекторию инструмента в OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Открыть &Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Открыть Studio" msgid "&Quit" @@ -4737,40 +5038,66 @@ msgstr "" msgid "Synchronization" msgstr "Синхронизация" -msgid "Initialize failed (No Device)!" -msgstr "Ошибка инициализации (устройство не обнаружено)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" +"Устройство не может обработать больше сообщений. Пожалуйста, повторите " +"попытку позже." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Ошибка инициализации (подключённое устройство не готово)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" +"Проигрыватель неисправен. Пожалуйста, переустановите системный проигрыватель." -msgid "Initialize failed (No Camera Device)!" -msgstr "Ошибка инициализации (камера не обнаружена)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"Проигрыватель не загружается, пожалуйста, нажмите кнопку «Воспроизвести», " +"чтобы повторить попытку." -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "Принтер занят загрузкой. Дождитесь завершения загрузки." +msgid "Please confirm if the printer is connected." +msgstr "Пожалуйста, проверьте, подключен ли принтер." -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "Ошибка инициализации (не поддерживается в текущей версии принтера)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"Принтер в настоящее время занят загрузкой. Пожалуйста, повторите попытку " +"после завершения.\n" +"\n" +"Сейчас идёт загрузка. Пожалуйста, повторите попытку после завершения." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Ошибка инициализации (Недоступно в режиме «Только LAN»)!" +msgid "Printer camera is malfunctioning." +msgstr "Камера принтера неисправна." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Ошибка инициализации (отсутствует IP-адрес принтера в локальной сети)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Возникла проблема. Пожалуйста, обновите прошивку принтера и повторите " +"попытку." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Просмотр в реальном времени для локальной сети отключён. Пожалуйста, " +"включите его на экране принтера." + +msgid "Please enter the IP of printer to connect." +msgstr "Введите IP-адрес принтера для подключения." msgid "Initializing..." msgstr "Инициализация..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Ошибка инициализации (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"Не удалось установить соединение. Пожалуйста, проверьте сеть и повторите " +"попытку" -msgid "Network unreachable" -msgstr "Сеть недоступна" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Пожалуйста, проверьте сеть и повторите попытку. Если проблема не устранена, " +"попробуйте перезагрузить или обновить принтер." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Остановлено [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "Принтер вышел из системы и не может подключиться." msgid "Stopped." msgstr "Остановлено." @@ -4803,19 +5130,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Не удалось инициализировать виртуальную камеру (%s)!" +msgid "Network unreachable" +msgstr "Сеть недоступна" + msgid "Information" msgstr "Информация" msgid "Playing..." msgstr "Воспроизведение..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Ошибка загрузки [%d]!" - -msgid "Loading..." -msgstr "Загрузка..." - msgid "Year" msgstr "Год" @@ -4834,9 +5157,6 @@ msgstr "Группировать файлы по месяцам (по убыва msgid "Show all files, recent first." msgstr "Показать все файлы (недавние первые)" -msgid "Timelapse" -msgstr "Таймлапсы" - msgid "Switch to timelapse files." msgstr "Переключиться на файлы таймлапсов." @@ -4864,6 +5184,12 @@ msgstr "Выбрать" msgid "Batch manage files." msgstr "Пакетное управление файлами." +msgid "Refresh" +msgstr "Обновить" + +msgid "Reload file list from printer." +msgstr "Перезагрузка списка файлов с принтера." + msgid "No printers." msgstr "Принтеры отсутствуют." @@ -4874,13 +5200,36 @@ msgstr "Ошибка подключения [%d]!" msgid "Loading file list..." msgstr "Загрузка списка файлов..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Файлы отсутствуют [%d]" +msgid "No files" +msgstr "Файлы отсутствуют " + +msgid "Load failed" +msgstr "Ошибка загрузки" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Ошибка инициализации (подключённое устройство не готово)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"На текущей версии прошивки просмотр файлов на SD-карте не поддерживается. " +"Пожалуйста, обновите прошивку принтера." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "" +"LAN Connection Failed (Failed to start liveview)\"\n" +"Сбой подключения к локальной сети (не удалось просмотреть sd-карту)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Просмотр файлов на SD-карте не поддерживается в режиме «Только LAN»." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Ошибка загрузки [%d]" +msgid "Initialize failed (%s)!" +msgstr "Ошибка инициализации (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4909,11 +5258,11 @@ msgstr "Удалить файл" msgid "Fetching model infomations ..." msgstr "Извлечение информации о модели..." -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "Не удалось получить информацию о модели с принтера." -msgid "Failed to parse model infomations." -msgstr "Не удалось проанализировать информацию о модели." +msgid "Failed to parse model information." +msgstr "Не удалось обработать информацию о модели." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4926,6 +5275,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Файл '%s' потерян! Пожалуйста, загрузите его снова." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Файл: %s\n" +"Заголовок: %s\n" + msgid "Download waiting..." msgstr "Ожидание загрузки..." @@ -4942,16 +5299,15 @@ msgstr "Загрузка завершена" msgid "Downloading %d%%..." msgstr "Загрузка %d%%..." -msgid "Connection lost. Please retry." -msgstr "Соединение потеряно. Пожалуйста, повторите попытку." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Устройство не может обработать больше сообщений. Пожалуйста, повторите " -"попытку позже." +"При повторном подключении принтера операция не может быть завершена " +"немедленно, повторите попытку позже." -msgid "File not exists." -msgstr "Файл не существует." +msgid "File does not exist." +msgstr "Файла не существует." msgid "File checksum error. Please retry." msgstr "Ошибка контрольной суммы файла. Повторите попытку." @@ -5008,12 +5364,6 @@ msgstr "Инвертировать ось крена (Z)" msgid "Printing Progress" msgstr "Прогресс печати" -msgid "Resume" -msgstr "Продолжить" - -msgid "Stop" -msgstr "Остановить" - msgid "0" msgstr "0" @@ -5056,6 +5406,9 @@ msgstr "Переключение позиции камеры" msgid "Control" msgstr "Управление" +msgid "Printer Parts" +msgstr "Части принтера" + msgid "Print Options" msgstr "Настройки печати" @@ -5074,9 +5427,6 @@ msgstr "Выдув" msgid "Bed" msgstr "Стол" -msgid "Unload" -msgstr "Выгруз." - msgid "Debug Info" msgstr "Отладочная информация" @@ -5265,9 +5615,6 @@ msgstr "Статус" msgid "Update" msgstr "Обновление" -msgid "HMS" -msgstr "Здоровье принтера" - msgid "Don't show again" msgstr "Больше не показывать" @@ -5298,6 +5645,35 @@ msgstr "Информация %s" msgid "Skip" msgstr "Пропустить" +msgid "Newer 3mf version" +msgstr "Новая версия 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Скачать бета-версию" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Текущая версия: " + +msgid "Latest Version: " +msgstr "Последняя версия: " + +msgid "Not for now" +msgstr "Не сейчас" + msgid "3D Mouse disconnected." msgstr "3D-мышь отключена." @@ -5370,12 +5746,12 @@ msgstr[2] "Загружена %1$d деталей, являющиеся част msgid "ERROR" msgstr "ОШИБКА" -msgid "CANCELED" -msgstr "ОТМЕНЕНО" - msgid "COMPLETED" msgstr "ЗАВЕРШЕНО" +msgid "CANCELED" +msgstr "ОТМЕНЕНО" + msgid "Cancel upload" msgstr "Отменить отправку" @@ -5486,6 +5862,25 @@ msgstr "Разрешить звуковые уведомления" msgid "Filament Tangle Detect" msgstr "Обнаружение запутывания прутка" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + +msgid "Nozzle Type" +msgstr "Тип сопла" + +msgid "Stainless Steel" +msgstr "Нержавеющая сталь" + +msgid "Hardened Steel" +msgstr "Закаленная сталь" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Общие" @@ -5694,9 +6089,6 @@ msgstr "" 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 " @@ -5747,6 +6139,9 @@ msgstr "Имена компонентов внутри step файла не в msgid "The name may show garbage characters!" msgstr "В названии могут присутствовать ненужные символы!" +msgid "Remember my choice." +msgstr "Запомнить выбор" + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5877,9 +6272,6 @@ msgstr "Не удалось перезагрузить:" msgid "Error during reload" msgstr "Ошибка во время перезагрузки" -msgid "Slicing" -msgstr "Нарезка" - msgid "There are warnings after slicing models:" msgstr "Предупреждение о нарезке моделей:" @@ -5938,9 +6330,15 @@ msgstr "Импортирование модели" msgid "prepare 3mf file..." msgstr "подготовка 3mf файла..." +msgid "Download failed, unknown file format." +msgstr "Не удалось загрузить, неизвестный формат файла." + msgid "downloading project ..." msgstr "скачивание проекта..." +msgid "Download failed, File size exception." +msgstr "Загрузка не удалась, ошибка размера файла." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Проект загружен %d%%" @@ -5964,6 +6362,20 @@ msgstr "G-кода содержатся недопустимые данные." msgid "Error occurs while loading G-code file" msgstr "Ошибка при загрузке файла G-кода" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Не удалось загрузить ZIP-архив расположенный по пути %1%." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Не удалось разархивировать файл в %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "Ошибка поиска распакованного файла в %1%. Не удалось распаковать файл." + msgid "Drop project file" msgstr "Операции с файлами проекта" @@ -5988,9 +6400,6 @@ msgstr "Одновременная загрузка файла G-кода и м msgid "Can not add models when in preview mode!" msgstr "В режиме предпросмотра добавление моделей недоступно!" -msgid "Add Models" -msgstr "Добавить модель" - msgid "All objects will be removed, continue?" msgstr "Все модели будут удалены, продолжить?" @@ -5999,9 +6408,6 @@ msgstr "" "В текущем проекте имеются несохранённые изменения. \n" "Сохранить их перед продолжением?" -msgid "Remember my choice." -msgstr "Запомнить выбор" - msgid "Number of copies:" msgstr "Количество копий:" @@ -6031,10 +6437,26 @@ msgstr "Файл %s отправлен в память принтера и мо msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Невозможно выполнить булевы операции над сетками модели. Будут " -"экспортированы только положительные части." +"Невозможно выполнить булеву операцию над сетками модели. Будут сохранены " +"только положительные части. Вы можете исправить сетки и попробовать снова." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Причина: часть \"%1%\" пустая." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Причина: часть \"%1%\" не ограничивает объём." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Причина: часть \"%1%\" имеет самопересечение." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Причина: \"%1%\" и другая часть не пересекаются." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6194,6 +6616,11 @@ msgstr "Регион входа" msgid "Stealth Mode" msgstr "Режим конфиденциальности (отключение телеметрии Bambulab)" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "Включить сетевой плагин" @@ -6211,6 +6638,25 @@ msgstr "" "Единицы \n" "измерения" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"В OSX по умолчанию всегда работает только один экземпляр приложения. Однако " +"из командной строки можно запускать несколько экземпляров одного и того же " +"приложения. В таком случае эти настройки разрешат работу только одного " +"экземпляра." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Домашняя страница" @@ -6222,6 +6668,18 @@ msgstr "" msgid "Set the page opened on startup." msgstr "Задание страницы, открываемой при запуске приложения." +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Приближать к положению курсор" @@ -6240,6 +6698,12 @@ msgstr "" "Если включено, используется свободное вращение камеры. Если выключено, " "используется вращение камера с ограничениями." +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Показывать заставку при запуске программы" @@ -6262,6 +6726,31 @@ msgstr "" "Если включено, выполняется автоматический перерасчет объёма очистки при " "каждом изменении цвета." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Объём очистки: автопересчёт при каждой смене прутка." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" +"Если включено, выполняется автоматический перерасчёт объёма очистки при " +"каждой смене прутка." + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "Сеть" @@ -6307,6 +6796,42 @@ msgstr "" "Если включено, назначает OrcaSlicer в качестве приложения по умолчанию для " "открытия .step файлов." +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Максимальное количество недавних проектов" @@ -6479,12 +7004,21 @@ msgstr "Выбор/удаление принтеров (системные пр msgid "Create printer" msgstr "Создать принтер" -msgid "Incompatible" -msgstr "Несовместимы" - msgid "The selected preset is null!" msgstr "Выбранный профиль пуст!" +msgid "End" +msgstr "Последний" + +msgid "Customize" +msgstr "Настроить" + +msgid "Other layer filament sequence" +msgstr "Последовательность прутков на остальных слоях" + +msgid "Please input layer value (>= 2)." +msgstr "Пожалуйста, введите значение слоя (>= 2)." + msgid "Plate name" msgstr "Имя печатной пластины" @@ -6494,8 +7028,14 @@ msgstr "Аналогично глобальной последовательно msgid "Print sequence" msgstr "Последовательность печати моделей" -msgid "Customize" -msgstr "Настроить" +msgid "Same as Global" +msgstr "Аналогично глобальной настройке" + +msgid "Disable" +msgstr "Отключить" + +msgid "Spiral vase" +msgstr "Спиральная ваза" msgid "First layer filament sequence" msgstr "Последовательность прутков на первом слое" @@ -6562,15 +7102,6 @@ msgstr "Пользовательский профиль" msgid "Preset Inside Project" msgstr "Внутрипроектный профиль" -msgid "Name is invalid;" -msgstr "Некорректное имя;" - -msgid "illegal characters:" -msgstr "недопустимые символы:" - -msgid "illegal suffix:" -msgstr "недопустимый суффикс:" - msgid "Name is unavailable." msgstr "Имя недоступно." @@ -6589,15 +7120,6 @@ 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 "Имя не должно совпадать с именем предустановленного профиля." @@ -6655,9 +7177,6 @@ msgstr "Не удаётся найти свои принтеры?" msgid "Log out successful." msgstr "Выход выполнен успешно." -msgid "Offline" -msgstr "Не в сети" - msgid "Busy" msgstr "Занят" @@ -6682,14 +7201,6 @@ msgstr "Текстурированная PEI пластина Bambu" msgid "Send print job to" msgstr "Отправка задания на печать" -msgid "Refresh" -msgstr "Обновить" - -msgid "Bed Leveling" -msgstr "" -"Выравнивание\n" -"стола" - msgid "Flow Dynamics Calibration" msgstr "" "Калибровка\n" @@ -6704,10 +7215,6 @@ msgstr "отправка завершена" msgid "Error code" msgstr "Код ошибки" -msgid "Printer local connection failed, please try again." -msgstr "" -"Не удалось установить локальное соединение с принтером, попробуйте ещё раз." - msgid "No login account, only printers in LAN mode are displayed" msgstr "" "Без входа в учётную запись, отображаются только \n" @@ -6791,8 +7298,13 @@ 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 "Выбранный принтер несовместим с выбранными профилями принтера." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"Выбранный принтер (%s) несовместим с профилем принтера (%s), выбранным в " +"слайсере." msgid "An SD card needs to be inserted to record timelapse." msgstr "Для записи таймлапсов необходимо вставить SD-карту." @@ -6851,44 +7363,40 @@ msgid "nozzle in preset: %s %s" msgstr "сопло в профиле: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "сопло сохранённое: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "сопло сохранённое: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"Диаметр сопла в профиле не соответствует сохранённому диаметру сопла. Вы " -"недавно сменили сопло?" +"Диаметр сопла в нарезанном файле не соответствует сохранённому. Если вы " +"недавно меняли сопло, перейдите в раздел Принтер > Части принтера, чтобы " +"изменить настройки." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*Печать %s материалом %s может привести к повреждению сопла." +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"Печать высокотемпературным материалом (%s) с %s может привести к повреждению " +"сопла" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Пожалуйста, устраните вышеуказанную ошибку, иначе печать не может " +"продолжиться." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "Нажмите кнопку подтверждения, если всё ещё хотите продолжить печать." -msgid "Hardened Steel" -msgstr "Закаленная сталь" - -msgid "Stainless Steel" -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." @@ -6902,12 +7410,18 @@ msgstr "Автокалибровка потока с помощью микрол msgid "Modifying the device name" msgstr "Изменение имени принтера" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Отправить на SD-карту принтера" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Во время обновления невозможно отправить задание на печать" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "Выбранный принтер несовместим с выбранными профилями принтера." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Перед отправкой на SD-карту, сначала вставьте её в принтер." @@ -6950,6 +7464,26 @@ msgstr "Таймаут получения отчета о входе" msgid "Unknown Failure" msgstr "Неизвестная ошибка" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Войти в принтер" @@ -6973,8 +7507,8 @@ msgid "" "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" "Перед использованием устройства Bambu Lab ознакомьтесь с правилами и " -"условиями. Нажимая на кнопку \"Согласие на использование устройства Bambu " -"Lab\", вы соглашаетесь соблюдать Политику конфиденциальности и Условия " +"условиями. Нажимая на кнопку \"Согласие на использование устройства Bambu Lab" +"\", вы соглашаетесь соблюдать Политику конфиденциальности и Условия " "использования (далее - \"Условия\"). Если вы не соблюдаете или не согласны с " "Политикой конфиденциальности Bambu Lab, пожалуйста, не пользуйтесь " "оборудованием и услугами Bambu Lab." @@ -7152,11 +7686,34 @@ msgstr "Подстроиться" msgid "Ignore" msgstr "Игнорировать" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Экспериментальная функция. Втягивание и обрезка пластиковой нити на большем " +"расстоянии во время её замены для минимизации очистки. Хотя это значительно " +"сокращает величину очистки, это может повысить риск засорения сопла или " +"вызвать другие проблемы при печати." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Экспериментальная функция. Втягивание и обрезка пластиковой нити на большем " +"расстоянии во время её замены для минимизации очистки. Хотя это значительно " +"сокращает величину очистки, это может повысить риск засорения сопла или " +"вызвать другие проблемы при печати. Пожалуйста, используйте для принтера " +"последнюю версию прошивки." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "При записи таймлапса без видимости головы рекомендуется добавить «Черновая " "башня таймлапса». \n" @@ -7234,6 +7791,9 @@ msgstr "Пруток для поддержки" msgid "Tree supports" msgstr "Древовидная поддержка" +msgid "Skirt" +msgstr "Юбка" + msgid "Prime tower" msgstr "Черновая башня" @@ -7425,6 +7985,14 @@ msgstr "" msgid "Printable space" msgstr "Область печати" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "Указано недопустимое значение параметра %1%: %2%" + +msgid "G-code flavor is switched" +msgstr "Тип G-кода переключён" + msgid "Cooling Fan" msgstr "Вентилятор обдува модели" @@ -7533,7 +8101,8 @@ msgstr "" msgid "Presets inherited by other presets can not be deleted!" msgstr "Профили на которых основаны другие профили не могут быть удалены!" -# ???The following preset inherits this preset. - Нижеуказанный профиль наследуется от текущего профиля +# ???The following preset inherits this preset. - Нижеуказанный профиль +# наследуется от текущего профиля msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." msgstr[0] "Профиль указанный ниже, наследуется от текущего профиля." @@ -7659,21 +8228,30 @@ msgstr "" "несохранённые изменения:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "" -"Вы изменили некоторые параметры профиля \"%1%\". \n" -"Хотите сохранить эти изменения (новые значения)?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Вы изменили некоторые параметры профиля \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"Вы можете сохранить или сбросить изменённые вами значения профиля." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "Ранее вы изменили свои настройки." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Вы изменили некоторые параметры профиля.\n" -"Хотите сохранить эти изменения (новые значения)?" msgid "Extruders count" msgstr "Количество экструдеров" @@ -7708,7 +8286,7 @@ msgid "Transfer values from left to right" msgstr "Перенос значений слева направо" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Если включено, это диалоговое окно можно использовать для переноса выбранных " @@ -7791,6 +8369,56 @@ msgstr "Обновления отсутствуют." msgid "The configuration is up to date." msgstr "Текущая конфигурация не требует обновления." +msgid "Obj file Import color" +msgstr "" + +msgid "Specify number of colors:" +msgstr "" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "" + +msgid "Recommended " +msgstr "" + +msgid "Current filament colors:" +msgstr "" + +msgid "Quick set:" +msgstr "" + +msgid "Color match" +msgstr "" + +msgid "Approximate color matching." +msgstr "" + +msgid "Append" +msgstr "" + +msgid "Add consumable extruder after existing extruders." +msgstr "" + +msgid "Reset mapped extruders." +msgstr "" + +msgid "Cluster colors" +msgstr "" + +msgid "Map Filament" +msgstr "" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" + msgid "Ramming customization" msgstr "Настройки рэмминга" @@ -7879,6 +8507,32 @@ msgstr "С" msgid "To" msgstr "На" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "Сетевой плагин Bambu не обнаружен." @@ -8153,6 +8807,12 @@ msgstr "Перемещение ползунка быстрее в 5 раз" msgid "Shift+Mouse wheel" msgstr "Shift + Колесо мыши" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Информация о версии" @@ -8181,6 +8841,42 @@ msgstr "Пропустите эту версию" msgid "Done" msgstr "Готово" +msgid "resume" +msgstr "Продолжить" + +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Загрузить" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Подтвердить и обновить сопло" @@ -8242,12 +8938,6 @@ msgstr "Версия:" msgid "Update firmware" msgstr "Обновить прошивку" -msgid "Printing" -msgstr "Печать" - -msgid "Idle" -msgstr "Простой" - msgid "Beta version" msgstr "Бета-версия" @@ -8282,7 +8972,7 @@ 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." +"update next time starting Orca." msgstr "" "Ошибка в версии прошивки. Перед печатью её необходимо исправить и обновить. " "Хотите обновить сейчас? Вы можете сделать это позже с принтера или при " @@ -8424,9 +9114,6 @@ msgstr "Внутренний мост" msgid "Gap infill" msgstr "Заполнение пробелов" -msgid "Skirt" -msgstr "Юбка" - msgid "Support interface" msgstr "Связующий слой" @@ -8802,7 +9489,7 @@ msgid "" "You can adjust the machine_max_acceleration_extruding value in your " "printer's configuration to get higher speeds." msgstr "" -"Значение максимального ускорения подачи у экструдера " +"Значение максимального ускорения при печати " "(machine_max_acceleration_extruding) превышает значение заданное в " "настройках принтера.\n" "Программа автоматически ограничит это ускорение, чтобы оно не превышало " @@ -9099,6 +9786,15 @@ msgstr "Инженерная пластина" msgid "First layer print sequence" msgstr "Последовательность печати первого слоя" +msgid "Other layers print sequence" +msgstr "Последовательность печати других слоёв" + +msgid "The number of other layers print sequence" +msgstr "Количество слоёв при последовательности печати остальных слоёв" + +msgid "Other layers filament sequence" +msgstr "Последовательность прутков на остальных слоях" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "" "Этот G-код вставляется при каждой смене слоя, непосредственно перед " @@ -9192,6 +9888,7 @@ msgstr "" msgid "Cooling overhang threshold" msgstr "Порог включения обдува на нависаниях" +#, fuzzy, c-format msgid "" "Force cooling fan to be specific speed when overhang degree of printed part " "exceeds this value. Expressed as percentage which indicides how much width " @@ -9555,7 +10252,8 @@ msgstr "По очереди" msgid "Intra-layer order" msgstr "Порядок печати слоёв" -# ??? Указания порядка печати слоёв внутри каждого слоя, Последовательность печати слоёв внутри каждого слоя +# ??? Указания порядка печати слоёв внутри каждого слоя, Последовательность +# печати слоёв внутри каждого слоя msgid "Print order within a single layer" msgstr "Последовательность печати слоёв в пределах одного слоя." @@ -9603,11 +10301,12 @@ msgstr "" "Профиль процесса по умолчанию при переключении на этот профиль принтера." msgid "Activate air filtration" -msgstr "Вкл. фильтрацию воздуха" +msgstr "Вкл. вытяжной вентилятор" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" -"Активировать для лучшей фильтрации воздуха. G-код команда: M106 P3 S(0-255)" +"Включение вытяжного вентилятора для лучшего охлаждения области внутри " +"принтера. G-код команда: M106 P3 S(0-255)" msgid "Fan speed" msgstr "Скорость вентилятора" @@ -9945,21 +10644,12 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Последовательность печати периметров/заполнения. Когда отключено, сначала " -"печатаются периметры, что в большинстве случаев работает лучше всего.\n" -"\n" -"Печать периметров первыми может помочь при экстремальных нависаниях, " -"поскольку периметры должны прилегать к соседнему заполнению. Однако в этом " -"случае последующее заполнение будет слегка выдавливать напечатанные " -"периметры в местах примыкания к ним, что приводит к ухудшению качества " -"внешней поверхности. Кроме того, это может приводить к тому, что заполнение " -"будет просвечиваться через внешнюю поверхность детали." msgid "Wall loop direction" msgstr "Направление петель периметров" @@ -10017,6 +10707,12 @@ msgstr "" "Безопасное расстояние вокруг экструдера. Используется для предотвращения " "столкновений при печати отдельно стоящих моделей." +msgid "Nozzle height" +msgstr "Высота сопла" + +msgid "The height of nozzle tip." +msgstr "Высота кончика сопла." + msgid "Bed mesh min" msgstr "Мин. сетка стола" @@ -10145,6 +10841,22 @@ msgstr "" "и будет работать на минимальной скорости, чтобы сократить частоту его " "запуска и остановки." +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Время слоя" @@ -10430,8 +11142,8 @@ msgstr "Производитель пластиковой нити (только msgid "(Undefined)" msgstr "(Не указано)" -msgid "Infill direction" -msgstr "Угол печати заполнения" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10440,6 +11152,20 @@ msgstr "" "Базовый угол для ориентации шаблона заполнения, который определяет начало " "или основное направление линий." +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Плотность заполнения" @@ -10487,6 +11213,9 @@ msgstr "Динам. куб. поддержка" msgid "Lightning" msgstr "Молния" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Длина привязок разреженного заполнения" @@ -10613,7 +11342,9 @@ msgstr "" "Параметр предназначен для ограничения влияния экстремальных переходов от " "ускорения к замедлению, типичных для коротких зигзагообразных перемещений." -# ??? Ускорение к замедлению, Ускорение торможения, Скорость торможения, Скорость торможения перед поворотом, Соотношение ускорения к замедлению, Скорость движения при переходе от ускорения к замедлению и наоборот +# ??? Ускорение к замедлению, Ускорение торможения, Скорость торможения, +# Скорость торможения перед поворотом, Соотношение ускорения к замедлению, +# Скорость движения при переходе от ускорения к замедлению и наоборот msgid "accel_to_decel" msgstr "Ограничение ускорение зигзагов" @@ -10697,17 +11428,20 @@ msgstr "Полная скорость вентилятора на слое" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Скорость вентилятора будет нарастать линейно от нуля на слое " -"\"close_fan_the_first_x_layers\" до максимума на слое " -"\"full_fan_speed_layer\". Значение \"full_fan_speed_layer\" будет " -"игнорироваться, если оно меньше значения \"close_fan_the_first_x_layers\", в " -"этом случае вентилятор будет работать на максимально допустимой скорости на " -"слое \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" до максимума на слое \"full_fan_speed_layer" +"\". Значение \"full_fan_speed_layer\" будет игнорироваться, если оно меньше " +"значения \"close_fan_the_first_x_layers\", в этом случае вентилятор будет " +"работать на максимально допустимой скорости на слое " +"\"close_fan_the_first_x_layers\" + 1." + +msgid "layer" +msgstr "" msgid "Support interface fan speed" msgstr "Скорость вентилятора на связующем слое" @@ -10782,16 +11516,31 @@ msgstr "" "Скорость заполнения пробелов. Пробелы обычно имеют неравномерную ширину " "линии и должен печататься медленнее." +msgid "Precise Z height" +msgstr "Точная высота по Z" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Включите этот параметр, чтобы получить точную высоту модели по оси Z после " +"нарезки. Точная высота модели будет получена путем точной настройки высоты " +"последних нескольких слоёв." + msgid "Arc fitting" msgstr "Поддержка движения по дуге окружности" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Включите, если хотите использовать в G-коде команды перемещения по дуге " -"окружности G2/G3. Значение допуска траектории такое же как разрешение G-кода " -"выше." msgid "Add line number" msgstr "Добавить номер строки" @@ -10942,15 +11691,15 @@ msgstr "" "G-код команда: M141 S(0-255)" msgid "Support air filtration" -msgstr "Фильтрация выдуваемого воздуха" +msgstr "Вытяжной вентилятор" msgid "" "Enable this if printer support air filtration\n" "G-code command: M106 P3 S(0-255)" msgstr "" -"Если принтер поддерживает фильтрацию выдуваемого воздуха, включите эту " -"опцию. \n" -"G-код команда: M106 P3 S(0-255)" +"Если в принтере имеется вытяжной вентилятор и вам требуется дополнительное " +"охлаждение области внутри принтера, включите эту опцию. G-код команда: M106 " +"P3 S(0-255)" msgid "G-code flavor" msgstr "Тип G-кода" @@ -11025,12 +11774,25 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Перекрытие линий заполнения с линиями периметра" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"Параметр указывает на сколько процентов заполнение будет перекрываться с " -"периметром для лучшего соединения друг с другом." msgid "Speed of internal sparse infill" msgstr "Скорость заполнения" @@ -11720,6 +12482,30 @@ msgstr "" "Некоторое количество материала в экструдере откатывается назад, чтобы " "избежать его течи при длительном перемещении. 0 - отключение отката." +msgid "Long retraction when cut(experimental)" +msgstr "Длинное втягивания перед отрезанием прутка" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Экспериментальная функция. Втягивание и обрезка пластиковой нити на большем " +"расстоянии во время её замены для минимизации очистки. Хотя это значительно " +"уменьшает величину очистки, это может повысить риск засорения сопла или " +"вызвать другие проблемы при печати." + +msgid "Retraction distance when cut" +msgstr "Длина втягивания перед отрезанием прутка" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Экспериментальная функция. Длина втягивания перед отрезанием пластиковой " +"нити при её смене." + msgid "Z hop when retract" msgstr "Подъём оси Z при откате" @@ -11921,8 +12707,10 @@ msgstr "" msgid "Conditional scarf joint" msgstr "Условие для клиновидного шва" -# ??? Будет использоваться клиновидный шов, когда на стене нет достаточно острого угла для эффективного скрытия шва. -# Использовать клиновидный шов только на гладких периметрах, где традиционные швы не могут быть эффективно скрыты. +# ??? Будет использоваться клиновидный шов, когда на стене нет достаточно +# острого угла для эффективного скрытия шва. +# Использовать клиновидный шов только на гладких периметрах, где традиционные +# швы не могут быть эффективно скрыты. msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." @@ -12102,6 +12890,29 @@ msgstr "Слоёв юбки" msgid "How many layers of skirt. Usually only one layer" msgstr "Количество слоёв юбки. Обычно только один слой." +msgid "Draft shield" +msgstr "Защитный кожух" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "Ограничено" + +msgid "Enabled" +msgstr "Включено" + msgid "Skirt loops" msgstr "Юбок вокруг модели" @@ -12114,6 +12925,17 @@ msgstr "Скорость печати юбки" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "Скорость печати юбки (мм/с). 0 - скорость экструзии слоя по умолчанию." +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -12144,9 +12966,6 @@ 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 " @@ -12912,6 +13731,31 @@ msgstr "Расстояние между линиями очистки черно msgid "Spacing of purge lines on the wipe tower." msgstr "Расстояние между линиями очистки на черновой башне." +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "Экструдер черновой башни" @@ -13686,6 +14530,9 @@ msgstr "Отменено" msgid "load_obj: failed to parse" msgstr "load_obj: ошибка обработки" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Файл содержит многоугольники с более чем 4 вершинами." @@ -13764,12 +14611,6 @@ 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 символов." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13818,6 +14659,14 @@ msgstr "Пожалуйста, выберите пруток для калибр msgid "The input value size must be 3." msgstr "Размер входного значения должен быть равен 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Подключение к принтеру..." @@ -13827,6 +14676,21 @@ msgstr "Результат неудачного теста был удалён." msgid "Flow Dynamics Calibration result has been saved to the printer" 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 override the historical result?" +msgstr "" +"Результат калибровки с таким именем уже с существует: %s. Вы уверены, что " +"хотите перезаписать прошлый результат?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Внутренняя ошибка" @@ -13875,34 +14739,15 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Подробную информацию про калибровку динамики потока можно найти на нашем " -"вики-сайте.\n" -"\n" -"При обычных обстоятельствах калибровка не требуется. \n" -"Если при запуске печати одним цветом/материалом в меню запуска печати " -"отмечена опция «Калибровка динамики потока», то калибровка пластиковой нити " -"будет производится старым способом. \n" -"При запуске печати несколькими цветами/материалами, принтер будет " -"использовать параметр компенсации по умолчанию для материала при каждой его " -"смене, что в большинстве случаев позволяет получить хороший результат.\n" -"\n" -"Обратите внимание, что есть несколько случаев, когда результат калибровки " -"будет недостоверным. Это использование для калибровки текстурированной " -"печатной пластины и когда у печатной пластины плохая адгезия с материалом. " -"Более подробную информацию можно найти на нашем вики-сайте.\n" -"\n" -"По нашим тестам, результаты калибровки имеют погрешность примерно 10%, что " -"может приводить к разным результатам при каждой калибровке. Мы продолжаем " -"выяснять причину, чтобы улучшить ситуацию в новых обновлениях." msgid "When to use Flow Rate Calibration" msgstr "В каких случаях необходима калибровка скорости потока" @@ -14030,28 +14875,24 @@ msgstr "" msgid "Failed" msgstr "Неудачно" +msgid "Please enter the name you want to save to printer." +msgstr "Введите имя, который хотите сохранить на принтере." + +msgid "The name cannot exceed 40 characters." +msgstr "Максимальная длина имени 40 символов." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override 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 "Please find the cornor with perfect degree of extrusion" -msgstr "Пожалуйста, найдите угол с идеальной степенью экструзии" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Пожалуйста, найдите угол с идеальной экструзией" msgid "Input Value" msgstr "Входное значение" @@ -14128,12 +14969,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Параметры печати" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Типа печатной пластины" @@ -14181,12 +15016,6 @@ msgstr "Конечный коэф. K" msgid "Step value" msgstr "Шаг" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Диаметр сопла был синхронизирован с настройками принтера" @@ -14199,6 +15028,9 @@ msgstr "К объёмной скорости" msgid "Flow Dynamics Calibration Result" msgstr "Результаты калибровки динамики потока" +msgid "New" +msgstr "Новая" + msgid "No History Result" msgstr "Журнал результатов пуст" @@ -14211,9 +15043,22 @@ msgstr "Обновление записей истории калибровки msgid "Action" msgstr "Действие" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Редактировать калибровку динамики потока" +msgid "New Flow Dynamic Calibration" +msgstr "Новая калибровка динамика потока" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "Выберите пластиковую нить." + msgid "Network lookup" msgstr "Поиск по сети" @@ -14302,6 +15147,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14398,6 +15246,9 @@ msgstr "В качестве разделителя каталогов испол msgid "Upload to storage" msgstr "Загрузить в хранилище" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "Имя загружаемого файла не заканчивается на \"%s\". Хотите продолжить?" @@ -14604,6 +15455,16 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "Выберите хотя бы один принтер или профиль." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Пластиковая нить с таким именем %s уже существует. \n" +"Если продолжить создание, то созданный профиль будет отображаться с полным " +"именем. Хотите продолжить?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" "При создании некоторых имеющихся профилей произошла ошибка, а именно:\n" @@ -14616,8 +15477,8 @@ msgstr "" "Хотите перезаписать его?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Мы переименуем профиль в \"Производитель Тип Серия @выбранный принтер\".\n" @@ -14665,12 +15526,6 @@ msgstr "Прямоугольник" msgid "Printable Space" msgstr "Область печати" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "Модель стола" @@ -14822,21 +15677,27 @@ msgstr "Профиль прутка создан" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "При необходимости перейдите в настройку прутка для редактирования настроек " "профиля.\n" -"Пожалуйста, обратите внимание, что температура сопла, температура " -"нагреваемого стола и максимальная объёмная скорость существенно влияют на " -"качество печати. Пожалуйста, тщательнее подбирайте настройки." +"Обратите внимание, что температура сопла, температура нагреваемого стола и " +"максимальная объёмная скорость существенно влияют на качество печати. " +"Пожалуйста, тщательнее подбирайте настройки." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" msgstr "Настройка принтера" -msgid "Export Configs" -msgstr "Экспорт конфигураций" - msgid "Printer config bundle(.orca_printer)" msgstr "Printer config bundle(.orca_printer) - Пакет конфигурации принтеров" @@ -14935,6 +15796,11 @@ msgstr "Пожалуйста, выберите хотя бы один принт msgid "Please select a type you want to export" msgstr "Пожалуйста, выберите то, что вы хотите экспортировать" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"Не удалось создать временную папку, пожалуйста, попробуйте экспортировать " +"конфигурации ещё раз." + msgid "Edit Filament" msgstr "Изменение прутка" @@ -15011,6 +15877,21 @@ msgstr "Свернуть" msgid "Daily Tips" msgstr "Ежедневные советы " +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "сопло сохранённое: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"Диаметр сопла в профиле не соответствует сохранённому диаметру сопла. Вы " +"недавно сменили сопло?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*Печать %s материалом %s может привести к повреждению сопла." + msgid "Need select printer" msgstr "Нужно выбрать принтер" @@ -15043,6 +15924,12 @@ msgstr "Вы уверены, что хотите выйти из системы? msgid "Refresh Printers" msgstr "Обновить принтеры" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -15209,6 +16096,265 @@ msgstr "" "Текст сообщения: \"%1%\"\n" "Ошибка: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Стандартная высота слоя для сопла 0.2 мм. Маленькая высота слоя обеспечивает " +"практически незаметные слои и высокое качество печати. Подходит для " +"большинства обычных сценариев печати." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет более низкие " +"скорости и ускорения, а также задан гироидный шаблон заполнения. Это " +"обеспечивает гораздо более высокое качество печати, но приводит к " +"увеличивает время печати." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет немного большую " +"высоту слоя, что обеспечивает практически незаметные слои и немного " +"сокращает время печати." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет наибольшую " +"высоту слоя, слои становятся немного более заметными, но при этом " +"сокращается время печати." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет меньшую высоту " +"слоя, что обеспечивает практически незаметные слои и более высокое качество " +"печати, но при этом увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет меньшую высоту " +"слоя, более низкие скорости и ускорения, а также задан гироидный шаблон " +"заполнения. Это обеспечивает практически невидимые слои и более высокое " +"качество печати, но при этом значительно увеличивается время печати." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет наименьшую " +"высоту слоя, что обеспечивает незаметные слои и гораздо более высокое " +"качество печати, но при этом увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.2 мм, имеет наименьшую " +"высоту слоя, более низкие скорости и ускорения, а также задан гироидный " +"шаблон заполнения. Это обеспечивает незаметные слои и наилучшее качество " +"печати, но при этом значительно увеличивается время печати." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Стандартная высота слоя для сопла 0.4 мм, обеспечивающая нормальное качество " +"печати, подходящее для большинства обычных сценариев печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.4 мм, имеет больше " +"периметров и более высокую плотность заполнения. Это приводит к повышению " +"прочности напечатанного, но при этом увеличивается расход материала и время " +"печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.4 мм, имеет большую высоту " +"слоя. Как результат - более заметные слои и снижение качества печати, но при " +"этом немного сокращается время печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.4 мм, имеет большую высоту " +"слоя. Как результат - более заметные слои, снижение качества печати, но при " +"этом сокращается время печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.4 мм, имеет меньшую высоту " +"слоя. Как результат - менее заметные слои, более высокое качество печати, но " +"при этом увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.4 мм, имеет меньшую высоту " +"слоя, более низкие скорости и ускорения, а также задан гироидный шаблон " +"заполнения. Как результат - менее заметные слои и гораздо более высокое " +"качество печати, но при этом заметно увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.4 мм, имеет меньшую высоту " +"слоя. Как результат - почти незначительные слои и более высокое качество " +"печати, но при этом увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.4 мм, имеет наименьшую " +"высоту слоя, более низкие скорость и ускорение, а также задан гироидный " +"шаблон заполнения. Как результат - почти незаметные слои и гораздо более " +"высокое качество печати, но при этом значительно увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.4 мм, имеет наименьшую " +"высоту слоя. Как результат - почти незначительные слои, но при этом " +"увеличивается время печати." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Стандартная высота слоя для сопла 0.6 мм. Большая высота слоя, как результат " +"- видимые слои при нормальном качестве и времени печати." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.6 мм, имеет больше " +"периметров и более высокую плотность заполнения. Это приводит к повышению " +"прочности напечатанного, но увеличивает расход материала и время печати." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.6 мм, имеет большую высоту " +"слоя. Как результат - более заметные слои и снижение качества печати, но при " +"этом в некоторых случаях сокращается время печати." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.6 мм, имеет большую высоту " +"слоя. Как результат - более заметные слои и значительное снижение качества " +"печати, но при этом в некоторых случаях сокращается время печати." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.6 мм, имеет меньшую высоту " +"слоя. Как результат - менее заметные слои и незначительное повышению " +"качества печати, но при этом увеличивается время печати." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"По сравнению с профилем по умолчанию для соплом 0.6 мм, имеет меньшую высоту " +"слоя. Как результат - менее заметные слои и более высокое качество печати, " +"но при этом увеличивается время печати." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Стандартная высота слоя для сопла 0.8 мм. Очень большая высота слоя, как " +"результат - чётко видимые слои, низкое качество печати и обычное время " +"печати." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.8 мм, имеет немного большую " +"высоту слоя. Как результат - чётко видимые слои и гораздо более низкое " +"качество печати, но при этом в некоторых случаях сокращается время печати." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.8 мм, имеет гораздо большую " +"высоту слоя. Как результат - очень заметные слои и значительно более низкое " +"качество печати, но при этом в некоторых случаях значительно сокращается " +"время печати." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"По сравнению со стандартным профилем для сопла 0.8 мм, имеет немного меньшую " +"высоту слоя. Как результат - немного менее заметные слоя и немного более " +"высокое качество печати, но при этом в некоторых случаях увеличивается время " +"печати." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"По сравнению с профилем по умолчанию для сопла 0,8 мм, он имеет меньшую " +"высоту слоя, что приводит к меньшим, но все же заметным слоям и более " +"высокому качеству печати, и в некоторых случаях увеличению время печати." + msgid "Connected to Obico successfully!" msgstr "Соединение с Obico успешно установлено." @@ -15221,21 +16367,17 @@ msgstr "Соединение с SimplyPrint успешно установлен msgid "Could not connect to SimplyPrint" msgstr "Не удалось подключиться к SimplyPrint" +msgid "Internel error" +msgstr "" + +msgid "Unknown error" +msgstr "Неизвестная ошибка" + msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" "Учётная запись SimplyPrint не привязана. Перейдите в раздел подключения для " "настройки." -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." -msgstr "" -"Размер файла превышает лимит загрузки в 100 МБ. Пожалуйста, загрузите файл " -"через панель." - -msgid "Unknown error" -msgstr "Неизвестная ошибка" - msgid "Connection to Flashforge works correctly." msgstr "Соединение с Flashforge успешно установлено." @@ -15311,9 +16453,8 @@ msgid "" "Air filtration/Exhaust Fan\n" "Did you know that OrcaSlicer can support Air filtration/Exhaust Fan?" msgstr "" -"Фильтрация воздуха/Вытяжной вентилятор\n" -"Знаете ли вы, что OrcaSlicer поддерживает управление фильтрацией воздуха/" -"вытяжным вентилятором?" +"Вытяжной вентилятор\n" +"Знаете ли вы, что OrcaSlicer поддерживает управление вытяжным вентилятором?" #: resources/data/hints.ini: [hint:G-code window] msgid "" @@ -15647,95 +16788,318 @@ msgstr "" "вероятность?" #~ msgid "" -#~ "Alternate extra wall only works with ensure vertical shell thickness " -#~ "disabled. " +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." #~ msgstr "" -#~ "Альтернативный дополнительный периметр работает только при отключенной " -#~ "опции «Обеспечивать верт. толщину оболочки». " +#~ "Размер файла превышает лимит загрузки в 100 МБ. Пожалуйста, загрузите " +#~ "файл через панель." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Пожалуйста, введите допустимое значение (K в диапазоне 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "" +#~ "Пожалуйста, введите допустимое значение (K в диапазоне 0~0.3, N в " +#~ "диапазоне 0.6~2.0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "" +#~ "Не удалось установить локальное соединение с принтером, попробуйте ещё " +#~ "раз." #~ msgid "" -#~ "Change these settings automatically? \n" -#~ "Yes - Disable ensure vertical shell thickness and enable alternate extra " -#~ "wall\n" -#~ "No - Dont use alternate extra wall" +#~ "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 "" -#~ "Изменить эти настройки автоматически?\n" -#~ "Да - Отключить обеспечение вертикальной толщины оболочки и включить " -#~ "альтернативный дополнительный периметр\n" -#~ "Нет - Отказаться от использования альтернативного дополнительного " -#~ "периметра" +#~ "Подробную информацию про калибровку динамики потока можно найти на нашем " +#~ "вики-сайте.\n" +#~ "\n" +#~ "При обычных обстоятельствах калибровка не требуется. \n" +#~ "Если при запуске печати одним цветом/материалом в меню запуска печати " +#~ "отмечена опция «Калибровка динамики потока», то калибровка пластиковой " +#~ "нити будет производится старым способом. \n" +#~ "При запуске печати несколькими цветами/материалами, принтер будет " +#~ "использовать параметр компенсации по умолчанию для материала при каждой " +#~ "его смене, что в большинстве случаев позволяет получить хороший " +#~ "результат.\n" +#~ "\n" +#~ "Обратите внимание, что есть несколько случаев, когда результат калибровки " +#~ "будет недостоверным. Это использование для калибровки текстурированной " +#~ "печатной пластины и когда у печатной пластины плохая адгезия с " +#~ "материалом. Более подробную информацию можно найти на нашем вики-сайте.\n" +#~ "\n" +#~ "По нашим тестам, результаты калибровки имеют погрешность примерно 10%, " +#~ "что может приводить к разным результатам при каждой калибровке. Мы " +#~ "продолжаем выяснять причину, чтобы улучшить ситуацию в новых обновлениях." #~ msgid "" -#~ "The speed setting exceeds the printer's maximum speed " -#~ "(machine_max_speed_x/machine_max_speed_y).\n" -#~ "Orca will automatically cap the print speed to ensure it doesn't surpass " -#~ "the printer's capabilities.\n" -#~ "You can adjust the maximum speed setting in your printer's configuration " -#~ "to get higher speeds." +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" #~ msgstr "" -#~ "Значение максимальной скорости перемещения (machine_max_speed_x/" -#~ "machine_max_speed_y) превышает значение заданное в настройках принтера.\n" -#~ "Программа автоматически ограничит это ускорение, чтобы оно не превышало " -#~ "возможности принтера.\n" -#~ "Если хотите получить более высокие скорости, вы можете изменить это " -#~ "значение в настройках принтера (вкладка «Ограничение принтера»)." +#~ "Будет сохранен только один из результатов с таким же именем. Вы уверены, " +#~ "что хотите перезаписать другие результаты?" -#~ msgid "Bridge counterbole holes" -#~ 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 "Studio Version:" -#~ msgstr "Версия программы:" +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Пожалуйста, найдите угол с идеальной степенью экструзии" -#~ msgid "Test BambuLab" -#~ msgstr "Тест BambuLab" +#~ msgid "X" +#~ msgstr "X" -#~ msgid "Test BambuLab:" -#~ msgstr "Тест BambuLab:" +#~ msgid "Y" +#~ msgstr "Y" -#~ msgid "Test HTTP" -#~ msgstr "Тест HTTP" +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Последовательность печати периметров/заполнения. Когда отключено, сначала " +#~ "печатаются периметры, что в большинстве случаев работает лучше всего.\n" +#~ "\n" +#~ "Печать периметров первыми может помочь при экстремальных нависаниях, " +#~ "поскольку периметры должны прилегать к соседнему заполнению. Однако в " +#~ "этом случае последующее заполнение будет слегка выдавливать напечатанные " +#~ "периметры в местах примыкания к ним, что приводит к ухудшению качества " +#~ "внешней поверхности. Кроме того, это может приводить к тому, что " +#~ "заполнение будет просвечиваться через внешнюю поверхность детали." -#~ msgid "Test HTTP Service:" -#~ msgstr "Тест HTTP сервера:" +#~ msgid "V" +#~ msgstr "V" -#~ msgid "Test storage" -#~ msgstr "Тест накопителя" +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer основан на BambuStudio от компании Bambulab, которая взяла за " +#~ "основу PrusaSlicer от компании Prusa Research. PrusaSlicer же основан на " +#~ "Slic3r от Alessandro Ranellucci и разработках сообщества RepRap." -#~ msgid "Test Storage Upload:" -#~ msgstr "Тест накопителя (отправка):" +#~ msgid "Export &Configs" +#~ msgstr "Экспорт конфигурации" -#~ msgid "Test storage upgrade" -#~ msgstr "Тест накопителя (обновление)" +#~ msgid "Infill direction" +#~ msgstr "Угол печати заполнения" -#~ msgid "Test Storage Upgrade:" -#~ 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 "" +#~ "Включите, если хотите использовать в G-коде команды перемещения по дуге " +#~ "окружности G2/G3. Значение допуска траектории такое же как разрешение G-" +#~ "кода выше." -#~ msgid "Test storage download" -#~ 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 "Test Storage Download:" -#~ msgstr "Тест накопителя (загрузка):" +#~ msgid "Export Configs" +#~ msgstr "Экспорт конфигураций" -#~ msgid "Test plugin download" -#~ msgstr "Тест загрузки плагина" +#~ msgid "Unload Filament" +#~ msgstr "Выгрузить" -#~ msgid "Test Plugin Download:" -#~ msgstr "Тест загрузки плагина:" +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Выберите слот АСПП, затем нажмите кнопку «Загрузить» или «Выгрузить» для " +#~ "автоматической загрузки или выгрузки прутка." -#~ msgid "Test Storage Upload" -#~ msgstr "Тест накопителя (отправка)" +#~ msgid "MC" +#~ msgstr "Плата управления" + +#~ msgid "MainBoard" +#~ msgstr "Материнская плата" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "Здоровье принтера" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "active" +#~ msgstr "активный" + +#~ msgid "Jump to layer" +#~ 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 "" +#~ "Зелёный цвет означает, что влажность в системе АСПП нормальная, оранжевый " +#~ "- высокая, красный - слишком высокая. Чем ниже значение гигрометра, тем " +#~ "лучше." + +#~ msgid "Desiccant status" +#~ msgstr "Состояние влагопоглотителя" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "Состояние влагопоглотителя (силикагеля) ниже двух делений указывает на " +#~ "то, что он может уже не выполнять свою функцию. Пожалуйста, замените его. " +#~ "Чем больше делений на индикаторе, тем лучше." + +#~ msgid "" +#~ "Note: When the lid is open or the desiccant pack is changed, it can take " +#~ "hours or a night to absorb the moisture. Low temperatures also slow down " +#~ "the process. During this time, the indicator may not represent the " +#~ "chamber accurately." +#~ msgstr "" +#~ "Примечание: при открытой крышке или заменённом влагопоглотителе, может " +#~ "потребоваться несколько часов или ночь для поглощения влаги. Кроме того, " +#~ "процесс может замедлиться из-за низкой температуры окружающей среды. В " +#~ "течение этого времени значения индикатора могут быть неточными." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Примечание: если во время печати вставляется новая пластиковая нить, АСПП " +#~ "автоматически считает информацию о ней только по завершению печати." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Файл G-кода экспортирован в %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Ошибка инициализации (устройство не обнаружено)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Ошибка инициализации (камера не обнаружена)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "Принтер занят загрузкой. Дождитесь завершения загрузки." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "Ошибка инициализации (не поддерживается в текущей версии принтера)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Ошибка инициализации (Недоступно в режиме «Только LAN»)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "" +#~ "Ошибка инициализации (отсутствует IP-адрес принтера в локальной сети)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Остановлено [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Ошибка загрузки [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Файлы отсутствуют [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Ошибка загрузки [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Не удалось получить информацию о модели с принтера." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "Не удалось проанализировать информацию о модели." + +#~ msgid "Connection lost. Please retry." +#~ msgstr "Соединение потеряно. Пожалуйста, повторите попытку." + +#~ msgid "File not exists." +#~ msgstr "Файл не существует." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Невозможно выполнить булевы операции над сетками модели. Будут " +#~ "экспортированы только положительные части." + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Вы изменили некоторые параметры профиля \"%1%\". \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 " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "При необходимости перейдите в настройку прутка для редактирования " +#~ "настроек профиля.\n" +#~ "Пожалуйста, обратите внимание, что температура сопла, температура " +#~ "нагреваемого стола и максимальная объёмная скорость существенно влияют на " +#~ "качество печати. Пожалуйста, тщательнее подбирайте настройки." #~ msgid "AMS %s" #~ msgstr "АСПП №%s" - -#~ msgid "Left Preset Value" -#~ msgstr "Значение в левом профиле" - -#~ msgid "Right Preset Value" -#~ msgstr "Значение в правом профиле" - -#~ msgid "Undef category" -#~ msgstr "Неопределённая категория" - -#~ msgid "Undef group" -#~ msgstr "Неопределённая группа" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 656fca2e4e..840924971f 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -1,14 +1,15 @@ +# msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "Language: sv\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: Localazy (https://localazy.com)\n" msgid "Supports Painting" msgstr "Färgläggning av Support" @@ -150,7 +151,7 @@ msgid "Height range" msgstr "Höjd intervall" msgid "Alt + Shift + Enter" -msgstr "" +msgstr "Alt + Skift + Enter" msgid "Toggle Wireframe" msgstr "Växla Wireframe" @@ -165,10 +166,10 @@ msgid "Height Range" msgstr "Höjd intervall" msgid "Vertical" -msgstr "" +msgstr "Vertikal" msgid "Horizontal" -msgstr "" +msgstr "Horisontell" msgid "Remove painted color" msgstr "Ta bort färgläggning" @@ -252,6 +253,9 @@ msgstr "Återställ Rotation" msgid "World coordinates" msgstr "Världskoordinater" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -266,16 +270,16 @@ msgid "uniform scale" msgstr "enhetlig skala" msgid "Planar" -msgstr "" +msgstr "Platt" msgid "Dovetail" -msgstr "" +msgstr "Laxstjärt" msgid "Auto" msgstr "Auto" msgid "Manual" -msgstr "" +msgstr "Manuell" msgid "Plug" msgstr "Kontakt" @@ -284,7 +288,7 @@ msgid "Dowel" msgstr "Plugg" msgid "Snap" -msgstr "" +msgstr "Fäst" msgid "Prism" msgstr "" @@ -299,7 +303,7 @@ msgid "Hexagon" msgstr "Hexagon" msgid "Keep orientation" -msgstr "" +msgstr "Behåll orienteringen" msgid "Place on cut" msgstr "Placera på snitt" @@ -323,19 +327,19 @@ msgstr "Form" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Djup" msgid "Groove" -msgstr "" +msgstr "Spår" msgid "Width" msgstr "Bredd" msgid "Flap Angle" -msgstr "" +msgstr "Vinkel på klaff" msgid "Groove Angle" -msgstr "" +msgstr "Spårvinkel" msgid "Part" msgstr "Del" @@ -358,7 +362,7 @@ msgid "Move cut plane" msgstr "" msgid "Mode" -msgstr "" +msgstr "Läge" msgid "Change cut mode" msgstr "" @@ -406,7 +410,7 @@ msgid "Remove connectors" msgstr "Ta bort kontakterna" msgid "Bulge" -msgstr "" +msgstr "Utbuktning" msgid "Bulge proportion related to radius" msgstr "" @@ -515,7 +519,7 @@ msgid "Cut by Plane" msgstr "" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" -msgstr "" +msgstr "Icke-mångsidiga kanter orsakade av skärverktyg: vill du fixa det nu?" msgid "Repairing model object" msgstr "Reparerar modell objektet" @@ -613,13 +617,13 @@ msgid "Remove selection" msgstr "Ta bort val" msgid "Entering Seam painting" -msgstr "" +msgstr "Inmatning söm målning" msgid "Leaving Seam painting" -msgstr "" +msgstr "Lämnar söm målning" msgid "Paint-on seam editing" -msgstr "" +msgstr "Redigering av måla på sömmen" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -758,7 +762,7 @@ msgstr "" msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "Beskär" msgid "Click to change part type into negative volume." msgstr "" @@ -900,19 +904,19 @@ msgstr "" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "Vänster" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "Center" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "Höger" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "Topplager" msgctxt "Alignment" msgid "Middle" @@ -920,7 +924,7 @@ msgstr "" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "Bottenlager" msgid "Revert alignment." msgstr "" @@ -1232,43 +1236,43 @@ msgid "SVG file does NOT contain a single path to be embossed (%1%)." msgstr "" msgid "Vertex" -msgstr "" +msgstr "Vertex" msgid "Edge" -msgstr "" +msgstr "Edge" msgid "Plane" -msgstr "" +msgstr "Plane" msgid "Point on edge" -msgstr "" +msgstr "Point on edge" msgid "Point on circle" -msgstr "" +msgstr "Point on circle" msgid "Point on plane" -msgstr "" +msgstr "Point on plane" msgid "Center of edge" -msgstr "" +msgstr "Center of edge" msgid "Center of circle" -msgstr "" +msgstr "Center of circle" msgid "ShiftLeft mouse button" msgstr "" msgid "Select feature" -msgstr "" +msgstr "Select feature" msgid "Select point" -msgstr "" +msgstr "Select point" msgid "Delete" msgstr "Radera" msgid "Restart selection" -msgstr "" +msgstr "Restart selection" msgid "Esc" msgstr "Esc" @@ -1277,14 +1281,14 @@ msgid "Unselect" msgstr "" msgid "Measure" -msgstr "" +msgstr "Measure" msgid "Edit to scale" -msgstr "" +msgstr "Edit to scale" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "Skala" msgid "None" msgstr "Ingen" @@ -1296,22 +1300,22 @@ msgid "Length" msgstr "Längd" msgid "Selection" -msgstr "" +msgstr "Selection" msgid "Copy to clipboard" msgstr "Kopiera till urklipp" msgid "Perpendicular distance" -msgstr "" +msgstr "Perpendicular distance" msgid "Distance" -msgstr "" +msgstr "Distance" msgid "Direct distance" -msgstr "" +msgstr "Direct distance" msgid "Distance XYZ" -msgstr "" +msgstr "Distance XYZ" msgid "Ctrl+" msgstr "Ctrl +" @@ -1350,9 +1354,6 @@ msgid "" msgstr "" "Konfigurations fil “%1%” har laddats, men vissa värden känns inte igen." -msgid "V" -msgstr "V" - 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." @@ -1445,11 +1446,14 @@ msgid "Choose one file (3mf):" msgstr "Välj en fil (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" -msgstr "" +msgstr "Välj en eller flera filer (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" 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 ZIP file" +msgstr "" + msgid "Choose one file (gcode/3mf):" msgstr "" @@ -1487,9 +1491,11 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"Antalet användar inställningar som cachats i molnet har överskridit den övre " +"gränsen, nyskapade användar inställningar kan endast användas lokalt." msgid "Sync user presets" -msgstr "" +msgstr "Synkronisera användar inställningar" msgid "Loading user preset" msgstr "Laddar användarens förinställning" @@ -1518,6 +1524,11 @@ msgstr "Pågående uppladdningar" msgid "Select a G-code file:" msgstr "Välj en G-kod fil:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" + msgid "Import File" msgstr "Importera fil" @@ -1652,16 +1663,16 @@ msgid "Cone" msgstr "Kon" msgid "Disc" -msgstr "" +msgstr "Skiva" msgid "Torus" -msgstr "" +msgstr "Torus" msgid "Orca Cube" msgstr "" msgid "3DBenchy" -msgstr "" +msgstr "3DBenchy" msgid "Autodesk FDM Test" msgstr "" @@ -1715,10 +1726,10 @@ msgid "Fix model" msgstr "Fixa modell" msgid "Export as one STL" -msgstr "" +msgstr "Exportera som en STL" msgid "Export as STLs" -msgstr "" +msgstr "Exportera som STL" msgid "Reload from disk" msgstr "Ladda om från disk" @@ -1745,8 +1756,8 @@ msgstr "Standard" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "aktiv" +msgid "current" +msgstr "nuvarande" msgid "Scale to build volume" msgstr "Skala till bygg volymen" @@ -1791,10 +1802,10 @@ msgid "Assemble the selected objects to an object with single part" msgstr "Montera de valda objekten till ett objekt med en enda del" msgid "Mesh boolean" -msgstr "" +msgstr "Mesh boolean" msgid "Mesh boolean operations including union and subtraction" -msgstr "" +msgstr "Mesh boolean operationer inklusive union och subtraktion" msgid "Along X axis" msgstr "Längs med X Axis" @@ -1838,6 +1849,9 @@ msgstr "Lägg till Primitiv" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "Lägg till modeller" + msgid "Show Labels" msgstr "Visa Etiketter" @@ -1889,6 +1903,12 @@ msgstr "Arrangera" msgid "arrange current plate" msgstr "Arrangera plattan" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Auto Rotera" @@ -1922,9 +1942,6 @@ msgstr "Byta Filament" msgid "Set Filament for selected items" msgstr "Välj Filament för valda delar" -msgid "current" -msgstr "nuvarande" - msgid "Unlock" msgstr "Lås upp" @@ -1932,7 +1949,7 @@ msgid "Lock" msgstr "Lås" msgid "Edit Plate Name" -msgstr "" +msgstr "Redigera plattans namn" msgid "Name" msgstr "Namn" @@ -1992,7 +2009,7 @@ msgid "Error!" msgstr "Fel!" msgid "Failed to get the model data in the current file." -msgstr "" +msgstr "Det gick inte att hämta modelldata i den aktuella filen." msgid "Generic" msgstr "Allmän" @@ -2238,7 +2255,7 @@ msgid "Pause" msgstr "Paus" msgid "Template" -msgstr "" +msgstr "Mall" msgid "Custom" msgstr "Custom" @@ -2261,9 +2278,6 @@ msgstr "Ange anpassad G-kod som används på det aktuella lagret:" msgid "Jump to Layer" msgstr "Hoppa till lager" -msgid "Jump to layer" -msgstr "Hoppa till lager" - msgid "Please enter the layer number" msgstr "Ange lager numret." @@ -2292,7 +2306,7 @@ msgid "Change filament at the beginning of this layer." msgstr "Byt filament i början av detta lager." msgid "Delete Pause" -msgstr "" +msgstr "Ta bort paus" msgid "Delete Custom Template" msgstr "Radera anpassad mall" @@ -2310,7 +2324,7 @@ msgid "No printer" msgstr "Ingen skrivare" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "Uppkoppling till servern misslyckades" @@ -2333,7 +2347,7 @@ 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." +msgid "Please check the network connection of the printer and Orca." msgstr "Kontrollera nätverksanslutningen för skrivaren och Studio." msgid "Connecting..." @@ -2343,7 +2357,7 @@ msgid "?" msgstr " ?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "Tom" @@ -2352,15 +2366,15 @@ msgid "AMS" msgstr "AMS" msgid "Auto Refill" -msgstr "" +msgstr "Auto Refill" msgid "AMS not connected" msgstr "AMS ej ansluten" -msgid "Load Filament" -msgstr "Ladda Filament" +msgid "Load" +msgstr "Load" -msgid "Unload Filament" +msgid "Unload" msgstr "Mata ut" msgid "Ext Spool" @@ -2378,7 +2392,7 @@ msgstr "Försök igen" msgid "Calibrating AMS..." msgstr "Kalibrerar AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "Ett problem uppstod vid kalibrering. Tryck för att se åtgärd." msgid "Calibrate again" @@ -2388,7 +2402,7 @@ msgid "Cancel calibration" msgstr "Avbryt kalibrering" msgid "Idling..." -msgstr "" +msgstr "Tomgång..." msgid "Heat the nozzle" msgstr "Värm upp nozzle" @@ -2406,23 +2420,23 @@ msgid "Purge old filament" msgstr "Rensa gammalt filament" msgid "Feed Filament" -msgstr "" +msgstr "Mata filament" msgid "Confirm extruded" -msgstr "" +msgstr "Bekräfta extruderad" msgid "Check filament location" -msgstr "" +msgstr "Kontrollera filamentets placering" msgid "Grab new filament" msgstr "Ta ett nytt filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Välj ett AMS fack tryck sedan \"Ladda eller \"Mata ur\" knappen för att " -"automatiskt mata eller mata ut filament." +"Välj ett AMS fack och tryck sedan på knappen \"Ladda\" eller \"Mata ut\" för " +"att automatiskt ladda eller mata ut filament." msgid "Edit" msgstr "Redigera" @@ -2501,7 +2515,7 @@ msgid "Orienting canceled." msgstr "" msgid "Filling" -msgstr "" +msgstr "Fyllnad" msgid "Bed filling canceled." msgstr "Byggplattans fyllning avbruten." @@ -2587,7 +2601,7 @@ msgid "Sending print job through cloud service" msgstr "Skicka utskriftsjobb via molntjänst" msgid "Print task sending times out." -msgstr "" +msgstr "Timeout för sändning av utskriftsuppgift." msgid "Service Unavailable" msgstr "Tjänsten är inte tillgänglig" @@ -2605,7 +2619,7 @@ msgstr "" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the next page in %ss" -msgstr "" +msgstr "Skickat. Hoppar automatiskt till nästa sida in%s s" 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." @@ -2689,10 +2703,7 @@ msgstr "Orca Slicer ä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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2768,10 +2779,10 @@ 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 Flow Dynamics Calibration" -msgstr "" +msgstr "Faktorer för kalibrering av flödesdynamik" msgid "PA Profile" -msgstr "" +msgstr "PA profil" msgid "Factor K" msgstr "Faktor K" @@ -2788,10 +2799,12 @@ 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.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2898,37 +2911,19 @@ msgstr "Inaktivera AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Skriv ut med filament på en extern spole" -msgid "Cabin humidity" -msgstr "Inkapslingens fuktighet" +msgid "Current Cabin humidity" +msgstr "Current Cabin humidity" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Grönt betyder att AMS-fuktigheten är normal, orange betyder att " -"luftfuktigheten är hög, och rött betyder att luftfuktigheten är för hög. " -"(Hygrometer: ju lägre desto bättre.)" - -msgid "Desiccant status" -msgstr "Status för torkmedel" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"En torkmedelsstatus som är lägre än två stänger indikerar att torkmedlet kan " -"vara inaktivt. Byt torkmedel. (Ju högre desto bättre.)" - -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 "" -"Observera: När locket är öppet eller torkmedelspaketet byts ut kan det ta " -"timmar eller en natt att absorbera fukten. Låga temperaturer saktar också " -"ner processen. Under denna tid kan det hända att indikatorn inte " -"representerar kammaren korrekt." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases: when the lid is open or the " +"desiccant pack is changed. It takes a few hours to absorb the moisture, and " +"low temperatures also slow down the process." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2961,16 +2956,19 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" +"När det aktuella materialet tar slut, fortsätter printern att skriva ut " +"material i följande ordning." msgid "Group" msgstr "Grupp" msgid "The printer does not currently support auto refill." -msgstr "" +msgstr "Printern stöder för närvarande inte automatisk påfyllning." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" +"AMS filament backup is not enabled; please enable it in the AMS settings." msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -2978,6 +2976,16 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"If there are two identical filaments in an AMS, AMS filament backup will be " +"enabled. \n" +"(This currently supports automatic supply of consumables with the same " +"brand, material type, and color)" + +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" msgid "AMS Settings" msgstr "AMS Inställningar" @@ -2993,11 +3001,11 @@ msgstr "" "Lab-filament. Det tar ungefär 20 sekunder." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Observera: Om nytt filament sätts in under utskrift kommer AMS inte " -"automatiskt att läsa av någon information förrän utskriften är avslutad." +"Obs: Om ett nytt filament sätts in under utskriften kommer AMS inte att " +"automatiskt läsa av någon information förrän utskriften är klar." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3048,6 +3056,16 @@ msgstr "" "AMS fortsätter automatiskt till en annan spole med samma filament egenskaper " "när det aktuella filamentet tar slut." +msgid "Air Printing Detection" +msgstr "Air Printing Detection" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." + msgid "File" msgstr "Fil" @@ -3119,6 +3137,51 @@ msgstr "Reservations operand med flytande värde" msgid "Stack overflow" msgstr "Lagra överflöde" +msgid "Running post-processing scripts" +msgstr "Kör efterbearbetnings skript" + +msgid "Successfully executed post-processing script" +msgstr "Successfully executed post-processing script" + +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Okänt fel vid exportering av G-code." @@ -3132,13 +3195,6 @@ msgstr "" "Felmeddelande: %1%.\n" "Source file %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "Success! G-code exporterades till %1%" - -msgid "Running post-processing scripts" -msgstr "Kör efterbearbetnings skript" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Kopiering av den tillfälliga G-koden till utgången G-kod misslyckades." @@ -3148,6 +3204,225 @@ msgstr "" "Planerar uppladdning till `%1%`. Se fönster -> Kö för uppladdning av " "utskriftsvärd" +msgid "Device" +msgstr "Enhet" + +msgid "Task Sending" +msgstr "Task Sending" + +msgid "Task Sent" +msgstr "Task Sent" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "Offline" + +msgid "No task" +msgstr "No task" + +msgid "View" +msgstr "Vy" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "Device Name" + +msgid "Task Name" +msgstr "Task Name" + +msgid "Device Status" +msgstr "Device Status" + +msgid "Actions" +msgstr "Actions" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "Lägg till" + +msgid "Idle" +msgstr "Inaktiv" + +msgid "Printing" +msgstr "Utskrift pågår" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "Inkompatibel" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Förbered" + +msgid "Slicing" +msgstr "Bereder" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "Skickar" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "Återuppta" + +msgid "Stop" +msgstr "Stopp" + +msgid "Task Status" +msgstr "Task Status" + +msgid "Sent Time" +msgstr "Sent Time" + +msgid "There are no tasks to be sent!" +msgstr "There are no tasks to be sent!" + +msgid "No historical tasks!" +msgstr "No historical tasks!" + +msgid "Loading..." +msgstr "Laddar..." + +msgid "No AMS" +msgstr "No AMS" + +msgid "Send to Multi-device" +msgstr "Send to Multi-device" + +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 "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "Use External Spool" + +msgid "Use AMS" +msgstr "Use AMS" + +msgid "Select Printers" +msgstr "Select Printers" + +msgid "Ams Status" +msgstr "AMS Status" + +msgid "Printing Options" +msgstr "Printing Options" + +msgid "Bed Leveling" +msgstr "Justering av Byggplattan" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "Send Options" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"printers at the same time. (It depends on how many devices can undergo " +"heating at the same time.)" + +msgid "Wait" +msgstr "Wait" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"minute each batch. (It depends on how long it takes to complete heating.)" + +msgid "Send" +msgstr "Skicka" + +msgid "Name is invalid;" +msgstr "Namnet är ogiltligt;" + +msgid "illegal characters:" +msgstr "Ogiltliga tecken:" + +msgid "illegal suffix:" +msgstr "Ogiltlig ändelse:" + +msgid "The name is not allowed to be empty." +msgstr "Namn fältet får inte vara tomt." + +msgid "The name is not allowed to start with space character." +msgstr "Namnet får inte börja med mellanrum." + +msgid "The name is not allowed to end with space character." +msgstr "Namnet får inte avslutas med mellanrum." + +msgid "The name length exceeds the limit." +msgstr "Namnlängden överskrider gränsen." + msgid "Origin" msgstr "Ursprung" @@ -3218,6 +3493,23 @@ msgstr "Välj en STL fil att importera byggplattans model från:" msgid "Bed Shape" msgstr "Byggplattans Form" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Den rekommenderade lägsta temperaturen är lägre än 190 grader eller den " +"rekommenderade max temperaturen är högre än 300 grader.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" + +msgid "Please check.\n" +msgstr "Kontrollera.\n" + 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" @@ -3248,6 +3540,9 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"Current chamber temperature is higher than the material's safe temperature; " +"this may result in material softening and nozzle clogs.The maximum safe " +"temperature for the material is %d" msgid "" "Too small layer height.\n" @@ -3300,25 +3595,6 @@ msgstr "" "\n" "Värdet kommer att återställas till 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 "" -"Spiralläget fungerar endast när vägg varv är 1, support är inaktiverat, top " -"skalets lager är 0, gles ifyllnad är 0 och timelapse typen är traditionell." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" -"Ändra dessa inställningar automatiskt? \n" -"JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" -"NEJ -Avbryt Spiral läge denna gång" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3378,6 +3654,25 @@ msgid "" "Reset to 0." msgstr "" +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 "" +"Spiralläget fungerar endast när vägg varv är 1, support är inaktiverat, top " +"skalets lager är 0, gles ifyllnad är 0 och timelapse typen är traditionell." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr " Maskiner med I3-struktur kan dock inte generera timelapse videor." + +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 "" +"Ändra dessa inställningar automatiskt? \n" +"JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" +"NEJ -Avbryt Spiral läge denna gång" + msgid "Auto bed leveling" msgstr "Auto justera byggplattan" @@ -3442,58 +3737,46 @@ msgid "Paused due to heat bed temperature malfunction" msgstr "Pausad på grund av fel i byggplattans temperatur" msgid "Filament unloading" -msgstr "" +msgstr "Utmatar filament" msgid "Skip step pause" -msgstr "" +msgstr "Hoppa över steg paus" msgid "Filament loading" -msgstr "" +msgstr "Laddning av filament" msgid "Motor noise calibration" -msgstr "" +msgstr "Kalibrering av motorljud" msgid "Paused due to AMS lost" -msgstr "" +msgstr "Pausad på grund av att AMS förlorats" msgid "Paused due to low speed of the heat break fan" -msgstr "" +msgstr "Pausad på grund av låg hastighet på heat break fläkten" msgid "Paused due to chamber temperature control error" -msgstr "" +msgstr "Pausad på grund av fel i styrningen av kammar temperaturen" msgid "Cooling chamber" -msgstr "" +msgstr "Kyler kammare" msgid "Paused by the Gcode inserted by user" -msgstr "" +msgstr "Pausad av G-koden som infogats av användaren" msgid "Motor noise showoff" -msgstr "" +msgstr "Uppvisning av motorljud" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Filament på nozzel upptäckt paus" msgid "Cutter error pause" -msgstr "" +msgstr "Fel på skärare paus" msgid "First layer error pause" -msgstr "" +msgstr "Fel på första lagret paus" msgid "Nozzle clog pause" -msgstr "" - -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Moderkort" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "X Kamera" +msgstr "Stopp i nozzel paus" msgid "Unknown" msgstr "Okänd" @@ -3524,18 +3807,27 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃. In order to avoid extruder clogging, low temperature filament (PLA/PETG/" +"TPU) is not allowed to be loaded." msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"Low temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order " +"to avoid extruder clogging, it is not allowed to set the chamber temperature " +"above 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated, and the target chamber temperature will " +"automatically be set to 0℃." msgid "Failed to start printing job" msgstr "Det gick inte att starta utskriftsjobbet" @@ -3543,34 +3835,39 @@ msgstr "Det gick inte att starta utskriftsjobbet" msgid "" "This calibration does not support the currently selected nozzle diameter" msgstr "" +"Denna kalibrering stöder inte den för tillfället valda nozzle diametern" msgid "Current flowrate cali param is invalid" -msgstr "" +msgstr "Aktuell flödeshastighets kalibrerings parameter är ogiltig" msgid "Selected diameter and machine diameter do not match" -msgstr "" +msgstr "Vald diameter och maskinens diameter stämmer inte överens" msgid "Failed to generate cali gcode" -msgstr "" +msgstr "Misslyckades med att generera cali G kod" msgid "Calibration error" -msgstr "" +msgstr "Fel vid kalibrering" msgid "TPU is not supported by AMS." -msgstr "" +msgstr "TPU stöds inte av AMS." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -msgstr "" +msgstr "Bambu PET-CF/PA6-CF stöds inte av AMS." msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" +"Fuktig PVA blir flexibel och fastnar i AMS, var noga med att torka den väl " +"före användning." 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-trådar är hårda och spröda, så de kan lätt gå sönder eller fastna i en " +"AMS; använd dem med försiktighet." msgid "default" msgstr "standard" @@ -3640,9 +3937,6 @@ msgstr "Skrivarens inställningar" msgid "parameter name" msgstr "Parameter namn" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kan inte vara procent" @@ -3654,6 +3948,10 @@ msgstr "Värdet %s är utanför intervallet, fortsätta?" msgid "Parameter validation" msgstr "Parameter validering" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Value %s is out of range. The valid range is from %d to %d." + msgid "Value is out of range." msgstr "Värdet är utanför intervallet." @@ -3667,6 +3965,18 @@ msgstr "" "JA för %s%%, \n" "NEJ för %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" + +msgid "Input value is out of range" +msgstr "" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ogiltligt format. Förväntat vector format: \"%1%\"" @@ -3734,12 +4044,12 @@ msgstr "Visa" msgid "Flushed" msgstr "Rensad" +msgid "Tower" +msgstr "Tower" + msgid "Total" msgstr "Totalt" -msgid "Tower" -msgstr "" - msgid "Total Estimation" msgstr "Total Uppskattning" @@ -3747,7 +4057,7 @@ msgid "Total time" msgstr "Total tid" msgid "Total cost" -msgstr "" +msgstr "Total cost" msgid "up to" msgstr "upp till" @@ -3842,6 +4152,12 @@ msgstr "Beräknad tid" msgid "Normal mode" msgstr "Normalt läge" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "Förbered tid" @@ -3935,6 +4251,9 @@ msgstr "Arrangera val" msgid "Spacing" msgstr "Mellanrum" +msgid "0 means auto spacing." +msgstr "0 means auto spacing." + msgid "Auto rotate for arrangement" msgstr "Auto rotera för arrangemang" @@ -3945,10 +4264,7 @@ msgid "Avoid extrusion calibration region" msgstr "Undvik kalibrerings området" msgid "Align to Y axis" -msgstr "" - -msgid "Add" -msgstr "Lägg till" +msgstr "Justera mot Y-axeln" msgid "Add plate" msgstr "Lägg till byggplata" @@ -4014,7 +4330,7 @@ msgid "An object is layed over the boundary of plate." msgstr "Ett objekt är placerad över byggplattans begränsningar." msgid "A G-code path goes beyond the max print height." -msgstr "" +msgstr "En G-kod bana går utöver den maximala utskriftshöjden." msgid "A G-code path goes beyond the boundary of plate." msgstr "En G-kod väg passerar över byggplattans begränsningar." @@ -4041,10 +4357,10 @@ msgid "Bed leveling" msgstr "Justering av Byggplattan" msgid "Vibration compensation" -msgstr "" +msgstr "Vibrations kompensation" msgid "Motor noise cancellation" -msgstr "" +msgstr "Brusreducering av motorer" msgid "Calibration program" msgstr "Kalibrerings program" @@ -4071,7 +4387,7 @@ msgid "Calibrating" msgstr "Kalibrerar" msgid "No step selected" -msgstr "" +msgstr "Inget steg valt" msgid "Auto-record Monitoring" msgstr "Automatisk inspelning av övervakning" @@ -4079,6 +4395,9 @@ msgstr "Automatisk inspelning av övervakning" msgid "Go Live" msgstr "Sänd live" +msgid "Liveview Retry" +msgstr "Försök igen med Liveview" + msgid "Resolution" msgstr "Upplösning" @@ -4131,14 +4450,11 @@ msgstr "Stänger Begäran medans vissa inställningar ändrats." msgid "Logging" msgstr "Loggar" -msgid "Prepare" -msgstr "Förbered" - msgid "Preview" msgstr "Förhandsvisning" -msgid "Device" -msgstr "Enhet" +msgid "Multi-device" +msgstr "Multi-device" msgid "Project" msgstr "Projekt" @@ -4164,9 +4480,6 @@ msgstr "Bered allt" msgid "Export G-code file" msgstr "Exportera G-kod filen" -msgid "Send" -msgstr "Skicka" - msgid "Export plate sliced file" msgstr "Exportera byggplattans beredda fil" @@ -4287,6 +4600,12 @@ msgstr "Importera 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Ladda modell" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "Importera konfiguration" @@ -4297,10 +4616,10 @@ msgid "Import" msgstr "Importera" msgid "Export all objects as one STL" -msgstr "" +msgstr "Exportera alla objekt som en STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "Exportera alla objekt som STL" msgid "Export Generic 3MF" msgstr "Exportera generisk 3mf" @@ -4320,8 +4639,8 @@ msgstr "Exportera G-kod" msgid "Export current plate as G-code" msgstr "Exportera aktuell byggplatta som G-kod" -msgid "Export &Configs" -msgstr "Exportera konfiguration" +msgid "Export Preset Bundle" +msgstr "" msgid "Export current configuration to files" msgstr "Exportera aktuell konfiguration till filer" @@ -4422,56 +4741,53 @@ msgstr "Visa objektets överhäng i 3D-scen" msgid "Preferences" msgstr "Inställningar" -msgid "View" -msgstr "Vy" - msgid "Help" msgstr "Hjälp" msgid "Temperature Calibration" -msgstr "" +msgstr "Kalibrering av temperatur" msgid "Pass 1" -msgstr "" +msgstr "Pass 1" msgid "Flow rate test - Pass 1" -msgstr "" +msgstr "Test av flödeshastighet - Godkänt 1" msgid "Pass 2" -msgstr "" +msgstr "Pass 2" msgid "Flow rate test - Pass 2" -msgstr "" +msgstr "Test av flödeshastighet - Godkänt 2" msgid "Flow rate" -msgstr "" +msgstr "Flödeshastighet" msgid "Pressure advance" -msgstr "" +msgstr "Pressure advance" msgid "Retraction test" -msgstr "" +msgstr "Retraction test" msgid "Orca Tolerance Test" -msgstr "" +msgstr "Orca Tolerance Test" msgid "Max flowrate" -msgstr "" +msgstr "Max flödes hastighet" msgid "VFA" -msgstr "" +msgstr "VFA" msgid "More..." -msgstr "" +msgstr "Mer..." msgid "Tutorial" -msgstr "" +msgstr "Guide" msgid "Calibration help" -msgstr "" +msgstr "Hjälp med kalibrering" msgid "More calibrations" -msgstr "" +msgstr "Fler kalibreringar" msgid "&Open G-code" msgstr "&Öppna G-kod" @@ -4491,10 +4807,10 @@ msgstr "Exportera &Toolpaths som OBJ" msgid "Export toolpaths as OBJ" msgstr "Exportera toolpaths som OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Öppna &Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Öppna Studio" msgid "&Quit" @@ -4586,41 +4902,56 @@ msgstr "" msgid "Synchronization" msgstr "Synkronisering" -msgid "Initialize failed (No Device)!" -msgstr "Start misslyckad (Ingen Enhet)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "Enhetenen kan inte hantera fler konversationer. Försök igen senare." -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 "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Skrivaren är upptagen med att ladda ner; vänta tills nedladdningen är klar." +"Spelaren fungerar inte som den ska. Vänligen installera om system spelaren." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" +"Spelaren är inte laddad; klicka på \"play\" knappen för att försöka igen." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initieringen misslyckades (Ej tillgängligt i endast LAN-läge)!" +msgid "Please confirm if the printer is connected." +msgstr "Kontrollera om printern är ansluten." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initieringen misslyckades (skrivarens LAN-IP saknas)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"Printern är upptagen med att ladda ner. Vänta tills nedladdningen är klar." + +msgid "Printer camera is malfunctioning." +msgstr "Printerns kamera fungerar inte som den ska." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Ett problem har uppstått. Uppdatera printerns programvara och försök igen." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." + +msgid "Please enter the IP of printer to connect." +msgstr "Ange printerns IP för att ansluta." msgid "Initializing..." msgstr "Startar..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Initieringen misslyckades (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Anslutningen misslyckades. Kontrollera nätverket och försök igen" -msgid "Network unreachable" -msgstr "Nätverket kan inte nås" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Kontrollera nätverket och försök igen. Du kan starta om eller uppdatera " +"skrivaren om problemet kvarstår." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Stoppad [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "Printern har loggats ut och kan inte anslutas." msgid "Stopped." msgstr "Avbruten." @@ -4651,19 +4982,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Initieringen av virtuell kamera misslyckades (%s)!" +msgid "Network unreachable" +msgstr "Nätverket kan inte nås" + msgid "Information" msgstr "information" msgid "Playing..." msgstr "Spelar..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Laddning misslyckad [%d]!" - -msgid "Loading..." -msgstr "Laddar..." - msgid "Year" msgstr "År" @@ -4682,9 +5009,6 @@ msgstr "Gruppera filer efter månad, senaste först." msgid "Show all files, recent first." msgstr "Visa alla filer, de senaste först." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Växla till timelapse filer." @@ -4712,6 +5036,12 @@ msgstr "Välj" msgid "Batch manage files." msgstr "Batch hantera filer." +msgid "Refresh" +msgstr "Uppdatera" + +msgid "Reload file list from printer." +msgstr "Reload file list from printer." + msgid "No printers." msgstr "Ingen printer." @@ -4722,13 +5052,34 @@ msgstr "Sammankoppling misslyckades [%d]" msgid "Loading file list..." msgstr "Laddar fil lista..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Inga filer [%d]" +msgid "No files" +msgstr "Inga filer" + +msgid "Load failed" +msgstr "Load failed" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Initieringen misslyckades (Enhets anslutningen är inte klar)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Connection Failed (Failed to view sdcard)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Browsing file in SD card is not supported in LAN Only Mode." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Inläsning misslyckades [%d]" +msgid "Initialize failed (%s)!" +msgstr "Initieringen misslyckades (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4750,10 +5101,10 @@ 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 fetch model information from printer." +msgstr "Det gick inte att hämta modellinformation från printern." -msgid "Failed to parse model infomations." +msgid "Failed to parse model information." msgstr "Det gick inte att analysera modellinformation" msgid "" @@ -4765,6 +5116,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "Filen '%s' förlorades! Ladda ner den igen." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"File: %s\n" +"Title: %s\n" + msgid "Download waiting..." msgstr "Nedladdning väntar..." @@ -4781,27 +5140,28 @@ msgstr "Nedladdning slutförd" msgid "Downloading %d%%..." msgstr "Laddar ner %d%%..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." -msgstr "" +msgid "File does not exist." +msgstr "Filen finns inte." msgid "File checksum error. Please retry." -msgstr "" +msgstr "Fel på filens kontrollsumma. Vänligen försök igen." msgid "Not supported on the current printer version." -msgstr "" +msgstr "Stöds inte av den aktuella skrivarversionen." msgid "Storage unavailable, insert SD card." -msgstr "" +msgstr "Lagring saknas, sätt i SD-kort." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Felkod: %d" msgid "Speed:" msgstr "Hastighet:" @@ -4845,12 +5205,6 @@ msgstr "" msgid "Printing Progress" msgstr "Utskriftsförlopp" -msgid "Resume" -msgstr "Återuppta" - -msgid "Stop" -msgstr "Stopp" - msgid "0" msgstr "0" @@ -4864,17 +5218,21 @@ msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." msgstr "" +"You have completed printing the mall model, \n" +"but synchronizing rating information has failed." msgid "How do you like this printing file?" -msgstr "" +msgstr "Vad tycker du om den här utskriftsfilen?" msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" +"(Modellen har redan betygsatts. Ditt betyg kommer att skriva över det " +"tidigare betyget.)" msgid "Rate" -msgstr "" +msgstr "Betygsätt" msgid "Camera" msgstr "Kamera" @@ -4891,6 +5249,9 @@ msgstr "" msgid "Control" msgstr "Kontroll" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "Utskriftsalternativ" @@ -4909,9 +5270,6 @@ msgstr "Kammare" msgid "Bed" msgstr "Byggplattan" -msgid "Unload" -msgstr "Mata ut" - msgid "Debug Info" msgstr "Felsöknings Information" @@ -4949,6 +5307,7 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Värm nozzeln till över 170 grader innan du laddar eller matar ut filament." msgid "Still unload" msgstr "Matar ut fortfarande" @@ -4985,95 +5344,108 @@ msgid "Can't start this without SD card." msgstr "Kan inte starta utan MicroSD-kort." msgid "Rate the Print Profile" -msgstr "" +msgstr "Betygsätt utskriftsprofil" msgid "Comment" -msgstr "" +msgstr "Kommentera" msgid "Rate this print" -msgstr "" +msgstr "Betygsätt denna utskrift" msgid "Add Photo" -msgstr "" +msgstr "Lägg till en bild" msgid "Delete Photo" -msgstr "" +msgstr "Ta bort foto" msgid "Submit" -msgstr "" +msgstr "Skicka in" msgid "Please click on the star first." -msgstr "" +msgstr "Klicka på stjärnan först." msgid "InFo" -msgstr "" +msgstr "Info" msgid "Get oss config failed." -msgstr "" +msgstr "Hämta konfigurationen för oss misslyckades." msgid "Upload Pictrues" -msgstr "" +msgstr "Upload Pictures" msgid "Number of images successfully uploaded" -msgstr "" +msgstr "Antal bilder som laddats upp framgångsrikt" msgid " upload failed" -msgstr "" +msgstr " uppladdning misslyckades" msgid " upload config prase failed\n" -msgstr "" +msgstr " uppladdning av konfiguration misslyckades\n" msgid " No corresponding storage bucket\n" -msgstr "" +msgstr " Ingen motsvarande lagrings plats\n" msgid " can not be opened\n" -msgstr "" +msgstr " cannot be opened\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" msgstr "" +"Följande problem uppstod under uppladdningen av bilder. Vill du ignorera " +"dem?\n" +"\n" msgid "info" msgstr "info" msgid "Synchronizing the printing results. Please retry a few seconds later." -msgstr "" +msgstr "Synkroniserar utskriftsresultaten. Försök igen om några sekunder." msgid "Upload failed\n" -msgstr "" +msgstr "Uppladdningen misslyckades\n" msgid "obtaining instance_id failed\n" -msgstr "" +msgstr "det gick inte att få instance_id\n" msgid "" "Your comment result cannot be uploaded due to some reasons. As follows:\n" "\n" " error code: " msgstr "" +"Your comment result cannot be uploaded due to the following reasons:\n" +"\n" +" error code: " msgid "error message: " -msgstr "" +msgstr "felmeddelande: " msgid "" "\n" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"Would you like to redirect to the webpage to give a rating?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" msgstr "" +"Några av dina bilder kunde inte laddas upp. Vill du bli omdirigerad till " +"webbsidan för betygsättning?" msgid "You can select up to 16 images." -msgstr "" +msgstr "Du kan välja upp till 16 bilder." msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" +"At least one successful print record of this print profile is required \n" +"to give a positive rating (4 or 5 stars)." msgid "Status" msgstr "Status" @@ -5081,9 +5453,6 @@ msgstr "Status" msgid "Update" msgstr "Uppdatera" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Visa inte igen" @@ -5114,6 +5483,35 @@ msgstr "%s information" msgid "Skip" msgstr "Hoppa över" +msgid "Newer 3mf version" +msgstr "Nyare 3mf version" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Ladda ner betaversion" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "Aktuell version: " + +msgid "Latest Version: " +msgstr "Senaste versionen: " + +msgid "Not for now" +msgstr "Not for now" + msgid "3D Mouse disconnected." msgstr "3D mus bortkopplad." @@ -5139,10 +5537,10 @@ msgid "Details" msgstr "Detaljer" msgid "New printer config available." -msgstr "" +msgstr "Ny printer konfiguration tillgänglig." msgid "Wiki" -msgstr "" +msgstr "Wiki" msgid "Undo integration failed." msgstr "Återställande av integrationen misslyckades." @@ -5183,12 +5581,12 @@ msgstr[1] "" msgid "ERROR" msgstr "FEL" -msgid "CANCELED" -msgstr "Avbruten" - msgid "COMPLETED" msgstr "Klar" +msgid "CANCELED" +msgstr "Avbruten" + msgid "Cancel upload" msgstr "Avbryt uppladdning" @@ -5205,10 +5603,10 @@ msgid "Export successfully." msgstr "Exportering lyckades" msgid "Model file downloaded." -msgstr "" +msgstr "Modellfil nedladdad." msgid "Serious warning:" -msgstr "" +msgstr "Allvarlig varning:" msgid " (Repair)" msgstr " (Reparera)" @@ -5294,10 +5692,29 @@ msgid "Auto-recovery from step loss" msgstr "Automatisk återhämtning vid stegförlust" msgid "Allow Prompt Sound" -msgstr "" +msgstr "Tillåt Prompt Ljud" msgid "Filament Tangle Detect" -msgstr "" +msgstr "Filament Tangle Detection" + +msgid "Nozzle Clumping Detection" +msgstr "Nozzle Clumping Detection" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Check if the nozzle is clumping by filament or other foreign objects." + +msgid "Nozzle Type" +msgstr "Nozzle Type" + +msgid "Stainless Steel" +msgstr "Rostfritt stål" + +msgid "Hardened Steel" +msgstr "Härdat stål" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" msgid "Global" msgstr "Global" @@ -5388,7 +5805,7 @@ msgid "Set filaments to use" msgstr "Ställ in filament som ska användas" msgid "Search plate, object and part." -msgstr "" +msgstr "Sök platta, objekt och del." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -5455,6 +5872,9 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"The current heatbed temperature is relatively high. The nozzle may clog when " +"printing this filament in a closed environment. Please open the front door " +"and/or remove the upper glass." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5469,6 +5889,8 @@ msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." msgstr "" +"Aktivering av traditionell timelapse fotografering kan orsaka ojämnheter i " +"ytan. Det rekommenderas att ändra till jämnt läge." msgid "Expand sidebar" msgstr "" @@ -5497,9 +5919,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Uppdatera mjukvaran.\n" -msgid "Newer 3mf version" -msgstr "Nyare 3mf version" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5515,26 +5934,30 @@ msgid "Please correct them in the param tabs" msgstr "Vänligen korrigera dem i Parameter flikarna" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" +msgstr "The 3mf has following modified G-code in filament or printer presets:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"Bekräfta att dessa modifierade G-koder är säkra för att förhindra skador på " +"maskinen!" msgid "Modified G-codes" -msgstr "" +msgstr "Modified G-code" msgid "The 3mf has following customized filament or printer presets:" -msgstr "" +msgstr "3mf har följande anpassade filament eller inställningar för printern:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"Bekräfta att G-koderna i dessa inställningar är säkra för att förhindra " +"skador på maskinen!" msgid "Customized Preset" -msgstr "" +msgstr "Anpassad inställning" msgid "Name of components inside step file is not UTF8 format!" msgstr "Komponent namnet i step filen är inte UTF8 format!" @@ -5542,6 +5965,9 @@ msgstr "Komponent namnet i step filen är inte UTF8 format!" msgid "The name may show garbage characters!" msgstr "På grund av textkodning som inte stöds så kan skräptecken visas!" +msgid "Remember my choice." +msgstr "Kom ihåg mitt val." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5599,22 +6025,24 @@ msgid "Export STL file:" msgstr "Exportera STL-fil:" msgid "Export AMF file:" -msgstr "" +msgstr "Exportera AMF-fil:" msgid "Save file as:" msgstr "Spara fil som:" msgid "Export OBJ file:" -msgstr "" +msgstr "Exportera OBJ-fil:" #, c-format, boost-format msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"The file %s already exists.\n" +"Do you want to replace it?" msgid "Comfirm Save As" -msgstr "" +msgstr "Bekräfta Spara som" msgid "Delete object which is a part of cut object" msgstr "Radera objekt som är en del av det utskurna objektet" @@ -5635,13 +6063,13 @@ msgid "Another export job is running." msgstr "En annan exportering pågår." msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "Går inte att ersätta med mer än en volym" msgid "Error during replace" msgstr "Fel vid byte" msgid "Replace from:" -msgstr "" +msgstr "Ersätt från:" msgid "Select a new file" msgstr "Välj en ny fil" @@ -5653,22 +6081,19 @@ msgid "Please select a file" msgstr "Välj en fil" msgid "Do you want to replace it" -msgstr "" +msgstr "Do you want to replace it?" msgid "Message" -msgstr "" +msgstr "Meddelande" msgid "Reload from:" -msgstr "" +msgstr "Ladda om från:" msgid "Unable to reload:" -msgstr "" +msgstr "Det gick inte att ladda om:" msgid "Error during reload" -msgstr "" - -msgid "Slicing" -msgstr "Bereder" +msgstr "Fel vid omladdning" msgid "There are warnings after slicing models:" msgstr "Varningar efter beredning:" @@ -5731,9 +6156,15 @@ msgstr "Importerar Modell" msgid "prepare 3mf file..." msgstr "förbereder 3mf-filen..." +msgid "Download failed, unknown file format." +msgstr "Download failed; unknown file format." + msgid "downloading project ..." msgstr "laddar ner projekt ..." +msgid "Download failed, File size exception." +msgstr "Download failed; File size exception." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projektet har laddats ned %d%%" @@ -5755,6 +6186,20 @@ msgstr "Innehåller ingen giltlig G-kod." msgid "Error occurs while loading G-code file" msgstr "Fel uppstod vid laddningen av G-kod" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" + msgid "Drop project file" msgstr "Släpp projekt filen" @@ -5779,18 +6224,12 @@ msgstr "G-kod filer och modeller kan inte laddas tillsammans!!" msgid "Can not add models when in preview mode!" msgstr "Det gick inte att lägga till modeller i förhandsvisningsläge" -msgid "Add Models" -msgstr "Lägg till modeller" - msgid "All objects will be removed, continue?" msgstr "Alla objekt kommer att raderas, fortsätta?" msgid "The current project has unsaved changes, save it before continue?" msgstr "Nuvarande projekt har ej sparade ändringar, spara innan du går vidare?" -msgid "Remember my choice." -msgstr "Kom ihåg mitt val." - msgid "Number of copies:" msgstr "Antal kopior:" @@ -5801,13 +6240,13 @@ msgid "Save G-code file as:" msgstr "Spara G-kod som:" msgid "Save SLA file as:" -msgstr "" +msgstr "Spara SLA fil som:" msgid "The provided file name is not valid." -msgstr "" +msgstr "Det angivna filnamnet är inte giltigt." msgid "The following characters are not allowed by a FAT file system:" -msgstr "" +msgstr "Följande tecken är inte tillåtna i ett FAT-fil system:" msgid "Save Sliced file as:" msgstr "Spara beredningen som:" @@ -5822,10 +6261,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Det går inte att utföra booleska operationer på modell mesh. Endast positiva " -"delar kommer att exporteras." +"Unable to perform boolean operation on model meshes. Only positive parts " +"will be kept. You may fix the meshes and try agian." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Reason: part \"%1%\" is empty." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Reason: part \"%1%\" does not bound a volume." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Reason: part \"%1%\" has self intersection." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Reason: \"%1%\" and another part have no intersection." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5873,7 +6328,7 @@ msgstr "Antal för tillfället valda delar: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "" +msgstr "Antal för närvarande markerade objekt: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -5975,6 +6430,11 @@ msgstr "Logga in Region" msgid "Stealth Mode" msgstr "" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -5990,6 +6450,24 @@ msgstr "Brittisk standard" msgid "Units" msgstr "Enheter" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"På OSX körs alltid bara en instans av appen som standard. Det är dock " +"tillåtet att köra flera instanser av samma app från kommandoraden. I sådana " +"fall tillåter denna inställning endast en instans." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -5999,6 +6477,18 @@ msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "Zooma till musens position" @@ -6015,6 +6505,12 @@ msgstr "" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "" @@ -6028,11 +6524,36 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "Om aktiverad visas användbara tips vid start." msgid "Flushing volumes: Auto-calculate everytime the color changed." -msgstr "" +msgstr "Rensnings volymer: Beräkna automatiskt varje gång färgen ändras." msgid "If enabled, auto-calculate everytime the color changed." +msgstr "Om aktiverat, beräkna automatiskt varje gång färgen ändras." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Flushing volumes: Auto-calculate every time the filament is changed." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "If enabled, auto-calculate every time filament is changed" + +msgid "Remember printer configuration" msgstr "" +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." + msgid "Network" msgstr "" @@ -6074,6 +6595,42 @@ msgstr "Associera .step/.stp-filer till OrcaSlicer" 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 "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Maximalt antal nyligen genomförda projekt" @@ -6084,7 +6641,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Rensa mitt val för de osparade projekten." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "No warnings when loading 3MF with modified G-code" msgid "Auto-Backup" msgstr "Auto Säkerhetskopiera" @@ -6240,16 +6797,25 @@ msgid "Add/Remove materials" msgstr "Lägg till/Ta bort material" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Välj/ta bort printer(systemet inställningar)" msgid "Create printer" -msgstr "" - -msgid "Incompatible" -msgstr "Inkompatibel" +msgstr "Skapa printer" msgid "The selected preset is null!" -msgstr "" +msgstr "Den valda förinställningen är noll!" + +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "Anpassa" + +msgid "Other layer filament sequence" +msgstr "Other layer filament sequence" + +msgid "Please input layer value (>= 2)." +msgstr "Please input layer value (>= 2)." msgid "Plate name" msgstr "Plattans namn" @@ -6260,11 +6826,17 @@ msgstr "Samma som Global Utskrifts Sekvens" msgid "Print sequence" msgstr "Utskrifts sekvens" -msgid "Customize" -msgstr "" +msgid "Same as Global" +msgstr "Same as Global" + +msgid "Disable" +msgstr "Disable" + +msgid "Spiral vase" +msgstr "Spiral vas" msgid "First layer filament sequence" -msgstr "" +msgstr "Första lagrets filament sekvens" msgid "Same as Global Plate Type" msgstr "Samma som Global Bed Type" @@ -6324,15 +6896,6 @@ msgstr "Användar förinställning" msgid "Preset Inside Project" msgstr "Projekt förinställning" -msgid "Name is invalid;" -msgstr "Namnet är ogiltligt;" - -msgid "illegal characters:" -msgstr "Ogiltliga tecken:" - -msgid "illegal suffix:" -msgstr "Ogiltlig ändelse:" - msgid "Name is unavailable." msgstr "Namnet ej tillgängligt." @@ -6353,15 +6916,6 @@ msgstr "" "Observera att om du sparar kommer den aktuella förinställningen att skrivas " "över" -msgid "The name is not allowed to be empty." -msgstr "Namn fältet får inte vara tomt." - -msgid "The name is not allowed to start with space character." -msgstr "Namnet får inte börja med mellanrum." - -msgid "The name is not allowed to end with space character." -msgstr "Namnet får inte avslutas med mellanrum." - msgid "The name cannot be the same as a preset alias name." msgstr "Namnet får inte vara samma som förinställt namn." @@ -6399,7 +6953,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Sök" msgid "My Device" msgstr "Min Enhet" @@ -6419,9 +6973,6 @@ msgstr "Hittar du inte enheter?" msgid "Log out successful." msgstr "Utloggning lyckades." -msgid "Offline" -msgstr "Offline" - msgid "Busy" msgstr "Upptagen" @@ -6438,7 +6989,7 @@ msgid "Bambu Smooth PEI Plate" msgstr "" msgid "High temperature Plate" -msgstr "" +msgstr "Högtemperatur platta" msgid "Bambu Textured PEI Plate" msgstr "" @@ -6446,17 +6997,11 @@ msgstr "" msgid "Send print job to" msgstr "Skicka utskriftsjobb till" -msgid "Refresh" -msgstr "Uppdatera" - -msgid "Bed Leveling" -msgstr "Justering av Byggplattan" - msgid "Flow Dynamics Calibration" -msgstr "" +msgstr "Kalibrering av flödesdynamik" msgid "Click here if you can't connect to the printer" -msgstr "" +msgstr "Klicka här om du inte kan ansluta till printern" msgid "send completed" msgstr "Skicka komplett" @@ -6464,9 +7009,6 @@ msgstr "Skicka komplett" msgid "Error code" msgstr "Felkod" -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" @@ -6546,8 +7088,13 @@ 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." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." msgstr "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." 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." @@ -6569,10 +7116,14 @@ msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." msgstr "" +"When spiral vase mode is enabled, machines with I3 structure will not " +"generate timelapse videos." msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"Timelapse stöds inte eftersom utskrifts sekvensen är inställd på \"Per objekt" +"\"." msgid "Errors" msgstr "Fel" @@ -6600,62 +7151,69 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "nozzel i inställning: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "" +msgid "nozzle memorized: %.2f %s" +msgstr "nozzel memorerat: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" +"Your nozzle diameter in sliced file is not consistent with the saved nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Please fix the error above, otherwise printing cannot continue." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" "Klicka på knappen Bekräfta om du fortfarande vill fortsätta med utskriften." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - 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." +"Ansluter till skrivaren. Det går inte att avbryta under anslutnings " +"processen." msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." msgstr "" +"Varning! Flödes kalibrering på texturerade PEI plattor kan misslyckas på " +"grund av ytan." msgid "Automatic flow calibration using Micro Lidar" -msgstr "" +msgstr "Automatic flow calibration using the Micro Lidar" msgid "Modifying the device name" msgstr "Ändra enhetens namn" +msgid "Bind with Pin Code" +msgstr "Bind with Pin Code" + msgid "Send to Printer SD card" msgstr "Skicka till skrivarens MicroSD-kort" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Det går inte att skicka utskriftsuppgiften när uppgraderingen pågår" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "" +"Den valda skrivaren är inte kompatibel med de valda skrivar inställningarna." + 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." @@ -6669,7 +7227,7 @@ msgid "Slice ok." msgstr "Beredning klar." msgid "View all Daily tips" -msgstr "" +msgstr "Visa alla dagliga tips" msgid "Failed to create socket" msgstr "Det gick inte att skapa uttaget" @@ -6698,6 +7256,28 @@ msgstr "Timeout för mottagande av inloggnings rapport" msgid "Unknown Failure" msgstr "Okänt fel" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." + +msgid "Can't find Pin Code?" +msgstr "Can't find Pin Code?" + +msgid "Pin Code" +msgstr "Pin Code" + +msgid "Binding..." +msgstr "Binding..." + +msgid "Please confirm on the printer screen" +msgstr "Please confirm on the printer screen" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Log in failed. Please check the Pin Code." + msgid "Log in printer" msgstr "Logga in skrivare" @@ -6819,7 +7399,7 @@ msgstr "" "utan prime tower. Vill du aktivera prime tower?" msgid "Still print by object?" -msgstr "" +msgstr "Fortfarande utskrift per objekt?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6878,15 +7458,39 @@ msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"Lagerhöjden överskrider gränsen i Skrivarinställningar -> Extruder -> " +"Lagerhöjds gränser, detta kan orsaka problem med utskriftskvaliteten." msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "Justera automatiskt till det inställda området? \n" msgid "Adjust" -msgstr "" +msgstr "Justera" msgid "Ignore" +msgstr "Ignorera" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush. Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications. Please use with the latest printer firmware." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -6957,7 +7561,7 @@ msgid "Acceleration" msgstr "Acceleration" msgid "Jerk(XY)" -msgstr "" +msgstr "Jerk(XY)" msgid "Raft" msgstr "Raft" @@ -6968,6 +7572,9 @@ msgstr "Support filament" msgid "Tree supports" msgstr "" +msgid "Skirt" +msgstr "" + msgid "Prime tower" msgstr "Prime torn" @@ -6981,7 +7588,7 @@ msgid "Post-processing Scripts" msgstr "Skript för efterbehandling" msgid "Notes" -msgstr "" +msgstr "Notes" msgid "Frequent" msgstr "Återkommande" @@ -7057,13 +7664,16 @@ msgstr "" "värde på 0 betyder att filamentet inte stöder utskrift på Engineering Plate." msgid "Smooth PEI Plate / High Temp Plate" -msgstr "" +msgstr "Slät PEI platta / Högtemperaturs platta" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" +"Bäddtemperatur när slät PEI-platta/Högtemperatur platta är installerad. " +"Värde 0 betyder att filamentet inte stöder utskrift på den släta PEI-plattan/" +"högtemperaturplattan" msgid "Textured PEI Plate" msgstr "Texturerad PEI-platta" @@ -7115,13 +7725,13 @@ msgid "Auxiliary part cooling fan" msgstr "Extra del kylnings fläkt" msgid "Exhaust fan" -msgstr "" +msgstr "Utsugs fläkt" msgid "During print" -msgstr "" +msgstr "Under utskrift" msgid "Complete print" -msgstr "" +msgstr "Komplett utskrift" msgid "Filament start G-code" msgstr "Filament start G-kod" @@ -7147,6 +7757,14 @@ msgstr "" msgid "Printable space" msgstr "Utskriftsbar yta" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "" @@ -7172,7 +7790,7 @@ msgid "Machine end G-code" msgstr "Maskin stop G-kod" msgid "Printing by object G-code" -msgstr "" +msgstr "Utskrift efter objekt G kod" msgid "Before layer change G-code" msgstr "Före lagerskifte G-kod" @@ -7181,7 +7799,7 @@ msgid "Layer change G-code" msgstr "Lagerskifte G-kod" msgid "Time lapse G-code" -msgstr "" +msgstr "Time lapse G-kod" msgid "Change filament G-code" msgstr "Byta filament G-kod" @@ -7233,9 +7851,12 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" +"The Wipe option is not available when using the Firmware Retraction mode.\n" +"\n" +"Disable it in order to enable Firmware Retraction?" msgid "Firmware Retraction" -msgstr "" +msgstr "Firmware Retraktion" msgid "Detached" msgstr "Fristående" @@ -7245,9 +7866,11 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"%d Filament inställning och %d Process inställning är kopplade till denna " +"printer. Dessa inställningar raderas om printern raderas." msgid "Presets inherited by other presets can not be deleted!" -msgstr "" +msgstr "Inställningar som ärvts av andra inställningar kan inte raderas!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." @@ -7273,6 +7896,9 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"Är du säker på att du vill radera den valda inställningen? \n" +"Om inställningen motsvarar ett filament som för närvarande används på din " +"skrivare, vänligen återställ filament informationen för den platsen." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7375,22 +8001,30 @@ msgstr "" "innehåller följande osparade ändringar:" #, 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 "" -"Du har ändrat vissa inställningar för inställningen \"%1%\".\n" -"Vill du behålla dessa inställningar (nytt värde) när du byter inställningar?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "You have changed some settings of preset \"%1%\". " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"You can save or discard the preset values you have modified." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "You have previously modified your settings." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Du har ändrat några inställningar.\n" -"Vill du behålla ändrade inställningar (nytt värde) när du byter " -"inställningar?" msgid "Extruders count" msgstr "Extruder kalkylering" @@ -7421,7 +8055,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7504,6 +8138,60 @@ msgstr "Inga uppdateringar tillgängliga." msgid "The configuration is up to date." msgstr "Konfigurationen är aktuell." +msgid "Obj file Import color" +msgstr "Obj file Import color" + +msgid "Specify number of colors:" +msgstr "Specify number of colors:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "The color count should be in range [%d, %d]." + +msgid "Recommended " +msgstr "Recommended " + +msgid "Current filament colors:" +msgstr "Current filament colors:" + +msgid "Quick set:" +msgstr "Quick set:" + +msgid "Color match" +msgstr "Color match" + +msgid "Approximate color matching." +msgstr "Approximate color matching." + +msgid "Append" +msgstr "Append" + +msgid "Add consumable extruder after existing extruders." +msgstr "Add consumable extruder after existing extruders." + +msgid "Reset mapped extruders." +msgstr "Reset mapped extruders." + +msgid "Cluster colors" +msgstr "Cluster colors" + +msgid "Map Filament" +msgstr "Map Filament" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Warning: The count of newly added and \n" +" current extruders exceeds 16." + msgid "Ramming customization" msgstr "" @@ -7538,7 +8226,7 @@ msgid "Auto-Calc" msgstr "Autoberäkna" msgid "Re-calculate" -msgstr "" +msgstr "Utför beräkningen igen" msgid "Flushing volumes for filament change" msgstr "Rensnings volym för filament byte" @@ -7577,12 +8265,38 @@ msgstr "Från" msgid "To" msgstr "Till" -msgid "Bambu Network plug-in not detected." +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" msgstr "" -msgid "Click here to download it." +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" msgstr "" +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "Bambu Network plug-in hittades inte." + +msgid "Click here to download it." +msgstr "Klicka här för att ladda ner den." + msgid "Login" msgstr "Logga in" @@ -7614,7 +8328,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "Visa/Dölj 3Dconnexion enheternas inställnings dialogruta" msgid "Switch table page" -msgstr "" +msgstr "Byt tabellsida" msgid "Show keyboard shortcuts list" msgstr "Visa tangentbordets genvägs lista" @@ -7846,6 +8560,12 @@ msgstr "Flytta reglage 5x snabbare" msgid "Shift+Mouse wheel" msgstr "Shift+Mushjulet" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "Meddelande om utgåvan" @@ -7870,13 +8590,49 @@ msgid "New version of Orca Slicer" msgstr "Ny version av Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "Hoppa över denna version" msgid "Done" msgstr "Klar" +msgid "resume" +msgstr "resume" + +msgid "Resume Printing" +msgstr "Resume Printing" + +msgid "Resume Printing(defects acceptable)" +msgstr "Resume Printing (defects acceptable)" + +msgid "Resume Printing(problem solved)" +msgstr "Resume Printing (problem solved)" + +msgid "Stop Printing" +msgstr "Stop Printing" + +msgid "Check Assistant" +msgstr "Check Assistant" + +msgid "Filament Extruded, Continue" +msgstr "Filament Extruded, Continue" + +msgid "Not Extruded Yet, Retry" +msgstr "Not Extruded Yet, Retry" + +msgid "Finished, Continue" +msgstr "Finished, Continue" + +msgid "Load Filament" +msgstr "Ladda Filament" + +msgid "Filament Loaded, Resume" +msgstr "Filament Loaded, Resume" + +msgid "View Liveview" +msgstr "View Liveview" + msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Bekräfta och uppdatera nozzeln" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN-anslutning misslyckades (skickar utskriftsfil)" @@ -7902,21 +8658,23 @@ msgid "Where to find your printer's IP and Access Code?" msgstr "Var hittar du skrivarens IP- och åtkomstkod?" msgid "Step 3: Ping the IP address to check for packet loss and latency." -msgstr "" +msgstr "Steg 3: Pinga IP-adressen för att kontrollera paketförlust och latens." msgid "Test" -msgstr "" +msgstr "Test" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP- och åtkomstkoder verifierade! Du kan stänga fönstret" msgid "Connection failed, please double check IP and Access Code" -msgstr "" +msgstr "Anslutningen misslyckades, kontrollera IP och åtkomstkod" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"Anslutningen misslyckades! Om din IP-adress och åtkomstkod är korrekta, \n" +"gå vidare till steg 3 för felsökning av nätverksproblem" msgid "Model:" msgstr "Modell:" @@ -7930,14 +8688,8 @@ msgstr "Version:" msgid "Update firmware" msgstr "Uppdatera programvara" -msgid "Printing" -msgstr "Utskrift pågår" - -msgid "Idle" -msgstr "Inaktiv" - msgid "Beta version" -msgstr "" +msgstr "Betaversion" msgid "Latest version" msgstr "Senaste version" @@ -7970,7 +8722,7 @@ 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." +"update next time starting Orca." msgstr "" "Firmware versionen är onormal. Reparation och uppdatering krävs före " "utskrift. Vill du uppdatera nu? Du kan också uppdatera senare på skrivaren " @@ -8109,9 +8861,6 @@ msgstr "" msgid "Gap infill" msgstr "Mellanrums ifyllnad" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Support kontaktyta" @@ -8301,26 +9050,33 @@ msgid "" msgstr "" msgid "Variable layer height is not supported with Organic supports." -msgstr "" +msgstr "Variabel lagerhöjd stöds inte med organiska support." msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Olika nozzel diametrar och olika filament diametrar är inte tillåtna när " +"prime tower är aktiverat." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"Wipe Tower stöds för närvarande endast med relativ extruder adressering " +"(use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"Förebyggande av läckage stöds för närvarande inte med prime tower aktiverat." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"Prime Tower stöds för närvarande endast för G-kods varianterna Marlin, " +"RepRap/Sprinter, RepRapFirmware och Repetier." msgid "The prime tower is not supported in \"By object\" print." msgstr "Ett Prime Torn stöds inte i \"Per objekt\" utskrift." @@ -8541,11 +9297,13 @@ msgstr "" "format: https://username:password@your-octopi-address/" msgid "Device UI" -msgstr "" +msgstr "Enhetens gränssnitt" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" +"Ange webbadressen till enhetens användar gränssnitt om den inte är densamma " +"som printer värd" msgid "API Key / Password" msgstr "API Nyckel/Lösenord" @@ -8703,7 +9461,16 @@ msgid "Engineering Plate" msgstr "Engineering Plate" msgid "First layer print sequence" -msgstr "" +msgstr "Första lagrets utskrifts ordning" + +msgid "Other layers print sequence" +msgstr "Other layers print sequence" + +msgid "The number of other layers print sequence" +msgstr "The number of other layers print sequence" + +msgid "Other layers filament sequence" +msgstr "Other layers filament sequence" msgid "This G-code is inserted at every layer change before lifting z" msgstr "Denna G-kod används för varje lager innan Z axis lyfts" @@ -8834,12 +9601,14 @@ msgid "" msgstr "" msgid "Top surface flow ratio" -msgstr "" +msgstr "Flödesförhållande för övre ytan" msgid "" "This factor affects the amount of material for top solid infill. You can " "decrease it slightly to have smooth surface finish" msgstr "" +"Denna faktor påverkar mängden material för den övre solida fyllningen. Du " +"kan minska den något för att få en jämn ytfinish." msgid "Bottom surface flow ratio" msgstr "" @@ -8983,7 +9752,7 @@ msgid "" msgstr "" msgid "mm/s or %" -msgstr "" +msgstr "mm/s eller %." msgid "External" msgstr "" @@ -9125,7 +9894,7 @@ msgid "Default process profile when switch to this machine profile" msgstr "Standard process profil vid byte till denna maskinens profil" msgid "Activate air filtration" -msgstr "" +msgstr "Activate air filtration" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" @@ -9137,6 +9906,8 @@ msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" msgstr "" +"Hastighet för frånlufts fläkt under utskrift. Denna hastighet kommer att " +"åsidosätta hastigheten i filament anpassad g-kod" msgid "Speed of exhaust fan after printing completes" msgstr "" @@ -9243,12 +10014,14 @@ msgid "End G-code when finish the whole printing" msgstr "Lägg till slut G-kod när utskriften har avslutas" msgid "Between Object Gcode" -msgstr "" +msgstr "Mellan objekt G kod" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"Infoga G-kod mellan objekt. Denna parameter träder i kraft först när du " +"skriver ut dina modeller objekt för objekt." msgid "End G-code when finish the printing of this filament" msgstr "Lägg till slut G-kod när utskriften har avslutas med detta filament" @@ -9310,7 +10083,7 @@ msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "Botten ytans ifyllnads linjemönster, inte bridge/brygg ifyllnad" msgid "Internal solid infill pattern" -msgstr "" +msgstr "Invändigt mönster för fyllning av solida ytor" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " @@ -9330,7 +10103,7 @@ msgstr "" "hastigheten på inner vägg för att uppnå bättre kvalitet." msgid "Small perimeters" -msgstr "" +msgstr "Små perimetrar" msgid "" "This separate setting will affect the speed of perimeters having radius <= " @@ -9345,6 +10118,8 @@ msgstr "" msgid "" "This sets the threshold for small perimeter length. Default threshold is 0mm" msgstr "" +"Detta ställer in tröskelvärdet för liten perimeterlängd. Standardgränsen är " +"0mm" msgid "Walls printing order" msgstr "" @@ -9384,13 +10159,13 @@ msgid "Inner/Outer/Inner" msgstr "" msgid "Print infill first" -msgstr "" +msgstr "Printa fyllningen först" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9444,6 +10219,12 @@ msgstr "" "Frigångsradie runt extrudern: används för att undvika kollisioner vid " "utskrift av flera objekt." +msgid "Nozzle height" +msgstr "Nozzel höjd" + +msgid "The height of nozzle tip." +msgstr "Höjden på nozzel spetsen." + msgid "Bed mesh min" msgstr "" @@ -9514,7 +10295,7 @@ msgstr "" "fin flat yta när visst överflöde eller underflöde finns" msgid "Enable pressure advance" -msgstr "" +msgstr "Aktivera pressure advance" msgid "" "Enable pressure advance, auto calibration result will be overwriten once " @@ -9540,6 +10321,22 @@ msgstr "" "och den kommer att åtminstone gå på lägsta hastighet för att minska " "frekvensen av start och stopp" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Lager tid" @@ -9559,10 +10356,10 @@ msgid "Default filament color" msgstr "Standard filament färg" msgid "Filament notes" -msgstr "" +msgstr "Filament notes" msgid "You can put your notes regarding the filament here." -msgstr "" +msgstr "You can put your notes regarding the filament here." msgid "Required nozzle HRC" msgstr "HRC nozzle krävs" @@ -9760,13 +10557,16 @@ msgstr "" "gränssnittet" msgid "Softening temperature" -msgstr "" +msgstr "Mjuknings temperatur" msgid "" "The material softens at this temperature, so when the bed temperature is " "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than this, it's highly recommended to open the front " +"door and/or remove the upper glass to avoid clogs." msgid "Price" msgstr "Pris" @@ -9778,16 +10578,16 @@ msgid "money/kg" msgstr "pris/kg" msgid "Vendor" -msgstr "" +msgstr "Leverantör" msgid "Vendor of filament. For show only" -msgstr "" +msgstr "Försäljare av filament. Endast för visning" msgid "(Undefined)" msgstr "(Oidentifierad)" -msgid "Infill direction" -msgstr "Ifyllnads riktning" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -9796,6 +10596,20 @@ msgstr "" "Vinkeln för sparsam ifyllnads mönster, som styr start- eller huvudriktningen " "för linjer" +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "Sparsam ifyllnads densitet" @@ -9841,6 +10655,9 @@ msgstr "Kubik Support" msgid "Lightning" msgstr "Blixt" +msgid "Cross Hatch" +msgstr "Cross Hatch" + msgid "Sparse infill anchor length" msgstr "" @@ -9907,12 +10724,14 @@ msgid "" msgstr "" msgid "mm/s² or %" -msgstr "" +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 "" +"Acceleration av gles utfyllnad. Om värdet uttrycks som en procentsats (t.ex. " +"100%) kommer det att beräknas baserat på standard accelerationen." msgid "" "Acceleration of internal solid infill. If the value is expressed as a " @@ -9928,13 +10747,13 @@ msgstr "" "objektets fäste på byggplattan" msgid "Enable accel_to_decel" -msgstr "" +msgstr "Aktivera accel_to_decel" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "" +msgstr "Klippers max_accel_to_decel kommer att justeras automatiskt" msgid "accel_to_decel" -msgstr "" +msgstr "accel_to_decel" #, c-format, boost-format msgid "" @@ -9942,10 +10761,10 @@ msgid "" msgstr "" msgid "Jerk of outer walls" -msgstr "" +msgstr "Jerk ytterväggar" msgid "Jerk of inner walls" -msgstr "" +msgstr "Jerk innerväggar" msgid "Jerk for top surface" msgstr "" @@ -10015,6 +10834,9 @@ msgid "" "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "" @@ -10069,7 +10891,7 @@ msgid "Whether to apply fuzzy skin on the first layer" msgstr "" msgid "Filter out tiny gaps" -msgstr "" +msgstr "Filtrera bort små luckor" msgid "Layers and Perimeters" msgstr "Lager och perimetrar" @@ -10084,15 +10906,31 @@ msgstr "" "Hastigheten för fyllning av mellanrum. Mellanrum har vanligtvis oregelbunden " "linjebredd och bör skrivas ut långsammare" +msgid "Precise Z height" +msgstr "Precise Z height" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." + msgid "Arc fitting" msgstr "Arc passning" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"Aktivera detta för att få en G-kod med G2 och G3 drag. Passnings toleransen " -"är densamma som upplösningen" msgid "Add line number" msgstr "Lägg till rad nummer" @@ -10147,10 +10985,10 @@ msgid "HRC" msgstr "HRC" msgid "Printer structure" -msgstr "" +msgstr "Printerns struktur" msgid "The physical arrangement and components of a printing device" -msgstr "" +msgstr "Den fysiska utformningen och komponenterna i en utskriftsenhet" msgid "CoreXY" msgstr "" @@ -10165,10 +11003,12 @@ msgid "Delta" msgstr "" msgid "Best object position" -msgstr "" +msgstr "Bästa position för objektet" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "" +"Bästa automatiska arrangemangs position i intervallet [0,1] w.r.t. bäddens " +"form." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " @@ -10214,7 +11054,7 @@ msgid "money/h" msgstr "" msgid "Support control chamber temperature" -msgstr "" +msgstr "Stöd för kontroll av kammarens temperatur" msgid "" "This option is enabled if machine support controlling chamber temperature\n" @@ -10222,7 +11062,7 @@ msgid "" msgstr "" msgid "Support air filtration" -msgstr "" +msgstr "Stödjer luftfiltrering" msgid "" "Enable this if printer support air filtration\n" @@ -10255,7 +11095,7 @@ msgid "" msgstr "" msgid "Exclude objects" -msgstr "" +msgstr "Exkludera objekt" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" msgstr "" @@ -10291,37 +11131,55 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Ifyllnad/Vägg överlapp" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"Detta gör att ifyllnads området kan förstoras något för att överlappa " -"väggarna för bättre vidhäftning.Det procentuella värdet är i förhållande " -"till linjebredden för sparsam ifyllnad" msgid "Speed of internal sparse infill" msgstr "Hastighet för sparsam ifyllnad" msgid "Interface shells" -msgstr "" +msgstr "Interface shells" 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 "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Maximal bredd för en segmenterad region" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" +"Maximum width of a segmented region. A value of 0 disables this feature." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Sammanhängande djup i en segmenterad region" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" +"Sammankopplingsdjup för en segmenterad region. Noll inaktiverar denna " +"funktion." msgid "Ironing Type" msgstr "Stryknings typ" @@ -10797,10 +11655,10 @@ msgid "" msgstr "" msgid "Printer notes" -msgstr "" +msgstr "Printer notes" msgid "You can put your notes regarding the printer here." -msgstr "" +msgstr "You can put your notes regarding the printer here." msgid "Raft contact Z distance" msgstr "Raft kontakt Z avstånd" @@ -10883,6 +11741,30 @@ msgstr "" "En del av materialet i extrudern dras tillbaka för att undvika dropp under " "långa förflyttningar. Sätt på 0 för att inaktivera retraktion" +msgid "Long retraction when cut(experimental)" +msgstr "Long retraction when cut (experimental)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Experimental feature: Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." + +msgid "Retraction distance when cut" +msgstr "Retraction distance when cut" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Experimental feature. Retraction length before cutting off during filament " +"change" + msgid "Z hop when retract" msgstr "Z hopp vid retraktion" @@ -10897,20 +11779,24 @@ msgstr "" "strängning" msgid "Z hop lower boundary" -msgstr "" +msgstr "Z hopp nedre gräns" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"Z hop kommer endast att träda i kraft när Z är över detta värde och är under " +"parametern: \"Övre gräns för Z-hopp\"" msgid "Z hop upper boundary" -msgstr "" +msgstr "Z hopp övre gräns" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"Om detta värde är positivt kommer Z hop endast att träda i kraft när Z är " +"över parametern: \"Z hop nedre gräns\" och är under detta värde" msgid "Z hop type" msgstr "" @@ -10958,7 +11844,7 @@ msgid "Top and Bottom" msgstr "" msgid "Extra length on restart" -msgstr "" +msgstr "Extra längd vid omstart" msgid "" "When the retraction is compensated after the travel move, the extruder will " @@ -10988,7 +11874,7 @@ msgstr "" "retraktionen" msgid "Use firmware retraction" -msgstr "" +msgstr "Använd firmware retraktion" msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " @@ -11032,7 +11918,7 @@ msgid "" msgstr "" msgid "Seam gap" -msgstr "" +msgstr "Sömmens mellanrum" msgid "" "In order to reduce the visibility of the seam in a closed loop extrusion, " @@ -11046,17 +11932,20 @@ msgstr "" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" +"Use scarf joint to minimize seam visibility and increase seam strength." msgid "Conditional scarf joint" -msgstr "" +msgstr "Conditional scarf joint" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." msgid "Conditional angle threshold" -msgstr "" +msgstr "Conditional angle threshold" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -11099,39 +11988,44 @@ msgid "This factor affects the amount of material for scarf joints." msgstr "" msgid "Scarf start height" -msgstr "" +msgstr "Scarf start height" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"Start height of the scarf.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." msgid "Scarf around entire wall" -msgstr "" +msgstr "Scarf around entire wall" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "The scarf extends to the entire length of the wall." msgid "Scarf length" -msgstr "" +msgstr "Scarf length" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." msgid "Scarf steps" -msgstr "" +msgstr "Scarf steps" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "Minimum number of segments of each scarf." msgid "Scarf joint for inner walls" -msgstr "" +msgstr "Scarf joint for inner walls" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "Use scarf joint for inner walls as well." msgid "Role base wipe speed" msgstr "" @@ -11166,7 +12060,7 @@ msgid "" msgstr "" msgid "Wipe speed" -msgstr "" +msgstr "Hastighet för avtorkning" msgid "" "The wipe speed is determined by the speed setting specified in this " @@ -11174,6 +12068,10 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" +"Torkhastigheten bestäms av den hastighetsinställning som anges i denna " +"konfiguration. Om värdet uttrycks i procent (t.ex. 80%), kommer det att " +"beräknas baserat på inställningen för förflyttnings hastigheten ovan. " +"Standardvärdet för denna parameter är 80%" msgid "Skirt distance" msgstr "Skirt avstånd" @@ -11187,6 +12085,29 @@ msgstr "Skirt höjd" msgid "How many layers of skirt. Usually only one layer" msgstr "Antal skirt lager: vanligtvis bara en" +msgid "Draft shield" +msgstr "" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "" + +msgid "Enabled" +msgstr "" + msgid "Skirt loops" msgstr "Skirt varv" @@ -11199,6 +12120,17 @@ msgstr "" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -11225,9 +12157,6 @@ msgstr "" 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" -msgid "Spiral vase" -msgstr "Spiral vas" - 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 " @@ -11238,20 +12167,24 @@ msgstr "" "solida bottenlager. Den slutgiltligt genererade modellen har ingen söm" msgid "Smooth Spiral" -msgstr "" +msgstr "Smooth Spiral" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" msgid "Max XY Smoothing" -msgstr "" +msgstr "Max XY Smoothing" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Maximum distance to move points in XY to try to achieve a smooth spiral. If " +"expressed as a %, it will be computed over nozzle diameter" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -11430,10 +12363,10 @@ msgstr "" "utskjutande detaljer etc." msgid "Remove small overhangs" -msgstr "" +msgstr "Ta bort små överhäng" msgid "Remove small overhangs that possibly need no supports." -msgstr "" +msgstr "Ta bort små överhäng som eventuellt inte behöver stöd." msgid "Top Z distance" msgstr "Topp Z-distans" @@ -11459,11 +12392,13 @@ msgstr "" "specifik filament för support, och nuvarande filament används" msgid "Avoid interface filament for base" -msgstr "" +msgstr "Undvik gränssnitts filament för basen" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Undvik om möjligt att använda filament för stöd gränssnitt för att skriva ut " +"stödbasen." msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -11500,10 +12435,10 @@ msgid "Bottom interface layers" msgstr "Botten gränssnitts lager" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Antal nedre gränsyte skikt" msgid "Same as top" -msgstr "" +msgstr "Samma som toppen" msgid "Top interface spacing" msgstr "Topp gränssnitts avstånd" @@ -11709,10 +12644,10 @@ msgid "" msgstr "" msgid "Support wall loops" -msgstr "" +msgstr "Vägg support" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "Denna inställning anger antalet väggar runt supporten" msgid "Tree support with infill" msgstr "Tree support med ifyllnad" @@ -11734,7 +12669,7 @@ msgid "" msgstr "" msgid "Chamber temperature" -msgstr "" +msgstr "Kammarens temperatur" msgid "" "Higher chamber temperature can help suppress or reduce warping and " @@ -11745,6 +12680,12 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on. At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials, the actual chamber temperature should not " +"be high to avoid clogs, so 0 (turned off) is highly recommended." msgid "Nozzle temperature for layers after the initial one" msgstr "Nozzel temperatur efter första lager" @@ -11888,6 +12829,31 @@ msgstr "" msgid "Spacing of purge lines on the wipe tower." msgstr "" +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "" @@ -12013,7 +12979,7 @@ msgid "" msgstr "" msgid "Use relative E distances" -msgstr "" +msgstr "Använd relativa E avstånd" msgid "" "Relative extrusion is recommended when using \"label_objects\" option.Some " @@ -12571,6 +13537,9 @@ msgstr "Avbruten" msgid "load_obj: failed to parse" msgstr "load_obj: misslyckades med att analysera" +msgid "load mtl in obj: failed to parse" +msgstr "load mtl in obj: failed to parse" + msgid "The file contains polygons with more than 4 vertices." msgstr "Filen innehåller polygoner med fler än 4 hörn." @@ -12584,73 +13553,71 @@ 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 "Flow Rate Calibration" -msgstr "" +msgstr "Kalibrering av flödeshastighet" msgid "Max Volumetric Speed Calibration" -msgstr "" +msgstr "Max volymetrisk hastighets kalibrering" msgid "Manage Result" -msgstr "" +msgstr "Hantera resultat" msgid "Manual Calibration" -msgstr "" +msgstr "Manuell kalibrering" msgid "Result can be read by human eyes." -msgstr "" +msgstr "Resultatet kan läsas av mänskliga ögon." msgid "Auto-Calibration" -msgstr "" +msgstr "Auto-Calibration" msgid "We would use Lidar to read the calibration result" -msgstr "" +msgstr "Vi vill använda Lidar för att läsa av kalibrerings resultatet" msgid "Prev" -msgstr "" +msgstr "Föregående" msgid "Recalibration" -msgstr "" +msgstr "Omkalibrering" msgid "Calibrate" -msgstr "" +msgstr "Kalibrera" msgid "Finish" msgstr "Slutför" msgid "How to use calibration result?" -msgstr "" +msgstr "Hur kan jag använda kalibreringsresultaten?" msgid "" "You could change the Flow Dynamics Calibration Factor in material editing" msgstr "" +"Du kan ändra kalibreringsfaktorn för flödesdynamik i material redigeringen" msgid "" "The current firmware version of the printer does not support calibration.\n" "Please upgrade the printer firmware." msgstr "" +"Den aktuella versionen av printerns inbyggda programvara stöder inte " +"kalibrering.\n" +"Vänligen uppdatera printerns programvara." msgid "Calibration not supported" -msgstr "" +msgstr "Kalibrering stöds inte" msgid "Error desc" -msgstr "" +msgstr "Fel desc" msgid "Extra info" -msgstr "" +msgstr "Extra info" msgid "Flow Dynamics" -msgstr "" +msgstr "Flödesdynamik" msgid "Flow Rate" -msgstr "" +msgstr "Flödeshastighet" 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 "" +msgstr "Max volymetrisk hastighet" #, c-format, boost-format msgid "" @@ -12660,62 +13627,103 @@ msgid "" "End value: > Start value\n" "Value step: >= %.3f)" msgstr "" +"Vänligen ange giltiga värden:\n" +"Startvärde: >= %.1f\n" +"Slutvärde: <= %.1f\n" +"Slutvärde: > Startvärde\n" +"Värde steg: >= %.3f)" msgid "The name cannot be empty." -msgstr "" +msgstr "Namnet får inte vara tomt." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "Den valda inställningen: %s hittades inte." msgid "The name cannot be the same as the system preset name." -msgstr "" +msgstr "Namnet får inte vara detsamma som systemets förinställda namn." msgid "The name is the same as another existing preset name" -msgstr "" +msgstr "Namnet är detsamma som ett annat befintligt förinställt namn" msgid "create new preset failed." -msgstr "" +msgstr "skapande av ny inställning misslyckades." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" +"Are you sure you want to cancel the current calibration and return to the " +"home page?" msgid "No Printer Connected!" -msgstr "" +msgstr "Ingen skrivare ansluten!" msgid "Printer is not connected yet." -msgstr "" +msgstr "Printern är inte ansluten ännu." msgid "Please select filament to calibrate." -msgstr "" +msgstr "Välj filament för kalibrering." msgid "The input value size must be 3." +msgstr "Storleken på ingångsvärdet måste vara 3." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgstr "" +"This machine type can only hold 16 historical results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgid "Connecting to printer..." -msgstr "" +msgstr "Ansluter till skrivaren..." msgid "The failed test result has been dropped." -msgstr "" +msgstr "Det misslyckade testresultatet har tagits bort." msgid "Flow Dynamics Calibration result has been saved to the printer" +msgstr "Flödesdynamik kalibrerings resultaten har sparats på printern." + +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" msgstr "" +"Det finns redan ett tidigare kalibreringsresultat med samma namn: %s. Endast " +"ett resultat med ett namn sparas. Är du säker på att du vill skriva över det " +"tidigare resultatet?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"This machine type can only hold %d historical results per nozzle. This " +"result will not be saved." msgid "Internal Error" -msgstr "" +msgstr "Internt fel" msgid "Please select at least one filament for calibration" -msgstr "" +msgstr "Välj minst ett filament för kalibrering" msgid "Flow rate calibration result has been saved to preset" msgstr "" +"Resultat för kalibrering av flödeshastigheten har sparats till inställningen." msgid "Max volumetric speed calibration result has been saved to preset" msgstr "" +"Max volymetrisk hastighets kalibrerings resultat har sparats till " +"förinställningen" msgid "When do you need Flow Dynamics Calibration" -msgstr "" +msgstr "När behöver du kalibrering av flödes dynamik" msgid "" "We now have added the auto-calibration for different filaments, which is " @@ -12727,9 +13735,17 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" +"Vi har nu lagt till automatisk kalibrering för olika filament, vilket är " +"helt automatiserat och resultatet sparas i printern för framtida användning. " +"Du behöver bara göra kalibreringen i följande begränsade fall:\n" +"1. Om du introducerar ett nytt filament av olika märken/modeller eller om " +"filamentet är fuktigt;\n" +"2. Om nozzeln är utsliten eller ersatt med ett nytt;\n" +"3. Om max volymhastighet eller utskriftstemperatur ändras i filament " +"inställningen." msgid "About this calibration" -msgstr "" +msgstr "Om denna kalibrering" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -12741,10 +13757,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12752,7 +13768,7 @@ msgid "" msgstr "" msgid "When to use Flow Rate Calibration" -msgstr "" +msgstr "När ska man använda kalibrering av flödes hastighet?" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -12765,12 +13781,24 @@ msgid "" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." msgstr "" +"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." 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 "" +"Dessutom är flödeshastighets kalibrering avgörande för skummande material " +"som LW-PLA som används i RC-plan. Dessa material expanderar kraftigt vid " +"uppvärmning, och kalibrering ger en användbar referens flödeshastighet." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -12780,6 +13808,13 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" +"Flödeskalibrering mäter förhållandet mellan förväntade och faktiska " +"extruderings volymer. Standardinställningen fungerar bra med Bambu Lab " +"printers och officiella filament eftersom de är förkalibrerade och " +"finjusterade. För ett vanligt filament behöver du vanligtvis inte utföra en " +"flödeshastighets kalibrering om du inte fortfarande ser de listade " +"defekterna efter att du har gjort andra kalibreringar. För mer information, " +"se vår wiki-artikel." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -12799,227 +13834,259 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" +"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 performing it." msgid "When you need Max Volumetric Speed Calibration" -msgstr "" +msgstr "När du behöver kalibrering av maximal volymhastighet" msgid "Over-extrusion or under extrusion" -msgstr "" +msgstr "Över extrudering eller under extrudering" msgid "Max Volumetric Speed calibration is recommended when you print with:" msgstr "" +"Max volymetrisk hastighets kalibrering rekommenderas när du skriver ut med:" msgid "material with significant thermal shrinkage/expansion, such as..." -msgstr "" +msgstr "material med betydande termisk krympning/expansion, t.ex...." msgid "materials with inaccurate filament diameter" -msgstr "" +msgstr "material med felaktig filament diameter" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "" +msgstr "Vi hittade den bästa Flödes dynamiska kalibrerings faktorn" msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." msgstr "" +"En del av kalibreringen misslyckades! Det kan hjälpa att rengöra plattan och " +"försöka igen. Det misslyckade testresultatet kommer att raderas." msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" msgstr "" +"*Vi rekommenderar att du lägger till varumärke, material, typ och till och " +"med fuktighetsnivå i namnet" msgid "Failed" msgstr "Misslyckades" +msgid "Please enter the name you want to save to printer." +msgstr "Ange det namn som du vill spara på skrivaren." + +msgid "The name cannot exceed 40 characters." +msgstr "Namnet får inte innehålla mer än 40 tecken." + 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?" +"want to override the other results?" msgstr "" +"Endast ett av resultaten med samma namn kommer att sparas. Är du säker på " +"att du vill ersätta de andra resultaten?" msgid "Please find the best line on your plate" -msgstr "" +msgstr "Hitta den bästa linjen på din platta." -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Hitta hörnet med den perfekta graden av extrudering" msgid "Input Value" -msgstr "" +msgstr "Ingångsvärde" msgid "Save to Filament Preset" -msgstr "" +msgstr "Spara till inställningar för filament" msgid "Preset" -msgstr "" +msgstr "Förinställd" msgid "Record Factor" -msgstr "" +msgstr "Inspelnings faktor" msgid "We found the best flow ratio for you" -msgstr "" +msgstr "Vi hittade det bästa flödesförhållandet för dig" msgid "Flow Ratio" -msgstr "" +msgstr "Flödes förhållande" msgid "Please input a valid value (0.0 < flow ratio < 2.0)" -msgstr "" +msgstr "Ange ett giltigt värde (0.0 < flödesförhållande < 2.0) " msgid "Please enter the name of the preset you want to save." -msgstr "" +msgstr "Ange namnet på den förinställning som du vill spara." msgid "Calibration1" -msgstr "" +msgstr "Kalibrering1" msgid "Calibration2" -msgstr "" +msgstr "Kalibrering2" msgid "Please find the best object on your plate" -msgstr "" +msgstr "Hitta det bästa objektet på din platta." msgid "Fill in the value above the block with smoothest top surface" -msgstr "" +msgstr "Fyll i värdet från blocket med jämnast toppyta" msgid "Skip Calibration2" -msgstr "" +msgstr "Hoppa över kalibrering2" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "" +msgstr "flödes förhållande: %s " msgid "Please choose a block with smoothest top surface" -msgstr "" +msgstr "Välj det block som har den jämnaste toppytan." msgid "Please choose a block with smoothest top surface." -msgstr "" +msgstr "Välj det block som har den jämnaste toppytan." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" -msgstr "" +msgstr "Ange ett giltigt värde (0 <= Max volym hastighet <= 60)" msgid "Calibration Type" -msgstr "" +msgstr "Typ av kalibrering" msgid "Complete Calibration" -msgstr "" +msgstr "Fullständig kalibrering" msgid "Fine Calibration based on flow ratio" -msgstr "" +msgstr "Fin kalibrering baserad på flödesförhållande" msgid "Title" -msgstr "" +msgstr "Titel" msgid "" "A test model will be printed. Please clear the build plate and place it back " "to the hot bed before calibration." msgstr "" +"En testmodell kommer att skrivas ut. Ta bort byggplattan och placera " +"tillbaka den på bädden före kalibrering." msgid "Printing Parameters" -msgstr "" - -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" +msgstr "Parametrar för utskrift" msgid "Plate Type" msgstr "Typ av byggplatta" msgid "filament position" -msgstr "" +msgstr "Filament position" msgid "External Spool" -msgstr "" +msgstr "Extern spole" msgid "Filament For Calibration" -msgstr "" +msgstr "Filament för kalibrering" 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 "" +"Tips för kalibreringsmaterial:\n" +"- Material som kan ha samma temperatur på den varma bädden\n" +"- Olika filament märken och -familjer (märke = Bambu, familj = Basic, Matte, " +"etc.)" msgid "Pattern" -msgstr "" +msgstr "Mönster" msgid "Method" -msgstr "" +msgstr "Metod" #, c-format, boost-format msgid "%s is not compatible with %s" -msgstr "" +msgstr "%s är inte kompatibel med %s" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -msgstr "" +msgstr "TPU stöds inte för automatisk kalibrering av flödesdynamik." msgid "Connecting to printer" -msgstr "" +msgstr "Ansluter till skrivaren" msgid "From k Value" -msgstr "" +msgstr "Från k Värde" msgid "To k Value" -msgstr "" +msgstr "Till k Värde" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" -msgstr "" +msgstr "Nozzle diametern har synkroniserats från printer inställningarna." msgid "From Volumetric Speed" -msgstr "" +msgstr "Från volymetrisk hastighet" msgid "To Volumetric Speed" -msgstr "" +msgstr "Till volymetrisk hastighet" msgid "Flow Dynamics Calibration Result" -msgstr "" +msgstr "Resultat för kalibrering av flödesdynamik" + +msgid "New" +msgstr "New" msgid "No History Result" -msgstr "" +msgstr "Inget historikresultat" msgid "Success to get history result" -msgstr "" +msgstr "Lyckades med att få historiskt resultat" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "" +msgstr "Uppdatering av tidigare kalibreringsposter för flödesdynamik" msgid "Action" -msgstr "" +msgstr "Åtgärd" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "This machine type can only hold %d historical results per nozzle." msgid "Edit Flow Dynamics Calibration" -msgstr "" +msgstr "Redigera kalibrering av flödesdynamik" + +msgid "New Flow Dynamic Calibration" +msgstr "New Flow Dynamic Calibration" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "The filament must be selected." msgid "Network lookup" -msgstr "" +msgstr "Nätverks sökning" msgid "Address" -msgstr "" +msgstr "Address" msgid "Hostname" -msgstr "" +msgstr "Värdnamn" msgid "Service name" -msgstr "" +msgstr "Tjänstens namn" msgid "OctoPrint version" -msgstr "" +msgstr "OctoPrint version" msgid "Searching for devices" -msgstr "" +msgstr "Söker efter enheter" msgid "Finished" msgstr "Färdig" @@ -13034,37 +14101,37 @@ msgid "" msgstr "" msgid "PA Calibration" -msgstr "" +msgstr "PA kalibrering" msgid "DDE" msgstr "" msgid "Bowden" -msgstr "" +msgstr "Bowden" msgid "Extruder type" msgstr "" msgid "PA Tower" -msgstr "" +msgstr "PA torn" msgid "PA Line" -msgstr "" +msgstr "PA linje" msgid "PA Pattern" -msgstr "" +msgstr "PA mönster" msgid "Start PA: " -msgstr "" +msgstr "Starta PA: " msgid "End PA: " -msgstr "" +msgstr "Slut PA: " msgid "PA step: " -msgstr "" +msgstr "PA steg: " msgid "Print numbers" -msgstr "" +msgstr "Skriv ut nummer" msgid "" "Please input valid values:\n" @@ -13072,39 +14139,46 @@ msgid "" "End PA: > Start PA\n" "PA step: >= 0.001)" msgstr "" +"Vänligen ange giltiga värden:\n" +"Start PA: >= 0.0\n" +"Slut PA: > Start PA\n" +"PA steg: >= 0.001)" msgid "Temperature calibration" -msgstr "" +msgstr "Kalibrering av temperatur" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" +msgstr "PETG" + +msgid "PCTG" msgstr "" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" -msgstr "" +msgstr "Filament typ" msgid "Start temp: " -msgstr "" +msgstr "Start temp: " msgid "End temp: " -msgstr "" +msgstr "Slut temp: " msgid "Temp step: " -msgstr "" +msgstr "Temp steg: " msgid "" "Please input valid values:\n" @@ -13114,16 +14188,16 @@ msgid "" msgstr "" msgid "Max volumetric speed test" -msgstr "" +msgstr "Max volymetrisk hastighets test" msgid "Start volumetric speed: " -msgstr "" +msgstr "Start volymetrisk hastighet: " msgid "End volumetric speed: " -msgstr "" +msgstr "Slut volymetrisk hastighet: " msgid "step: " -msgstr "" +msgstr "steg: " msgid "" "Please input valid values:\n" @@ -13133,13 +14207,13 @@ msgid "" msgstr "" msgid "VFA test" -msgstr "" +msgstr "VFA test" msgid "Start speed: " -msgstr "" +msgstr "Start hastighet: " msgid "End speed: " -msgstr "" +msgstr "Sluthastighet: " msgid "" "Please input valid values:\n" @@ -13149,129 +14223,132 @@ msgid "" msgstr "" msgid "Start retraction length: " -msgstr "" +msgstr "Starta retraktion längd: " msgid "End retraction length: " -msgstr "" +msgstr "Slutets indragnings längd: " msgid "mm/mm" -msgstr "" +msgstr "mm/mm" msgid "Send G-Code to printer host" msgstr "" msgid "Upload to Printer Host with the following filename:" -msgstr "" +msgstr "Ladda upp till Printer Host med följande filnamn:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "" +msgstr "Använd snedstreck ( / ) som katalog avgränsare om det behövs." msgid "Upload to storage" msgstr "" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" -msgstr "" +msgstr "Filnamnet slutar inte med \"%s\". Vill du fortsätta?" msgid "Upload" -msgstr "" +msgstr "Ladda upp" msgid "Print host upload queue" -msgstr "" +msgstr "Utskriftsvärdens uppladdnings kö" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" -msgstr "" +msgstr "Förlopp" msgid "Host" -msgstr "" +msgstr "Värd" msgctxt "OfFile" msgid "Size" -msgstr "" +msgstr "Storlek" msgid "Filename" -msgstr "" +msgstr "Filnamn" msgid "Cancel selected" -msgstr "" +msgstr "Avbryt vald" msgid "Show error message" -msgstr "" +msgstr "Visa felmeddelande" msgid "Enqueued" -msgstr "" +msgstr "I kö" msgid "Uploading" msgstr "Laddar upp" msgid "Cancelling" -msgstr "" +msgstr "Avbryter" msgid "Error uploading to print host" msgstr "" msgid "Unable to perform boolean operation on selected parts" -msgstr "" +msgstr "Kan inte utföra boolean operationer på valda delar" msgid "Mesh Boolean" -msgstr "" +msgstr "Mesh Boolean" msgid "Union" -msgstr "" +msgstr "Union" msgid "Difference" -msgstr "" +msgstr "Skillnad" msgid "Intersection" -msgstr "" +msgstr "Korsning" msgid "Source Volume" -msgstr "" +msgstr "Source Volym" msgid "Tool Volume" -msgstr "" +msgstr "Verktygets volym" msgid "Subtract from" -msgstr "" +msgstr "Subtrahera från" msgid "Subtract with" -msgstr "" +msgstr "Subtrahera med" msgid "selected" -msgstr "" +msgstr "vald" msgid "Part 1" -msgstr "" +msgstr "Del 1" msgid "Part 2" -msgstr "" +msgstr "Del 2" msgid "Delete input" -msgstr "" +msgstr "Ta bort inmatning" msgid "Network Test" -msgstr "" +msgstr "Nätverkstest" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Börja testa flera trådar" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Starta testet med en tråd" msgid "Export Log" -msgstr "" +msgstr "Exportera logg" msgid "OrcaSlicer Version:" msgstr "" msgid "System Version:" -msgstr "" +msgstr "Systemversion:" msgid "DNS Server:" -msgstr "" +msgstr "DNS server:" msgid "Test OrcaSlicer(GitHub)" msgstr "" @@ -13280,100 +14357,118 @@ msgid "Test OrcaSlicer(GitHub):" msgstr "" msgid "Test Bing.com" -msgstr "" +msgstr "Test Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "Test bing.com:" msgid "Log Info" -msgstr "" +msgstr "Info om logg" msgid "Select filament preset" -msgstr "" +msgstr "Välj filament inställning" msgid "Create Filament" -msgstr "" +msgstr "Skapa filament" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Skapa baserat på aktuellt filament" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Kopiera aktuell filament inställning " msgid "Basic Information" -msgstr "" +msgstr "Grundläggande information" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Lägg till filament inställningar för detta filament" msgid "We could create the filament presets for your following printer:" -msgstr "" +msgstr "Vi kan skapa filament inställningar för följande printer:" msgid "Select Vendor" -msgstr "" +msgstr "Välj leverantör" msgid "Input Custom Vendor" -msgstr "" +msgstr "Ange anpassad leverantör" msgid "Can't find vendor I want" -msgstr "" +msgstr "Kan inte hitta den leverantör jag vill ha" msgid "Select Type" -msgstr "" +msgstr "Välj typ" msgid "Select Filament Preset" -msgstr "" +msgstr "Välj filament inställning" msgid "Serial" -msgstr "" +msgstr "Serienummer" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "t.ex. Basic, Matt, Silke, Marmor" msgid "Filament Preset" -msgstr "" +msgstr "Filament inställning" msgid "Create" -msgstr "" +msgstr "Skapa" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "Vendor is not selected; please reselect vendor." msgid "Custom vendor is not input, please input custom vendor." -msgstr "" +msgstr "Custom vendor missing; please input custom vendor." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"\"Bambu\" eller \"Generic\" kan inte användas som leverantör för anpassade " +"filament." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "Filament typ är inte vald, vänligen välj typ igen." msgid "Filament serial is not inputed, please input serial." -msgstr "" +msgstr "Filament serial missing; please input serial." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"There may be disallowed characters in the vendor or serial input of the " +"filament. Please delete and re-enter." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" +"Alla inmatningar i den anpassade leverantören eller serien är mellanslag. " +"Vänligen ange på nytt." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "The vendor can not be a number; please re-enter." msgid "" "You have not selected a printer or preset yet. Please select at least one." +msgstr "Du har ännu inte valt någon printer eller inställning. Välj minst en." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" msgstr "" +"Filamentnamnet %s som du skapade finns redan. \n" +"Om du fortsätter kommer den skapade inställningen att visas med sitt " +"fullständiga namn. Vill du fortsätta?" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "Vissa befintliga inställningar har inte skapats, enligt följande:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"Vill du skriva om det?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" @@ -13382,114 +14477,112 @@ msgid "" msgstr "" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Skapa Printer/Nozzel" msgid "Create Printer" -msgstr "" +msgstr "Skapa printer" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Skapa nozzel för befintlig skrivare" msgid "Create from Template" -msgstr "" +msgstr "Skapa från mall" msgid "Create Based on Current Printer" -msgstr "" +msgstr "Skapa baserat på aktuell printer" msgid "Import Preset" -msgstr "" +msgstr "Importera inställning" msgid "Create Type" -msgstr "" +msgstr "Skapa typ" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "The model was not found; please reselect vendor." msgid "Select Model" -msgstr "" +msgstr "Välj modell" msgid "Select Printer" -msgstr "" +msgstr "Välj Printer" msgid "Input Custom Model" -msgstr "" +msgstr "Mata in anpassad modell" msgid "Can't find my printer model" -msgstr "" +msgstr "Kan inte hitta min printer modell" msgid "Rectangle" -msgstr "" +msgstr "Rektangel" msgid "Printable Space" -msgstr "" - -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" +msgstr "Utskriftsbar yta" msgid "Hot Bed STL" -msgstr "" +msgstr "Värmeplatta STL" msgid "Load stl" -msgstr "" +msgstr "Ladda stl" msgid "Hot Bed SVG" -msgstr "" +msgstr "Värmeplatta SVG" msgid "Load svg" -msgstr "" +msgstr "Ladda svg" msgid "Max Print Height" -msgstr "" +msgstr "Max utskriftshöjd" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "Filen överstiger %d MB, vänligen importera igen." msgid "Exception in obtaining file size, please import again." -msgstr "" +msgstr "Undantag vid erhållande av filstorlek, vänligen importera igen." msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "Inställd sökväg hittades inte; vänligen välj leverantör igen." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "Printer modellen hittades inte, välj igen." msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "The nozzle diameter was not found; please reselect." msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "The printer preset was not found; please reselect." msgid "Printer Preset" -msgstr "" +msgstr "Printer inställningar" msgid "Filament Preset Template" -msgstr "" +msgstr "Filament inställnings mall" msgid "Deselect All" -msgstr "" +msgstr "Avmarkera alla" msgid "Process Preset Template" -msgstr "" +msgstr "Mall för process inställning" msgid "Back Page 1" -msgstr "" +msgstr "Tillbaka Sida 1" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"Du har ännu inte valt vilken printer inställning du vill skapa baserat på. " +"Välj leverantör och modell för printern" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"Du har angett ett otillåtet tecken i det utskrivbara området på första " +"sidan. Använd endast siffror." msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "The custom printer or model missing; please input." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -13500,73 +14593,99 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserved.\n" +"\tCancel: Do not create a preset; return to the creation interface." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "Du måste välja minst en inställning för filament." msgid "You need to select at least one process preset." -msgstr "" +msgstr "Du måste välja minst en process inställning." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "Skapa inställningar för filament misslyckades. Enligt följande:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "Skapa process inställningar misslyckades. Enligt följande:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Leverantören hittades inte; välj igen." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "Nuvarande leverantör har inga modeller, vänligen välj om." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"Du har inte valt leverantör och modell eller angett anpassad leverantör och " +"modell." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"Det kan finnas escape tecken i den anpassade printerns leverantör eller " +"modell. Vänligen radera och ange igen." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" +"Alla inmatningar i den anpassade printer leverantören eller modellen är " +"mellanslag. Vänligen ange på nytt." msgid "Please check bed printable shape and origin input." -msgstr "" +msgstr "Kontrollera byggplattans utskrivbara form och ursprungs inmatning." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"Du har ännu inte valt vilken printer som nozzeln ska bytas ut på; välj en " +"printer." msgid "Create Printer Successful" -msgstr "" +msgstr "Skapa Printer lyckades" msgid "Create Filament Successful" -msgstr "" +msgstr "Filament Created Successfully" msgid "Printer Created" -msgstr "" +msgstr "Printer skapad" msgid "Please go to printer settings to edit your presets" -msgstr "" +msgstr "Gå till printer inställningar för att redigera dina inställningar" msgid "Filament Created" -msgstr "" +msgstr "Filament skapad" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Gå till filament inställningar för att redigera dina inställningar om du " +"behöver.\n" +"Observera att nozzel temperatur, värmebädds temperatur och maximal " +"volymhastighet alla har en betydande inverkan på utskriftskvaliteten. Ställ " +"in dem noggrant." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" msgid "Printer Setting" -msgstr "" - -msgid "Export Configs" -msgstr "" +msgstr "Printer inställningar" msgid "Printer config bundle(.orca_printer)" msgstr "" @@ -13575,31 +14694,31 @@ msgid "Filament bundle(.orca_filament)" msgstr "" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Printer inställningar(.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Filament inställningar (.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Process inställningar(.zip)" msgid "initialize fail" -msgstr "" +msgstr "initialisering misslyckad" msgid "add file fail" -msgstr "" +msgstr "lägg till fil misslyckas" msgid "add bundle structure file fail" -msgstr "" +msgstr "lägg till filstrukturs paket misslyckades" msgid "finalize fail" -msgstr "" +msgstr "slutför misslyckande" msgid "open zip written fail" -msgstr "" +msgstr "öppna zip skripten misslyckades" msgid "Export successful" -msgstr "" +msgstr "Export lyckades" #, c-format, boost-format msgid "" @@ -13608,6 +14727,10 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it?\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" @@ -13618,51 +14741,68 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"Användarens inställning för filament. \n" +"Kan delas med andra." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Endast printer med ändringar av inställningar för printer, filament och " +"process visas." msgid "Only display the filament names with changes to filament presets." -msgstr "" +msgstr "Visa endast filament namnen vid ändringar av filament inställningar." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Endast printer namn med inställningar för printer visas, och varje " +"inställning du väljer exporteras som zip-fil." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Endast filament namn med inställningar för användar filament visas, \n" +"och alla inställningar för användar filament i varje filament namn du väljer " +"exporteras som en zip-fil." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Endast printer namn med ändrade process inställningar visas, \n" +"och alla användarprocess inställningar i varje printer namn som du väljer " +"exporteras som zip-fil." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Välj minst en printer eller ett filament." msgid "Please select a type you want to export" -msgstr "" +msgstr "Välj en inställningstyp som du vill exportera" + +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "Failed to create temporary folder, please try Export Configs again." msgid "Edit Filament" -msgstr "" +msgstr "Redigera filament" msgid "Filament presets under this filament" -msgstr "" +msgstr "Filament inställningar för detta filament" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Observera: Om den enda inställningen under detta filament raderas, kommer " +"filamentet att raderas efter att dialogen har avslutats." msgid "Presets inherited by other presets can not be deleted" -msgstr "" +msgstr "Inställningar som ärvts av andra inställningar kan inte raderas" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." @@ -13670,181 +14810,217 @@ msgstr[0] "" msgstr[1] "" msgid "Delete Preset" -msgstr "" +msgstr "Ta bort inställning" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "Är du säker på att du vill radera den valda inställningen?" msgid "Delete preset" -msgstr "" +msgstr "Ta bort inställning" msgid "+ Add Preset" -msgstr "" +msgstr "+ Lägg till inställning" msgid "Delete Filament" -msgstr "" +msgstr "Ta bort filament" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"Alla filament inställningar som hör till detta filament kommer att " +"raderas. \n" +"Om du använder detta filament i din printer, vänligen återställ filament " +"informationen för den platsen." msgid "Delete filament" -msgstr "" +msgstr "Ta bort filament" msgid "Add Preset" -msgstr "" +msgstr "Lägg till inställning" msgid "Add preset for new printer" -msgstr "" +msgstr "Lägg till inställningar för ny skrivare" msgid "Copy preset from filament" -msgstr "" +msgstr "Kopiera inställning från filament" msgid "The filament choice not find filament preset, please reselect it" -msgstr "" +msgstr "Filament valet hittar inte filament inställningen, välj det igen" msgid "[Delete Required]" -msgstr "" +msgstr "[Radera krävs]" msgid "Edit Preset" -msgstr "" +msgstr "Redigera inställningar" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "For more information, please check out our Wiki" msgid "Collapse" -msgstr "" +msgstr "Komprimera" msgid "Daily Tips" +msgstr "Dagliga tips" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "nozzel memorerat: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" msgstr "" +"Your nozzle diameter in preset is not consistent with the saved nozzle " +"diameter. Have you changed your nozzle?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*Utskrift av %s material med %s kan orsaka skador på nozzeln" msgid "Need select printer" -msgstr "" +msgstr "Välj printer" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "Start, slut eller steg är inte giltigt värde." msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" msgstr "" +"Går inte att kalibrera: kan bero på att det inställda kalibreringsvärdet är " +"för stort, eller att steget är för litet" msgid "Physical Printer" -msgstr "" +msgstr "Fysisk printer" msgid "Print Host upload" -msgstr "" +msgstr "Uppladdning utskriftsvärd" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "Det gick inte att hämta en giltig printer värdreferens" msgid "Success!" -msgstr "" +msgstr "Lyckades!" msgid "Are you sure to log out?" msgstr "" msgid "Refresh Printers" +msgstr "Uppdatera skrivare" + +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" msgstr "" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" +"HTTPS CA-filen är valfri. Den behövs bara om du använder HTTPS med ett " +"självsignerat certifikat." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" +msgstr "Certifikatfiler (*.crt, *.pem)|*.crt;*.pem|Alla filer|*.*" msgid "Open CA certificate file" -msgstr "" +msgstr "Öppna CA-certifikatfilen" #, c-format, boost-format msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" +"På det här systemet använder %s HTTPS-certifikat från systemets " +"Certifikatarkiv eller Keyring." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " "Keychain." msgstr "" +"Om du vill använda en anpassad CA-fil importerar du CA-filen till " +"Certificate Store/Keychain." msgid "Login/Test" msgstr "" msgid "Connection to printers connected via the print host failed." msgstr "" +"Anslutningen till printrar som är anslutna via printer värden misslyckades." #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Felaktig typ av utskriftsvärd: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "Connection to AstroBox is working correctly." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Kunde inte ansluta till AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Note: AstroBox version 1.1.0 or higher is required." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "Connection to Duet is working correctly." msgid "Could not connect to Duet" -msgstr "" +msgstr "Kunde inte ansluta till Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Okänt fel uppstod" msgid "Wrong password" -msgstr "" +msgstr "Fel lösenord" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Det gick inte att hämta resurser för att skapa en ny anslutning" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "Uppladdning inte aktiverad på FlashAir kort." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "Connection to FlashAir is working correctly and upload is enabled." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Kunde inte ansluta till FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Obs: FlashAir med firmware 2.00.02 eller nyare och aktiverad " +"uppladdningsfunktion krävs." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "Connection to MKS is working correctly." msgid "Could not connect to MKS" -msgstr "" +msgstr "Kunde inte ansluta till MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Connection to OctoPrint is working correctly." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Kunde inte ansluta till OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Note: OctoPrint version 1.1.0 or higher is required." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Connection to Prusa SL1 / SL1S is working correctly." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Kunde inte ansluta till Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Connection to PrusaLink is working correctly." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Kunde inte ansluta till PrusaLink" msgid "Storages found" msgstr "" @@ -13871,19 +15047,21 @@ msgid "Could not connect to Prusa Connect" msgstr "" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Connection to Repetier is working correctly." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Kunde inte ansluta till Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Note: Repetier version 0.90.0 or higher is required." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP-status: %1%\n" +"Meddelandets kropp: \"%2%\"" #, boost-format msgid "" @@ -13891,6 +15069,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Parsning av värdsvaret misslyckades.\n" +"Meddelandetext: \"%1%\"\n" +"Fel: \"%2%\"" #, boost-format msgid "" @@ -13898,6 +15079,260 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Uppräkning av värdprintern misslyckades.\n" +"Meddelandets huvuddel: \"%1%\"\n" +"Felmeddelande: \"%2%\"" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a small layer height, and results in almost negligible layer lines " +"and high print quality. It is suitable for most general printing cases." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. This results in " +"much higher print quality but a much longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height. This results in almost negligible layer lines and " +"slightly longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height. This results in slightly visible layer lines but shorter print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height. This results in almost invisible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost invisible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height. This results in minimal layer lines and higher print quality but " +"longer print time." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in minimal layer lines and much higher print quality " +"but much longer print time." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"It has a normal layer height, and results in average layer lines and print " +"quality. It is suitable for most printing cases." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but slightly shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in less apparent layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. This results in almost negligible layer lines and much higher print " +"quality but much longer print time." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height. This results in almost negligible layer lines and longer print time." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. This results in higher print strength " +"but more filament consumption and longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in more apparent layer lines and lower print quality " +"but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height. This results in much more apparent layer lines and much lower print " +"quality, but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and slightly higher print " +"quality but longer print time." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height. This results in less apparent layer lines and higher print quality " +"but longer print time." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"It has a very big layer height, and results in very apparent layer lines, " +"low print quality and shorter printing time." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height. This results in very apparent layer lines and much lower print " +"quality but shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height. This results in extremely apparent layer lines and much lower " +"print quality but much shorter print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height. This results in slightly less but still apparent layer " +"lines and slightly higher print quality, but longer print time in some cases." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height. This results in less but still apparent layer lines and slightly " +"higher print quality, but longer print time in some cases." msgid "Connected to Obico successfully!" msgstr "" @@ -13911,17 +15346,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14023,6 +15456,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Fixa modell\n" +"Visste du att du kan fixa en skadad 3D-modell för att undvika en hel del " +"berednings problem i Windows-systemet?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -14262,6 +15698,10 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"När behöver du skriva ut med printer dörren öppen?\n" +"Visste du att en öppen printer dörr kan minska risken för igensättning av " +"extruder/hotend vid utskrift av filament med lägre temperatur och högre " +"kapslingstemperatur? Det finns mer information om detta i Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -14270,6 +15710,243 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Undvik vridning\n" +"Visste du att när du skriver ut material som är benägna att vrida, såsom " +"ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten " +"för vridning." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Ange ett giltigt värde (K i 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Ange ett giltigt värde (K i 0~0.3, N i 0.6~2.0)" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Den lokala anslutningen till skrivaren misslyckades; försök igen." + +#~ 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 "" +#~ "Information om Flow Dynamics Calibration finns i vår wiki.\n" +#~ "\n" +#~ "Vanligtvis är kalibreringen onödig. När du startar en utskrift i en färg/" +#~ "material, med alternativet \"flödesdynamisk kalibrering\" markerat i " +#~ "startmenyn, kommer skrivaren att följa det gamla sättet, kalibrera " +#~ "filamentet före utskriften; När du startar en utskrift i flera färger/" +#~ "material kommer skrivaren att använda standard kompensations parametern " +#~ "för filamentet vid varje filamentbyte, vilket ger ett bra resultat i de " +#~ "flesta fall.\n" +#~ "\n" +#~ "Observera att det finns några fall som gör att kalibreringsresultatet " +#~ "inte blir tillförlitligt: använd en strukturplatta för att göra " +#~ "kalibreringen; byggplattan har inte bra vidhäftning (tvätta byggplattan " +#~ "eller applicera lim!) ...Du kan hitta mer från vår wiki.\n" +#~ "\n" +#~ "Kalibreringsresultaten har cirka 10 procent fel i vårt test, vilket kan " +#~ "orsaka att resultatet inte är exakt detsamma i varje kalibrering. Vi " +#~ "undersöker fortfarande grundorsaken för att kunna göra förbättringar med " +#~ "nya uppdateringar." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Endast ett av resultaten med samma namn kommer att sparas. Är du säker på " +#~ "att du vill ersätta de andra resultaten?" + +#, 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 "" +#~ "Det finns redan ett tidigare kalibreringsresultat med samma namn: %s. " +#~ "Endast ett av resultaten med samma namn sparas. Är du säker på att du " +#~ "vill ersätta det tidigare resultatet?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Hitta hörnet med den perfekta graden av extrudering" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Export &Configs" +#~ msgstr "Exportera konfiguration" + +#~ msgid "Infill direction" +#~ msgstr "Ifyllnads riktning" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "Aktivera detta för att få en G-kod med G2 och G3 drag. Passnings " +#~ "toleransen är densamma som upplösningen" + +#~ 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 "" +#~ "Detta gör att ifyllnads området kan förstoras något för att överlappa " +#~ "väggarna för bättre vidhäftning.Det procentuella värdet är i förhållande " +#~ "till linjebredden för sparsam ifyllnad" + +#~ msgid "Unload Filament" +#~ msgstr "Mata ut" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Välj ett AMS fack tryck sedan \"Ladda eller \"Mata ur\" knappen för att " +#~ "automatiskt mata eller mata ut filament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Moderkort" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "X Kamera" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "active" +#~ msgstr "aktiv" + +#~ msgid "Jump to layer" +#~ msgstr "Hoppa till lager" + +#~ msgid "Cabin humidity" +#~ msgstr "Inkapslingens fuktighet" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Grönt betyder att AMS-fuktigheten är normal, orange betyder att " +#~ "luftfuktigheten är hög, och rött betyder att luftfuktigheten är för hög. " +#~ "(Hygrometer: ju lägre desto bättre.)" + +#~ msgid "Desiccant status" +#~ msgstr "Status för torkmedel" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "En torkmedelsstatus som är lägre än två stänger indikerar att torkmedlet " +#~ "kan vara inaktivt. Byt torkmedel. (Ju högre desto bättre.)" + +#~ 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 "" +#~ "Observera: När locket är öppet eller torkmedelspaketet byts ut kan det ta " +#~ "timmar eller en natt att absorbera fukten. Låga temperaturer saktar också " +#~ "ner processen. Under denna tid kan det hända att indikatorn inte " +#~ "representerar kammaren korrekt." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Observera: Om nytt filament sätts in under utskrift kommer AMS inte " +#~ "automatiskt att läsa av någon information förrän utskriften är avslutad." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Success! G-code exporterades till %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Start misslyckad (Ingen Enhet)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Initieringen misslyckades (ingen kamera enhet)!" + +#~ 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 "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)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Stoppad [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Laddning misslyckad [%d]!" + +#, 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]" + +#~ 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 "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Det går inte att utföra booleska operationer på modell mesh. Endast " +#~ "positiva delar kommer att exporteras." + +#, 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 "" +#~ "Du har ändrat vissa inställningar för inställningen \"%1%\".\n" +#~ "Vill du behålla dessa inställningar (nytt värde) när du byter " +#~ "inställningar?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Du har ändrat några inställningar.\n" +#~ "Vill du behålla ändrade inställningar (nytt värde) när du byter " +#~ "inställningar?" #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index d905045482..f15f4b096e 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -1,22 +1,18 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# msgid "" msgstr "" -"Project-Id-Version: OrcaSlicer\n" +"Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2024-03-29 21:50+0300\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"PO-Revision-Date: 2024-06-17 10:12+0300\n" "Last-Translator: Olcay ÖREN\n" -"Language-Team: Türkçe\n" -"Language: tr_TR\n" +"Language-Team: \n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.3.2\n" -"X-Loco-Version: 2.6.4-dev; wp-6.3.1\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "Destek Boyama" @@ -260,6 +256,9 @@ msgstr "Döndürmeyi Sıfırla" msgid "World coordinates" msgstr "Dünya koordinatları" +msgid "Object coordinates" +msgstr "Nesne koordinatları" + msgid "°" msgstr "°" @@ -500,14 +499,14 @@ msgstr "Geçersiz bağlayıcılar algılandı" #, c-format, boost-format msgid "%1$d connector is out of cut contour" msgid_plural "%1$d connectors are out of cut contour" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%1$d bağlayıcı kesim konturunun dışında" +msgstr[1] "%1$d bağlayıcı kesim konturunun dışında" #, c-format, boost-format msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%1$d bağlayıcı nesnenin dışında" +msgstr[1] "%1$d bağlayıcı nesnenin dışında" msgid "Some connectors are overlapped" msgstr "Bazı konektörler üst üste binmiş" @@ -1019,7 +1018,7 @@ msgstr "" "belirtmeniz gerekir." msgid "No symbol" -msgstr "No symbol" +msgstr "Sembol yok" msgid "Loading" msgstr "Yükleniyor" @@ -1105,13 +1104,13 @@ msgstr "SVG eylemleri" msgid "SVG" msgstr "SVG" -#, fuzzy, boost-format +#, boost-format msgid "Opacity (%1%)" -msgstr "Opaklık (%1)" +msgstr "Opaklık (%1%)" -#, fuzzy, boost-format +#, boost-format msgid "Color gradient (%1%)" -msgstr "Renk gradyanı (%1)" +msgstr "Renk gradyanı (%1%)" msgid "Undefined fill type" msgstr "Tanımsız dolgu türü" @@ -1138,22 +1137,22 @@ msgstr "" "Son şekil, aynı koordinata sahip birden fazla noktanın kendi kendine " "kesişimini içerir." -#, fuzzy, boost-format +#, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "Şekil görünmez (%1) olarak işaretlendi." +msgstr "Şekil görünmez (%1%) olarak işaretlendi." #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. -#, fuzzy, boost-format +#, boost-format msgid "Fill of shape (%1%) contains unsupported: %2%." -msgstr "Şeklin dolgusu (%1) desteklenmeyenleri içeriyor: %2%." +msgstr "Şeklin dolgusu (%1%) desteklenmeyenleri içeriyor: %2%." -#, fuzzy, boost-format +#, boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "Şeklin konturu (%1) çok ince (minimum genişlik %2 mm'dir)." +msgstr "Şeklin konturu (%1%) çok ince (minimum genişlik %2% mm'dir)." -#, fuzzy, boost-format +#, boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." -msgstr "Şeklin konturu (%1) desteklenmeyenleri içeriyor: %2%." +msgstr "Şeklin konturu (%1%) desteklenmeyenleri içeriyor: %2%." msgid "Face the camera" msgstr "Kameraya bak" @@ -1206,9 +1205,9 @@ msgid "Size in emboss direction." msgstr "Kabartma yönünde boyut." #. TRN: The placeholder contains a number. -#, fuzzy, boost-format +#, boost-format msgid "Scale also changes amount of curve samples (%1%)" -msgstr "Ölçek ayrıca eğri örneklerinin miktarını da değiştirir (%1)" +msgstr "Ölçek ayrıca eğri örneklerinin miktarını da değiştirir (%1%)" msgid "Width of SVG." msgstr "SVG'nin genişliği." @@ -1251,21 +1250,21 @@ msgstr "Ayna" msgid "Choose SVG file for emboss:" msgstr "Kabartma için SVG dosyasını seçin:" -#, fuzzy, boost-format +#, boost-format msgid "File does NOT exist (%1%)." -msgstr "Dosya mevcut DEĞİL (%1)." +msgstr "Dosya mevcut DEĞİL (%1%)." #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" msgstr "Dosya adının \".svg\" ile bitmesi gerekiyor ancak siz %1%'i seçtiniz" -#, fuzzy, boost-format +#, boost-format msgid "Nano SVG parser can't load from file (%1%)." -msgstr "Nano SVG ayrıştırıcı dosyadan (%1) yüklenemiyor." +msgstr "Nano SVG ayrıştırıcı dosyadan (%1%) yüklenemiyor." -#, fuzzy, boost-format +#, boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." -msgstr "SVG dosyası kabartma yapılacak tek bir yol İÇERMEZ (%1)." +msgstr "SVG dosyası kabartma yapılacak tek bir yol İÇERMEZ (%1%)." msgid "Vertex" msgstr "Tepe noktası" @@ -1301,7 +1300,7 @@ msgid "Select point" msgstr "Nokta seç" msgid "Delete" -msgstr "Sil" +msgstr "Delete" msgid "Restart selection" msgstr "Seçimi sıfırla" @@ -1386,9 +1385,6 @@ msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "\"%1%\" yapılandırma dosyası yüklendi ancak bazı değerler tanınamadı." -msgid "V" -msgstr "V" - 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." @@ -1498,6 +1494,9 @@ msgstr "" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Bir veya daha fazla dosya seçin (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "ZIP dosyasını seçin:" + msgid "Choose one file (gcode/3mf):" msgstr "Bir dosya seçin (gcode/3mf):" @@ -1568,6 +1567,13 @@ msgstr "Devam eden yüklemeler" msgid "Select a G-code file:" msgstr "G kodu dosyası seçin:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"URL indirme işlemi başlatılamadı. Hedef klasör ayarlanmamış. Lütfen " +"Yapılandırma Sihirbazı’nda hedef klasörü seçin." + msgid "Import File" msgstr "Dosya İçe Aktar" @@ -1800,8 +1806,8 @@ msgstr "Varsayılan" msgid "Filament %d" msgstr "Filament %d" -msgid "active" -msgstr "aktif" +msgid "current" +msgstr "geçerli" msgid "Scale to build volume" msgstr "Yapı hacmine göre ölçeklendir" @@ -1893,6 +1899,9 @@ msgstr "Şekil Ekle" msgid "Add Handy models" msgstr "Pratik Modeller Ekle" +msgid "Add Models" +msgstr "Model Ekle" + msgid "Show Labels" msgstr "Etiketleri Göster" @@ -1942,13 +1951,19 @@ msgid "Arrange" msgstr "Hizala" msgid "arrange current plate" -msgstr "mevcut plakayı hizala" +msgstr "Mevcut plakayı hizala" + +msgid "Reload All" +msgstr "Tümünü Yeniden Yükle" + +msgid "reload all from disk" +msgstr "Hepsini diskten yeniden yükle" msgid "Auto Rotate" msgstr "Otomatik döndürme" msgid "auto rotate current plate" -msgstr "geçerli plakayı otomatik döndürme" +msgstr "Geçerli plakayı otomatik döndürme" msgid "Delete Plate" msgstr "Plakayı Sil" @@ -1977,9 +1992,6 @@ msgstr "Filamenti Değiştir" msgid "Set Filament for selected items" msgstr "Seçilen öğeler için Filamenti ayarla" -msgid "current" -msgstr "geçerli" - msgid "Unlock" msgstr "Kilidi aç" @@ -2307,9 +2319,6 @@ msgstr "Geçerli katmanda kullanılan Özel G kodunu girin:" msgid "Jump to Layer" msgstr "Katmana Atla" -msgid "Jump to layer" -msgstr "Katmana atla" - msgid "Please enter the layer number" msgstr "Lütfen katman numarasını girin" @@ -2380,7 +2389,7 @@ msgstr "Yazıcıya bağlanılamadı" msgid "Connection to printer failed" msgstr "Yazıcıya bağlantı başarısız oldu" -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "Lütfen yazıcının ve Studio'nun ağ bağlantısını kontrol edin." msgid "Connecting..." @@ -2404,11 +2413,11 @@ msgstr "Otomatik Doldurma" msgid "AMS not connected" msgstr "AMS bağlı değil" -msgid "Load Filament" -msgstr "Filament Yükle" +msgid "Load" +msgstr "Yükle" -msgid "Unload Filament" -msgstr "Filamenti Çıkarın" +msgid "Unload" +msgstr "Boşalt" msgid "Ext Spool" msgstr "Harici Makara" @@ -2425,7 +2434,7 @@ msgstr "Yeniden dene" msgid "Calibrating AMS..." msgstr "AMS kalibre ediliyor..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Kalibrasyon sırasında bir sorun oluştu. Çözümü görüntülemek için tıklayın." @@ -2467,10 +2476,10 @@ msgstr "Yeni filament al" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Filamenti otomatik olarak yüklemek veya çıkarmak için bir AMS yuvası seçin " -"ve ardından \"Yükle\" veya \"Boşalt\" düğmesine basın." +"Bir AMS yuvası seçin ve filamentleri otomatik olarak yüklemek veya boşaltmak " +"için “Yükle” veya “Boşalt” düğmesine basın." msgid "Edit" msgstr "Düzenle" @@ -2737,14 +2746,8 @@ msgstr "Orca Dilimleyici şu lisansa sahiptir: " msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero Genel Kamu Lisansı, sürüm 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" -msgstr "" -"Orca Slicer, Prusa Research'ün PrusaSlicer'ından Bambulab'ın " -"BambuStudio'sunu temel alıyor. PrusaSlicer, Alessandro Ranellucci ve RepRap " -"topluluğu tarafından hazırlanan Slic3r'dendir" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer, PrusaSlicer ve BambuStudio’yu temel alır" msgid "Libraries" msgstr "Kütüphaneler" @@ -2806,10 +2809,10 @@ msgstr "" "Sıcaklık" msgid "max" -msgstr "maks" +msgstr "maksimum" msgid "min" -msgstr "min" +msgstr "minimum" #, boost-format msgid "The input value should be greater than %1% and less than %2%" @@ -2842,11 +2845,14 @@ msgstr "Filament bilgisini temizlemek istediğinizden emin misiniz?" msgid "You need to select the material type and color first." msgstr "Önce malzeme türünü ve rengini seçmeniz gerekir." -msgid "Please input a valid value (K in 0~0.3)" -msgstr "Lütfen geçerli bir değer girin (K in 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "Lütfen geçerli bir değer girin (K %.1f~%.1f içinde)" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "Lütfen geçerli bir değer girin (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "" +"Lütfen geçerli bir değer girin (K %.1f~%.1f içinde, N %.1f~%.1f içinde)" msgid "Other Color" msgstr "Diğer renk" @@ -2950,37 +2956,19 @@ msgstr "AMS'yi devre dışı bırak" msgid "Print with the filament mounted on the back of chassis" msgstr "Şasinin arkasına monte edilmiş filamentle yazdırma" -msgid "Cabin humidity" -msgstr "Kabin nemi" +msgid "Current Cabin humidity" +msgstr "Mevcut Kabin nemi" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Yeşil, AMS neminin normal olduğunu, turuncu nemin yüksek olduğunu, kırmızı " -"ise nemin çok yüksek olduğunu gösterir.(Higrometre: ne kadar düşükse o kadar " -"iyidir.)" - -msgid "Desiccant status" -msgstr "Kurutucu durumu" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"İki çubuktan daha düşük bir kurutucu durumu, kurutucunun etkin olmadığını " -"gösterir. Lütfen kurutucuyu değiştirin.(Çubuklar: ne kadar yüksek olursa o " -"kadar iyidir.)" - -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 "" -"Not: Kapak açıkken veya kurutucu paketi değiştirildiğinde, nemin emilmesi " -"saatler veya bir gece sürebilir. Düşük sıcaklıklar da süreci yavaşlatır. Bu " -"süre zarfında gösterge hazneyi doğru şekilde temsil etmeyebilir." +"Lütfen kurutucuyu çok ıslandığında değiştirin. Gösterge aşağıdaki durumlarda " +"doğru temsil etmeyebilir: kapak açıkken veya nem çekici paketi " +"değiştirildiğinde. nemin emilmesi saatler alır, düşük sıcaklıklar da süreci " +"yavaşlatır." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3039,6 +3027,12 @@ msgstr "" "(Şu anda aynı markaya ait sarf malzemelerinin otomatik temini " "desteklenmektedir, malzeme türü ve rengi)" +msgid "DRY" +msgstr "KURU" + +msgid "WET" +msgstr "ISLAK" + msgid "AMS Settings" msgstr "AMS Ayarları" @@ -3053,10 +3047,10 @@ msgstr "" "olarak okuyacaktır. Bu yaklaşık 20 saniye sürer." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Not: Yazdırma sırasında yeni filament takılırsa AMS, yazdırma tamamlanana " +"Not: Yazdırma sırasında yeni bir filaman takılırsa AMS, yazdırma tamamlanana " "kadar herhangi bir bilgiyi otomatik olarak okumayacaktır." msgid "" @@ -3107,6 +3101,16 @@ msgstr "" "AMS, mevcut filament bittiğinde otomatik olarak aynı özelliklere sahip başka " "bir makaraya devam edecektir" +msgid "Air Printing Detection" +msgstr "Hava Baskısı Algılama" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Tıkanmayı ve filament taşmasını algılar, zamandan ve filamentten tasarruf " +"etmek için yazdırmayı anında durdurur." + msgid "File" msgstr "Dosya" @@ -3180,6 +3184,63 @@ msgstr "Floating reserved operand" msgid "Stack overflow" msgstr "Stack overflow" +msgid "Running post-processing scripts" +msgstr "İşlem sonrası komut dosyalarını çalıştırma" + +msgid "Successfully executed post-processing script" +msgstr "İşlem sonrası komut dosyası başarıyla çalıştırıldı" + +msgid "Unknown error occured during exporting G-code." +msgstr "G kodu dışa aktarılırken bilinmeyen bir hata oluştu." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu. Belki SD kart " +"yazma kilitlidir.\n" +"Hata mesajı: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu. Hedef cihazda " +"sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz " +"kullanmayı deneyin. Bozuk çıktı G kodu %1%.tmp konumunda." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Seçilen hedef klasöre kopyalandıktan sonra G kodunun yeniden adlandırılması " +"başarısız oldu. Geçerli yol: %1%.tmp. Lütfen dışa aktarmayı tekrar deneyin." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Geçici G kodunun kopyalanması tamamlandı ancak %1% konumundaki orijinal kod " +"kopyalama kontrolü sırasında açılamadı. Çıkış G kodu %2%.tmp konumundadır." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Geçici G kodunun kopyalanması tamamlandı ancak kopya kontrolü sırasında dışa " +"aktarılan kod açılamadı. Çıkış G kodu %1%.tmp konumundadır." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G kodu dosyası %1%’e aktarıldı" + msgid "Unknown error when export G-code." msgstr "G kodunu dışa aktarırken bilinmeyen hata." @@ -3193,13 +3254,6 @@ msgstr "" "Hata mesajı: %1%.\n" "Kaynak dosya %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "G kodunu %1%'e aktarmayı başardınız" - -msgid "Running post-processing scripts" -msgstr "İşlem sonrası komut dosyalarını çalıştırma" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu" @@ -3209,8 +3263,228 @@ msgstr "" "\"%1%\" hedefine yükleme planlanıyor. Bkz. Pencere -> Ana Bilgisayar Yükleme " "Sırasını Yazdır" +msgid "Device" +msgstr "Cihaz" + +msgid "Task Sending" +msgstr "Görev Gönderme" + +msgid "Task Sent" +msgstr "Görev Gönderildi" + +msgid "Edit multiple printers" +msgstr "Birden fazla yazıcıyı düzenleme" + +msgid "Select connected printers (0/6)" +msgstr "Bağlı yazıcıları seçin (0/6)" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "Bağlı Yazıcıları Seçin (%d/6)" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "Seçilebilecek maksimum yazıcı sayısı %d'dır" + +msgid "Offline" +msgstr "Çevrimdışı" + +msgid "No task" +msgstr "Görev yok" + +msgid "View" +msgstr "Görünüm" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "Yazıcıları Düzenle" + +msgid "Device Name" +msgstr "Cihaz Adı" + +msgid "Task Name" +msgstr "Görev Adı" + +msgid "Device Status" +msgstr "Cihaz Durumu" + +msgid "Actions" +msgstr "İşlemler" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "Lütfen buradan yönetmek istediğiniz cihazları seçin (en fazla 6 cihaz)" + +msgid "Add" +msgstr "Ekle" + +msgid "Idle" +msgstr "Boşta" + +msgid "Printing" +msgstr "Baskı" + +msgid "Upgrading" +msgstr "Yükseltiliyor" + +msgid "Incompatible" +msgstr "Uyumsuz" + +msgid "syncing" +msgstr "Senkronize ediliyor" + +msgid "Printing Finish" +msgstr "Yazdırma Bitti" + +msgid "Printing Failed" +msgstr "Yazdırma Başarısız" + +msgid "Printing Pause" +msgstr "Yazdırma Duraklatıldı" + +msgid "Prepare" +msgstr "Hazırlık" + +msgid "Slicing" +msgstr "Dilimleniyor" + +msgid "Pending" +msgstr "Askıda" + +msgid "Sending" +msgstr "Gönderiliyor" + +msgid "Sending Finish" +msgstr "Gönderme Bitti" + +msgid "Sending Cancel" +msgstr "Gönderme İptal Oldu" + +msgid "Sending Failed" +msgstr "Gönderim Başarısız" + +msgid "Print Success" +msgstr "Yazdırma Başarılı" + +msgid "Print Failed" +msgstr "Yazdırma Başarısız" + +msgid "Removed" +msgstr "Kaldırıldı" + +msgid "Resume" +msgstr "Sürdür" + +msgid "Stop" +msgstr "Durdur" + +msgid "Task Status" +msgstr "Görev durumu" + +msgid "Sent Time" +msgstr "Gönderilen Zaman" + +msgid "There are no tasks to be sent!" +msgstr "Gönderilecek görev yok!" + +msgid "No historical tasks!" +msgstr "Tarihi görevler yok!" + +msgid "Loading..." +msgstr "Yükleniyor..." + +msgid "No AMS" +msgstr "AMS Yok" + +msgid "Send to Multi-device" +msgstr "Çoklu cihaza gönder" + +msgid "Preparing print job" +msgstr "Yazdırma için hazırlanıyor" + +msgid "Abnormal print file data. Please slice again" +msgstr "Anormal yazdırma dosyası verileri. Lütfen tekrar dilimleyin" + +msgid "There is no device available to send printing." +msgstr "Baskı göndermek için kullanılabilir bir cihaz yok." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "Aynı anda kullanımda olan yazıcı sayısı 0'a eşit olamaz." + +msgid "Use External Spool" +msgstr "Harici Makara Kullanın" + +msgid "Use AMS" +msgstr "AMS kullanın" + +msgid "Select Printers" +msgstr "Yazıcıları Seçin" + +msgid "Ams Status" +msgstr "Ams Durumu" + +msgid "Printing Options" +msgstr "Yazdırma Seçenekleri" + +msgid "Bed Leveling" +msgstr "Yatak Tesviyesi" + +msgid "Timelapse" +msgstr "Timelapse" + +msgid "Flow Dynamic Calibration" +msgstr "Akış Dinamik Kalibrasyonu" + +msgid "Send Options" +msgstr "Gönderme Seçenekleri" + +msgid "Send to" +msgstr "Gönderildi" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"aynı anda kaç yazıcının ısıtma işleminden geçebileceği, aynı anda " +"ısıtılabilecek cihaz sayısına bağlıdır." + +msgid "Wait" +msgstr "Bekleyin" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"her parti başına dakika. (Isıtmanın tamamlanması ne kadar sürerse buna " +"bağlıdır.)" + +msgid "Send" +msgstr "Gönder" + +msgid "Name is invalid;" +msgstr "Geçersiz isim;" + +msgid "illegal characters:" +msgstr "yasadışı karakterler:" + +msgid "illegal suffix:" +msgstr "yasadışı sonek:" + +msgid "The name is not allowed to be empty." +msgstr "Ad alanı boş bırakılamaz." + +msgid "The name is not allowed to start with space character." +msgstr "Adın boşluk karakteriyle başlamasına izin verilmez." + +msgid "The name is not allowed to end with space character." +msgstr "Adın boşluk karakteriyle bitmesine izin verilmez." + +msgid "The name length exceeds the limit." +msgstr "Ad uzunluğu sınırı aşıyor." + msgid "Origin" -msgstr "Menşei" +msgstr "Konum" msgid "Size in X and Y of the rectangular plate." msgstr "Dikdörtgen plakanın X ve Y boyutları." @@ -3274,6 +3548,22 @@ msgstr "Yatak modelini içe aktarmak için bir STL dosyası seçin:" msgid "Bed Shape" msgstr "Yatak Şekli" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Önerilen minimum sıcaklık 190 dereceden azdır veya önerilen maksimum " +"sıcaklık 300 dereceden yüksektir.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"Önerilen minimum sıcaklık, önerilen maksimum sıcaklıktan yüksek olamaz.\n" + +msgid "Please check.\n" +msgstr "Lütfen kontrol edin.\n" + 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" @@ -3359,28 +3649,6 @@ msgstr "" "\n" "Değer 0'a sıfırlanacaktır." -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 "" -"Spiral mod yalnızca duvar döngüleri 1 olduğunda, destek devre dışı " -"bırakıldığında, üst kabuk katmanları 0 olduğunda, seyrek dolgu yoğunluğu 0 " -"olduğunda ve timelapse türü geleneksel olduğunda çalışır." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "" -" Ancak I3 yapısına sahip yazıcılar timelapse videolar oluşturmayacaktır." - -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 "" -"Bu ayarlar otomatik olarak değiştirilsin mi?\n" -"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak " -"etkinleştirin\n" -"Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3446,9 +3714,32 @@ msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" -"Dikiş eğimi başlangıç ​​yüksekliğinin katman yüksekliğinden daha küçük olması gerekir.\n" +"Dikiş eğimi başlangıç ​​yüksekliğinin katman yüksekliğinden daha küçük olması " +"gerekir.\n" "0 a sıfırla." +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 "" +"Spiral mod yalnızca duvar döngüleri 1 olduğunda, destek devre dışı " +"bırakıldığında, üst kabuk katmanları 0 olduğunda, seyrek dolgu yoğunluğu 0 " +"olduğunda ve timelapse türü geleneksel olduğunda çalışır." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr "" +" Ancak I3 yapısına sahip yazıcılar timelapse videolar oluşturmayacaktır." + +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 "" +"Bu ayarlar otomatik olarak değiştirilsin mi?\n" +"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak " +"etkinleştirin\n" +"Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" + msgid "Auto bed leveling" msgstr "Otomatik yatak tesviyesi" @@ -3554,18 +3845,6 @@ msgstr "İlk katman hatası duraklatılıyor" msgid "Nozzle clog pause" msgstr "Nozul tıkanıklığı duraklatılıyor" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Anakart" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Bilinmeyen" @@ -3724,9 +4003,6 @@ msgstr "Yazıcı Ayarları" msgid "parameter name" msgstr "parametre adı" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s yüzde olamaz" @@ -3738,6 +4014,10 @@ msgstr "Değer %s aralık dışında, devam edilsin mi?" msgid "Parameter validation" msgstr "Parametre doğrulama" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "Değer %s aralık dışında. Geçerli aralık %d ile %d arasındadır." + msgid "Value is out of range." msgstr "Değer aralık dışında." @@ -3751,6 +4031,18 @@ msgstr "" "%s%% için EVET,\n" "%s %s için HAYIR." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "Geçersiz giriş biçimi. Beklenen boyut vektörü biçimi: \"%1%\"" + +msgid "Input value is out of range" +msgstr "Girilen değer limit dışı" + +msgid "Some extension in the input is invalid" +msgstr "Girilen bazı uzantılar geçersiz" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Geçersiz format. Beklenen vektör formatı: \"%1%\"" @@ -3818,12 +4110,12 @@ msgstr "Ekran" msgid "Flushed" msgstr "Temizlenmiş" -msgid "Total" -msgstr "Toplam" - msgid "Tower" msgstr "Kule" +msgid "Total" +msgstr "Toplam" + msgid "Total Estimation" msgstr "Toplam Tahmini" @@ -3926,6 +4218,12 @@ msgstr "Zaman Tahmini" msgid "Normal mode" msgstr "Normal mod" +msgid "Total Filament" +msgstr "Total Filament" + +msgid "Model Filament" +msgstr "Model Filament" + msgid "Prepare time" msgstr "Hazırlık süresi" @@ -4019,6 +4317,9 @@ msgstr "Hizalama seçenekleri" msgid "Spacing" msgstr "Boşluk" +msgid "0 means auto spacing." +msgstr "0 otomatik aralık anlamına gelir." + msgid "Auto rotate for arrangement" msgstr "Düzenleme için otomatik döndür" @@ -4031,9 +4332,6 @@ msgstr "Ekstrüzyon kalibrasyon bölgesinden kaçın" msgid "Align to Y axis" msgstr "Y eksenine hizala" -msgid "Add" -msgstr "Ekle" - msgid "Add plate" msgstr "Plaka ekle" @@ -4165,6 +4463,9 @@ msgstr "Otomatik Kayıt İzleme" msgid "Go Live" msgstr "Canlı Yayına Geçin" +msgid "Liveview Retry" +msgstr "Canlı Görüntüleme Yeniden Deneme" + msgid "Resolution" msgstr "Çözünürlük" @@ -4217,14 +4518,11 @@ msgstr "Bazı ön ayarlar değiştirilirken Uygulama kapatılıyor." msgid "Logging" msgstr "Günlük kaydı" -msgid "Prepare" -msgstr "Hazırlık" - msgid "Preview" msgstr "Ön İzleme" -msgid "Device" -msgstr "Yazıcı" +msgid "Multi-device" +msgstr "Çoklu cihaz" msgid "Project" msgstr "Proje" @@ -4233,7 +4531,7 @@ msgid "Yes" msgstr "Evet" msgid "No" -msgstr "HAYIR" +msgstr "Hayır" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "" @@ -4251,9 +4549,6 @@ msgstr "Hepsini dilimle" msgid "Export G-code file" msgstr "G-kod dosyasını dışa aktar" -msgid "Send" -msgstr "Gönder" - msgid "Export plate sliced file" msgstr "Dilimlenmiş plaka dosyasını dışa aktar" @@ -4374,6 +4669,12 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMF'yi içe aktar" msgid "Load a model" msgstr "Model yükle" +msgid "Import Zip Archive" +msgstr "Zip Arşivini İçe Aktar" + +msgid "Load models contained within a zip archive" +msgstr "Zip arşivindeki modelleri yükle" + msgid "Import Configs" msgstr "Yapılandırmaları İçe Aktar" @@ -4407,8 +4708,8 @@ msgstr "G-kodunu dışa aktar" msgid "Export current plate as G-code" msgstr "Geçerli plakayı G kodu olarak dışa aktar" -msgid "Export &Configs" -msgstr "Yapılandırmaları Dışa Aktar" +msgid "Export Preset Bundle" +msgstr "Ön Ayar Paketini Dışa Aktar" msgid "Export current configuration to files" msgstr "Geçerli yapılandırmayı dosyalara aktar" @@ -4509,9 +4810,6 @@ msgstr "3B sahnede nesne çıkıntısı vurgusunu göster" msgid "Preferences" msgstr "Tercihler" -msgid "View" -msgstr "Görünüm" - msgid "Help" msgstr "Yardım" @@ -4540,7 +4838,7 @@ msgid "Retraction test" msgstr "Geri çekme testi" msgid "Orca Tolerance Test" -msgstr "Orca Tolerans Testi" +msgstr "Orca tolerans testi" msgid "Max flowrate" msgstr "Maksimum akış hızı" @@ -4578,10 +4876,10 @@ msgstr "&Takımyollarını OBJ olarak dışa aktar" msgid "Export toolpaths as OBJ" msgstr "Takımyollarını OBJ olarak dışa aktar" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "&Stüdyo'yu aç" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Stüdyoyu Aç" msgid "&Quit" @@ -4682,41 +4980,57 @@ msgstr "" msgid "Synchronization" msgstr "Senkronizasyon" -msgid "Initialize failed (No Device)!" -msgstr "Başlatma başarısız (Cihaz Yok)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Başlatma başarısız oldu (Cihaz bağlantısı hazır değil)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Başlatma başarısız oldu (Kamera Cihazı Yok)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Yazıcı indirme işlemiyle meşgul. Lütfen indirme işleminin bitmesini bekleyin." +"Cihaz daha fazla konuşmayı yönetemiyor. Lütfen daha sonra tekrar deneyin." -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "Başlatma başarısız oldu (Geçerli yazıcı sürümünde desteklenmiyor)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "Oynatıcı arızalı. Lütfen sistem oynatıcısını yeniden yükleyin." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Başlatma başarısız oldu (Yalnızca LAN modunda erişilemez)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"Oynatıcı yüklü değil, lütfen yeniden denemek için “oynat” düğmesine tıklayın." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Başlatma başarısız oldu (Yazıcının LAN ip'si eksik)!" +msgid "Please confirm if the printer is connected." +msgstr "Lütfen yazıcının bağlı olup olmadığını onaylayın." + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"Yazıcı şu anda indirmeyle meşgul. Lütfen bittikten sonra tekrar deneyin." + +msgid "Printer camera is malfunctioning." +msgstr "Yazıcı kamerası arızalı." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Sorun oluştu. Lütfen yazıcının ürün yazılımını güncelleyin ve tekrar deneyin." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Yalnızca LAN Canlı İzleme kapalı. Lütfen yazıcı ekranındaki canlı " +"görüntülemeyi açın." + +msgid "Please enter the IP of printer to connect." +msgstr "Lütfen bağlanmak için yazıcının IP’sini girin." msgid "Initializing..." msgstr "Başlatılıyor..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Başlatma başarısız oldu (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Bağlantı Başarısız. Lütfen ağı kontrol edip tekrar deneyin" -msgid "Network unreachable" -msgstr "Ağa ulaşılamıyor" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Lütfen ağı kontrol edip tekrar deneyin. Sorun devam ederse yazıcıyı yeniden " +"başlatabilir veya güncelleyebilirsiniz." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "[%d] durduruldu!" +msgid "The printer has been logged out and cannot connect." +msgstr "Yazıcıda oturum kapatıldı ve bağlanamıyor." msgid "Stopped." msgstr "Durdu." @@ -4747,19 +5061,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "Sanal kameranın başlatılması başarısız oldu (%s)!" +msgid "Network unreachable" +msgstr "Ağa ulaşılamıyor" + msgid "Information" msgstr "Bilgi" msgid "Playing..." msgstr "Oynatılıyor..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Yükleme başarısız [%d]!" - -msgid "Loading..." -msgstr "Yükleniyor..." - msgid "Year" msgstr "Yıl" @@ -4778,9 +5088,6 @@ msgstr "Dosyaları aya göre gruplandırın, en yenisi önce olsun." msgid "Show all files, recent first." msgstr "Tüm dosyaları göster, en yenisi önce." -msgid "Timelapse" -msgstr "Timelapse" - msgid "Switch to timelapse files." msgstr "Timelapse dosyalarına geç." @@ -4808,6 +5115,12 @@ msgstr "Seç" msgid "Batch manage files." msgstr "Dosyaları toplu olarak yönet." +msgid "Refresh" +msgstr "Yenile" + +msgid "Reload file list from printer." +msgstr "Dosya listesini yazıcıdan yeniden yükleyin." + msgid "No printers." msgstr "Yazıcı yok." @@ -4818,13 +5131,35 @@ msgstr "Bağlantı başarısız oldu [%d]!" msgid "Loading file list..." msgstr "Dosya listesi yükleniyor..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "Dosya yok [%d]" +msgid "No files" +msgstr "Dosya yok" + +msgid "Load failed" +msgstr "Yükleme başarısız" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Başlatma başarısız oldu (Cihaz bağlantısı hazır değil)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"SD karttaki dosyaya göz atmak mevcut donanım yazılımında desteklenmiyor. " +"Lütfen yazıcının ürün yazılımını güncelleyin." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" +"Başlatma başarısız oldu (Depolama alanı kullanılamıyor, SD kartı takın.)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "LAN Bağlantısı Başarısız (SD kart görüntülenemedi)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "SD karttaki dosyaya göz atmak Yalnızca LAN Modunda desteklenmez." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "Yükleme başarısız [%d]" +msgid "Initialize failed (%s)!" +msgstr "Başlatma başarısız oldu (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4848,10 +5183,10 @@ msgstr "Dosyayı sil" msgid "Fetching model infomations ..." msgstr "Model bilgileri alınıyor..." -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "Model bilgileri yazıcıdan alınamadı." -msgid "Failed to parse model infomations." +msgid "Failed to parse model information." msgstr "Model bilgileri ayrıştırılamadı." msgid "" @@ -4865,6 +5200,14 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "'%s' dosyası kayboldu! Lütfen tekrar indirin." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Dosyalar: %s\n" +"Başlık: %s\n" + msgid "Download waiting..." msgstr "İndirme bekleniyor..." @@ -4881,15 +5224,15 @@ msgstr "İndirme tamamlandı" msgid "Downloading %d%%..." msgstr "%d%% indiriliyor..." -msgid "Connection lost. Please retry." -msgstr "Bağlantı koptu. Lütfen tekrar deneyiniz." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Cihaz daha fazla konuşmayı yönetemiyor. Lütfen daha sonra tekrar deneyin." +"Yazıcıyı yeniden bağladığınızda işlem hemen tamamlanamıyor, lütfen daha " +"sonra tekrar deneyin." -msgid "File not exists." -msgstr "Dosya mevcut değil." +msgid "File does not exist." +msgstr "Dosya bulunmuyor." msgid "File checksum error. Please retry." msgstr "Dosya kontrol hatası. Lütfen tekrar deneyin." @@ -4946,12 +5289,6 @@ msgstr "Silindir eksenini ters çevir" msgid "Printing Progress" msgstr "Yazdırma İlerlemesi" -msgid "Resume" -msgstr "Sürdür" - -msgid "Stop" -msgstr "Durdur" - msgid "0" msgstr "0" @@ -4996,6 +5333,9 @@ msgstr "Kamera Görünümünü Değiştir" msgid "Control" msgstr "Kontrol" +msgid "Printer Parts" +msgstr "Printer Parts" + msgid "Print Options" msgstr "Yazdırma Seçenekleri" @@ -5009,14 +5349,11 @@ msgid "Aux" msgstr "Yardımcı" msgid "Cham" -msgstr "Cham" +msgstr "Bölme" msgid "Bed" msgstr "Yatak" -msgid "Unload" -msgstr "Boşalt" - msgid "Debug Info" msgstr "Hata Ayıklama Bilgisi" @@ -5203,9 +5540,6 @@ msgstr "Durum" msgid "Update" msgstr "Güncelle" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Bir daha gösterme" @@ -5236,6 +5570,38 @@ msgstr "%s bilgisi" msgid "Skip" msgstr "Atla" +msgid "Newer 3mf version" +msgstr "Daha yeni 3mf sürümü" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"3mf dosya sürümü Beta’dadır ve mevcut OrcaSlicer sürümünden daha yenidir." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "Orca Slicer Beta’yı denemek isterseniz tıklayabilirsiniz." + +msgid "Download Beta Version" +msgstr "Beta Sürümünü İndirin" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "3mf dosya sürümü mevcut Orca Slicer sürümünden daha yenidir." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Orca Dilimleyicinizi güncellemek, 3mf dosyasındaki tüm işlevleri " +"etkinleştirebilir." + +msgid "Current Version: " +msgstr "Şimdiki versiyonu:" + +msgid "Latest Version: " +msgstr "En son sürüm:" + +msgid "Not for now" +msgstr "Şu an için değil" + msgid "3D Mouse disconnected." msgstr "3D Fare bağlantısı kesildi." @@ -5305,12 +5671,12 @@ msgstr[1] "%1$d nesne, kesme nesnesinin parçaları olarak yüklendi" msgid "ERROR" msgstr "HATA" -msgid "CANCELED" -msgstr "İPTAL EDİLDİ" - msgid "COMPLETED" msgstr "TAMAMLANDI" +msgid "CANCELED" +msgstr "İPTAL EDİLDİ" + msgid "Cancel upload" msgstr "Yüklemeyi iptal et" @@ -5422,6 +5788,27 @@ msgstr "Uyarı Sesine İzin Ver" msgid "Filament Tangle Detect" msgstr "Filament Dolaşma Tespiti" +msgid "Nozzle Clumping Detection" +msgstr "Nozul Topaklanma Algılaması" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Nozulun filament veya diğer yabancı cisimler nedeniyle topaklanıp " +"topaklanmadığını kontrol edin." + +msgid "Nozzle Type" +msgstr "Nozul Tipi" + +msgid "Stainless Steel" +msgstr "Paslanmaz çelik" + +msgid "Hardened Steel" +msgstr "Güçlendirilmiş çelik" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Genel" @@ -5630,9 +6017,6 @@ msgstr "" msgid "You'd better upgrade your software.\n" msgstr "Yazılımınızı yükseltseniz iyi olur.\n" -msgid "Newer 3mf version" -msgstr "Daha yeni 3mf sürümü" - #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5681,6 +6065,9 @@ msgstr "Adım dosyasındaki bileşenlerin adı UTF8 formatında değil!" msgid "The name may show garbage characters!" msgstr "İsimde çöp karakterler görünebilir!" +msgid "Remember my choice." +msgstr "Seçimimi hatırla." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "\"%1%\" dosyası yüklenemedi. Geçersiz bir yapılandırma bulundu." @@ -5797,7 +6184,7 @@ msgid "Do you want to replace it" msgstr "Değiştirmek istiyor musun" msgid "Message" -msgstr "Mesah" +msgstr "Mesaj" msgid "Reload from:" msgstr "Yeniden yükle:" @@ -5808,9 +6195,6 @@ msgstr "Yeniden yüklenemiyor:" msgid "Error during reload" msgstr "Yeniden yükleme sırasında hata oluştu" -msgid "Slicing" -msgstr "Dilimleniyor" - msgid "There are warnings after slicing models:" msgstr "Modellerin dilimlenmesinden sonra uyarılar vardır:" @@ -5868,12 +6252,20 @@ msgstr "Model İçe aktarılıyor" msgid "prepare 3mf file..." msgstr "3mf dosyasını hazırla..." +msgid "Download failed, unknown file format." +msgstr "İndirme başarısız oldu, dosya türü bilinmiyor." + msgid "downloading project ..." msgstr "proje indiriliyor..." +msgid "Download failed, File size exception." +msgstr "İndirme başarısız oldu, Dosya boyutu sorunlu." + #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Proje %d%% indirildi" +msgstr "" +"Proje %d%% indirildiBambu Studio’ya içe aktarma başarısız oldu. Lütfen " +"dosyayı indirin ve manuel olarak içe aktarın." msgid "" "Importing to Orca Slicer failed. Please download the file and manually " @@ -5894,6 +6286,22 @@ msgstr "geçerli gcode içermiyor." msgid "Error occurs while loading G-code file" msgstr "G kodu dosyası yüklenirken hata oluşuyor" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "ZIP arşivinin %1% yoluna yüklenmesi başarısız oldu." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Dosya %1% konumuna açılamadı: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"%1%'de sıkıştırılmamış dosya bulunamadı. Dosyanın sıkıştırmadan çıkartılması " +"başarısız oldu." + msgid "Drop project file" msgstr "Proje dosyasını sürükle" @@ -5918,9 +6326,6 @@ msgstr "G kodu dosyaları modellerle birlikte yüklenemez!" msgid "Can not add models when in preview mode!" msgstr "Önizleme modundayken model eklenemiyor!" -msgid "Add Models" -msgstr "Model Ekle" - msgid "All objects will be removed, continue?" msgstr "Tüm nesneler kaldırılacak, devam edilsin mi?" @@ -5929,9 +6334,6 @@ msgstr "" "Mevcut projede kaydedilmemiş değişiklikler var. Devam etmeden önce " "kaydedilsin mi?" -msgid "Remember my choice." -msgstr "Seçimimi hatırla." - msgid "Number of copies:" msgstr "Kopya sayısı:" @@ -5963,10 +6365,26 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" -"Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca pozitif parçalar " -"ihraç edilecektir." +"Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca olumlu kısımlar " +"tutulacaktır. Kafesleri düzeltip tekrar deneyebilirsiniz." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Sebep: “%1%” kısmı boş." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Sebep: “%1%” bölümü bir birimi sınırlamıyor." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Sebep: “%1%” kısmında kendi kendine kesişme var." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Sebep: “%1%” ile başka bir parçanın kesişimi yok." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6122,6 +6540,14 @@ msgstr "Giriş Bölgesi" msgid "Stealth Mode" msgstr "Gizli mod" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" +"Bu, Bambu’nun bulut hizmetlerine veri aktarımını durdurur. BBL makinelerini " +"kullanmayan veya yalnızca LAN modunu kullanan kullanıcılar bu işlevi güvenle " +"açabilir." + msgid "Enable network plugin" msgstr "Ağ eklentisini etkinleştir" @@ -6137,6 +6563,28 @@ msgstr "Imperial" msgid "Units" msgstr "Birimler" +msgid "Allow only one OrcaSlicer instance" +msgstr "Yalnızca bir OrcaSlicer örneğine izin ver" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"OSX’te her zaman varsayılan olarak çalışan tek bir uygulama örneği vardır. " +"Ancak aynı uygulamanın birden fazla örneğinin komut satırından " +"çalıştırılmasına izin verilir. Böyle bir durumda bu ayarlar yalnızca bir " +"örneğe izin verecektir." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Bu etkinleştirilirse, OrcaSlicer başlatıldığında ve aynı OrcaSlicer’ın başka " +"bir örneği zaten çalışıyorken, bunun yerine bu örnek yeniden " +"etkinleştirilecektir." + msgid "Home" msgstr "Ana Sayfa" @@ -6146,8 +6594,23 @@ msgstr "Varsayılan Sayfa" msgid "Set the page opened on startup." msgstr "Açılışta açılacak sayfayı ayarlayın." +msgid "Touchpad" +msgstr "Dokunmatik yüzey" + +msgid "Camera style" +msgstr "Kamera stili" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Kamera gezinme stilini seçin.\n" +"Varsayılan: Döndürme için LMB+hareket, kaydırma için RMB/MMB+hareket.\n" +"Dokunmatik yüzey: Döndürme için Alt+hareket, kaydırma için Shift+hareket." + msgid "Zoom to mouse position" -msgstr "Fare konumuna yakınlaştır" +msgstr "Mouse konumuna yakınlaştır" msgid "" "Zoom in towards the mouse pointer's position in the 3D view, rather than the " @@ -6164,6 +6627,13 @@ msgstr "" "Etkinleştirilirse serbest kamerayı kullanın. Etkin değilse kısıtlı kamerayı " "kullanın." +msgid "Reverse mouse zoom" +msgstr "Mouse yakınlaştırmasını tersine çevir" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" +"Etkinleştirilirse, mouse tekerleğiyle yakınlaştırmanın yönü tersine çevrilir." + msgid "Show splash screen" msgstr "Açılış ekranını göster" @@ -6182,6 +6652,35 @@ msgstr "Hacimleri temizleme: Renk her değiştiğinde otomatik olarak hesapla." msgid "If enabled, auto-calculate everytime the color changed." msgstr "Etkinleştirilirse, renk her değiştiğinde otomatik hesapla." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "" +"Yıkama hacimleri: Filament her değiştirildiğinde otomatik olarak hesaplanır." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "Etkinleştirilirse filaman her değiştirildiğinde otomatik hesaplama" + +msgid "Remember printer configuration" +msgstr "Yazıcı yapılandırmasını hatırla" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Etkinleştirilirse, Orca her yazıcı için filament/işlem yapılandırmasını " +"hatırlayacak ve otomatik olarak değiştirecektir." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" +"Çoklu Cihaz Yönetimi(Studio yeniden başlatıldıktan sonra geçerli olur)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Bu seçenek etkinleştirildiğinde, aynı anda birden fazla cihaza bir görev " +"gönderebilir ve birden fazla cihazı yönetebilirsiniz." + msgid "Network" msgstr "Ağ" @@ -6227,6 +6726,48 @@ msgstr "" "Etkinleştirilirse, OrcaSlicer'ı .step dosyalarını açmak için varsayılan " "uygulama olarak ayarlar" +msgid "Associate web links to OrcaSlicer" +msgstr "Web bağlantılarını OrcaSlicer ile ilişkilendirin" + +msgid "Associate URLs to OrcaSlicer" +msgstr "URL’leri OrcaSlicer ile ilişkilendirin" + +msgid "Current association: " +msgstr "Mevcut dernek:" + +msgid "Associate prusaslicer://" +msgstr "Ortak prusaslicer://" + +msgid "Not associated to any application" +msgstr "Herhangi bir uygulamayla ilişkili değil" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" +"Orca’nın Printable.com’daki modelleri açabilmesi için OrcaSlicer’ı " +"prusaslicer:// bağlantılarıyla ilişkilendirin" + +msgid "Associate bambustudio://" +msgstr "Bambstudio’yu ilişkilendirin://" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" +"Orca’nın makerworld.com’daki modelleri açabilmesi için OrcaSlicer’ı " +"bambustudio:// bağlantılarıyla ilişkilendirin" + +msgid "Associate cura://" +msgstr "Cura’yı ilişkilendirin://" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" +"Orca’nın thingiverse.com’daki modelleri açabilmesi için OrcaSlicer’ı cura:// " +"bağlantılarıyla ilişkilendirin" + msgid "Maximum recent projects" msgstr "Maksimum yeni proje" @@ -6398,12 +6939,21 @@ msgstr "Yazıcıları Seç/Kaldır (sistem ön ayarları)" msgid "Create printer" msgstr "Yazıcı oluştur" -msgid "Incompatible" -msgstr "Uyumsuz" - msgid "The selected preset is null!" msgstr "Seçilen ön ayar boş!" +msgid "End" +msgstr "Son" + +msgid "Customize" +msgstr "Özelleştir" + +msgid "Other layer filament sequence" +msgstr "Diğer katman filament dizisi" + +msgid "Please input layer value (>= 2)." +msgstr "Lütfen katman değerini girin (>= 2)." + msgid "Plate name" msgstr "Plaka adı" @@ -6413,14 +6963,20 @@ msgstr "Global Yazdırma Sırasıyla aynı" msgid "Print sequence" msgstr "Yazdırma sırası" -msgid "Customize" -msgstr "Özelleştirmek" +msgid "Same as Global" +msgstr "Küresel ile aynı" + +msgid "Disable" +msgstr "Devre dışı bırak" + +msgid "Spiral vase" +msgstr "Spiral vazo" msgid "First layer filament sequence" msgstr "İlk katman filament dizisi" msgid "Same as Global Plate Type" -msgstr "Global Plaka Tipi ile aynı" +msgstr "Global plaka tipi ile aynı" msgid "Same as Global Bed Type" msgstr "Global Yatak Tipi ile aynı" @@ -6432,7 +6988,7 @@ msgid "By Object" msgstr "Nesneye göre" msgid "Accept" -msgstr "Kabul etmek" +msgstr "Kabul et" msgid "Log Out" msgstr "Çıkış" @@ -6477,15 +7033,6 @@ msgstr "Kullanıcı Ön Ayarı" msgid "Preset Inside Project" msgstr "Ön ayar içerisinde proje" -msgid "Name is invalid;" -msgstr "Geçersiz isim;" - -msgid "illegal characters:" -msgstr "yasadışı karakterler:" - -msgid "illegal suffix:" -msgstr "yasadışı sonek:" - msgid "Name is unavailable." msgstr "Ad kullanılamıyor." @@ -6503,15 +7050,6 @@ msgstr "\"%1%\" ön ayarı zaten mevcut ve mevcut yazıcıyla uyumlu değil." msgid "Please note that saving action will replace this preset" msgstr "Kaydetme eyleminin bu ön ayarın yerini alacağını lütfen unutmayın" -msgid "The name is not allowed to be empty." -msgstr "Ad alanı boş bırakılamaz." - -msgid "The name is not allowed to start with space character." -msgstr "Adın boşluk karakteriyle başlamasına izin verilmez." - -msgid "The name is not allowed to end with space character." -msgstr "Adın boşluk karakteriyle bitmesine izin verilmez." - msgid "The name cannot be the same as a preset alias name." msgstr "Ad, önceden ayarlanmış bir takma adla aynı olamaz." @@ -6569,9 +7107,6 @@ msgstr "Cihazlarımı bulamıyor musunuz?" msgid "Log out successful." msgstr "Çıkış Başarılı." -msgid "Offline" -msgstr "Çevrimdışı" - msgid "Busy" msgstr "Meşgul" @@ -6596,12 +7131,6 @@ msgstr "Bambu Dokulu PEI Plaka" msgid "Send print job to" msgstr "Yazdırma işini şuraya gönder" -msgid "Refresh" -msgstr "Yenile" - -msgid "Bed Leveling" -msgstr "Yatak Tesviyesi" - msgid "Flow Dynamics Calibration" msgstr "Akış Dinamiği Kalibrasyonu" @@ -6614,9 +7143,6 @@ msgstr "gönderme tamamlandı" msgid "Error code" msgstr "Hata kodu" -msgid "Printer local connection failed, please try again." -msgstr "Yazıcının yerel bağlantısı başarısız oldu, lütfen tekrar deneyin." - msgid "No login account, only printers in LAN mode are displayed" msgstr "" "Oturum açma hesabı yok, yalnızca LAN modundaki yazıcılar görüntüleniyor" @@ -6696,8 +7222,13 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "Yazdırmadan önce bir SD kartın takılması gerekir." -msgid "The selected printer is incompatible with the chosen printer presets." -msgstr "Seçilen yazıcı, seçilen yazıcı ön ayarlarıyla uyumlu değil." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"Seçilen yazıcı (%s), dilimleyicideki (%s) seçilen yazıcı profiliyle uyumlu " +"değil." msgid "An SD card needs to be inserted to record timelapse." msgstr "Hızlandırılmış çekim kaydetmek için bir SD kartın takılması gerekir." @@ -6756,19 +7287,29 @@ msgid "nozzle in preset: %s %s" msgstr "önceden ayarlanmış nozul: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "hafızaya alınan nozul: %.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "hafızaya alınan nozul: %.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" -"Ön ayardaki nozul çapınız hafızaya alınan nozul çapıyla tutarlı değil. Son " -"zamanlarda nozulunuzu değiştirdiniz mi?" +"Dilimlenmiş dosyadaki nozül çapınız hafızaya alınan nozül ile tutarlı değil. " +"Püskürtme ucunuzu yakın zamanda değiştirdiyseniz ayarları değiştirmek için " +"lütfen Cihaz > Yazıcı Parçaları’na gidin." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "%s malzemesini %s ile yazdırmak püskürtme ucu hasarına neden olabilir" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"Yüksek sıcaklıktaki malzemeyi (%s malzeme) %s ile yazdırmak püskürtme ucu " +"hasarına neden olabilir" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "" +"Lütfen yukarıdaki hatayı düzeltin, aksi takdirde yazdırma devam edemez." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6776,25 +7317,10 @@ msgstr "" "Hala yazdırma işlemine devam etmek istiyorsanız lütfen onayla düğmesine " "tıklayın." -msgid "Hardened Steel" -msgstr "Güçlendirilmiş çelik" - -msgid "Stainless Steel" -msgstr "Paslanmaz çelik" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "Yazıcıya bağlanılıyor. Bağlantı işlemi sırasında iptal edilemiyor." -msgid "Preparing print job" -msgstr "Yazdırma için hazırlanıyor" - -msgid "Abnormal print file data. Please slice again" -msgstr "Anormal yazdırma dosyası verileri. Lütfen tekrar dilimleyin" - -msgid "The name length exceeds the limit." -msgstr "Ad uzunluğu sınırı aşıyor." - msgid "" "Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "scattered surface." @@ -6808,12 +7334,18 @@ msgstr "Mikro Lidar kullanarak otomatik akış kalibrasyonu" msgid "Modifying the device name" msgstr "Cihaz adını değiştir" +msgid "Bind with Pin Code" +msgstr "Pin Koduyla Bağla" + msgid "Send to Printer SD card" msgstr "Yazıcı SD kartına gönder" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Yükseltme devam ederken yazdırma görevi gönderilemiyor" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "Seçilen yazıcı, seçilen yazıcı ön ayarlarıyla uyumlu değil." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Yazıcı SD kartına gönderilmeden önce bir SD kartın takılması gerekir." @@ -6856,6 +7388,28 @@ msgstr "Giriş raporu alma zaman aşımı" msgid "Unknown Failure" msgstr "Bilinmeyen Arıza" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Lütfen yazıcı ekranındaki Hesap sayfasında Pin Kodunu bulun,\n" +" ve aşağıya Pin Kodunu yazın." + +msgid "Can't find Pin Code?" +msgstr "Pin Kodunu bulamıyor musunuz?" + +msgid "Pin Code" +msgstr "Pin Kodu" + +msgid "Binding..." +msgstr "Bağlanıyor…" + +msgid "Please confirm on the printer screen" +msgstr "Lütfen yazıcı ekranında onaylayın" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Giriş başarısız oldu. Lütfen Pin Kodunu kontrol edin." + msgid "Log in printer" msgstr "Yazıcıda oturum aç" @@ -7054,6 +7608,29 @@ msgstr "Ayarla" msgid "Ignore" msgstr "Atla" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Deneysel özellik: Filament değişiklikleri sırasında, floşu en aza indirmek " +"için filamanı daha büyük bir mesafeden geri çekmek ve kesmek. Flush’u önemli " +"ölçüde azaltabilmesine rağmen, aynı zamanda nozül tıkanmaları veya diğer " +"yazdırma komplikasyonları riskini de artırabilir." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Deneysel özellik: Filament değişiklikleri sırasında, filamanın en aza " +"indirilmesi için filamanın daha büyük bir mesafeden geri çekilmesi ve " +"kesilmesi. Akmayı önemli ölçüde azaltabilmesine rağmen, aynı zamanda " +"püskürtme uçları tıkanması veya diğer yazdırma komplikasyonları riskini de " +"artırabilir. Lütfen en son yazıcı ürün yazılımını kullanın." + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -7134,6 +7711,9 @@ msgstr "Destek Filamenti" msgid "Tree supports" msgstr "Ağaç destekler" +msgid "Skirt" +msgstr "Etek" + msgid "Prime tower" msgstr "Prime Kulesi" @@ -7280,7 +7860,7 @@ msgstr "" "maksimum olacaktır" msgid "Auxiliary part cooling fan" -msgstr "Yardımcı Parça Soğutma Fanı" +msgstr "Yardımcı parça soğutma fanı" msgid "Exhaust fan" msgstr "Egzos Fanı" @@ -7315,6 +7895,14 @@ msgstr "Çoklu Ekstruder MM Yazıcılarda Araç Değiştirme Parametreleri" msgid "Printable space" msgstr "Tabla Ayarı" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "%1% parametresi için geçersiz değer sağlandı: %2%" + +msgid "G-code flavor is switched" +msgstr "G-kod çeşidi değiştirildi" + msgid "Cooling Fan" msgstr "Soğutucu Fan" @@ -7545,23 +8133,36 @@ msgstr "" "kaydedilmemiş değişiklikleri içeriyor:" #, 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 ayarının bazı ayarlarını değiştirdiniz.\n" -"Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) korumak " -"ister misiniz?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "“%1%” ön ayarının bazı ayarlarını değiştirdiniz." msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"Bazı ön ayar ayarlarını değiştirdiniz.\n" -"Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) korumak " -"ister misiniz?" +"\n" +"Değiştirdiğiniz ön ayar değerlerini kaydedebilir veya silebilirsiniz." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Değiştirdiğiniz ön ayar değerlerini kaydedebilir veya atabilirsiniz ya da " +"değiştirdiğiniz değerleri yeni ön ayara aktarmayı seçebilirsiniz." + +msgid "You have previously modified your settings." +msgstr "Daha önce ayarlarınızı değiştirdiniz." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Değiştirdiğiniz ön ayar değerlerini atabilir veya değiştirilen değerleri " +"yeni projeye aktarmayı seçebilirsiniz." msgid "Extruders count" msgstr "Ekstruder sayısı" @@ -7596,7 +8197,7 @@ msgid "Transfer values from left to right" msgstr "Değerleri soldan sağa aktarın" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Etkinleştirilirse, bu iletişim kutusu seçilen değerleri soldan sağa ön ayara " @@ -7679,6 +8280,60 @@ msgstr "Güncelleme mevcut değil." msgid "The configuration is up to date." msgstr "Yapılandırma güncel." +msgid "Obj file Import color" +msgstr "Obj dosyası renkli olarak içe aktar" + +msgid "Specify number of colors:" +msgstr "Renk sayısını belirtin:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "Renk sayısı aralıkta olmalıdır [%d, %d]." + +msgid "Recommended " +msgstr "Tavsiye edilir " + +msgid "Current filament colors:" +msgstr "Mevcut filament renkleri:" + +msgid "Quick set:" +msgstr "Hızlı ayar:" + +msgid "Color match" +msgstr "Renk uyumu" + +msgid "Approximate color matching." +msgstr "Yaklaşık renk eşleşmesi." + +msgid "Append" +msgstr "Ekle" + +msgid "Add consumable extruder after existing extruders." +msgstr "Mevcut ekstrüderlerden sonra yeni sarf malzemesi ekstrüderi ekleyin." + +msgid "Reset mapped extruders." +msgstr "Eşlenmiş ekstrüderleri sıfırlayın." + +msgid "Cluster colors" +msgstr "Küme renkleri" + +msgid "Map Filament" +msgstr "Filamenti Eşle" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"Not: Renk seçildi, devam etmek için Tamam'ı seçebilirsiniz\n" +" veya manuel olarak ayarlayabilirsiniz." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Uyarı: Yeni eklenen ve\n" +" mevcut ekstrüderlerin sayısı 16'yı aşıyor." + msgid "Ramming customization" msgstr "Sıkıştırma özelleştirme" @@ -7765,6 +8420,43 @@ msgstr "İtibaren" msgid "To" msgstr "İle" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" +"Bu görev için Windows Media Player gereklidir! İşletim sisteminiz için " +"‘Windows Media Player’ı etkinleştirmek istiyor musunuz?" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" +"BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden " +"kaydetmek için Evet’e basın." + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" +"Medya oynatma için kayıtlı BambuSource bileşeni eksik! Lütfen BambuStutio’yu " +"yeniden yükleyin veya satış sonrası yardım isteyin." + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" +"Farklı bir kurulumdan bir BambuSource kullanıyorsunuz, video oynatma doğru " +"çalışmayabilir! Düzeltmek için Evet’e basın." + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" +"Sisteminizde video oynatmak için gerekli olan GStreamer H.264 codec " +"bileşenleri eksik. (gstreamer1.0-plugins-bad veya gstreamer1.0-libav " +"paketlerini kurmayı deneyin, ardından Orca Slicer’ı yeniden başlatın)" + msgid "Bambu Network plug-in not detected." msgstr "Bambu Ağı eklentisi algılanmadı." @@ -8035,6 +8727,12 @@ msgstr "Kaydırıcıyı 5 kat daha hızlı hareket ettirin" msgid "Shift+Mouse wheel" msgstr "Shift+Fare tekerleği" +msgid "Horizontal slider - Move to start position" +msgstr "Yatay kaydırıcı - Başlangıç ​​konumuna taşıyın" + +msgid "Horizontal slider - Move to last position" +msgstr "Yatay kaydırıcı - Son konuma git" + msgid "Release Note" msgstr "Sürüm notu" @@ -8056,7 +8754,7 @@ msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "Yeni bir Ağ eklentisi(%s) mevcut, Yüklemek istiyor musunuz?" msgid "New version of Orca Slicer" -msgstr "Orca Slicer'nun yeni versiyonu" +msgstr "Orca Slicer’ın yeni versiyonu" msgid "Skip this Version" msgstr "Bu versiyonu atla" @@ -8064,6 +8762,42 @@ msgstr "Bu versiyonu atla" msgid "Done" msgstr "Tamamlandı" +msgid "resume" +msgstr "Devam et" + +msgid "Resume Printing" +msgstr "Yazdırmaya Devam Et" + +msgid "Resume Printing(defects acceptable)" +msgstr "Yazdırmaya Devam Et (kusurlar kabul edilebilir)" + +msgid "Resume Printing(problem solved)" +msgstr "Yazdırmaya Devam Et (sorun çözüldü)" + +msgid "Stop Printing" +msgstr "Yazdırmayı Durdur" + +msgid "Check Assistant" +msgstr "Kontrol Asistanı" + +msgid "Filament Extruded, Continue" +msgstr "Filament Ekstrüde Edildi, Devam Et" + +msgid "Not Extruded Yet, Retry" +msgstr "Henüz Ekstrüde Edilmedi, Tekrar Deneyin" + +msgid "Finished, Continue" +msgstr "Bitti, Devam Et" + +msgid "Load Filament" +msgstr "Filament Yükle" + +msgid "Filament Loaded, Resume" +msgstr "Filament Yüklendi, Devam Et" + +msgid "View Liveview" +msgstr "Canlı Önizlemeyi Görüntüle" + msgid "Confirm and Update Nozzle" msgstr "Nozulu Onaylayın ve Güncelleyin" @@ -8124,12 +8858,6 @@ msgstr "Sürüm:" msgid "Update firmware" msgstr "Ürün yazılımını güncelle" -msgid "Printing" -msgstr "Baskı" - -msgid "Idle" -msgstr "Boşta" - msgid "Beta version" msgstr "Beta sürüm" @@ -8164,7 +8892,7 @@ 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." +"update next time starting Orca." msgstr "" "Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme " "yapılması gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra " @@ -8307,9 +9035,6 @@ msgstr "İç Köprü" msgid "Gap infill" msgstr "Boşluk doldurma" -msgid "Skirt" -msgstr "Etek" - msgid "Support interface" msgstr "Destek arayüzü" @@ -8684,6 +9409,12 @@ msgid "" "You can adjust the machine_max_acceleration_travel value in your printer's " "configuration to get higher speeds." msgstr "" +"Hareket ivmesi ayarı, yazıcının maksimum hareket ivmesini " +"(machine_max_acceleration_travel) aşıyor.\n" +"Orca, yazıcının yeteneklerini aşmadığından emin olmak için seyahat hızlanma " +"hızını otomatik olarak sınırlayacaktır.\n" +"Daha yüksek hızlar elde etmek için yazıcınızın yapılandırmasındaki " +"machine_max_acceleration_travel değerini ayarlayabilirsiniz." msgid "Generating skirt & brim" msgstr "Etek ve kenar oluşturma" @@ -8741,7 +9472,7 @@ msgstr "" "lineer olarak küçültülecek, bu değer tarafından belirtilen katmana kadar." msgid "layers" -msgstr "katmanlar" +msgstr "katman" msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " @@ -8771,7 +9502,9 @@ msgid "Use 3rd-party print host" msgstr "3. taraf yazdırma ana bilgisayarını kullanın" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" -msgstr "BambuLab yazıcısının 3. taraf yazdırma ana bilgisayarları aracılığıyla kontrol edilmesine izin ver" +msgstr "" +"BambuLab yazıcısının 3. taraf yazdırma ana bilgisayarları aracılığıyla " +"kontrol edilmesine izin ver" msgid "Hostname, IP or URL" msgstr "Ana bilgisayar adı, IP veya URL" @@ -8958,6 +9691,15 @@ msgstr "Mühendislik Plakası" msgid "First layer print sequence" msgstr "İlk katman yazdırma sırası" +msgid "Other layers print sequence" +msgstr "Diğer katmanların yazdırma sırası" + +msgid "The number of other layers print sequence" +msgstr "Diğer katmanların sayısı yazdırma sırası" + +msgid "Other layers filament sequence" +msgstr "Diğer katmanlar filament dizisi" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "Bu G kodu, z'yi kaldırmadan önce her katman değişikliğinde eklenir" @@ -9184,7 +9926,7 @@ msgstr "" "yolları (perimeter) oluşturun. " msgid "Reverse on odd" -msgstr "Tek sayıyı tersine çevir" +msgstr "Tersine çevir" msgid "Overhang reversal" msgstr "Çıkıntıyı tersine çevir" @@ -9626,13 +10368,13 @@ msgstr "" "dolgu ekleyin (üst + alt katı katmanlar)\n" "Yok: Hiçbir yere katı dolgu eklenmez. Dikkat: Modelinizin eğimli yüzeyleri " "varsa bu seçeneği dikkatli kullanın.\n" -"Yalnızca Kritik: Duvarlar için katı dolgu eklemekten kaçının\n" +"Yalnızca kritik: Duvarlar için katı dolgu eklemekten kaçının\n" "Orta: Yalnızca çok eğimli yüzeyler için katı dolgu ekleyin\n" "Hepsi: Tüm uygun eğimli yüzeyler için katı dolgu ekleyin\n" "Varsayılan değer Tümü'dür." msgid "Critical Only" -msgstr "Yalnızca Kritik" +msgstr "Yalnızca kritik" msgid "Moderate" msgstr "Orta" @@ -9783,20 +10525,20 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Duvar/dolgu sırası. Onay kutusunun işareti kaldırıldığında ilk olarak " -"duvarlar yazdırılır ve bu çoğu durumda en iyi sonucu verir.\n" +"Duvar/dolgu sırası. Onay kutusu işaretlenmediğinde duvarlar önce yazdırılır, " +"bu çoğu durumda en iyi şekilde çalışır.\n" "\n" -"Duvarların komşu dolgulara yapışması nedeniyle ilk önce duvarların basılması " -"aşırı çıkıntılara yardımcı olabilir. Ancak dolgu, baskılı duvarları " -"tutturulduğu yerden hafifçe dışarı doğru itecek ve bu da daha kötü bir dış " -"yüzey kalitesine neden olacaktır. Ayrıca dolgunun parçanın dış yüzeylerinden " -"parlamasına da neden olabilir." +"Dolgunun önce yazdırılması, aşırı sarkmalarda yardımcı olabilir, çünkü " +"duvarlar komşu dolgulara yapışır. Ancak, dolgu duvarlara bağlı olduğu " +"yerlerde onları biraz dışarı iterek daha kötü bir dış yüzey bitişine neden " +"olabilir. Ayrıca, dolgunun parçanın dış yüzeylerinden parlamasına da sebep " +"olabilir." msgid "Wall loop direction" msgstr "Duvar döngüsü yönü" @@ -9853,6 +10595,12 @@ msgstr "" "Ekstruder etrafındaki boşluk yarıçapı. Nesneye göre yazdırmada çarpışmayı " "önlemek için kullanılır." +msgid "Nozzle height" +msgstr "Nozul yüksekliği" + +msgid "The height of nozzle tip." +msgstr "Nozul ucunun yüksekliği." + msgid "Bed mesh min" msgstr "Minimum yatak ağı" @@ -9976,6 +10724,32 @@ msgstr "" "ve başlatma ve durdurma sıklığını azaltmak için en azından minimum hızda " "çalışacaktır" +msgid "Don't slow down outer walls" +msgstr "Dış duvarları yavaşlatma" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"Bu ayar etkinleştirildiğinde, dış çevrelerin minimum katman süresine uyması " +"için yavaşlatılmamasını sağlar. Bu, özellikle aşağıdaki durumlarda yardımcı " +"olur:\n" +"\n" +"1. Parlak filamentler yazdırırken parlaklıktaki değişikliklerden kaçınmak " +"için\n" +"2. Z bantlanması gibi görünen hafif duvar kusurları yaratabilecek dış duvar " +"hızındaki değişikliklerden kaçınmak için\n" +"3. Dış duvarlarda VFAs (ince kusurlar) oluşturan hızlarda yazdırmaktan " +"kaçınmak için\n" + msgid "Layer time" msgstr "Katman süresi" @@ -10259,8 +11033,8 @@ msgstr "Filament satıcısı. Yalnızca gösteri için" msgid "(Undefined)" msgstr "(Tanımsız)" -msgid "Infill direction" -msgstr "Dolgu açısı" +msgid "Sparse infill direction" +msgstr "Seyrek dolgu yönü" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " @@ -10268,6 +11042,21 @@ msgid "" msgstr "" "Hattın başlangıcını veya ana yönünü kontrol eden seyrek dolgu deseni açısı" +msgid "Solid infill direction" +msgstr "Katı dolgu yönü" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Hattın başlangıcını veya ana yönünü kontrol eden katı dolgu deseni açısı" + +msgid "Rotate solid infill direction" +msgstr "Katı dolgu yönünü döndür" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Katı dolgu yönünü her katman için 90° döndürün." + msgid "Sparse infill density" msgstr "Dolgu yoğunluğu" @@ -10315,6 +11104,9 @@ msgstr "Destek kübik" msgid "Lightning" msgstr "Yıldırım" +msgid "Cross Hatch" +msgstr "Çapraz çizgi" + msgid "Sparse infill anchor length" msgstr "Dolgu uzunluğu" @@ -10523,6 +11315,9 @@ msgstr "" "düşükse göz ardı edilecektir; bu durumda fan, \"close_fan_the_first_x_layers" "\" + 1 katmanında izin verilen maksimum hızda çalışacaktır." +msgid "layer" +msgstr "katman" + msgid "Support interface fan speed" msgstr "Destekler için fan hızı" @@ -10594,15 +11389,41 @@ msgstr "" "Boşluk doldurma hızı. Boşluk genellikle düzensiz çizgi genişliğine sahiptir " "ve daha yavaş yazdırılmalıdır" +msgid "Precise Z height" +msgstr "Hassas z yüksekliği" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Dilimlemeden sonra nesnenin kesin z yüksekliğini elde etmek için bunu " +"etkinleştirin. Son birkaç katmanın katman yüksekliklerine ince ayar yaparak " +"kesin nesne yüksekliğini elde edecektir. Bunun deneysel bir parametre " +"olduğunu unutmayın." + msgid "Arc fitting" msgstr "Ark" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" "G2 ve G3 hareketlerine sahip bir G kodu dosyası elde etmek için bunu " -"etkinleştirin. Ve montaj toleransı çözünürlükle aynıdır" +"etkinleştirin. Montaj toleransı çözünürlükle aynıdır. \n" +"\n" +"Not: Klipper makineler için bu seçeneğin devre dışı bırakılması önerilir. " +"Klipper, yazılım tarafından tekrar çizgi bölümlerine bölündüğü için yay " +"komutlarından faydalanmaz. Bu, çizgi bölümlerinin dilimleyici tarafından " +"yaylara dönüştürülmesi ve ardından donanım yazılımı tarafından tekrar çizgi " +"bölümlerine dönüştürülmesi nedeniyle yüzey kalitesinde bir azalmaya neden " +"olur." msgid "Add line number" msgstr "Satır numarası ekle" @@ -10737,7 +11558,7 @@ msgid "The printer cost per hour" msgstr "Yazıcı saat başına maliyeti" msgid "money/h" -msgstr "para/h" +msgstr "ücret/Sa" msgid "Support control chamber temperature" msgstr "Destek kontrol ortam sıcaklığı" @@ -10833,12 +11654,34 @@ msgstr "" msgid "Infill/Wall overlap" msgstr "Dolgu/Duvar örtüşmesi" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" "Daha iyi yapışma için dolgu alanı duvarla örtüşecek şekilde hafifçe " -"genişletilir. Yüzde değeri seyrek dolgunun çizgi genişliğine göredir" +"genişletilir. Yüzde değeri seyrek dolgunun çizgi genişliğine göredir. Aşırı " +"ekstrüzyon ve pürüzlü üst yüzeylere neden olan malzeme birikmesi " +"potansiyelini en aza indirmek için bu değeri ~%10-15’e ayarlayın." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Üst/Alt katı dolgu/Duvar örtüşmesi" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"Üst katı dolgu alanı, daha iyi yapışma sağlamak ve üst dolgunun duvarlarla " +"buluştuğu yerde küçük deliklerin görünümünü en aza indirmek için duvarla üst " +"üste gelecek şekilde hafifçe genişletilir. %25-30’luk bir değer, iğne " +"deliklerinin görünümünü en aza indiren iyi bir başlangıç ​​noktasıdır. Yüzde " +"değeri seyrek dolgunun çizgi genişliğine göredir" msgid "Speed of internal sparse infill" msgstr "İç seyrek dolgunun hızı" @@ -10947,7 +11790,7 @@ msgstr "" "destekleyip desteklemediği" msgid "Emit limits to G-code" -msgstr "G-code sınırları" +msgstr "G-kod sınırları" msgid "Machine limits" msgstr "Yazıcı sınırları" @@ -11210,7 +12053,7 @@ msgstr "" "etkinleştirin. G-code komut: M106 P2 S(0-255)" msgid "Min" -msgstr "Min" +msgstr "Minimum" msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " @@ -11517,6 +12360,30 @@ msgstr "" "Uzun seyahat sırasında sızıntıyı önlemek için ekstruderdeki malzemenin bir " "kısmı geri çekilir. Geri çekmeyi devre dışı bırakmak için sıfır ayarlayın" +msgid "Long retraction when cut(experimental)" +msgstr "Kesildiğinde uzun geri çekilme (deneysel)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Deneysel özellik. Tasfiyeyi en aza indirmek için değişiklikler sırasında " +"filamentin daha uzun bir mesafeden geri çekilmesi ve kesilmesi. Bu, yıkamayı " +"önemli ölçüde azaltırken, aynı zamanda nozul tıkanması veya diğer yazdırma " +"sorunları riskini de artırabilir." + +msgid "Retraction distance when cut" +msgstr "Kesildiğinde geri çekilme mesafesi" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Deneysel özellik.Filament değişimi sırasında kesilmeden önce geri çekilme " +"uzunluğu" + msgid "Z hop when retract" msgstr "Geri çekme esnasında Z sıçraması" @@ -11655,7 +12522,8 @@ msgstr "Kalan yazdırma süresini ayarlamayı devre dışı bırak" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" -"M73'ün oluşturulmasını devre dışı bırakın: Son gcode'da kalan yazdırma süresini ayarlayın" +"M73'ün oluşturulmasını devre dışı bırakın: Son gcode'da kalan yazdırma " +"süresini ayarlayın" msgid "Seam position" msgstr "Dikiş konumu" @@ -11744,11 +12612,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" -"Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma " -"eşiğini belirler. Çevrenin desteklenmeyen kısmı bu eşikten az ise atkı " -"birleştirme dikişleri uygulanacaktır. Varsayılan eşik, dış duvar genişliğinin " -"%40'ına ayarlanmıştır. Performans değerlendirmeleri nedeniyle çıkıntının " -"derecesi tahmin edilir." +"Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma eşiğini " +"belirler. Çevrenin desteklenmeyen kısmı bu eşikten az ise atkı birleştirme " +"dikişleri uygulanacaktır. Varsayılan eşik, dış duvar genişliğinin %40'ına " +"ayarlanmıştır. Performans değerlendirmeleri nedeniyle çıkıntının derecesi " +"tahmin edilir." msgid "Scarf joint speed" msgstr "Atkı birleşim hızı" @@ -11891,6 +12759,41 @@ msgstr "Etek yüksekliği" msgid "How many layers of skirt. Usually only one layer" msgstr "Etek katman sayısı. Genellikle tek katman" +msgid "Draft shield" +msgstr "Rüzgarlık" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Rüzgar taslağı nedeniyle ABS veya ASA baskının eğrilmesine ve baskı " +"yatağından ayrılmasına karşı koruma sağlamak için bir rüzgarlık " +"kullanışlıdır. Genellikle yalnızca açık çerçeveli, yani muhafazasız " +"yazıcılarda gereklidir. \n" +"\n" +"Seçenekler:\n" +"Etkin = etek, yazdırılan en yüksek nesne kadar uzundur.\n" +"Sınırlı = etek, etek yüksekliğinin belirttiği kadar uzundur.\n" +"\n" +"Not: Rüzgarlık etkinken etek, nesneden etek mesafesinde yazdırılacaktır. Bu " +"nedenle eğer kenarlar aktifse onlarla kesişebilir. Bunu önlemek için etek " +"mesafesi değerini artırın.\n" + +msgid "Limited" +msgstr "Sınırlı" + +msgid "Enabled" +msgstr "Etkin" + msgid "Skirt loops" msgstr "Etek sayısı" @@ -11906,6 +12809,22 @@ msgstr "" "Eteğin hızı, mm/s cinsinden. Sıfır, varsayılan katman ekstrüzyon hızının " "kullanılması anlamına gelir." +msgid "Skirt minimum extrusion length" +msgstr "Etek minimum ekstrüzyon uzunluğu" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Etek yazdırılırken mm cinsinden minimum filaman ekstrüzyon uzunluğu. Sıfır, " +"bu özelliğin devre dışı olduğu anlamına gelir.\n" +"\n" +"Yazıcı ana hat olmadan yazdırmak üzere ayarlanmışsa sıfır dışında bir değer " +"kullanmak yararlı olur." + 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" @@ -11934,9 +12853,6 @@ msgstr "" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "Üst ve alt yüzeyin değil, iç katı dolgunun hızı" -msgid "Spiral vase" -msgstr "Spiral vazo" - 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 " @@ -12667,6 +13583,50 @@ msgstr "Silme kulesi temizleme hatları aralığı" msgid "Spacing of purge lines on the wipe tower." msgstr "Silme kulesindeki boşaltma hatlarının aralığı." +msgid "Maximum wipe tower print speed" +msgstr "Maksimum silme kulesi yazdırma hızı" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"Silme kulesinde temizleme yaparken ve silme kulesi seyrek katmanlarını " +"yazdırırken maksimum yazdırma hızı. Temizleme sırasında seyrek dolum hızı " +"veya filamanın maksimum hacimsel hızından hesaplanan hız daha düşükse, bunun " +"yerine en düşük olanı kullanılacaktır.\n" +"\n" +"Seyrek katmanları yazdırırken iç çevre hızı veya filamanın maksimum hacimsel " +"hızından hesaplanan hız daha düşükse bunun yerine en düşük olanı " +"kullanılacaktır.\n" +"\n" +"Bu hızın arttırılması kulenin stabilitesini etkileyebileceği gibi, nozülün " +"silme kulesi üzerinde oluşmuş olabilecek damlacıklarla çarpışma kuvvetini de " +"arttırabilir.\n" +"\n" +"Bu parametreyi varsayılan 90 mm/sn’nin üzerine çıkarmadan önce, yazıcınızın " +"artan hızlarda güvenilir şekilde köprü kurabildiğinden ve takım değişimi iyi " +"kontrol edildiğinde sızıntı yaptığından emin olun.\n" +"\n" +"Silme kulesi dış çevreleri için bu ayardan bağımsız olarak iç çevre hızı " +"kullanılır." + msgid "Wipe tower extruder" msgstr "Silme kulesi ekstruderi" @@ -13094,7 +14054,7 @@ msgstr "" "Sıralı yazdırmaya özel. Şu anda yazdırılan nesnenin sıfır tabanlı dizini." msgid "Has wipe tower" -msgstr "Has wipe tower" +msgstr "Silme kulesi var" msgid "Whether or not wipe tower is being generated in the print." msgstr "Yazdırmada silme kulesinin oluşturulup oluşturulmayacağı." @@ -13139,7 +14099,7 @@ msgid "Total toolchanges" msgstr "Toplam takım değişiklikleri" msgid "Number of toolchanges during the print." -msgstr "Number of toolchanges during the print." +msgstr "Yazdırma sırasındaki takım değişikliği sayısı." msgid "Total volume" msgstr "Toplam hacim" @@ -13433,6 +14393,9 @@ msgstr "İptal edildi" msgid "load_obj: failed to parse" msgstr "load_obj: ayrıştırılamadı" +msgid "load mtl in obj: failed to parse" +msgstr "obj’ye mtl yükle: ayrıştırılamadı" + msgid "The file contains polygons with more than 4 vertices." msgstr "Dosya 4'ten fazla köşesi olan çokgenler içeriyor." @@ -13511,12 +14474,6 @@ msgstr "Akış hızı" msgid "Max Volumetric Speed" msgstr "Maksimum Hacimsel Hız" -msgid "Please enter the name you want to save to printer." -msgstr "Lütfen yazıcıya kaydetmek istediğiniz adı girin." - -msgid "The name cannot exceed 40 characters." -msgstr "Ad 40 karakteri aşamaz." - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13565,6 +14522,19 @@ msgstr "Lütfen kalibre edilecek filamenti seçin." msgid "The input value size must be 3." msgstr "Giriş değeri boyutu 3 olmalıdır." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Bu makine tipi, püskürtme ucu başına yalnızca 16 geçmiş sonucu tutabilir. " +"Mevcut geçmiş sonuçları silebilir ve ardından kalibrasyona " +"başlayabilirsiniz. Veya kalibrasyona devam edebilirsiniz ancak yeni " +"kalibrasyon geçmişi sonuçları oluşturamazsınız.\n" +"Hala kalibrasyona devam etmek istiyor musunuz?" + msgid "Connecting to printer..." msgstr "Yazıcıya bağlanılıyor..." @@ -13574,6 +14544,24 @@ msgstr "Başarısız olan test sonucu düşürüldü." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Akış Dinamiği Kalibrasyonu sonucu yazıcıya kaydedildi" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " +"sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " +"istediğinizden emin misiniz?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Bu makine türü püskürtme ucu başına yalnızca %d geçmiş sonucunu tutabilir. " +"Bu sonuç kaydedilmeyecek." + msgid "Internal Error" msgstr "İç hata" @@ -13621,34 +14609,33 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "" -"Lütfen Akış Dinamiği Kalibrasyonunun ayrıntılarını wiki'mizden " -"bulabilirsiniz.\n" +"Akış Dinamiği Kalibrasyonu ile ilgili detayları Wiki'mizden bulabilirsiniz.\n" "\n" -"Genellikle kalibrasyon gereksizdir. Yazdırma başlat menüsündeki \"akış " -"dinamiği kalibrasyonu\" seçeneği işaretliyken tek renkli/malzeme baskısını " -"başlattığınızda, yazıcı eski yöntemi izleyecek, yazdırmadan önce filamenti " -"kalibre edecektir; Çok renkli/malzeme baskısını başlattığınızda, yazıcı her " -"filament değişiminde filament için varsayılan dengeleme parametresini " -"kullanacaktır ve bu çoğu durumda iyi bir sonuç verecektir.\n" +"Genellikle kalibrasyon gereksizdir. Baskı başlatma menüsünde \"akış " +"dinamikleri kalibrasyonu\" seçeneği işaretliyken tek renkli/malzemeli bir " +"baskı başlattığınızda, yazıcı eski yolu izleyecek, baskıdan önce filamenti " +"kalibre edecektir; Çok renkli/malzemeli bir baskı başlattığınızda, yazıcı " +"her filament değişimi sırasında filament için varsayılan telafi " +"parametresini kullanacaktır ve bu da çoğu durumda iyi bir sonuç verecektir.\n" "\n" -"Kalibrasyon sonucunun güvenilir olmamasına yol açacak birkaç durum olduğunu " -"lütfen unutmayın: kalibrasyonu yapmak için doku plakası kullanmak; baskı " -"plakasının yapışması iyi değil (lütfen baskı plakasını yıkayın veya " -"yapıştırıcı uygulayın!) ...Daha fazlasını wiki'mizden bulabilirsiniz.\n" +"Yapı plakası üzerinde yetersiz yapışma gibi kalibrasyon sonuçlarını " +"güvenilmez hale getirebilecek birkaç durum olduğunu lütfen unutmayın. " +"Yapıştırma plakası yıkanarak veya yapıştırıcı uygulanarak yapışmanın " +"iyileştirilmesi sağlanabilir. Bu konu hakkında daha fazla bilgi için lütfen " +"Wiki sayfamıza bakın.\n" "\n" -"Testimizde kalibrasyon sonuçlarında yaklaşık yüzde 10'luk bir titreşim var " -"ve bu da sonucun her kalibrasyonda tam olarak aynı olmamasına neden " -"olabilir. Yeni güncellemelerle iyileştirmeler yapmak için hâlâ temel nedeni " -"araştırıyoruz." +"Kalibrasyon sonuçları testimizde yaklaşık yüzde 10 titremeye sahiptir, bu da " +"sonucun her kalibrasyonda tam olarak aynı olmamasına neden olabilir. Yeni " +"güncellemelerle iyileştirmeler yapmak için hala temel nedeni araştırıyoruz." msgid "When to use Flow Rate Calibration" msgstr "Akış Hızı Kalibrasyonu ne zaman kullanılmalı" @@ -13770,27 +14757,23 @@ msgstr "*İsme marka, malzeme, tür ve hatta nem seviyesini eklemenizi öneririz msgid "Failed" msgstr "Başarısız" +msgid "Please enter the name you want to save to printer." +msgstr "Lütfen yazıcıya kaydetmek istediğiniz adı girin." + +msgid "The name cannot exceed 40 characters." +msgstr "Ad 40 karakteri aşamaz." + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override the other results?" msgstr "" "Aynı ada sahip sonuçlardan yalnızca biri kaydedilecektir. Diğer sonuçları " "geçersiz kılmak istediğinizden emin misiniz?" -#, 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 "" -"Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " -"sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " -"istediğinizden emin misiniz?" - msgid "Please find the best line on your plate" msgstr "Lütfen plakadaki en iyi çizgiyi bulun" -msgid "Please find the cornor with perfect degree of extrusion" +msgid "Please find the corner with perfect degree of extrusion" msgstr "Lütfen mükemmel ekstrüzyon derecesine sahip köşeyi bulun" msgid "Input Value" @@ -13867,12 +14850,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Yazdırma Parametreleri" -msgid "- ℃" -msgstr "- °C" - -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Plaka Tipi" @@ -13919,12 +14896,6 @@ msgstr "K değerine" msgid "Step value" msgstr "Adım değeri" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Nozul çapı yazıcı ayarlarından senkronize edildi" @@ -13937,6 +14908,9 @@ msgstr "Hacimsel Hıza" msgid "Flow Dynamics Calibration Result" msgstr "Akış Dinamiği Kalibrasyon Sonucu" +msgid "New" +msgstr "Yeni" + msgid "No History Result" msgstr "Geçmiş Sonucu Yok" @@ -13949,9 +14923,23 @@ msgstr "Geçmiş Akış Dinamiği Kalibrasyon kayıtlarını yenileme" msgid "Action" msgstr "İşlem" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"Bu makine türü püskürtme ucu başına yalnızca %d geçmiş sonucunu tutabilir." + msgid "Edit Flow Dynamics Calibration" msgstr "Akış Dinamiği Kalibrasyonunu Düzenle" +msgid "New Flow Dynamic Calibration" +msgstr "Yeni Akış Dinamik Kalibrasyonu" + +msgid "Ok" +msgstr "Tamam" + +msgid "The filament must be selected." +msgstr "Filament seçilmelidir." + msgid "Network lookup" msgstr "Ağ araması" @@ -14040,6 +15028,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -14136,6 +15127,9 @@ msgstr "Gerekirse dizin ayırıcısı olarak eğik çizgileri ( / ) kullanın." msgid "Upload to storage" msgstr "Depolama alanına yükle" +msgid "Switch to Device tab after upload." +msgstr "" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "Yüklenen dosya adı \"%s\" ile bitmiyor. Devam etmek istiyor musunuz?" @@ -14339,6 +15333,16 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "Henüz bir yazıcı veya ön ayar seçmediniz. Lütfen en az birini seçin." +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Oluşturduğunuz %s Filament adı zaten mevcut.\n" +"Oluşturmaya devam ederseniz oluşturulan ön ayar tam adıyla " +"görüntülenecektir. Devam etmek istiyor musun?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Aşağıdaki gibi bazı mevcut ön ayarlar oluşturulamadı:\n" @@ -14400,12 +15404,6 @@ msgstr "Dikdörtgen" msgid "Printable Space" msgstr "Yazdırılabilir Alan" -msgid "X" -msgstr "X" - -msgid "Y" -msgstr "Y" - msgid "Hot Bed STL" msgstr "Sıcak Yatak STL" @@ -14552,21 +15550,34 @@ msgstr "Filament Oluşturuldu" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament ayarına " "gidin.\n" "Lütfen püskürtme ucu sıcaklığının, sıcak yatak sıcaklığının ve maksimum " -"hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip olduğunu " +"hacimsel hızın baskı kalitesi üzerinde önemli bir etkiye sahip olduğunu " "unutmayın. Lütfen bunları dikkatlice ayarlayın." +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Studio, kullanıcı ön ayarları senkronizasyon işlevinizin etkin olmadığını " +"tespit etti; bu durum, Cihaz sayfasında Filament ayarlarının başarısız " +"olmasına neden olabilir.\n" +"Senkronizasyon işlevini etkinleştirmek için “Kullanıcı ön ayarlarını " +"senkronize et” seçeneğini tıklayın." + msgid "Printer Setting" msgstr "Yazıcı Ayarı" -msgid "Export Configs" -msgstr "Yapılandırmaları Dışa Aktar" - msgid "Printer config bundle(.orca_printer)" msgstr "Yazıcı yapılandırma paketi(.orca_printer)" @@ -14669,6 +15680,11 @@ msgstr "Lütfen en az bir yazıcı veya filament seçin." msgid "Please select a type you want to export" msgstr "Lütfen dışa aktarmak istediğiniz türü seçin" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" +"Geçici klasör oluşturulamadı. Lütfen Yapılandırmaları Dışa Aktarmayı tekrar " +"deneyin." + msgid "Edit Filament" msgstr "Filamenti Düzenle" @@ -14744,6 +15760,21 @@ msgstr "Daralt" msgid "Daily Tips" msgstr "Günlük İpuçları" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "hafızaya alınan nozul: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"Ön ayardaki nozul çapınız hafızaya alınan nozul çapıyla tutarlı değil. Son " +"zamanlarda nozulunuzu değiştirdiniz mi?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "%s malzemesini %s ile yazdırmak püskürtme ucu hasarına neden olabilir" + msgid "Need select printer" msgstr "Yazıcı seçmeniz gerekiyor" @@ -14775,6 +15806,12 @@ msgstr "Çıkış yaptığınızdan emin misiniz?" msgid "Refresh Printers" msgstr "Yazıcıları Yenile" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -14943,6 +15980,275 @@ msgstr "" "Mesaj gövdesi: \"%1%\"\n" "Hata: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Küçük bir katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir katman " +"çizgileri ve yüksek baskı kalitesi sağlar. Çoğu genel yazdırma durumu için " +"uygundur." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"0,2 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha düşük hız " +"ve ivmeye sahiptir ve seyrek dolgu deseni Gyroid’dir. Böylece çok daha " +"yüksek baskı kalitesi elde edilir, ancak çok daha uzun baskı süresi elde " +"edilir." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"biraz daha büyük katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir " +"düzeyde katman çizgileri ve biraz daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve katman çizgilerinin hafifçe " +"görülebilmesine karşın yazdırma süresinin daha kısa olmasına neden olur." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"katman yüksekliği daha küçüktür ve neredeyse görünmez katman çizgileri ve " +"daha yüksek baskı kalitesi, ancak daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0,2 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha küçük " +"katman çizgilerine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece neredeyse görünmez katman çizgileri ve çok daha " +"yüksek baskı kalitesi elde edilir, ancak çok daha uzun baskı süresi elde " +"edilir." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Varsayılan 0,2 mm püskürtme ucu profiliyle karşılaştırıldığında, daha küçük " +"katman yüksekliğine sahiptir ve minimum katman çizgileri ve daha yüksek " +"baskı kalitesi sağlar, ancak daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0,2 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha küçük " +"katman çizgilerine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece minimum katman çizgileri ve çok daha yüksek baskı " +"kalitesi elde edilir, ancak çok daha uzun baskı süresi elde edilir." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Genel bir katman yüksekliğine sahiptir ve genel katman çizgileri ve baskı " +"kalitesiyle sonuçlanır. Çoğu genel yazdırma durumu için uygundur." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0,4 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha fazla " +"duvar döngüsüne ve daha yüksek seyrek dolgu yoğunluğuna sahiptir. Bu, " +"baskıların daha güçlü olmasına, ancak daha fazla filaman tüketimine ve daha " +"uzun baskı süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " +"daha düşük baskı kalitesi sağlar, ancak biraz daha kısa yazdırma süresi " +"sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " +"daha düşük baskı kalitesi sağlar, ancak daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri " +"ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0,4 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha küçük " +"katman yüksekliğine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece daha az belirgin katman çizgileri ve çok daha " +"yüksek baskı kalitesi elde edilir, ancak çok daha uzun yazdırma süresi elde " +"edilir." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"katman yüksekliği daha küçüktür ve neredeyse göz ardı edilebilir katman " +"çizgileri ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma " +"süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0,4 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha küçük " +"katman yüksekliğine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece, neredeyse göz ardı edilebilecek düzeyde katman " +"çizgileri ve çok daha yüksek baskı kalitesi elde edilirken, çok daha uzun " +"baskı süresi elde edilir." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"katman yüksekliği daha küçüktür ve neredeyse göz ardı edilebilecek düzeyde " +"katman çizgileri ve daha uzun yazdırma süresi sağlar." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Büyük bir katman yüksekliğine sahiptir ve belirgin katman çizgileri ile " +"sıradan baskı kalitesi ve baskı süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0,6 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha fazla " +"duvar döngüsüne ve daha yüksek seyrek dolgu yoğunluğuna sahiptir. Bu, " +"baskıların daha güçlü olmasına, ancak daha fazla filaman tüketimine ve daha " +"uzun baskı süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " +"daha düşük baskı kalitesi sağlar, ancak bazı yazdırma durumlarında daha kısa " +"yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve çok daha belirgin katman çizgileri " +"ve çok daha düşük baskı kalitesi sağlar, ancak bazı yazdırma durumlarında " +"daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve katman çizgilerinin daha az " +"belirgin olmasına ve biraz daha yüksek baskı kalitesine, ancak daha uzun " +"yazdırma süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri " +"ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Çok büyük bir katman yüksekliğine sahiptir ve çok belirgin katman " +"çizgilerine, düşük baskı kalitesine ve genel yazdırma süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve çok belirgin katman çizgileri ve " +"çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı yazdırma " +"durumlarında daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, çok " +"daha büyük bir katman yüksekliğine sahiptir ve son derece belirgin katman " +"çizgileri ve çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı " +"yazdırma durumlarında çok daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"biraz daha küçük bir katman yüksekliğine sahiptir ve biraz daha az ama yine " +"de görünür katman çizgileri ve biraz daha yüksek baskı kalitesi sağlar, " +"ancak bazı yazdırma durumlarında daha uzun yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve daha az ama yine de görünür katman " +"çizgileri ve biraz daha yüksek baskı kalitesi sağlar, ancak bazı yazdırma " +"durumlarında daha uzun yazdırma süresi sağlar." + msgid "Connected to Obico successfully!" msgstr "Obico'ya başarıyla bağlanıldı!" @@ -14955,19 +16261,16 @@ msgstr "SimplyPrint'e başarıyla bağlanıldı!" msgid "Could not connect to SimplyPrint" msgstr "SimplyPrint'e bağlanılamadı" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "SimplyPrint hesabı bağlı değil. Ayarlamak için Bağlantı seçeneklerine gidin." - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" -"Dosya boyutu 100 MB yükleme sınırını aşıyor. Lütfen dosyanızı panel " -"üzerinden yükleyiniz." msgid "Unknown error" msgstr "Bilinmeyen hata" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" +"SimplyPrint hesabı bağlı değil. Ayarlamak için Bağlantı seçeneklerine gidin." + msgid "Connection to Flashforge works correctly." msgstr "Flashforge bağlantısı düzgün çalışıyor." @@ -14981,7 +16284,8 @@ msgid "Please give the required permissions when authorizing this application." msgstr "Lütfen bu uygulamaya yetki verirken gerekli izinleri verin." msgid "Something unexpected happened when trying to log in, please try again." -msgstr "Giriş yapmaya çalışırken beklenmeyen bir şey oldu, lütfen tekrar deneyin." +msgstr "" +"Giriş yapmaya çalışırken beklenmeyen bir şey oldu, lütfen tekrar deneyin." msgid "User cancelled." msgstr "Kullanıcı iptal edildi." @@ -15077,9 +16381,9 @@ msgid "" "Did you know that Reverse on odd feature can significantly improve " "the surface quality of your overhangs?" msgstr "" -"Tek sayıyı tersine çevir\n" -"Tek sayıyı ters çevir özelliğinin çıkıntılarınızın yüzey kalitesini " -"önemli ölçüde artırabileceğini biliyor muydunuz?" +"Tersine çevir\n" +"Tersine çevir özelliğinin çıkıntılarınızın yüzey kalitesini önemli " +"ölçüde artırabileceğini biliyor muydunuz?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -15374,6 +16678,427 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "Dosya boyutu 100 MB yükleme sınırını aşıyor. Lütfen dosyanızı panel " +#~ "üzerinden yükleyiniz." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Lütfen geçerli bir değer girin (K in 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Lütfen geçerli bir değer girin (K in 0~0.3, N in 0.6~2.0)" + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "Bağlı yazıcıları seçin (0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "Bağlı Yazıcıları Seçin (%d/6)" + +#~ msgid "PrintingPause" +#~ msgstr "Yazdırma Duraklatıldı" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "Yazıcının yerel bağlantısı başarısız oldu, lütfen tekrar deneyin." + +#~ 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 "" +#~ "Lütfen Akış Dinamiği Kalibrasyonunun ayrıntılarını wiki'mizden " +#~ "bulabilirsiniz.\n" +#~ "\n" +#~ "Genellikle kalibrasyon gereksizdir. Yazdırma başlat menüsündeki \"akış " +#~ "dinamiği kalibrasyonu\" seçeneği işaretliyken tek renkli/malzeme " +#~ "baskısını başlattığınızda, yazıcı eski yöntemi izleyecek, yazdırmadan " +#~ "önce filamenti kalibre edecektir; Çok renkli/malzeme baskısını " +#~ "başlattığınızda, yazıcı her filament değişiminde filament için varsayılan " +#~ "dengeleme parametresini kullanacaktır ve bu çoğu durumda iyi bir sonuç " +#~ "verecektir.\n" +#~ "\n" +#~ "Kalibrasyon sonucunun güvenilir olmamasına yol açacak birkaç durum " +#~ "olduğunu lütfen unutmayın: kalibrasyonu yapmak için doku plakası " +#~ "kullanmak; baskı plakasının yapışması iyi değil (lütfen baskı plakasını " +#~ "yıkayın veya yapıştırıcı uygulayın!) ...Daha fazlasını wiki'mizden " +#~ "bulabilirsiniz.\n" +#~ "\n" +#~ "Testimizde kalibrasyon sonuçlarında yaklaşık yüzde 10'luk bir titreşim " +#~ "var ve bu da sonucun her kalibrasyonda tam olarak aynı olmamasına neden " +#~ "olabilir. Yeni güncellemelerle iyileştirmeler yapmak için hâlâ temel " +#~ "nedeni araştırıyoruz." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Aynı ada sahip sonuçlardan yalnızca biri kaydedilecektir. Diğer sonuçları " +#~ "geçersiz kılmak istediğinizden emin misiniz?" + +#, 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 "" +#~ "Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada " +#~ "sahip sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " +#~ "istediğinizden emin misiniz?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Lütfen mükemmel ekstrüzyon derecesine sahip köşeyi bulun" + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " +#~ "PrusaSlicer links from Printable.com" +#~ msgstr "" +#~ "Orca’nın Printable.com’daki PrusaSlicer bağlantılarını açabilmesi için " +#~ "OrcaSlicer’ı prusaslicer:// bağlantılarıyla ilişkilendirin" + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Duvar/dolgu sırası. Onay kutusunun işareti kaldırıldığında ilk olarak " +#~ "duvarlar yazdırılır ve bu çoğu durumda en iyi sonucu verir.\n" +#~ "\n" +#~ "Duvarların komşu dolgulara yapışması nedeniyle ilk önce duvarların " +#~ "basılması aşırı çıkıntılara yardımcı olabilir. Ancak dolgu, baskılı " +#~ "duvarları tutturulduğu yerden hafifçe dışarı doğru itecek ve bu da daha " +#~ "kötü bir dış yüzey kalitesine neden olacaktır. Ayrıca dolgunun parçanın " +#~ "dış yüzeylerinden parlamasına da neden olabilir." + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer, Prusa Research'ün PrusaSlicer'ından Bambulab'ın " +#~ "BambuStudio'sunu temel alıyor. PrusaSlicer, Alessandro Ranellucci ve " +#~ "RepRap topluluğu tarafından hazırlanan Slic3r'dendir" + +#~ msgid "Export &Configs" +#~ msgstr "Yapılandırmaları Dışa Aktar" + +#~ msgid "" +#~ "Over 4 systems/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "4’ten fazla sistem/kullanışlı uzaktan erişimi kullanıyor, bazılarını " +#~ "kapatıp tekrar deneyebilirsiniz." + +#~ msgid "Infill direction" +#~ msgstr "Dolgu açısı" + +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "G2 ve G3 hareketlerine sahip bir G kodu dosyası elde etmek için bunu " +#~ "etkinleştirin. Ve montaj toleransı çözünürlükle aynıdır" + +#~ 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 "" +#~ "Daha iyi yapışma için dolgu alanı duvarla örtüşecek şekilde hafifçe " +#~ "genişletilir. Yüzde değeri seyrek dolgunun çizgi genişliğine göredir" + +#~ msgid "Export Configs" +#~ msgstr "Yapılandırmaları Dışa Aktar" + +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Kaydedilmemiş Değişikliklere İlişkin İşlemler" + +#~ msgid "Preset Value" +#~ msgstr "Ön ayar değeri" + +#~ msgid "Modified Value" +#~ msgstr "Değiştirilmiş Değer" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Değiştirilen Değeri Aktar" + +#~ msgid "Use Preset Value" +#~ msgstr "Ön Ayar Değerini Kullan" + +#~ msgid "Save Modified Value" +#~ msgstr "Değiştirilen Değeri Kaydet" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Bu değişiklik ayarlarını (değiştirilen değer) kaydetmek ister misiniz?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Ön ayarı değiştirdikten sonra bu değiştirilen ayarları (değiştirilen " +#~ "değer) korumak ister misiniz?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Ayarlarınızı daha önce değiştirdiniz ve bunların üzerine yenilerini " +#~ "yazmak üzeresiniz." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Geçerli değiştirilen ayarlarınızı korumak mı yoksa önceden ayarlanmış " +#~ "ayarları mı kullanmak istiyorsunuz?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Geçerli değiştirilen ayarlarınızı kaydetmek istiyor musunuz?" + +#~ msgid "Unload Filament" +#~ msgstr "Filamenti Çıkarın" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Filamenti otomatik olarak yüklemek veya çıkarmak için bir AMS yuvası " +#~ "seçin ve ardından \"Yükle\" veya \"Boşalt\" düğmesine basın." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Anakart" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Yeni Akış Dinamiği Kalibrasyonu" + +#~ msgid "" +#~ "Over 4 studio/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "4’ten fazla stüdyo/kullanışlı uzaktan erişim kullanıyor, bazılarını " +#~ "kapatıp tekrar deneyebilirsiniz." + +#~ msgid "" +#~ "The 3mf file version is in Beta and it is newer than the current Bambu " +#~ "Studio version." +#~ msgstr "" +#~ "3mf dosya sürümü Beta aşamasındadır ve mevcut Bambu Studio sürümünden " +#~ "daha yenidir." + +#~ msgid "If you would like to try Bambu Studio Beta, you may click to" +#~ msgstr "Bambu Studio Beta’yı denemek isterseniz tıklayabilirsiniz." + +#~ msgid "The 3mf file version is newer than the current Bambu Studio version." +#~ msgstr "3mf dosya sürümü mevcut Bambu Studio sürümünden daha yenidir." + +#~ msgid "" +#~ "Update your Bambu Studio could enable all functionality in the 3mf file." +#~ msgstr "" +#~ "Bambu Studio’nuzu güncellemek, 3mf dosyasındaki tüm işlevleri " +#~ "etkinleştirebilir." + +#~ msgid "active" +#~ msgstr "aktif" + +#~ msgid "Jump to layer" +#~ msgstr "Katmana atla" + +#~ msgid "Cabin humidity" +#~ msgstr "Kabin nemi" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "Yeşil, AMS neminin normal olduğunu, turuncu nemin yüksek olduğunu, " +#~ "kırmızı ise nemin çok yüksek olduğunu gösterir.(Higrometre: ne kadar " +#~ "düşükse o kadar iyidir.)" + +#~ msgid "Desiccant status" +#~ msgstr "Kurutucu durumu" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "İki çubuktan daha düşük bir kurutucu durumu, kurutucunun etkin olmadığını " +#~ "gösterir. Lütfen kurutucuyu değiştirin.(Çubuklar: ne kadar yüksek olursa " +#~ "o kadar iyidir.)" + +#~ 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 "" +#~ "Not: Kapak açıkken veya kurutucu paketi değiştirildiğinde, nemin emilmesi " +#~ "saatler veya bir gece sürebilir. Düşük sıcaklıklar da süreci yavaşlatır. " +#~ "Bu süre zarfında gösterge hazneyi doğru şekilde temsil etmeyebilir." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Not: Yazdırma sırasında yeni filament takılırsa AMS, yazdırma tamamlanana " +#~ "kadar herhangi bir bilgiyi otomatik olarak okumayacaktır." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "G kodunu %1%'e aktarmayı başardınız" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Başlatma başarısız (Cihaz Yok)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Başlatma başarısız oldu (Kamera Cihazı Yok)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "Yazıcı indirme işlemiyle meşgul. Lütfen indirme işleminin bitmesini " +#~ "bekleyin." + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "Başlatma başarısız oldu (Geçerli yazıcı sürümünde desteklenmiyor)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Başlatma başarısız oldu (Yalnızca LAN modunda erişilemez)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "Başlatma başarısız oldu (Yazıcının LAN ip'si eksik)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "[%d] durduruldu!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Yükleme başarısız [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Dosya yok [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Yükleme başarısız [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Model bilgileri yazıcıdan alınamadı." + +#~ msgid "Failed to parse model infomations." +#~ msgstr "Model bilgileri ayrıştırılamadı." + +#~ msgid "Connection lost. Please retry." +#~ msgstr "Bağlantı koptu. Lütfen tekrar deneyiniz." + +#~ msgid "File not exists." +#~ msgstr "Dosya mevcut değil." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca pozitif " +#~ "parçalar ihraç edilecektir." + +#, 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 ayarının bazı ayarlarını değiştirdiniz.\n" +#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) " +#~ "korumak ister misiniz?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Bazı ön ayar ayarlarını değiştirdiniz.\n" +#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) " +#~ "korumak ister misiniz?" + +#~ msgid " ℃" +#~ msgstr " °C" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament " +#~ "ayarına gidin.\n" +#~ "Lütfen püskürtme ucu sıcaklığının, sıcak yatak sıcaklığının ve maksimum " +#~ "hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip " +#~ "olduğunu unutmayın. Lütfen bunları dikkatlice ayarlayın." + #~ msgid "Studio Version:" #~ msgstr "Stüdyo Sürümü:" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 948a1d8e24..9330e360fd 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2023-08-10 20:25-0400\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"PO-Revision-Date: 2024-05-30 12:35+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: uk_UA\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.4.4\n" msgid "Supports Painting" msgstr "Малювання підтримки" @@ -59,7 +59,7 @@ msgid "Erase all painting" msgstr "Стерти всі малюнки" msgid "Highlight overhang areas" -msgstr "Виділити виступаючі області" +msgstr "Виділяти виступаючі області" msgid "Gap fill" msgstr "Заповнення пропусків" @@ -77,7 +77,7 @@ msgid "Smart fill angle" msgstr "Розумний кут заповнення" msgid "On overhangs only" -msgstr "Тільки на виступах" +msgstr "Лише на звисах" msgid "Auto support threshold angle: " msgstr "Пороговий кут автоматичної підтримки: " @@ -108,10 +108,10 @@ msgid "Support Generated" msgstr "Генерація підтримки" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "Gizmo \"Поверхнею на стіл\"" msgid "Lay on face" -msgstr "Покласти в обличчя" +msgstr "Покласти на грань" #, boost-format msgid "" @@ -153,7 +153,7 @@ msgid "Smart fill" msgstr "Інтелектуальне заповнення" msgid "Bucket fill" -msgstr "Заповнення відром" +msgstr "Заливка" msgid "Height range" msgstr "Діапазон висот" @@ -190,13 +190,13 @@ msgid "Move" msgstr "Перемістити" msgid "Gizmo-Move" -msgstr "" +msgstr "Gizmo переміщення" msgid "Rotate" msgstr "Повернути" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Gizmo обертання" msgid "Optimize orientation" msgstr "Оптимізувати орієнтацію" @@ -208,7 +208,7 @@ msgid "Scale" msgstr "Масштаб" msgid "Gizmo-Scale" -msgstr "" +msgstr "Gizmo масштабування" msgid "Error: Please close all toolbar menus first" msgstr "Помилка: будь ласка, спочатку закрийте все меню панелі інструментів" @@ -261,6 +261,9 @@ msgstr "Скинути орієнтацію" msgid "World coordinates" msgstr "Світові координати" +msgid "Object coordinates" +msgstr "Координати об'єкта" + msgid "°" msgstr "°" @@ -275,16 +278,16 @@ msgid "uniform scale" msgstr "єдина шкала" msgid "Planar" -msgstr "" +msgstr "Плоский" msgid "Dovetail" -msgstr "" +msgstr "Ластівчин хвіст" msgid "Auto" msgstr "Авто" msgid "Manual" -msgstr "" +msgstr "Manual" msgid "Plug" msgstr "Підключи" @@ -293,10 +296,10 @@ msgid "Dowel" msgstr "Дюбель" msgid "Snap" -msgstr "" +msgstr "Захоплення" msgid "Prism" -msgstr "" +msgstr "Призма" msgid "Frustum" msgstr "Усічений" @@ -308,13 +311,13 @@ msgid "Hexagon" msgstr "Шестикутник" msgid "Keep orientation" -msgstr "" +msgstr "Зберегти орієнтацію" msgid "Place on cut" msgstr "Помістити на зріз" msgid "Flip upside down" -msgstr "" +msgstr "Перевернути догори дном" msgid "Connectors" msgstr "З'єднувачі" @@ -332,19 +335,19 @@ msgstr "Форма" #. Size in emboss direction #. TRN - Input label. Be short as possible msgid "Depth" -msgstr "" +msgstr "Глибина" msgid "Groove" -msgstr "" +msgstr "Жолобок" msgid "Width" msgstr "Ширина" msgid "Flap Angle" -msgstr "" +msgstr "Кут клапана" msgid "Groove Angle" -msgstr "" +msgstr "Кут жолоба" msgid "Part" msgstr "Частина" @@ -356,21 +359,26 @@ msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane" msgstr "" +"Клацніть, щоб перевернути площину розрізу\n" +"Потягни для переміщення розрізу площини" msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane\n" "Right-click a part to assign it to the other side" msgstr "" +"Клацніть, щоб перевернути площину розрізу\n" +"Перетягни для переміщення розрізу площини\n" +"Клацніть правою кнопкою миші на деталі, щоб призначити її на іншу сторону" msgid "Move cut plane" -msgstr "" +msgstr "Переміщення розрізу площини" msgid "Mode" -msgstr "" +msgstr "Режим" msgid "Change cut mode" -msgstr "" +msgstr "Змінити режим різання" msgid "Tolerance" msgstr "Допуск" @@ -379,7 +387,7 @@ msgid "Drag" msgstr "Перетягніть" msgid "Draw cut line" -msgstr "" +msgstr "Намалюйте лінію розрізу" msgid "Left click" msgstr "Клацніть лівою кнопкою миші" @@ -409,22 +417,22 @@ msgid "Cut" msgstr "Вирізати" msgid "Rotate cut plane" -msgstr "" +msgstr "Поверніть площину розрізу" msgid "Remove connectors" msgstr "Видалити з’єднання" msgid "Bulge" -msgstr "" +msgstr "Виступ" msgid "Bulge proportion related to radius" -msgstr "" +msgstr "Пропорція випуклості в залежності від радіуса" msgid "Space" msgstr "Пробіл" msgid "Space proportion related to radius" -msgstr "" +msgstr "Пропорція простору в залежності від радіусу" msgid "Confirm connectors" msgstr "Підтвердити з'єднувачі" @@ -433,26 +441,26 @@ msgid "Cancel" msgstr "Скасувати" msgid "Build Volume" -msgstr "" +msgstr "Створіть об'єм" msgid "Flip cut plane" -msgstr "" +msgstr "Перевернути площину зрізу" msgid "Groove change" -msgstr "" +msgstr "Зміна паза" msgid "Reset" msgstr "Скинути" #. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. msgid "Edited" -msgstr "" +msgstr "Відредаговано" msgid "Cut position" -msgstr "" +msgstr "Положення зрізу" msgid "Reset cutting plane" -msgstr "" +msgstr "Скинути площину різання" msgid "Edit connectors" msgstr "Редагувати з'єднувачі" @@ -461,10 +469,10 @@ msgid "Add connectors" msgstr "Додати з'єднувачі" msgid "Reset cut" -msgstr "" +msgstr "Скинути зріз" msgid "Reset cutting plane and remove connectors" -msgstr "" +msgstr "Скиньте площину різання та зніміть з'єднувачі" msgid "Upper part" msgstr "Верхня частина" @@ -496,46 +504,48 @@ msgstr "Виявлено неприпустимі з'єднувачі" #, c-format, boost-format msgid "%1$d connector is out of cut contour" msgid_plural "%1$d connectors are out of cut contour" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%1$d зєднання виходить за контур моделі" +msgstr[1] "%1$d зєднання виходить за контур моделі" +msgstr[2] "%1$d зєднань виходить за контур моделі" #, c-format, boost-format msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%1$d зєднання знаходиться за межами моделі" +msgstr[1] "%1$d зєднання знаходяться за межами моделі" +msgstr[2] "%1$d зєднань знаходяться за межами моделі" msgid "Some connectors are overlapped" msgstr "Деякі роз'єми перекриваються" msgid "Select at least one object to keep after cutting." -msgstr "" +msgstr "Виберіть принаймні один об'єкт, який ви збережете після вирізання." msgid "Cut plane is placed out of object" -msgstr "" +msgstr "Площина зрізу розміщена поза об'єктом" msgid "Cut plane with groove is invalid" -msgstr "" +msgstr "Площина зрізу з пазом невірна" msgid "Connector" msgstr "З'єднувач" msgid "Cut by Plane" -msgstr "" +msgstr "Вирізати площиною" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" +"неманіфольдні ребра можуть бути викликані інструментом різання, ви хочете " +"виправити це зараз?" msgid "Repairing model object" msgstr "Відновлення об'єкта моделі" msgid "Cut by line" -msgstr "" +msgstr "Розрізати по лінії" msgid "Delete connector" -msgstr "" +msgstr "Видалити з'єднувач" msgid "Mesh name" msgstr "Назва сітки" @@ -623,13 +633,13 @@ msgid "Remove selection" msgstr "Видалити виділення" msgid "Entering Seam painting" -msgstr "" +msgstr "Entering seam painting" msgid "Leaving Seam painting" -msgstr "" +msgstr "Leaving Seam Painting" msgid "Paint-on seam editing" -msgstr "" +msgstr "Paint-on seam editing" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -670,50 +680,50 @@ msgstr "Форма тексту" #. TRN - Title in Undo/Redo stack after rotate with text around emboss axe msgid "Text rotate" -msgstr "" +msgstr "Поворот тексту" #. TRN - Title in Undo/Redo stack after move with text along emboss axe - From surface msgid "Text move" -msgstr "" +msgstr "Переміщення тексту" msgid "Set Mirror" -msgstr "" +msgstr "Встановити віддзеркалення" msgid "Embossed text" -msgstr "" +msgstr "Рельєфний текст" msgid "Enter emboss gizmo" -msgstr "" +msgstr "Ввести пристрій для тиснення" msgid "Leave emboss gizmo" -msgstr "" +msgstr "Залиште пристрій для тиснення" msgid "Embossing actions" -msgstr "" +msgstr "Дії з тисненням" msgid "Emboss" -msgstr "" +msgstr "Рельєфне тиснення" msgid "NORMAL" -msgstr "" +msgstr "НОРМАЛЬНО" msgid "SMALL" -msgstr "" +msgstr "МАЛИЙ" msgid "ITALIC" -msgstr "" +msgstr "КУРСИВ" msgid "SWISS" -msgstr "" +msgstr "SWISS" msgid "MODERN" -msgstr "" +msgstr "СУЧАСНИЙ" msgid "First font" -msgstr "" +msgstr "Перший шрифт" msgid "Default font" -msgstr "" +msgstr "Типовий шрифт" msgid "Advanced" msgstr "Додатково" @@ -722,75 +732,78 @@ msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." msgstr "" +"Текст не може бути написаний вибраним шрифтом. Спробуйте вибрати інший шрифт." msgid "Embossed text cannot contain only white spaces." -msgstr "" +msgstr "Рельєфний текст не може містити лише пробіли." msgid "Text contains character glyph (represented by '?') unknown by font." msgstr "" +"Текст містить символ у вигляді гліфа (представлений символом '?'), шрифт " +"якого невідомий." msgid "Text input doesn't show font skew." -msgstr "" +msgstr "При введенні тексту не спостерігається нахил шрифту." msgid "Text input doesn't show font boldness." -msgstr "" +msgstr "При введенні тексту не відображається жирність шрифту." msgid "Text input doesn't show gap between lines." -msgstr "" +msgstr "При введенні тексту не відображаються пропуски між рядками." msgid "Too tall, diminished font height inside text input." -msgstr "" +msgstr "Занадто високий, зменшіть висота шрифту всередині текстового введення." msgid "Too small, enlarged font height inside text input." -msgstr "" +msgstr "Занадто малий, збільшіть висоту шрифту в тексті, що вводиться." msgid "Text doesn't show current horizontal alignment." -msgstr "" +msgstr "Текст не показує поточне вирівнювання по горизонталі." msgid "Revert font changes." -msgstr "" +msgstr "Скасувати зміну шрифту." #, boost-format msgid "Font \"%1%\" can't be selected." -msgstr "" +msgstr "Шрифт \"%1%\" не може бути обраний." msgid "Operation" -msgstr "" +msgstr "Операція" msgid "Join" -msgstr "" +msgstr "Обєднання" msgid "Click to change text into object part." -msgstr "" +msgstr "Натисніть, щоб змінити текст на частині об'єкта." msgid "You can't change a type of the last solid part of the object." -msgstr "" +msgstr "Ви не можете змінити тип останньої твердої частини об’єкта." msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "Вирізати" msgid "Click to change part type into negative volume." -msgstr "" +msgstr "Натисніть, щоб змінити тип частини на від'ємний об'єм." msgid "Modifier" msgstr "Модифікатор" msgid "Click to change part type into modifier." -msgstr "" +msgstr "Натисніть, щоб змінити тип деталі на модифікаторі." msgid "Change Text Type" -msgstr "" +msgstr "Змінити тип тексту" #, boost-format msgid "Rename style(%1%) for embossing text" -msgstr "" +msgstr "Перейменувати стиль(%1%) для тиснення тексту" msgid "Name can't be empty." -msgstr "" +msgstr "Ім'я не повинно бути пустим." msgid "Name has to be unique." -msgstr "" +msgstr "Ім'я повинно бути унікальним." msgid "OK" msgstr "ОК" @@ -799,29 +812,29 @@ msgid "Rename style" msgstr "Перейменувати стиль" msgid "Rename current style." -msgstr "" +msgstr "Перейменувати поточний стиль." msgid "Can't rename temporary style." -msgstr "" +msgstr "Неможливо перейменувати тимчасовий стиль." msgid "First Add style to list." -msgstr "" +msgstr "Спочатку додайте стиль до списку." #, boost-format msgid "Save %1% style" -msgstr "" +msgstr "Зберегти стиль %1%" msgid "No changes to save." -msgstr "" +msgstr "Ніяких змін не зберігати." msgid "New name of style" -msgstr "" +msgstr "Нова назва стилю" msgid "Save as new style" -msgstr "" +msgstr "Зберегти як новий стиль" msgid "Only valid font can be added to style." -msgstr "" +msgstr "До стилю можна додати лише допустимий шрифт." msgid "Add style to my list." msgstr "Додати стиль до мого списку." @@ -833,31 +846,31 @@ msgid "Remove style" msgstr "Видалити стиль" msgid "Can't remove the last existing style." -msgstr "" +msgstr "Неможливо видалити останній існуючий стиль." #, boost-format msgid "Are you sure you want to permanently remove the \"%1%\" style?" -msgstr "" +msgstr "Ви впевнені, що хочете назавжди видалити стиль \"%1%\"?" #, boost-format msgid "Delete \"%1%\" style." -msgstr "" +msgstr "Видаліть стиль \"%1%\"." #, boost-format msgid "Can't delete \"%1%\". It is last style." -msgstr "" +msgstr "Не вдається видалити \"%1%\". Це останній стиль." #, boost-format msgid "Can't delete temporary style \"%1%\"." -msgstr "" +msgstr "Не вдається видалити тимчасовий стиль \"%1%\"." #, boost-format msgid "Modified style \"%1%\"" -msgstr "" +msgstr "Модифікований стиль \"%1%\"" #, boost-format msgid "Current style is \"%1%\"" -msgstr "" +msgstr "Поточний стиль \"%1%\"" #, boost-format msgid "" @@ -865,184 +878,195 @@ msgid "" "\n" "Would you like to continue anyway?" msgstr "" +"Зміна стилю на \"%1%\" відкине поточну модифікацію стилю.\n" +"\n" +"Ви все одно хочете продовжити?" msgid "Not valid style." -msgstr "" +msgstr "Невірний стиль." #, boost-format msgid "Style \"%1%\" can't be used and will be removed from a list." -msgstr "" +msgstr "Стиль \"%1%\" не може бути використаний і буде вилучений зі списку." msgid "Unset italic" -msgstr "" +msgstr "Невстановлений курсив" msgid "Set italic" -msgstr "" +msgstr "Виділено курсивом" msgid "Unset bold" -msgstr "" +msgstr "Не встановлений жирний шрифт" msgid "Set bold" -msgstr "" +msgstr "Виділено жирним шрифтом" msgid "Revert text size." -msgstr "" +msgstr "Зміна розміру тексту." msgid "Revert embossed depth." -msgstr "" +msgstr "Змінити глибину тиснення." msgid "" "Advanced options cannot be changed for the selected font.\n" "Select another font." msgstr "" +"Для вибраного шрифту не можна змінити додаткові параметри.\n" +"Виберіть інший шрифт." msgid "Revert using of model surface." -msgstr "" +msgstr "Скидання розташування." msgid "Revert Transformation per glyph." -msgstr "" +msgstr "Скидання перетворення." msgid "Set global orientation for whole text." -msgstr "" +msgstr "Встановити глобальну орієнтацію для всього тексту." msgid "Set position and orientation per glyph." -msgstr "" +msgstr "Встановіть положення та орієнтацію для кожного гліфа." msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "Ліво" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "Центр" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "Право" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "Верх" msgctxt "Alignment" msgid "Middle" -msgstr "" +msgstr "Середина" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "Низ" msgid "Revert alignment." -msgstr "" +msgstr "Повернути вирівнювання." #. TRN EmbossGizmo: font units msgid "points" -msgstr "" +msgstr "точки" msgid "Revert gap between characters" -msgstr "" +msgstr "Скидання відстані між літерами" msgid "Distance between characters" -msgstr "" +msgstr "Відстань між символами" msgid "Revert gap between lines" -msgstr "" +msgstr "Змінити проміжок між рядками" msgid "Distance between lines" -msgstr "" +msgstr "Відстань між рядками" msgid "Undo boldness" -msgstr "" +msgstr "Скасувати дію" msgid "Tiny / Wide glyphs" -msgstr "" +msgstr "Тонкі/Tовсті символи" msgid "Undo letter's skew" -msgstr "" +msgstr "Виправити нахил літер" msgid "Italic strength ratio" -msgstr "" +msgstr "Коефіцієнт нахилу символів" msgid "Undo translation" -msgstr "" +msgstr "Скасування перекладу" msgid "Distance of the center of the text to the model surface." -msgstr "" +msgstr "Відстань від центру тексту до поверхні моделі." msgid "Undo rotation" -msgstr "" +msgstr "Відмінити обертання" msgid "Rotate text Clock-wise." -msgstr "" +msgstr "Обертати текст за годинниковою стрілкою." msgid "Unlock the text's rotation when moving text along the object's surface." msgstr "" +"Розблокувати обертання тексту при переміщенні тексту вздовж поверхні об'єкта." msgid "Lock the text's rotation when moving text along the object's surface." msgstr "" +"Блокування обертання тексту під час переміщення тексту вздовж поверхні " +"об'єкта." msgid "Select from True Type Collection." -msgstr "" +msgstr "Виберіть із колекції True Type." msgid "Set text to face camera" -msgstr "" +msgstr "Текст лицьовою стороною до камери" msgid "Orient the text towards the camera." -msgstr "" +msgstr "Зорієнтувати текст у напрямку камери." #, boost-format msgid "" "Can't load exactly same font(\"%1%\"). Aplication selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" +"Не вдається завантажити точно такий самий шрифт(\"%1%\"). Програма вибрала " +"схожий шрифт(\"%2%\"). Ви повинні встановити шрифт, щоб дозволити " +"редагування тексту." msgid "No symbol" -msgstr "" +msgstr "Немає символів" msgid "Loading" msgstr "Завантаження" msgid "In queue" -msgstr "" +msgstr "У черзі" #. TRN - Input label. Be short as possible #. Height of one text line - Font Ascent msgid "Height" -msgstr "Зростання" +msgstr "Висота" #. TRN - Input label. Be short as possible #. Copy surface of model on surface of the embossed text #. TRN - Input label. Be short as possible msgid "Use surface" -msgstr "" +msgstr "Тільки на поверхні" #. TRN - Input label. Be short as possible #. Option to change projection on curved surface #. for each character(glyph) in text separately msgid "Per glyph" -msgstr "" +msgstr "Орієнтація по гліфу" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right msgid "Alignment" -msgstr "" +msgstr "Вирівнювання" #. TRN - Input label. Be short as possible msgid "Char gap" -msgstr "" +msgstr "Міжлітерний інтервал" #. TRN - Input label. Be short as possible msgid "Line gap" -msgstr "" +msgstr "Міжрядковий інтервал" #. TRN - Input label. Be short as possible msgid "Boldness" -msgstr "" +msgstr "Товщина шрифту" #. TRN - Input label. Be short as possible #. Like Font italic msgid "Skew ratio" -msgstr "" +msgstr "Коефіцієнт нахилу" #. TRN - Input label. Be short as possible #. Distance from model surface to be able @@ -1050,251 +1074,258 @@ msgstr "" #. move text as modifier fully out of not flat surface #. TRN - Input label. Be short as possible msgid "From surface" -msgstr "" +msgstr "Зсув від поверхні" #. TRN - Input label. Be short as possible #. Keep vector from bottom to top of text aligned with printer Y axis msgid "Keep up" -msgstr "" +msgstr "Зберігати верт. орієнтацію" #. TRN - Input label. Be short as possible. #. Some Font file contain multiple fonts inside and #. this is numerical selector of font inside font collections msgid "Collection" -msgstr "" +msgstr "Колекція" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" -msgstr "" +msgstr "Обертання SVG" #. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface msgid "SVG move" -msgstr "" +msgstr "ПереміщенняSVG" msgid "Enter SVG gizmo" -msgstr "" +msgstr "Вхід в гізмо SVG" msgid "Leave SVG gizmo" -msgstr "" +msgstr "Вихід з гізмо SVG" msgid "SVG actions" -msgstr "" +msgstr "Дії з SVG" msgid "SVG" -msgstr "" +msgstr "SVG" #, boost-format msgid "Opacity (%1%)" -msgstr "" +msgstr "Прозорість (%1%)" #, boost-format msgid "Color gradient (%1%)" -msgstr "" +msgstr "Градієнт кольору (%1%)" msgid "Undefined fill type" -msgstr "" +msgstr "Невизначений тип заливки" msgid "Linear gradient" -msgstr "" +msgstr "Лінійний градієнт" msgid "Radial gradient" -msgstr "" +msgstr "Радіальний градієнт" msgid "Open filled path" -msgstr "" +msgstr "Відкритий контур із заливкою" msgid "Undefined stroke type" -msgstr "" +msgstr "Невизначений тип обведення" msgid "Path can't be healed from selfintersection and multiple points." msgstr "" +"Контур не може бути виправлений від проблеми самоперетину і крапок, що " +"дублюються." msgid "" "Final shape constains selfintersection or multiple points with same " "coordinate." msgstr "" +"Фінальна форма містить самоперетин або декілька точок з однаковою " +"координатою." #, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "" +msgstr "Фігура позначена як невидима (%1%)." #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. #, boost-format msgid "Fill of shape (%1%) contains unsupported: %2%." -msgstr "" +msgstr "Заливка фігури (%1%) не підтримується: %2%." #, boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "" +msgstr "Обведення фігури (%1%) занадто тонке (мінімальна товщина %2% мм)." #, boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." -msgstr "" +msgstr "Обведення фігури (%1%) не підтримується: %2%." msgid "Face the camera" -msgstr "" +msgstr "Лицьовою стороною до камери" #. TRN - Preview of filename after clear local filepath. msgid "Unknown filename" -msgstr "" +msgstr "Невідоме ім'я файлу" #, boost-format msgid "SVG file path is \"%1%\"" -msgstr "" +msgstr "Шлях до файлу SVG \"%1%\"" msgid "Reload SVG file from disk." -msgstr "" +msgstr "Перезавантажте файл SVG з диска." msgid "Change file" -msgstr "" +msgstr "Змінити файл" msgid "Change to another .svg file" -msgstr "" +msgstr "Змінити на інший файл .svg" msgid "Forget the file path" -msgstr "" +msgstr "Забути шлях до файлу" msgid "" "Do NOT save local path to 3MF file.\n" "Also disables 'reload from disk' option." msgstr "" +"НЕ зберігати локальний шлях до 3MF-файлу.\n" +"Також вимикає опцію \"перезавантажити з диска\"." #. TRN: An menu option to convert the SVG into an unmodifiable model part. msgid "Bake" -msgstr "" +msgstr "Запікати" #. TRN: Tooltip for the menu item. msgid "Bake into model as uneditable part" -msgstr "" +msgstr "Запекти в модель як незмінну частину" msgid "Save as" -msgstr "" +msgstr "Зберегти як" msgid "Save SVG file" -msgstr "" +msgstr "Зберегти SVG файл" msgid "Save as '.svg' file" -msgstr "" +msgstr "Зберегти у форматі '.svg" msgid "Size in emboss direction." -msgstr "" +msgstr "Глибина рельєфу." #. TRN: The placeholder contains a number. #, boost-format msgid "Scale also changes amount of curve samples (%1%)" -msgstr "" +msgstr "Масштаб також змінює кількість вибірок кривої (%1%)" msgid "Width of SVG." -msgstr "" +msgstr "Ширина SVG." msgid "Height of SVG." -msgstr "" +msgstr "Висота SVG." msgid "Lock/unlock the aspect ratio of the SVG." -msgstr "" +msgstr "Блокувати/розблокувати співвідношення сторін SVG." msgid "Reset scale" -msgstr "" +msgstr "Скинути масштаб" msgid "Distance of the center of the SVG to the model surface." -msgstr "" +msgstr "Відстань від центру SVG до поверхні моделі." msgid "Reset distance" -msgstr "" +msgstr "Скинути відстань" msgid "Reset rotation" -msgstr "" +msgstr "Скинути обертання" msgid "Lock/unlock rotation angle when dragging above the surface." msgstr "" +"Блокування/розблокування кута повороту при перетягуванні над поверхнею." msgid "Mirror vertically" -msgstr "" +msgstr "Віддзеркалити вертикально" msgid "Mirror horizontally" -msgstr "" +msgstr "Віддзеркалити горизонтально" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" -msgstr "" +msgstr "Змінити тип SVG-файлу" #. TRN - Input label. Be short as possible msgid "Mirror" msgstr "Дзеркально" msgid "Choose SVG file for emboss:" -msgstr "" +msgstr "Виберіть SVG файл для рельєфу:" #, boost-format msgid "File does NOT exist (%1%)." -msgstr "" +msgstr "Файл НЕ існує (%1%)." #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" -msgstr "" +msgstr "Ім'я файлу має закінчуватися на \".svg\", а не на %1%" #, boost-format msgid "Nano SVG parser can't load from file (%1%)." -msgstr "" +msgstr "Парсер NanoSVG не може прочитати файл (%1%)." #, boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." -msgstr "" +msgstr "Файл SVG не містить жодного шляху для рельєфного тексту (%1%)." msgid "Vertex" -msgstr "" +msgstr "Вершина" msgid "Edge" -msgstr "" +msgstr "Ребро" msgid "Plane" msgstr "Площина" msgid "Point on edge" -msgstr "" +msgstr "Точка на ребрі" msgid "Point on circle" -msgstr "" +msgstr "Точка на колі" msgid "Point on plane" -msgstr "" +msgstr "Точка на площині" msgid "Center of edge" -msgstr "" +msgstr "Центр ребра" msgid "Center of circle" -msgstr "" +msgstr "Центр кола" msgid "ShiftLeft mouse button" -msgstr "" +msgstr "ShiftЛіва кнопка миші" msgid "Select feature" -msgstr "" +msgstr "Виберіть функцію" msgid "Select point" -msgstr "" +msgstr "Виберіть точку" msgid "Delete" msgstr "Видалити" msgid "Restart selection" -msgstr "" +msgstr "Вибрати заново" msgid "Esc" msgstr "Esc" msgid "Unselect" -msgstr "" +msgstr "Зняти виділення" msgid "Measure" -msgstr "" +msgstr "Виміряти" msgid "Edit to scale" -msgstr "" +msgstr "Редагувати масштаб" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "Масштаб" msgid "None" msgstr "Ні" @@ -1306,22 +1337,22 @@ msgid "Length" msgstr "Довжина" msgid "Selection" -msgstr "" +msgstr "Вибір" msgid "Copy to clipboard" msgstr "Копіювати в буфер обміну" msgid "Perpendicular distance" -msgstr "" +msgstr "Перпендикулярна відстань" msgid "Distance" -msgstr "" +msgstr "Відстань" msgid "Direct distance" -msgstr "" +msgstr "Пряма відстань" msgid "Distance XYZ" -msgstr "" +msgstr "Відстань XYZ" msgid "Ctrl+" msgstr "Ctrl+" @@ -1352,8 +1383,7 @@ msgid "Machine" msgstr "Машина" msgid "Configuration package was loaded, but some values were not recognized." -msgstr "" -"Пакет конфігурації був завантажений, але деякі значення не були розпізнані." +msgstr "Пакет конфігурації був завантажений, але деякі значення не розпізнано." #, boost-format msgid "" @@ -1362,9 +1392,6 @@ msgstr "" "Файл конфігурації “%1%” був завантажений, але деякі значення не були " "розпізнані." -msgid "V" -msgstr "V" - 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." @@ -1387,19 +1414,19 @@ msgstr "Критична помилка" #, boost-format msgid "OrcaSlicer got an unhandled exception: %1%" -msgstr "OrcaSlicer отримав необроблений виняток: %1%" +msgstr "Невідома помилка OrcaSlicer : %1%" msgid "Untitled" -msgstr "Без імені" +msgstr "Без назви" msgid "Downloading Bambu Network Plug-in" -msgstr "Завантаження мережевого модуля Bambu, що підключається" +msgstr "Завантаження мережевого плагіна для принтерів Bambu" msgid "Login information expired. Please login again." msgstr "Термін дії даних для входу минув. Будь ласка, увійдіть знову." msgid "Incorrect password" -msgstr "Неправильний пароль" +msgstr "Невірний пароль" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" @@ -1410,15 +1437,17 @@ msgid "" "features.\n" "Click Yes to install it now." msgstr "" +"Для роботи деяких функцій Orca Slicer потрібен Microsoft WebView2 Runtime.\n" +"Натисніть Так, щоб встановити його зараз." msgid "WebView2 Runtime" -msgstr "" +msgstr "Виконання WebView2" #, c-format, boost-format msgid "" "%s\n" "Do you want to continue?" -msgstr "%s Ви хочете продовжувати?" +msgstr "%s Хочете продовжити?" msgid "Remember my choice" msgstr "Запам'ятати мій вибір" @@ -1428,7 +1457,8 @@ msgstr "Завантаження конфігурації" #, c-format, boost-format msgid "Click to download new version in default browser: %s" -msgstr "Натисніть, щоб завантажити нову версію в стандартному браузері: %s" +msgstr "" +"Натисніть OK, щоб завантажити останню версію в стандартному браузері: %s" msgid "The Orca Slicer needs an upgrade" msgstr "Orca Slicer потребує оновлення" @@ -1445,9 +1475,14 @@ msgid "" "Please note, application settings will be lost, but printer profiles will " "not be affected." msgstr "" +"Можливо, файл конфігурації OrcaSlicer пошкоджений і не може бути " +"оброблений.\n" +"OrcaSlicer спробував відтворити конфігураційний файл.\n" +"Зверніть увагу, що налаштування програми будуть втрачені, але профілі " +"принтера не торкнуться." msgid "Rebuild" -msgstr "Відновити" +msgstr "Відновлення" msgid "Loading current presets" msgstr "Завантаження поточних пресетів" @@ -1460,10 +1495,14 @@ msgstr "Виберіть один файл (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgstr "" +"Виберіть один або кілька файлів (3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Виберіть один або кілька файлів (3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "Виберіть ZIP файл" + msgid "Choose one file (gcode/3mf):" msgstr "Виберіть один файл (gcode/3mf):" @@ -1475,7 +1514,7 @@ msgid "" "changes as new presets." msgstr "" "Ви можете зберегти модифіковані пресети в новому проекті, видалити або " -"Зберегти змінюється як нові пресети." +"Зберегти зміни як нові пресети." msgid "User logged out" msgstr "Користувач вийшов із системи" @@ -1500,15 +1539,18 @@ msgid "" "The number of user presets cached in the cloud has exceeded the upper limit, " "newly created user presets can only be used locally." msgstr "" +"Кількість налаштувань користувача, збережених у хмарі, перевищила " +"максимально допустиму межу, тому новостворені налаштування користувача можна " +"використовувати лише локально." msgid "Sync user presets" -msgstr "" +msgstr "Синхронізувати налаштування користувача" msgid "Loading user preset" msgstr "Завантаження користувацького пресета" msgid "Switching application language" -msgstr "Переключення мови програми" +msgstr "Зміна мови програми" msgid "Select the language" msgstr "Виберіть мову" @@ -1531,6 +1573,13 @@ msgstr "Поточні завантаження" msgid "Select a G-code file:" msgstr "Виберіть файл G-коду:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" +"Не вдалося розпочати завантаження URL-адреси. Папка призначення не " +"встановлена. Будь ласка, виберіть папку призначення у Майстрі конфігурації." + msgid "Import File" msgstr "Імпортувати файл" @@ -1551,7 +1600,7 @@ msgstr "Помилка ініціалізації графічного інте #, boost-format msgid "Fatal error, exception catched: %1%" -msgstr "Непереборна помилка, виявлено виняток: %1%" +msgstr "Критична помилка, виявлено виняток: %1%" msgid "Quality" msgstr "Якість" @@ -1566,7 +1615,7 @@ msgid "Support" msgstr "Підтримки" msgid "Flush options" -msgstr "Варіанти скидання" +msgstr "Параметри очищення" msgid "Speed" msgstr "Швидкість" @@ -1575,13 +1624,13 @@ msgid "Strength" msgstr "Міцність" msgid "Top Solid Layers" -msgstr "Суцільних шарів зверху" +msgstr "Верхніх суцільних шарів" msgid "Top Minimum Shell Thickness" msgstr "Мінімальна товщина верхньої оболонки" msgid "Bottom Solid Layers" -msgstr "Нижній суцільний шар" +msgstr "Нижніх суцільних шарів" msgid "Bottom Minimum Shell Thickness" msgstr "Мінімальна товщина нижньої оболонки" @@ -1602,13 +1651,13 @@ msgid "Wipe options" msgstr "Параметри очищення" msgid "Bed adhension" -msgstr "Прилягання до столу" +msgstr "Прилипання до столу" msgid "Add part" -msgstr "Додати частину" +msgstr "Додати елемент" msgid "Add negative part" -msgstr "Додати негативну частину" +msgstr "Додати об'єм для віднімання" msgid "Add modifier" msgstr "Додати модифікатор" @@ -1617,28 +1666,28 @@ msgid "Add support blocker" msgstr "Додати блокувальник підтримки" msgid "Add support enforcer" -msgstr "Додати засіб примусової підтримки" +msgstr "Додати примусову підтримку" msgid "Add text" -msgstr "" +msgstr "Додати текст" msgid "Add negative text" -msgstr "" +msgstr "Додати текст для віднімання" msgid "Add text modifier" -msgstr "" +msgstr "Додати текстовий модифікатор" msgid "Add SVG part" -msgstr "" +msgstr "Додати елемент SVG" msgid "Add negative SVG" -msgstr "" +msgstr "Додати SVG для віднімання" msgid "Add SVG modifier" -msgstr "" +msgstr "Додати модифікатор SVG" msgid "Select settings" -msgstr "Виберіть налаштування" +msgstr "Вибрати налаштування" msgid "Hide" msgstr "Приховати" @@ -1650,7 +1699,7 @@ msgid "Del" msgstr "Видалити" msgid "Delete the selected object" -msgstr "Видалити вибраний об'єкт" +msgstr "Видалення вибраних моделей" msgid "Load..." msgstr "Завантажити..." @@ -1665,10 +1714,10 @@ msgid "Cone" msgstr "Конус" msgid "Disc" -msgstr "" +msgstr "Диск" msgid "Torus" -msgstr "" +msgstr "Тороїд" msgid "Orca Cube" msgstr "Orca Куб" @@ -1683,10 +1732,10 @@ msgid "Voron Cube" msgstr "Voron Куб" msgid "Stanford Bunny" -msgstr "" +msgstr "Стенфордський кролик" msgid "Orca String Hell" -msgstr "" +msgstr "«Струнне пекло» Orca" msgid "" "This model features text embossment on the top surface. For optimal results, " @@ -1695,12 +1744,18 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" +"Ця модель має тиснення тексту на верхній поверхні. Для отримання оптимальних " +"результатів рекомендується встановити \"Поріг однієї стіни " +"(min_width_top_surface)\" на 0, щоб функція \"Тільки одна стіна на верхній " +"поверхні\" працювала найкраще.\n" +"Так - змінювати ці налаштування автоматично\n" +"Ні - Не змінювати ці налаштування для мене" msgid "Text" -msgstr "" +msgstr "Текст" msgid "Height range Modifier" -msgstr "Модифікатор діапазону висот" +msgstr "Модифікатор діапазону висоти шарів" msgid "Add settings" msgstr "Додати налаштування" @@ -1715,10 +1770,10 @@ msgid "Set as individual objects" msgstr "Встановити як окремі об'єкти" msgid "Fill bed with copies" -msgstr "" +msgstr "Заповнити весь стіл копіями" msgid "Fill the remaining area of bed with copies of the selected object" -msgstr "" +msgstr "Заповніть решту площу столу копіями вибраного об'єкта" msgid "Printable" msgstr "Доступно для друку" @@ -1727,10 +1782,10 @@ msgid "Fix model" msgstr "Виправити модель" msgid "Export as one STL" -msgstr "" +msgstr "Експортувати як один файл STL" msgid "Export as STLs" -msgstr "" +msgstr "Експортувати як файли STL" msgid "Reload from disk" msgstr "Перезавантажити з диска" @@ -1757,8 +1812,8 @@ msgstr "За замовчуванням" msgid "Filament %d" msgstr "Філамент %d" -msgid "active" -msgstr "активно" +msgid "current" +msgstr "поточний" msgid "Scale to build volume" msgstr "Масштабування для збільшення обсягу" @@ -1767,25 +1822,25 @@ msgid "Scale an object to fit the build volume" msgstr "Відмасштабувати під область друку" msgid "Flush Options" -msgstr "Варіанти скидання" +msgstr "Опції очищення" msgid "Flush into objects' infill" -msgstr "Врівень із заповненням об'єктів" +msgstr "Очищення у заповненні моделі" msgid "Flush into this object" -msgstr "Злити цей об'єкт" +msgstr "Очищення у модель" msgid "Flush into objects' support" -msgstr "Порівняння з підтримкою об'єктів" +msgstr "Очищення на підтримку" msgid "Edit in Parameter Table" -msgstr "Змінити у таблиці параметрів" +msgstr "Редагування таблиці параметрів" msgid "Convert from inch" -msgstr "Перетворити з імерської" +msgstr "Перетворити розміри з дюймів" msgid "Restore to inch" -msgstr "Відновити до імперської" +msgstr "Відновити розміри в дюйми" msgid "Convert from meter" msgstr "Перетворити з метричної" @@ -1794,19 +1849,19 @@ msgid "Restore to meter" msgstr "Відновити в метричну" msgid "Assemble" -msgstr "Зібрати" +msgstr "Об'єднати у збірку" msgid "Assemble the selected objects to an object with multiple parts" -msgstr "Зберіть вибрані об'єкти в об'єкт з кількома частинами" +msgstr "Зібрати вибрані об'єкти в об'єкт з кількома частинами" msgid "Assemble the selected objects to an object with single part" -msgstr "Зберіть вибрані об'єкти в об'єкт з однією частиною" +msgstr "Зібрати вибрані об'єкти в об'єкт в одне ціле" msgid "Mesh boolean" -msgstr "" +msgstr "Булеві операції" msgid "Mesh boolean operations including union and subtraction" -msgstr "" +msgstr "Булеві операції з сіткою, включаючи об'єднання та віднімання" msgid "Along X axis" msgstr "Вздовж осі X" @@ -1827,34 +1882,37 @@ msgid "Mirror along the Z axis" msgstr "Відобразити осі Z" msgid "Mirror object" -msgstr "Дзеркальний об'єкт" +msgstr "Відобразити модель" msgid "Edit text" msgstr "Редагувати текст" msgid "Ability to change text, font, size, ..." -msgstr "" +msgstr "Можливість змінювати текст, шрифт, розмір, ..." msgid "Edit SVG" msgstr "Редагувати SVG" msgid "Change SVG source file, projection, size, ..." -msgstr "" +msgstr "Змінити вихідний файл SVG, проекцію, розмір, ..." msgid "Invalidate cut info" -msgstr "Недійсна інформація про вирізування" +msgstr "Видалити інформацію про розріз" msgid "Add Primitive" msgstr "Додати примітив" msgid "Add Handy models" -msgstr "" +msgstr "Додати тестову модель" + +msgid "Add Models" +msgstr "Додати модель" msgid "Show Labels" -msgstr "Показати ярлики" +msgstr "Показати імена файлів" msgid "To objects" -msgstr "До об'єктів" +msgstr "На моделі" msgid "Split the selected object into multiple objects" msgstr "Розділити вибраний об'єкт на кілька об'єктів" @@ -1863,7 +1921,7 @@ msgid "To parts" msgstr "На частини" msgid "Split the selected object into multiple parts" -msgstr "Розділити вибраний об'єкт на кілька частин" +msgstr "Розділити вибрану модель на окремі частини" msgid "Split" msgstr "Розділити" @@ -1901,6 +1959,12 @@ msgstr "Організувати" msgid "arrange current plate" msgstr "упорядкувати поточну табличку" +msgid "Reload All" +msgstr "Перезавантажити все" + +msgid "reload all from disk" +msgstr "перезавантажити все з диска" + msgid "Auto Rotate" msgstr "Авто-поворот" @@ -1914,7 +1978,7 @@ msgid "Remove the selected plate" msgstr "Видалити вибрану пластину" msgid "Clone" -msgstr "Клонування" +msgstr "Зробити копію" msgid "Simplify Model" msgstr "Спростити модель" @@ -1923,7 +1987,7 @@ msgid "Center" msgstr "Центр" msgid "Edit Process Settings" -msgstr "Змінити параметри процесу" +msgstr "Редагувати налаштування процесу друку" msgid "Edit print parameters for a single object" msgstr "Редагувати параметри друку для одного об'єкта" @@ -1934,9 +1998,6 @@ msgstr "Змінити філамент" msgid "Set Filament for selected items" msgstr "Встановити філамент для вибраних елементів" -msgid "current" -msgstr "поточний" - msgid "Unlock" msgstr "Розблокувати" @@ -1944,7 +2005,7 @@ msgid "Lock" msgstr "Заблокувати" msgid "Edit Plate Name" -msgstr "" +msgstr "Редагувати назву пластини" msgid "Name" msgstr "Ім'я" @@ -1962,45 +2023,45 @@ msgstr[2] "%1$d помилки виправлені" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." -msgstr[0] "Помилка: %1$d крайка без колектора." -msgstr[1] "Помилка: %1$d крайки без колектора." -msgstr[2] "Помилка: %1$d крайки без колектора." +msgstr[0] "Помилка: %1$d відкрите ребро." +msgstr[1] "Помилка: %1$d відкритих ребер." +msgstr[2] "Помилка: %1$d відкритих ребер." msgid "Remaining errors" -msgstr "Помилки, що залишилися" +msgstr "Залишилось помилок" #, c-format, boost-format msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" -msgstr[0] "%1$d край без колектора" -msgstr[1] "%1$d крайки без колектора" -msgstr[2] "%1$d крайки без колектора" +msgstr[0] "%1$d відкрите ребро" +msgstr[1] "%1$d відкритих ребер" +msgstr[2] "%1$d відкритих ребер" msgid "Right click the icon to fix model object" msgstr "Клацніть правою кнопкою миші значок, щоб виправити об'єкт моделі" msgid "Right button click the icon to drop the object settings" -msgstr "Клацніть правою кнопкою миші значок, щоб видалити налаштування об'єкта" +msgstr "" +"Натисніть правою кнопкою миші на значок, щоб змінити налаштування моделі" msgid "Click the icon to reset all settings of the object" -msgstr "Натисніть іконку, щоб скинути всі налаштування об'єкта" +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 "Клацніть значок, щоб переключити друковану властивість об'єкта" +msgstr "Натисніть , щоб дозволити/заборонити друк моделі" msgid "Click the icon to edit support painting of the object" -msgstr "Клацніть значок, щоб змінити додаткове забарвлення об'єкта" +msgstr "Натисніть значок, щоб відредагувати малюнок підтримки цієї моделі" msgid "Click the icon to edit color painting of the object" -msgstr "Клацніть значок, щоб відредагувати колірне забарвлення об'єкта" +msgstr "Натисніть , щоб змінити колір моделі" msgid "Click the icon to shift this object to the bed" -msgstr "Клацніть значок, щоб перемістити цей об'єкт на столі" +msgstr "Натисніть значок, щоб перемістити цю модель на стіл" msgid "Loading file" msgstr "Завантаження файлу" @@ -2009,25 +2070,25 @@ msgid "Error!" msgstr "Помилка!" msgid "Failed to get the model data in the current file." -msgstr "" +msgstr "Не вдалося отримати дані моделі в поточному файлі." msgid "Generic" -msgstr "Загальний" +msgstr "Базовий примітив" msgid "Add Modifier" -msgstr "Додати модифікатор" +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 "Видалити конектор з об'єкта, який є частиною розрізу" @@ -2036,15 +2097,14 @@ 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 "Видалити негативний об'єм з об'єкта, який є частиною розрізу" +msgstr "Видалення об'єму для віднімання з моделі, яка є частиною розрізу" msgid "" "To save cut correspondence you can delete all connectors from all related " "objects." msgstr "" -"Для збереження вирізаної кореспонденції ви можете видалити всі конекториз " -"усіх пов'язаних\n" -"об'єкти." +"Щоб зберегти інформацію про розріз, можна видалити всі з'єднання з усіх " +"пов'язаних об'єктів." msgid "" "This action will break a cut correspondence.\n" @@ -2053,84 +2113,83 @@ msgid "" "To manipulate with solid parts or negative volumes you have to invalidate " "cut infornation first." msgstr "" -"Ця дія розірве обрізану кореспонденцію.\n" -"Після цього узгодженість моделі не може бути гарантовано.\n" +"Ця дія призведе до видалення інформації про розріз.\n" +"Після цього узгодженість моделі не може бути гарантована.\n" "\n" -"Щоб маніпулювати твердими частинами чи негативними обсягами, ви " -"повинніанулювати\n" -"Скорочуйте інформацію спочатку." +"Щоб маніпулювати з твердотілими частинами або об'ємами для віднімання, " +"необхідно спочатку видалити інформацію про зроблений розріз." msgid "Delete all connectors" -msgstr "Видалити всі з'єднувачі" +msgstr "Видалити всі з'єднання" msgid "Deleting the last solid part is not allowed." -msgstr "Видалення останньої суцільної частини не допускається." +msgstr "Видалення останньої твердотільного частини не допускається." msgid "The target object contains only one part and can not be splited." -msgstr "Цільовий об'єкт містить лише одну частину і не може бути розділений." +msgstr "Цільова модель єдина і не може бути поділена на частини." msgid "Assembly" -msgstr "Складання" +msgstr "Збірка" msgid "Cut Connectors information" -msgstr "Інформація про відрізані з'єднувачі" +msgstr "Інформація про вирізані з'єднання" msgid "Object manipulation" msgstr "Маніпуляції з об'єктами" msgid "Group manipulation" -msgstr "Групова маніпуляція" +msgstr "Групові маніпуляції" msgid "Object Settings to modify" -msgstr "Параметри об'єкта для зміни" +msgstr "Параметри моделі для зміни" msgid "Part Settings to modify" -msgstr "Налаштування деталі для зміни" +msgstr "Параметри елемента для редагування" msgid "Layer range Settings to modify" -msgstr "Діапазон шарів Параметри зміни" +msgstr "Зміна параметрів діапазону шарів" msgid "Part manipulation" -msgstr "Маніпуляції з деталями" +msgstr "Маніпуляція з частинами" msgid "Instance manipulation" -msgstr "Управління екземпляром" +msgstr "Маніпуляція з копіями" msgid "Height ranges" -msgstr "Діапазони висоти" +msgstr "Діапазон висот шарів" msgid "Settings for height range" -msgstr "Налаштування діапазону зростання" +msgstr "Налаштування для діапазону висот шарів" msgid "Layer" msgstr "Шар" msgid "Selection conflicts" -msgstr "Конфлікти вибору" +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 "" "Якщо перший обраний елемент є частиною, другий має бути частиноютого ж\n" -"об'єкт." +"об'єкту." msgid "The type of the last solid object part is not to be changed." msgstr "Тип останньої твердотільної частини об'єкта не можна змінювати." msgid "Negative Part" -msgstr "Негативна частина" +msgstr "Обсяг для віднімання" msgid "Support Blocker" msgstr "Блокувальник підтримки" msgid "Support Enforcer" -msgstr "Інфорсер підтримки" +msgstr "Примусова підтримка" msgid "Type:" msgstr "Тип:" @@ -2146,21 +2205,21 @@ msgstr "Перейменування" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" -msgstr[0] "Наступний об'єкт моделі було відновлено" -msgstr[1] "Наступні об'єкти моделі були відновлені" -msgstr[2] "Наступні об'єкти моделі були відновлені" +msgstr[0] "Наступна частина моделі успішно відремонтована" +msgstr[1] "Наступні частини моделі успішно відремонтовані" +msgstr[2] "Наступні частини моделі успішно відремонтовані" msgid "Failed to repair folowing model object" msgid_plural "Failed to repair folowing model objects" -msgstr[0] "Не вдалося відновити наступний об'єкт моделі" -msgstr[1] "Не вдалося відновити такі об'єкти моделі" -msgstr[2] "Не вдалося відновити такі об'єкти моделі" +msgstr[0] "Не вдалося полагодити таку частину моделі" +msgstr[1] "Не вдалося полагодити такі частини моделі" +msgstr[2] "Не вдалося полагодити такі частини моделі" msgid "Repairing was canceled" msgstr "Ремонт було скасовано" msgid "Additional process preset" -msgstr "Додаткове попереднє встановлення процесу" +msgstr "Дод. налаштування профілю процесу" msgid "Remove parameter" msgstr "Видалити параметр" @@ -2169,24 +2228,24 @@ msgid "to" msgstr "в" msgid "Remove height range" -msgstr "Видалити діапазон зростання" +msgstr "Видалення діапазону висот шарів" msgid "Add height range" -msgstr "Додати діапазон зростання" +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 "копіювання кількох осередків не підтримується" +msgstr "копіювання кількох клітинок не підтримується" msgid "Outside" -msgstr "Зовнішній" +msgstr "Поза столом" msgid "Layer height" msgstr "Висота шару" @@ -2201,13 +2260,13 @@ msgid "Auto Brim" msgstr "Автоматична Кайма" msgid "Mouse ear" -msgstr "" +msgstr "Мишаче вушко" msgid "Outer brim only" -msgstr "кайма зовні" +msgstr "Кайма тільки зовні" msgid "Inner brim only" -msgstr "Кайма всередині" +msgstr "Кайма тільки всередині" msgid "Outer and inner brim" msgstr "Зовні та всередині" @@ -2255,7 +2314,7 @@ msgid "Pause" msgstr "Пауза" msgid "Template" -msgstr "" +msgstr "Шаблон" msgid "Custom" msgstr "Стандартний" @@ -2278,9 +2337,6 @@ msgstr "Введіть G-код користувача, що використо msgid "Jump to Layer" msgstr "Перейти до шару" -msgid "Jump to layer" -msgstr "Перейти до шару" - msgid "Please enter the layer number" msgstr "Будь ласка, введіть номер шару" @@ -2303,10 +2359,10 @@ msgid "Insert template custom G-code at the beginning of this layer." msgstr "Вставте власний G-код шаблону на початку цього шару." msgid "Filament " -msgstr "Філфмент " +msgstr "Філамент " msgid "Change filament at the beginning of this layer." -msgstr "Заміна філаменту на початку цього шару." +msgstr "Заміна нитки на початку цього шару." msgid "Delete Pause" msgstr "Видалити паузу" @@ -2321,10 +2377,10 @@ msgid "Delete Custom G-code" msgstr "Видалити G-код користувача" msgid "Delete Filament Change" -msgstr "Видалити заміну нитки" +msgstr "Видалити команду заміни нитки" msgid "No printer" -msgstr "Немає принтера" +msgstr "Принтер не вибраний" msgid "..." msgstr "..." @@ -2333,25 +2389,25 @@ msgid "Failed to connect to the server" msgstr "Не вдалося підключитися до сервера" msgid "Check the status of current system services" -msgstr "" +msgstr "Перевірте стан поточних системних служб" msgid "code" -msgstr "" +msgstr "код" msgid "Failed to connect to cloud service" -msgstr "" +msgstr "Не вдалося підключитися до хмарної служби" msgid "Please click on the hyperlink above to view the cloud service status" -msgstr "" +msgstr "Клацніть гіперпосилання вище, щоб переглянути статус хмарної служби" msgid "Failed to connect to the printer" msgstr "Не вдалося підключитися до принтера" msgid "Connection to printer failed" -msgstr "" +msgstr "Помилка підключення до принтера" -msgid "Please check the network connection of the printer and Studio." -msgstr "" +msgid "Please check the network connection of the printer and Orca." +msgstr "Перевірте мережеве з'єднання принтера і Orca." msgid "Connecting..." msgstr "Підключення..." @@ -2360,7 +2416,7 @@ msgid "?" msgstr "?" msgid "/" -msgstr "" +msgstr "/" msgid "Empty" msgstr "Порожній" @@ -2369,16 +2425,16 @@ msgid "AMS" msgstr "AMS" msgid "Auto Refill" -msgstr "" +msgstr "Автоматична заміна" msgid "AMS not connected" msgstr "АМС не підключено" -msgid "Load Filament" -msgstr "Завантажте філамент" +msgid "Load" +msgstr "Завантажити" -msgid "Unload Filament" -msgstr "Вивантажте філамент" +msgid "Unload" +msgstr "Вивантаження" msgid "Ext Spool" msgstr "Зовнішня котушка" @@ -2395,7 +2451,7 @@ msgstr "Повторити спробу" msgid "Calibrating AMS..." msgstr "Калібрування АМС..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Під час калібрування виникла проблема. Натисніть, щоб переглянути рішення." @@ -2406,7 +2462,7 @@ msgid "Cancel calibration" msgstr "Скасувати калібрування" msgid "Idling..." -msgstr "" +msgstr "Очікування…" msgid "Heat the nozzle" msgstr "Нагрійте сопло" @@ -2424,24 +2480,23 @@ msgid "Purge old filament" msgstr "Очистіть старий філамент" msgid "Feed Filament" -msgstr "" +msgstr "Подача нитки філаменту" msgid "Confirm extruded" -msgstr "" +msgstr "Підтвердити витіснення" msgid "Check filament location" -msgstr "" +msgstr "Перевірити розташування філаменту" msgid "Grab new filament" -msgstr "" +msgstr "Візьміть новий філамент" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Виберіть слот AMS, потім натисніть кнопку \\Load\\ або \\Unload\\, щоб " -"автоматично\n" -"завантажити або вивантажити філамент." +"Виберіть слот AMS, а потім натисніть кнопку “Завантажити” або “Вивантажити”, " +"щоб автоматично завантажити або вивантажити філаменти." msgid "Edit" msgstr "Редагувати" @@ -2477,8 +2532,8 @@ msgstr "Організацію скасовано." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." msgstr "" -"Збірка завершена, але є невпаковані речі. Зменшіть інтервал і повторіть " -"спробу." +"Розташування завершено, але не все вмістилося на столі. Зменште інтервал " +"розміщення та спробуйте ще раз." msgid "Arranging done." msgstr "Організація зроблена." @@ -2486,7 +2541,7 @@ msgstr "Організація зроблена." msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "" -"Влаштувати не вдалося. Знайдено деякі винятки при обробці геометріїоб'єктів." +"Помилка розміщення. Виявлено деякі винятки під час обробки геометрії моделей." #, c-format, boost-format msgid "" @@ -2494,8 +2549,8 @@ msgid "" "bed:\n" "%s" msgstr "" -"Аранжування ігнорувало такі об'єкти, які не можуть поміститися на один\n" -"стіл:\n" +"При розміщенні були проігноровані такі моделі, які не розміщуються на одному " +"столі:\n" "%s" msgid "" @@ -2519,25 +2574,25 @@ msgid "Orienting" msgstr "Орієнтація" msgid "Orienting canceled." -msgstr "" +msgstr "Орієнтування скасоване." msgid "Filling" -msgstr "" +msgstr "Заповнення" msgid "Bed filling canceled." -msgstr "" +msgstr "Заповнення ліжка скасоване." msgid "Bed filling done." -msgstr "" +msgstr "Заповнення ліжка виконане." msgid "Searching for optimal orientation" -msgstr "" +msgstr "Пошук оптимальної орієнтації" msgid "Orientation search canceled." -msgstr "" +msgstr "Пошук орієнтації скасовано." msgid "Orientation found." -msgstr "" +msgstr "Орієнтація знайдена." msgid "Logging in" msgstr "Вхід до системи" @@ -2549,48 +2604,58 @@ msgid "Please check the printer network connection." msgstr "Будь ласка, перевірте підключення принтера до мережі." msgid "Abnormal print file data. Please slice again." -msgstr "" +msgstr "Неправильні дані файлу друку. Будь ласка, наріжте ще раз." msgid "Task canceled." -msgstr "" +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 "" +msgstr "Файл друку не знайдено, наріжте ще раз." msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " "model and slice again." msgstr "" +"Розмір друкованого файлу перевищує максимально допустимий розмір (1 ГБ). " +"Будь ласка, спростіть модель і знову виконайте нарізку." msgid "Failed to send the print job. Please try again." msgstr "Не вдалося надіслати завдання на друк. Будь ласка, спробуйте ще раз." msgid "Failed to upload file to ftp. Please try again." -msgstr "" +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 "Надсилання завдання на друк локальною мережею" @@ -2599,7 +2664,7 @@ msgid "Sending print job through cloud service" msgstr "Надсилання завдання на друк через хмарний сервіс" msgid "Print task sending times out." -msgstr "" +msgstr "Час відправлення завдання на друк закінчився." msgid "Service Unavailable" msgstr "Сервіс недоступний" @@ -2612,11 +2677,12 @@ msgstr "Надсилання конфігурації друку" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Успішно надіслано. Автоматично перейде на сторінку пристрою в %ss" +msgstr "Успішно надіслано. Автоматично перейде на сторінку пристрою в %sс" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the next page in %ss" msgstr "" +"Успішно відправлено. Автоматично перейде на наступну сторінку через %sс" msgid "An SD card needs to be inserted before printing via LAN." msgstr "Перед друком через локальну мережу необхідно вставити картку SD." @@ -2629,7 +2695,7 @@ msgstr "Надсилання файлу gcode на карту SD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Успішно надіслано. Закрити поточну сторінку в %s s" +msgstr "Успішно надіслано. Закрити поточну сторінку в %sс" msgid "An SD card needs to be inserted before sending to printer." msgstr "Перед надсиланням на принтер необхідно вставити картку SD." @@ -2654,16 +2720,14 @@ msgid "" "The imported SLA archive did not contain any presets. The current SLA " "presets were used as fallback." msgstr "" -"Імпортований SLA-архів не містив пресетів. Поточна угода про " -"рівеньобслуговування\n" -"пресети використовувалися як запасний варіант." +"Імпортований архів SLA не містить жодних профілів. Поточні профілі SLA " +"використовувалися в якості резервних." msgid "You cannot load SLA project with a multi-part object on the bed" -msgstr "Ви не можете завантажити проект SLA зі складеним об'єктом на ліжку" +msgstr "Ви не можете завантажити проект SLA зі складеним об'єктом на столі" msgid "Please check your object list before preset changing." -msgstr "" -"Будь ласка, перевірте список об'єктів перед зміною попереднього встановлення." +msgstr "Будь ласка, перевірте список моделей перед зміною профілю." msgid "Attention!" msgstr "Увага!" @@ -2672,7 +2736,7 @@ msgid "Downloading" msgstr "Завантаження" msgid "Download failed" -msgstr "Завантаження не далося" +msgstr "Помилка завантаження" msgid "Cancelled" msgstr "Скасовано" @@ -2687,7 +2751,7 @@ msgid "Install failed" msgstr "Встановлення не вдалося" msgid "Portions copyright" -msgstr "Авторські права на частини" +msgstr "З використанням розробок" msgid "Copyright" msgstr "Авторські права" @@ -2701,15 +2765,8 @@ msgstr "Orca Slicer знаходиться під ліцензією " 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" -msgstr "" -"Orca Slicer заснований на BambuStudio від Bambulab, який належить " -"PrusaSlicer.\n" -"Prusa Research. PrusaSlicer від Slic3r Алессандро Ранеллуччі і\n" -"спільнота RepRap" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" +msgstr "Orca Slicer базується на PrusaSlicer та BambuStudio" msgid "Libraries" msgstr "Бібліотеки" @@ -2752,12 +2809,10 @@ msgid "AMS Materials Setting" msgstr "Налаштування матеріалів AMS" msgid "Confirm" -msgstr "Прийнято" +msgstr "Підтвердити" msgid "Close" -msgstr "" -"Закрито\n" -"Колір" +msgstr "Закрити" msgid "Colour" msgstr "Колір" @@ -2783,23 +2838,23 @@ msgid "SN" msgstr "SN" msgid "Setting AMS slot information while printing is not supported" -msgstr "Встановлення інформації про слот AMS під час друку не підтримується" +msgstr "Зміна інформації про слоти AMS під час друку не підтримується" msgid "Factors of Flow Dynamics Calibration" -msgstr "" +msgstr "Коеф. каліб. динам. потоку" msgid "PA Profile" -msgstr "" +msgstr "Профіль PA" msgid "Factor K" -msgstr "Фактор До" +msgstr "Коэф. K" msgid "Factor N" -msgstr "Фактор N" +msgstr "Коэф. N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" -"Встановлення інформації про віртуальний слот під час друку не підтримується" +"Налаштування інформації віртуального слота під час друку не підтримується" msgid "Are you sure you want to clear the filament information?" msgstr "Ви впевнені, що хочете видалити інформацію про нитки?" @@ -2807,20 +2862,22 @@ msgstr "Ви впевнені, що хочете видалити інформа msgid "You need to select the material type and color first." msgstr "Спочатку потрібно вибрати тип матеріалу та колір." -msgid "Please input a valid value (K in 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" msgstr "Інший колір" msgid "Custom Color" -msgstr "Спеціальний колір" +msgstr "Користувальницький колір" msgid "Dynamic flow calibration" -msgstr "Динамічна калібрування потоку" +msgstr "Калібрування динаміки потоку" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " @@ -2866,10 +2923,9 @@ msgid "" "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Калібрування завершено. Будь ласка, знайдіть найбільш рівномірну " -"екструзійнулінію на вашому\n" -"гарячий стіл, як на малюнку нижче, і вставте значення зліва в поле\n" -"поле введення коефіцієнта K." +"Калібрування завершено. Тепер знайдіть на столі найбільш рівномірно " +"екструдовану лінію, як показано нижче, і введіть це значення в поле введення " +"коефіцієнта K." msgid "Save" msgstr "Зберегти" @@ -2892,7 +2948,7 @@ msgid "%s does not support %s" msgstr "%s не підтримує %s" msgid "Dynamic flow Calibration" -msgstr "Калібрування динамічного потоку" +msgstr "Калібрування динаміки потоку" msgid "Step" msgstr "Крок" @@ -2918,40 +2974,19 @@ msgstr "Вимкнути AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Друк із ниткою, встановленою на задній частині корпусу" -msgid "Cabin humidity" -msgstr "Вологість салону" +msgid "Current 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.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Зелений означає, що вологість AMS нормальна, помаранчевий означає, " -"щоВологість висока,\n" -"червоний означає, що вологість занадто висока. (Гігрометр: чим нижче, тим " -"краще.)" - -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 "" -"Стан влагопоглинача нижче двох поділів свідчить про те, що вологопоглинач " -"може бути\n" -"неактивний. Будь ласка, замініть осушувач. (Смуги: чим вище, тим краще.)" - -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 "" -"Примітка. Коли кришку відкрито або замінено пакет з вологопоглиначем, це " -"може зайняти деякий час.\n" -"годин або ночі, щоб увібрати вологу. Низькі температури також уповільнюють\n" -"процес. У цей час індикатор може не відображати патронник.\n" -"точно." +"Будь ласка, змініть осушувач, коли він стає занадто вологим. Індикатор може " +"не відображати точно в наступних випадках: коли кришка відкрита або пакет з " +"осушувачем змінено. На поглинання вологи може знадобитися кілька годин, " +"низькі температури також сповільнюють процес." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2985,16 +3020,20 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" +"Коли поточний матеріал закінчується, принтер буде продовжувати друк у " +"наступному порядку." msgid "Group" msgstr "Група" msgid "The printer does not currently support auto refill." -msgstr "" +msgstr "Принтер не підтримує функцію автозаправлення." msgid "" "AMS filament backup is not enabled, please enable it in the AMS settings." msgstr "" +"Функція резервного копіювання філаменту в AMS вимкнена, будь ласка, " +"активуйте її у налаштуваннях Автоматичного заправлення." msgid "" "If there are two identical filaments in AMS, AMS filament backup will be " @@ -3002,12 +3041,22 @@ msgid "" "(Currently supporting automatic supply of consumables with the same brand, " "material type, and color)" msgstr "" +"Якщо в AMS є два ідентичні філаменти, резервне копіювання філаменту буде " +"увімкнено.\n" +"(Зараз підтримується автоматичне забезпечення споживних матеріалів " +"однакового бренду, типу матеріалу і кольору)" + +msgid "DRY" +msgstr "СУХИЙ" + +msgid "WET" +msgstr "ВОЛОГИЙ" msgid "AMS Settings" msgstr "Налаштування AMS" msgid "Insertion update" -msgstr "Оновлення вставки" +msgstr "Оновлювати дані при вставці матеріалу" msgid "" "The AMS will automatically read the filament information when inserting a " @@ -3017,21 +3066,22 @@ msgstr "" "Bambu Lab. Це займає близько 20 секунд." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Примітка: якщо під час друку буде вставлено новий філамент, AMS не буде " -"автоматично читати будь-яку інформацію до завершення друку." +"Примітка: якщо під час друку вставляється нова пластикова нитка, 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 не ьуде автоматично зчитувати \n" -"інформацію про нього, залишивши поле порожнім для введення вручну." +"При вставці нової пластикової нитки, AMS не буде автоматично зчитуватиме " +"інформацію про неї, залишаючи поле порожнім, щоб користувач міг ввести дані " +"про неї вручну." msgid "Power on update" -msgstr "Оновлення після ввімкнення" +msgstr "Оновити дані при увімкненні принтера" msgid "" "The AMS will automatically read the information of inserted filament on " @@ -3051,25 +3101,36 @@ msgstr "" "останнтого вимкнення." msgid "Update remaining capacity" -msgstr "Оновити ємність, що залишилася" +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 оцінить ємність філаменту Bambu, що залишилася, після того, як " -"інформація оновлюється. Під час друку ємність буде оновлюватися автоматично." +"AMS зчитує інформацію про витратний матеріал Bambu та розраховує його " +"залишкову ємність на котушці. Залишкова ємність автоматично оновлюється в " +"процесі друку." msgid "AMS filament backup" -msgstr "Резервне копіювання нитки AMS" +msgstr "Резервування матеріалу AMS" msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" msgstr "" "AMS перейде на іншу котушку з тими самими властивостями автоматично, коли " -"поточний філамент закінчується" +"поточний філамент закінчиться" + +msgid "Air Printing Detection" +msgstr "Виявлення пустого друку" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Виявляє засмічення та стирання нитки, негайно зупиняючи друк для економії " +"часу та матеріалу." msgid "File" msgstr "Файл" @@ -3089,8 +3150,8 @@ msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Не вдалося встановити плагін. Будь ласка, перевірте, чи не заблокований " -"вінабо видалено\n" +"Не вдалося встановити плагін. Будь ласка, перевірте, чи він не заблокований " +"або видалений\n" "за допомогою антивірусного програмного забезпечення." msgid "click here to see more info" @@ -3103,20 +3164,18 @@ msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" -"), щоб визначити положення інструментальної головки. Це запобігає " -"переміщення пристрою за межі\n" -"друкований кордон і знос устаткування, що викликає." +") для визначення положення друкованої голови. Це передбачає переміщення за " +"межі області друку та розмір обладнання." msgid "Go Home" -msgstr "Іди додому" +msgstr "На головну" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"Відбулася помилка. Можливо пам'яті системи не вистачає або це баг " -"самоїпрограми\n" -"програма" +"Відбулася помилка. Можливо не вистачає системноъ пам'яті або це баг самої " +"програми" msgid "Please save project and restart the program. " msgstr "Збережіть проект і перезапустіть програму. " @@ -3128,19 +3187,19 @@ msgid "Slicing complete" msgstr "Нарізка завершена" msgid "Access violation" -msgstr "Порушення доступу" +msgstr "Порушення прав доступу" msgid "Illegal instruction" -msgstr "Незаконна інструкція" +msgstr "Недопустима інструкція" msgid "Divide by zero" -msgstr "Поділити на нуль" +msgstr "Ділити на нуль заборонено" msgid "Overflow" -msgstr "Переекструзія" +msgstr "Переповнення" msgid "Underflow" -msgstr "Недоекструзія" +msgstr "Помилка обнулення" msgid "Floating reserved operand" msgstr "Плаваючий зарезервований операнд" @@ -3148,6 +3207,63 @@ msgstr "Плаваючий зарезервований операнд" msgid "Stack overflow" msgstr "Переповнення стека" +msgid "Running post-processing scripts" +msgstr "Запуск скриптів постобробки" + +msgid "Successfully executed post-processing script" +msgstr "Скрипт післяобробки успішно виконаний" + +msgid "Unknown error occured during exporting G-code." +msgstr "Під час експорту G-коду сталася невідома помилка." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Не вдалося скопіювати тимчасовий G-код у місцезнаходження вихідного файлу G-" +"коду. Чи може ваша SD карта захищена від запису?\n" +"Повідомлення про помилку: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Не вдалося скопіювати тимчасовий G-код у вихідний G-код. Можливо, проблема з " +"цільовим пристроєм, спробуйте експортувати ще раз або використати інший " +"пристрій. Пошкоджений вихідний G-код - %1% .tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Не вдалося перейменувати G-код після копіювання у вибрану папку призначення. " +"Поточний шлях - %1%.tmp. Спробуйте експортувати ще раз." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Копіювання тимчасового G-коду закінчено, але оригінальний код на рівні %1% " +"не вдалося відкрити під час перевірки копії. Вихідний G-код - %2% .tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Копіювання тимчасового G-коду завершено, але експортований код не вдалося " +"відкрити під час перевірки копії. Вихідний G-код - %1% .tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Файл G-коду експортується до %1%" + msgid "Unknown error when export G-code." msgstr "Невідома помилка під час експорту G-коду." @@ -3161,23 +3277,239 @@ msgstr "" "Повідомлення про помилку: %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%`. Див. вікно -> Черга завантаження вузла друку" +"Планування завантаження в `%1%`. Див. вікно -> Черга завантаження на хост " +"друку" + +msgid "Device" +msgstr "Принтер" + +msgid "Task Sending" +msgstr "Відправка завдання" + +msgid "Task Sent" +msgstr "Завдання надіслане" + +msgid "Edit multiple printers" +msgstr "Редагувати кілька принтерів" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "Максимальна кількість принтерів, які можна вибрати, становить %d" + +msgid "Offline" +msgstr "Не в мережі" + +msgid "No task" +msgstr "Немає завдань" + +msgid "View" +msgstr "Вигляд" + +msgid "N/A" +msgstr "Н/Д" + +msgid "Edit Printers" +msgstr "Редагування принтерів" + +msgid "Device Name" +msgstr "Назва пристрою" + +msgid "Task Name" +msgstr "Назва завдання" + +msgid "Device Status" +msgstr "Статус пристрою" + +msgid "Actions" +msgstr "Дії" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" +"Будь ласка, виберіть тут пристрої, якими ви хочете керувати (до 6 пристроїв)" + +msgid "Add" +msgstr "Додати" + +msgid "Idle" +msgstr "Холостий хід" + +msgid "Printing" +msgstr "Друк" + +msgid "Upgrading" +msgstr "Оновлення" + +msgid "Incompatible" +msgstr "Несумісний" + +msgid "syncing" +msgstr "синхронізація" + +msgid "Printing Finish" +msgstr "Друк завершено" + +msgid "Printing Failed" +msgstr "Помилка друку" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "Підготувати" + +msgid "Slicing" +msgstr "Нарізка" + +msgid "Pending" +msgstr "Очікує" + +msgid "Sending" +msgstr "Відправка" + +msgid "Sending Finish" +msgstr "Відправлення завершено" + +msgid "Sending Cancel" +msgstr "Скасовано відправку" + +msgid "Sending Failed" +msgstr "Відправлення не вдалося" + +msgid "Print Success" +msgstr "Успішний друк" + +msgid "Print Failed" +msgstr "Не вдалося надрукувати" + +msgid "Removed" +msgstr "Видалено" + +msgid "Resume" +msgstr "Продовжити" + +msgid "Stop" +msgstr "Стоп" + +msgid "Task Status" +msgstr "Статус завдання" + +msgid "Sent Time" +msgstr "Час відправлення" + +msgid "There are no tasks to be sent!" +msgstr "Немає завдань для відправлення!" + +msgid "No historical tasks!" +msgstr "Істориї завдань немає!" + +msgid "Loading..." +msgstr "Завантаження..." + +msgid "No AMS" +msgstr "Немає AMS" + +msgid "Send to Multi-device" +msgstr "Відправити на багато пристроїв" + +msgid "Preparing print job" +msgstr "Підготовка завдання для друку" + +msgid "Abnormal print file data. Please slice again" +msgstr "Неправильні дані файлу друку. Будь ласка, наріжте знову" + +msgid "There is no device available to send printing." +msgstr "Немає пристрою для надсилання друку." + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" +"Кількість принтерів, що використовуються одночасно, не може дорівнювати 0." + +msgid "Use External Spool" +msgstr "Використовуйте зовнішню катушку" + +msgid "Use AMS" +msgstr "Використовуйте AMS" + +msgid "Select Printers" +msgstr "Вибрати принтери" + +msgid "Ams Status" +msgstr "Статус AMS" + +msgid "Printing Options" +msgstr "Параметри друку" + +msgid "Bed Leveling" +msgstr "Вирівнювання столу" + +msgid "Timelapse" +msgstr "Таймлапс" + +msgid "Flow Dynamic Calibration" +msgstr "Динамічне калібрування потоку" + +msgid "Send Options" +msgstr "Параметри відправки" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" +"друкувати одночасно (це залежить від того, скільки пристроїв можуть " +"нагріватися одночасно)." + +msgid "Wait" +msgstr "Чекайте" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" +"хвилин на кожну партію. (Це залежить від того, скільки часу потрібно на " +"нагрівання)." + +msgid "Send" +msgstr "Надіслати" + +msgid "Name is invalid;" +msgstr "Некоректне ім'я;" + +msgid "illegal characters:" +msgstr "неприпустимі символи:" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "Довжина імені перевищує обмеження." msgid "Origin" -msgstr "Джерело" +msgstr "Початок координат" msgid "Size in X and Y of the rectangular plate." msgstr "Розмір по осях X та Y прямокутного столу." @@ -3233,8 +3565,8 @@ 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)" @@ -3245,15 +3577,31 @@ msgstr "Виберіть файл STL для імпорту моделі сто msgid "Bed Shape" msgstr "Форма столу" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"Мінімально рекомендована температура менше 190 градусів або максимально " +"рекомендована температура більше 300 градусів.\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"Мінімальна рекомендована температура не може бути вищою за максимальну " +"рекомендовану температуру.\n" + +msgid "Please check.\n" +msgstr "Будь ласка, перевірте.\n" + 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" +"Сопло може засмічуватися, якщо температура перевищує діапазон, що " +"рекомендується.\n" +"Будь ласка, переконайтеся, що ви задали потрібну температуру для друку.\n" #, c-format, boost-format msgid "" @@ -3276,6 +3624,9 @@ msgid "" "it may result in material softening and clogging.The maximum safe " "temperature for the material is %d" msgstr "" +"Поточна температура камери вища, ніж безпечна температура матеріалу, це може " +"призвести до розм’якшення матеріалу та його забивання. Максимально безпечна " +"температура для цього матеріалу становить %d" msgid "" "Too small layer height.\n" @@ -3296,7 +3647,7 @@ msgid "" "\n" "The first layer height will be reset to 0.2." msgstr "" -"Нульова початкова висота шару недійсна.\n" +"Нульова висота першого шару неприпустима.\n" "\n" "Висота першого шару буде скинуто до 0,2." @@ -3308,13 +3659,13 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Цей параметр використовується лише для налаштування розміру моделі з " -"невеликимзначення в деяких випадках\n" -"Наприклад, коли розмір моделі має невелику похибку та її важкозбирати.\n" -"Для налаштування великого розміру використовуйте функцію масштабування " +"Цей параметр використовується лише для точного налаштування розміру моделі у " +"певних випадках.\n" +"Наприклад, коли є невелика похибка у розмірах моделі та її важко зібрати.\n" +"Для більшого налаштування розмірів використовуйте функцію масштабування " "моделі.\n" "\n" -"Значення буде скинуто на 0." +"Це значення буде скинуто на 0." msgid "" "Too large elefant foot compensation is unreasonable.\n" @@ -3323,36 +3674,18 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Занадто велика компенсація слонової стопи є недоцільною.\n" -"Якщо дійсно є серйозний ефект слонової лапи, перевірте іншіПараметри.\n" -"Наприклад, занадто висока температура столу.\n" +"Занадто велика компенсація слонячої ноги недоцільна.\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 " But machines with I3 structure will not generate timelapse videos." -msgstr "" - -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 "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " msgstr "" +"Альтернативна додаткова стінка не працює, якщо для параметра \"Товщина " +"вертикальної оболонки\" встановлено значення \"Всі\". " msgid "" "Change these settings automatically? \n" @@ -3360,6 +3693,10 @@ msgid "" "alternate extra wall\n" "No - Dont use alternate extra wall" msgstr "" +"Змінити ці параметри автоматично?\n" +"Так - Змінити в «Забезпечувати верт. товщину оболонки» на значення «Помірне» " +"і включити додаткову стінку, що чергується.\n" +"Ні - Відмовитися від використання додаткової стінки, що чергується" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -3368,11 +3705,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"Prime Tower (Вежа Очищення) не працює, коли Adaptive Layer Height \n" -"(Адаптивні шари ввімкнені) або Independent Support висота шару включена\n" +"Чорнова вежа не працює, коли увімкнено функцію «Змінна висота шарів» або " +"«Незалежна висота шару підтримки»\n" "Що хочете зберегти?\n" -"ТАК - Зберегти Башту Очистки\n" -"НІ - Зберегти висоту адаптивного шару і висоту незалежногопідтримуючого шару" +"ТАК - Зберегти чорнову вежу\n" +"НІ - Зберегти змінну висоту шару та незалежну висоту шару підтримки" msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" @@ -3380,10 +3717,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"Вежа Prime не працює, якщо увімкнена адаптивна висота шару.\n" +"Чорнова вежа не працює, коли увімкнена функція «Змінна висота шарів».\n" "Що хочете зберегти?\n" -"ТАК - Зберегти Башту Очистки\n" -"НІ - Зберегти висоту адаптивного шару" +"Так - Зберегти чорнову вежу\n" +"Ні - Зберегти змінну висоту шарів" msgid "" "Prime tower does not work when Independent Support Layer Height is on.\n" @@ -3391,22 +3728,45 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"Основна вежа не працює, коли включена Незалежна висота опорногошару.\n" +"Чорнова вежа не працює, якщо увімкнена функція «Незалежна висота шару " +"підтримки»\n" "Що хочете зберегти?\n" -"ТАК - Зберегти Башту Очистки\n" -"НІ - Зберегти незалежну висоту опорного шару" +"ТАК - Зберегти чорнову вежу\n" +"НІ - Зберегти незалежну висоту шару підтримки" msgid "" "While printing by Object, the extruder may collide skirt.\n" "Thus, reset the skirt layer to 1 to avoid that." msgstr "" -"Під час друку об'єкта екструдер може зіткнутися зі спідницею.\n" -"Таким чином, скиньте шар спідниці до 1, щоб уникнути цього." +"Під час друку по черзі екструдер може зіткнутися зі спідницею.\n" +"Щоб уникнути цього, скиньте значення шарів спідниці до 1." msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" +"seam_slope_start_height має бути менше висоти шару.\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 " But machines with I3 structure will not generate timelapse videos." +msgstr " Но принтери з кінематикою I3 не будуть писати таймлапс." + +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 "Auto bed leveling" msgstr "Автоматичне вирівнювання столу" @@ -3415,7 +3775,7 @@ msgid "Heatbed preheating" msgstr "Попереднє нагрівання" msgid "Sweeping XY mech mode" -msgstr "Режим Sweeping XY mech" +msgstr "Перевірка XY-механіки" msgid "Changing filament" msgstr "Зміна філаменту" @@ -3442,10 +3802,10 @@ msgid "Identifying build plate type" msgstr "Визначення типу робочої пластини" msgid "Calibrating Micro Lidar" -msgstr "Калібрування мікролідара" +msgstr "Калібрування мікролідаром" msgid "Homing toolhead" -msgstr "Самонаведена головка" +msgstr "Паркування голови" msgid "Cleaning nozzle tip" msgstr "Очищення сопла" @@ -3457,79 +3817,67 @@ msgid "Printing was paused by the user" msgstr "Друк припинено користувачем" msgid "Pause of front cover falling" -msgstr "Пауза падіння передньої кришки" +msgstr "Пауза під час падіння передньої кришки з голови" msgid "Calibrating the micro lida" -msgstr "Калібрування мікролідар" +msgstr "Калібрування мікролідаром" msgid "Calibrating extrusion flow" -msgstr "Калібрування екструзійного потоку" +msgstr "Калібровка потоку екструзії" msgid "Paused due to nozzle temperature malfunction" -msgstr "Припинено через збій температури сопла" +msgstr "Пауза при несправності температури сопла" msgid "Paused due to heat bed temperature malfunction" -msgstr "Припинено через несправність температури нагрівального шару" +msgstr "Пауза при несправності температури столу" msgid "Filament unloading" -msgstr "" +msgstr "Вигрузка філаменту" msgid "Skip step pause" -msgstr "" +msgstr "Пропустити команду паузи" msgid "Filament loading" -msgstr "" +msgstr "Завантаження філаменту" msgid "Motor noise calibration" -msgstr "" +msgstr "Калібрування шуму мотора" msgid "Paused due to AMS lost" -msgstr "" +msgstr "Пауза через втрату сигналу AMS" msgid "Paused due to low speed of the heat break fan" -msgstr "" +msgstr "Пауза через низьку швидкість вентилятора голови" msgid "Paused due to chamber temperature control error" -msgstr "" +msgstr "Пауза через помилку контролю температури камери" msgid "Cooling chamber" -msgstr "" +msgstr "Охолодження камери" msgid "Paused by the Gcode inserted by user" -msgstr "" +msgstr "Друк припинено G-кодом, вставленим користувачем" msgid "Motor noise showoff" -msgstr "" +msgstr "Результат калібрування шуму двигуна" msgid "Nozzle filament covered detected pause" -msgstr "" +msgstr "Пауза при виявленні протікання матеріалу" msgid "Cutter error pause" -msgstr "" +msgstr "Пауза при помилці обрізки нитки" msgid "First layer error pause" -msgstr "" +msgstr "Пауза через помилку першого шару" msgid "Nozzle clog pause" -msgstr "" - -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Основна плата" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" +msgstr "Пауза через засмічення сопла" msgid "Unknown" msgstr "Невідомий" msgid "Fatal" -msgstr "Фатальний" +msgstr "Критична помилка" msgid "Serious" msgstr "Серйозний" @@ -3554,103 +3902,116 @@ msgid "" "45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" "TPU) is not allowed to be loaded." msgstr "" +"Поточна температура камери або цільова температура камери перевищує 45℃. Щоб " +"уникнути забивання екструдера, не дозволяється завантажувати філаменти " +"низької температури (PLA/PETG/TPU)." msgid "" "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " "avoid extruder clogging,it is not allowed to set the chamber temperature " "above 45℃." msgstr "" +"Філамент низької температури (PLA/PETG/TPU) завантажено в екструдер. Щоб " +"уникнути забивання екструдера, не дозволяється встановлювати температуру " +"камери вище 45℃." msgid "" "When you set the chamber temperature below 40℃, the chamber temperature " "control will not be activated. And the target chamber temperature will " "automatically be set to 0℃." msgstr "" +"Якщо ви встановите температуру камери нижче 40℃, контроль температури камери " +"не буде активований, і цільова температура камери автоматично буде " +"встановлена на 0℃." msgid "Failed to start printing job" msgstr "Не вдалося запустити завдання друку" msgid "" "This calibration does not support the currently selected nozzle diameter" -msgstr "" +msgstr "Калібрування не підтримує обраний діаметр сопла" msgid "Current flowrate cali param is invalid" -msgstr "" +msgstr "Поточна величина калібрування швидкості потоку неприпустима" msgid "Selected diameter and machine diameter do not match" -msgstr "" +msgstr "Обраний діаметр і діаметр профілю принтера не відповідають один одному" msgid "Failed to generate cali gcode" -msgstr "" +msgstr "Не вдалося згенерувати калібрувальний G-код" msgid "Calibration error" -msgstr "" +msgstr "Помилка калібрування" msgid "TPU is not supported by AMS." -msgstr "" +msgstr "TPU не підтримується AMS." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." -msgstr "" +msgstr "Bambu PET-CF/PA6-CF не підтримується AMS." 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 "за замовчуванням" #, boost-format msgid "Edit Custom G-code (%1%)" -msgstr "" +msgstr "Редагування користувацького G-коду (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" -msgstr "" +msgstr "Вбудовані заповнювачі (Двічі клацніть елемент, щоб додати до G-коду)" msgid "Search gcode placeholders" -msgstr "" +msgstr "Пошук G-коду в заповнювачах" msgid "Add selected placeholder to G-code" -msgstr "" +msgstr "Додати вибраний заповнювач до G-коду" msgid "Select placeholder" -msgstr "" +msgstr "Вибрати заповнювач" msgid "[Global] Slicing State" -msgstr "" +msgstr "[Глобальний] Стан нарізки" msgid "Read Only" -msgstr "" +msgstr "Тільки для читання" msgid "Read Write" -msgstr "" +msgstr "Читати Писати" msgid "Slicing State" -msgstr "" +msgstr "Стан зрізу" msgid "Print Statistics" -msgstr "" +msgstr "Статистика друку" msgid "Objects Info" -msgstr "" +msgstr "Інформація про об'єкти" msgid "Dimensions" -msgstr "" +msgstr "Розміри" msgid "Temperatures" -msgstr "" +msgstr "Температури" msgid "Timestamps" -msgstr "" +msgstr "Відмітки часу" #, boost-format msgid "Specific for %1%" -msgstr "" +msgstr "Специфічно для %1%" msgid "Presets" msgstr "Пресети" @@ -3662,7 +4023,7 @@ msgid "Filament settings" msgstr "Настінні філаменти" msgid "SLA Materials settings" -msgstr "" +msgstr "Налаштування матеріалів SLA" msgid "Printer settings" msgstr "Налаштування принтера" @@ -3670,9 +4031,6 @@ msgstr "Налаштування принтера" msgid "parameter name" msgstr "ім'я параметра" -msgid "N/A" -msgstr "Н/Д" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s не може бути відсотком" @@ -3684,6 +4042,11 @@ msgstr "Значення %s поза допустимим діапазоном, msgid "Parameter validation" msgstr "Перевірка параметрів" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" +"Значення %s знаходиться за межами діапазону. Дійсний діапазон від %d до %d." + msgid "Value is out of range." msgstr "Значення поза допустимим діапазоном." @@ -3697,6 +4060,20 @@ msgstr "" "ТАК для %s%%, \n" "НІ для %s %s." +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "" +"Недійсний формат введення. Очікується вектор розмірів у наступному форматі: " +"\"%1%\"" + +msgid "Input value is out of range" +msgstr "Вхідне значення виходить за межі діапазону" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Невірний формат. Очікуваний векторний формат: \"%1%\"" @@ -3764,12 +4141,12 @@ msgstr "Відображати" msgid "Flushed" msgstr "Очищення" -msgid "Total" -msgstr "Загальний" - msgid "Tower" msgstr "Вежа" +msgid "Total" +msgstr "Загальний" + msgid "Total Estimation" msgstr "Загальна оцінка" @@ -3861,10 +4238,10 @@ msgid "Printer" msgstr "Принтер" msgid "Custom g-code" -msgstr "" +msgstr "Користувацький g-код" msgid "ToolChange" -msgstr "" +msgstr "Зміна інструменту" msgid "Time Estimation" msgstr "Оцінка часу" @@ -3872,6 +4249,12 @@ msgstr "Оцінка часу" msgid "Normal mode" msgstr "Нормальний режим" +msgid "Total Filament" +msgstr "Загальний філамент" + +msgid "Model Filament" +msgstr "Філамент моделі" + msgid "Prepare time" msgstr "Час підготовки" @@ -3965,6 +4348,9 @@ msgstr "Упорядкувати варіанти" msgid "Spacing" msgstr "Відстань" +msgid "0 means auto spacing." +msgstr "0 означає автоматичний інтервал." + msgid "Auto rotate for arrangement" msgstr "Автоповорот для розташування" @@ -3975,10 +4361,7 @@ msgid "Avoid extrusion calibration region" msgstr "Уникайте області калібрування екструзії" msgid "Align to Y axis" -msgstr "" - -msgid "Add" -msgstr "Додати" +msgstr "Вирівняти за осі Y" msgid "Add plate" msgstr "Додати плату" @@ -4046,7 +4429,7 @@ msgid "An object is layed over the boundary of plate." msgstr "Об'єкт накладений на межу столу." msgid "A G-code path goes beyond the max print height." -msgstr "" +msgstr "Шлях G-коду виходить за максимально допустиму висоту друку." msgid "A G-code path goes beyond the boundary of plate." msgstr "Шлях G-коду виходить за межі зони друку." @@ -4073,10 +4456,10 @@ msgid "Bed leveling" msgstr "Вирівнювання столу" msgid "Vibration compensation" -msgstr "" +msgstr "Компенсація вібрації" msgid "Motor noise cancellation" -msgstr "" +msgstr "Скасування шуму мотора" msgid "Calibration program" msgstr "Програма калібрування" @@ -4103,7 +4486,7 @@ msgid "Calibrating" msgstr "Калібрування" msgid "No step selected" -msgstr "" +msgstr "Не вибрано крок" msgid "Auto-record Monitoring" msgstr "Автозапис Моніторингу" @@ -4111,6 +4494,9 @@ msgstr "Автозапис Моніторингу" msgid "Go Live" msgstr "У прямому ефірі" +msgid "Liveview Retry" +msgstr "Повторити перегляд у реальному часі" + msgid "Resolution" msgstr "Дозвіл нарізки" @@ -4118,10 +4504,10 @@ msgid "Enable" msgstr "Увімкнення" msgid "Hostname or IP" -msgstr "" +msgstr "Ім'я хоста або IP-адреса" msgid "Custom camera source" -msgstr "" +msgstr "Спеціальне джерело камери" msgid "Show \"Live Video\" guide page." msgstr "Показати \\Пряме відео\\ сторінку посібника." @@ -4163,14 +4549,11 @@ msgstr "Закриття програми під чвс зміни деяких msgid "Logging" msgstr "Ведення журналу" -msgid "Prepare" -msgstr "Підготувати" - msgid "Preview" msgstr "Попередній перегляд" -msgid "Device" -msgstr "Пристрій" +msgid "Multi-device" +msgstr "Багато пристроїв" msgid "Project" msgstr "Проєкт" @@ -4196,9 +4579,6 @@ msgstr "Нарізати все" msgid "Export G-code file" msgstr "Експорт файлу G-коду" -msgid "Send" -msgstr "Надіслати" - msgid "Export plate sliced file" msgstr "Експорт файлу зрізів планшета" @@ -4319,6 +4699,12 @@ msgstr "Імпорт 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Завантажте модель" +msgid "Import Zip Archive" +msgstr "Імпорт Zip-архіву" + +msgid "Load models contained within a zip archive" +msgstr "Завантажити моделі, що містяться в zip-архіві" + msgid "Import Configs" msgstr "Імпорт конфігурацій" @@ -4329,10 +4715,10 @@ msgid "Import" msgstr "Імпорт" msgid "Export all objects as one STL" -msgstr "" +msgstr "Експортувати всі об’єкти як один файл STL" msgid "Export all objects as STLs" -msgstr "" +msgstr "Експортувати всі об’єкти як файли STL" msgid "Export Generic 3MF" msgstr "Експорт спільного 3MF" @@ -4352,8 +4738,8 @@ msgstr "Експорт G-коду" msgid "Export current plate as G-code" msgstr "Експортувати поточну пластину як G-код" -msgid "Export &Configs" -msgstr "Експорт &конфігурації" +msgid "Export Preset Bundle" +msgstr "Експорт пакета пресетів" msgid "Export current configuration to files" msgstr "Експорт поточної конфігурації до файлів" @@ -4422,22 +4808,22 @@ msgid "Use Orthogonal View" msgstr "Використовувати ортогональний вигляд" msgid "Show &G-code Window" -msgstr "" +msgstr "Показати вікно G-коду" msgid "Show g-code window in Previce scene" -msgstr "" +msgstr "Показати вікно g-коду у сцені попереднього перегляду" msgid "Show 3D Navigator" -msgstr "" +msgstr "Показати 3D-навігатор" msgid "Show 3D navigator in Prepare and Preview scene" -msgstr "" +msgstr "Показати 3D-навігатор у сцені підготовки та попереднього перегляду" msgid "Reset Window Layout" -msgstr "" +msgstr "Скинути розташування вікон" msgid "Reset to default window layout" -msgstr "" +msgstr "Скидання до стандартного вигляду вікна" msgid "Show &Labels" msgstr "Показати &Ярлики" @@ -4446,17 +4832,14 @@ msgid "Show object labels in 3D scene" msgstr "Показати мітки об'єктів у 3D-сцені" msgid "Show &Overhang" -msgstr "" +msgstr "Показати &Виступ" msgid "Show object overhang highlight in 3D scene" -msgstr "" +msgstr "Показати підсвічування виступу об'єкта у 3D сцені" msgid "Preferences" msgstr "Налаштування" -msgid "View" -msgstr "Вигляд" - msgid "Help" msgstr "Допомога" @@ -4523,10 +4906,10 @@ msgstr "Експорт траєкторій як OBJ" msgid "Export toolpaths as OBJ" msgstr "Експортувати траєкторії як OBJ" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "Відкрити &студію" -msgid "Open Studio" +msgid "Open Slicer" msgstr "Відкрита студія" msgid "&Quit" @@ -4603,6 +4986,9 @@ msgid "" "Hint: Make sure you have added the corresponding printer before importing " "the configs." msgstr "" +"\n" +"Підказка: Перед імпортом конфігурацій переконайтеся, що ви додали " +"відповідний принтер." msgid "Import result" msgstr "Імпортувати результат" @@ -4632,41 +5018,60 @@ msgstr "" msgid "Synchronization" msgstr "Синхронізація" -msgid "Initialize failed (No Device)!" -msgstr "Помилка ініціалізації (немає пристрою)!" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" +"Пристрій не може обробляти більше розмов. Будь ласка, спробуйте пізніше." -msgid "Initialize failed (No Camera Device)!" -msgstr "Помилка ініціалізації (немає камери)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "Програвач несправний. Будь ласка, перевстановіть систему програвача." -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "Принтер зайнятий завантаженням. Дочекайтеся завершення завантаження." - -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" +"Програвач не завантажений, будь ласка, натисніть кнопку “Відтворити”, щоб " +"спробувати ще раз." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Ініціалізація не вдалася (недоступна лише в режимі LAN)!" +msgid "Please confirm if the printer is connected." +msgstr "Будь ласка, підтвердіть, чи принтер підключений." -msgid "Initialize failed (Missing LAN ip of printer)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"Помилка ініціалізації (відсутня IP-адреса принтера в локальній мережі)!" +"Принтер зараз зайнятий завантаженням. Будь ласка, спробуйте ще раз після " +"завершення завантаження." + +msgid "Printer camera is malfunctioning." +msgstr "Камера принтера несправна." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Виникла проблема. Будь ласка, оновіть прошивку принтера і спробуйте знову." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Режим прямого підключення до мережі вимкнений. Будь ласка, увімкніть режим " +"прямого перегляду на екрані принтера." + +msgid "Please enter the IP of printer to connect." +msgstr "Будь ласка, введіть IP-адресу принтера для підключення." msgid "Initializing..." msgstr "Ініціалізація..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Помилка ініціалізації (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"Підключення не вдалося. Будь ласка, перевірте мережу та спробуйте ще раз" -msgid "Network unreachable" -msgstr "Мережа недоступна" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Будь ласка, перевірте мережу та спробуйте ще раз. Якщо проблема " +"продовжується, ви можете перезавантажити або оновити принтер." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Зупинено [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "Принтер був вийшов із системи та не може підключитися." msgid "Stopped." msgstr "Зупинено." @@ -4692,24 +5097,23 @@ msgid "" "Orca Slicer supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" +"Працює інша віртуальна камера.\n" +"Orca Slicer підтримує лише одну віртуальну камеру.\n" +"Ви хочете зупинити цю віртуальну камеру?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" msgstr "Помилка ініціалізації віртуальної камери (%s)!" +msgid "Network unreachable" +msgstr "Мережа недоступна" + msgid "Information" msgstr "Інформація" msgid "Playing..." msgstr "Гра..." -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "Завантаження не вдалося [%d]!" - -msgid "Loading..." -msgstr "Завантаження..." - msgid "Year" msgstr "Рік" @@ -4728,9 +5132,6 @@ msgstr "Згрупуйте файли по місяцях, спочатку не msgid "Show all files, recent first." msgstr "Показати всі файли спочатку останні." -msgid "Timelapse" -msgstr "Таймлапс" - msgid "Switch to timelapse files." msgstr "Перехід до файлів уповільненої зйомки." @@ -4741,7 +5142,7 @@ msgid "Switch to video files." msgstr "Перехід до відеофайлів." msgid "Switch to 3mf model files." -msgstr "" +msgstr "Переключитися на файли моделей 3mf." msgid "Delete selected files from printer." msgstr "Видалити вибрані файли з принтера." @@ -4758,6 +5159,12 @@ msgstr "Вибір" msgid "Batch manage files." msgstr "Пакетне керування файлами." +msgid "Refresh" +msgstr "Оновити" + +msgid "Reload file list from printer." +msgstr "Перезавантажте список файлів з принтера." + msgid "No printers." msgstr "Ніяких принтерів." @@ -4768,50 +5175,87 @@ msgstr "Помилка підключення [%d]!" msgid "Loading file list..." msgstr "Завантаження списку файлів..." -#, c-format, boost-format -msgid "No files [%d]" +msgid "No files" +msgstr "No files" + +msgid "Load failed" +msgstr "Не вдалося завантажити" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "Ініціалізація не вдалася (З'єднання пристрою не готове)!" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." msgstr "" +"Перегляд файлів на SD-картці не підтримується в поточній версії прошивки. " +"Будь ласка, оновіть прошивку принтера." + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "Помилка ініціалізації (Сховище недоступне, вставте SD-карту)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "Помилка підключення LAN (Не вдалося переглянути sd-карту)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "Перегляд файлів на SD-картці не підтримується в режимі лише LAN." #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "" +msgid "Initialize failed (%s)!" +msgstr "Помилка ініціалізації (%s)!" #, 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 файл із принтера. Ви впевнені, що хочете це " +"зробити?" msgstr[1] "" +"Ви збираєтеся видалити %u файл із принтера. Ви впевнені, що хочете це " +"зробити?" msgstr[2] "" +"Ви збираєтеся видалити %u файлів із принтера. Ви впевнені, що хочете це " +"зробити?" msgid "Delete files" msgstr "Видалити файли" #, c-format, boost-format msgid "Do you want to delete the file '%s' from printer?" -msgstr "" +msgstr "Ви хочете видалити файл '%s' з принтера?" msgid "Delete file" -msgstr "" +msgstr "Видалити файл" msgid "Fetching model infomations ..." -msgstr "" +msgstr "Отримання інформації про модель ..." -msgid "Failed to fetching model infomations from printer." -msgstr "" +msgid "Failed to fetch model information from printer." +msgstr "Не вдалося отримати інформацію про модель з принтера." -msgid "Failed to parse model infomations." -msgstr "" +msgid "Failed to parse model information." +msgstr "Не вдалося розібрати інформацію про модель." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " "and export a new .gcode.3mf file." msgstr "" +"Файл .gcode.3mf не містить даних G-коду. Будь ласка, розріжте його за " +"допомогою Orca Slicer і експортуйте новий файл .gcode.3mf." #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "Файл '%s' втрачений! Завантажте його знову." +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" +"Файл: %s\n" +"Заголовок: %s\n" + msgid "Download waiting..." msgstr "Чекання завантаження..." @@ -4828,27 +5272,28 @@ msgstr "Завантаження завершено" msgid "Downloading %d%%..." msgstr "Завантаження %d%%..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" +"Перепідключення принтера. Операцію не можна завершити негайно, спробуйте ще " +"раз пізніше." -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." -msgstr "" +msgid "File does not exist." +msgstr "Файл не існує." msgid "File checksum error. Please retry." -msgstr "" +msgstr "Помилка контрольної суми файлу. Будь ласка, спробуйте ще раз." msgid "Not supported on the current printer version." -msgstr "" +msgstr "Не підтримується на поточній версії принтера." msgid "Storage unavailable, insert SD card." -msgstr "" +msgstr "Зберігання недоступне, вставте SD-карту." #, c-format, boost-format msgid "Error code: %d" -msgstr "" +msgstr "Код помилки: %d" msgid "Speed:" msgstr "Швидкість:" @@ -4872,32 +5317,26 @@ msgid "Swap Y/Z axes" msgstr "Змінити місцями осі Y/Z" msgid "Invert X axis" -msgstr "" +msgstr "Інвертувати вісь X" msgid "Invert Y axis" -msgstr "" +msgstr "Інвертувати вісь Y" msgid "Invert Z axis" -msgstr "" +msgstr "Інвертувати вісь Z" msgid "Invert Yaw axis" -msgstr "" +msgstr "Інвертувати вісь повороту" msgid "Invert Pitch axis" -msgstr "" +msgstr "Інвертувати вісь нахилу" msgid "Invert Roll axis" -msgstr "" +msgstr "Інвертувати вісь Roll" msgid "Printing Progress" msgstr "Хід друку" -msgid "Resume" -msgstr "Продовжити" - -msgid "Stop" -msgstr "Стоп" - msgid "0" msgstr "0" @@ -4911,17 +5350,19 @@ msgid "" "You have completed printing the mall model, \n" "but the synchronization of rating information has failed." msgstr "" +"Ви завершили друк моделі торгового центру, \n" +"але синхронізація інформації про рейтинг не вдалася." msgid "How do you like this printing file?" -msgstr "" +msgstr "Як вам подобається цей файл для друку?" msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" -msgstr "" +msgstr "(Модель вже була оцінена. Ваша оцінка перезапише попередню оцінку.)" msgid "Rate" -msgstr "" +msgstr "Оцінити" msgid "Camera" msgstr "Камера" @@ -4933,11 +5374,14 @@ msgid "Camera Setting" msgstr "Налаштування камери" msgid "Switch Camera View" -msgstr "" +msgstr "Переключити вид камери" msgid "Control" msgstr "Контроль" +msgid "Printer Parts" +msgstr "Частини принтера" + msgid "Print Options" msgstr "Параметри друку" @@ -4956,9 +5400,6 @@ msgstr "Камера" msgid "Bed" msgstr "Стіл" -msgid "Unload" -msgstr "Вивантаження" - msgid "Debug Info" msgstr "Налагоджувальна інформація" @@ -4996,6 +5437,8 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" +"Будь ласка, нагрійте насадку до понад 170 градусів перед завантаженням або " +"вивантаженням філаменту." msgid "Still unload" msgstr "Ще розвантажити" @@ -5032,95 +5475,111 @@ msgid "Can't start this without SD card." msgstr "Не можу запустити це без SD-карти." msgid "Rate the Print Profile" -msgstr "" +msgstr "Оцінити профіль друку" msgid "Comment" msgstr "Коментувати" msgid "Rate this print" -msgstr "" +msgstr "Оцініть цей друк" msgid "Add Photo" -msgstr "" +msgstr "Додати фото" msgid "Delete Photo" -msgstr "" +msgstr "Видалити фото" msgid "Submit" -msgstr "" +msgstr "Підтвердити" msgid "Please click on the star first." -msgstr "" +msgstr "Будь ласка, спочатку клацніть на зірку." msgid "InFo" -msgstr "" +msgstr "Інформація" msgid "Get oss config failed." -msgstr "" +msgstr "Не вдалося отримати конфігурацію OSS." msgid "Upload Pictrues" -msgstr "" +msgstr "Завантажити фотографії" msgid "Number of images successfully uploaded" -msgstr "" +msgstr "Кількість успішно завантажених зображень" msgid " upload failed" -msgstr "" +msgstr " Помилка завантаження" msgid " upload config prase failed\n" -msgstr "" +msgstr " Помилка при спробі завантажити конфігураційний файл\n" msgid " No corresponding storage bucket\n" -msgstr "" +msgstr " Відсутній відповідний сховищний контейнер\n" msgid " can not be opened\n" -msgstr "" +msgstr " Не може бути відкрито\n" msgid "" "The following issues occurred during the process of uploading images. Do you " "want to ignore them?\n" "\n" msgstr "" +"Під час процесу завантаження зображень виникли наступні проблеми. Бажаєте їх " +"проігнорувати?\n" +"\n" msgid "info" msgstr "інфо" msgid "Synchronizing the printing results. Please retry a few seconds later." msgstr "" +"Синхронізація результатів друку. Будь ласка, повторіть спробу через кілька " +"секунд." msgid "Upload failed\n" -msgstr "" +msgstr "Помилка завантаження\n" msgid "obtaining instance_id failed\n" -msgstr "" +msgstr "помилка отримання instance_id\n" msgid "" "Your comment result cannot be uploaded due to some reasons. As follows:\n" "\n" " error code: " msgstr "" +"Ваш коментар не може бути завантажений з якихось причин. Ось деталі " +"помилки:\n" +"\n" +" код помилки: " msgid "error message: " -msgstr "" +msgstr "текст помилки: " msgid "" "\n" "\n" "Would you like to redirect to the webpage for rating?" msgstr "" +"\n" +"\n" +"Чи бажаєте ви перейти на веб-сторінку для оцінки?" msgid "" "Some of your images failed to upload. Would you like to redirect to the " "webpage for rating?" msgstr "" +"Деякі з ваших зображень не вдалося завантажити. Бажаєте перейти на веб-" +"сторінку для оцінки?" msgid "You can select up to 16 images." -msgstr "" +msgstr "Ви можете вибрати до 16 зображень." msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" +"Для того щоб поставити позитивний рейтинг (4 або 5 зірок), потрібно \n" +"мати принаймні один успішний запис про друк з цим профілем друку." msgid "Status" msgstr "Статус" @@ -5128,9 +5587,6 @@ msgstr "Статус" msgid "Update" msgstr "Оновлення" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Більше не показувати" @@ -5161,6 +5617,39 @@ msgstr "%s інформація" msgid "Skip" msgstr "Пропустити" +msgid "Newer 3mf version" +msgstr "Нова версія 3mf" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" +"Версія 3mf-файлу знаходиться в стадії бета-тестування і є новішою за поточну " +"версію OrcaSlicer." + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" +"Якщо ви хочете спробувати бета-версію Orca Slicer, ви можете натиснути на" + +msgid "Download Beta Version" +msgstr "Завантажити бета-версію" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "Версія файлу 3mf новіша, ніж поточна версія Orca Slicer." + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" +"Оновлення вашого Orca Slicer може увімкнути всю функціональність у файлі 3mf." + +msgid "Current Version: " +msgstr "Поточна версія: " + +msgid "Latest Version: " +msgstr "Остання версія: " + +msgid "Not for now" +msgstr "Наразі не потрібно" + msgid "3D Mouse disconnected." msgstr "3D-миша відключена." @@ -5186,10 +5675,10 @@ msgid "Details" msgstr "Подробиці" msgid "New printer config available." -msgstr "" +msgstr "Доступна нова конфігурація принтера." msgid "Wiki" -msgstr "" +msgstr "Енциклопедія" msgid "Undo integration failed." msgstr "Скасувати інтеграцію не вдалося." @@ -5233,12 +5722,12 @@ msgstr[2] "%1$d завантажено як частини обрізаних о msgid "ERROR" msgstr "ПОМИЛКА" -msgid "CANCELED" -msgstr "Скасовано" - msgid "COMPLETED" msgstr "ВИКОНАНО" +msgid "CANCELED" +msgstr "Скасовано" + msgid "Cancel upload" msgstr "Скасувати завантаження" @@ -5255,10 +5744,10 @@ msgid "Export successfully." msgstr "Експорт успішно." msgid "Model file downloaded." -msgstr "" +msgstr "Завантажений файл моделі." msgid "Serious warning:" -msgstr "" +msgstr "Серйозне попередження:" msgid " (Repair)" msgstr " (Ремонт)" @@ -5344,10 +5833,31 @@ msgid "Auto-recovery from step loss" msgstr "Автоматичне відновлення після втрати кроку" msgid "Allow Prompt Sound" -msgstr "" +msgstr "Дозволити звук підказки" msgid "Filament Tangle Detect" +msgstr "Виявлення заплутування філаменту" + +msgid "Nozzle Clumping Detection" +msgstr "Виявлення згортання сопла" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." msgstr "" +"Перевірте, чи сопло не затверділо від філаменту або інших чужорідних " +"предметів." + +msgid "Nozzle Type" +msgstr "Тип насадки" + +msgid "Stainless Steel" +msgstr "Нержавіюча сталь" + +msgid "Hardened Steel" +msgstr "Закалена сталь" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" msgid "Global" msgstr "Глобальний" @@ -5365,25 +5875,25 @@ msgid "View all object's settings" msgstr "Переглянути всі налаштування об'єкта" msgid "Remove current plate (if not last one)" -msgstr "" +msgstr "Видалити поточну пластину (якщо вона не є остання)" msgid "Auto orient objects on current plate" -msgstr "" +msgstr "Автоматичне орієнтування об'єктів на поточній пластині" msgid "Arrange objects on current plate" -msgstr "" +msgstr "Впорядкувати об'єкти на поточній пластині" msgid "Unlock current plate" -msgstr "" +msgstr "Розблокувати поточну пластину" msgid "Lock current plate" -msgstr "" +msgstr "Блокування поточної пластини" msgid "Edit current plate name" -msgstr "" +msgstr "Редагувати поточну назву пластини" msgid "Customize current plate" -msgstr "" +msgstr "Налаштувати поточну пластину" #, boost-format msgid " plate %1%:" @@ -5438,7 +5948,7 @@ msgid "Set filaments to use" msgstr "Встановіть нитки для використання" msgid "Search plate, object and part." -msgstr "" +msgstr "Пошук плити, об’єкта і деталі." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -5508,6 +6018,9 @@ msgid "" "clogged when printing this filament in a closed enclosure. Please open the " "front door and/or remove the upper glass." msgstr "" +"Поточна температура гарячого ложа висока. При друку цим філаментом в " +"закритому приміщенні може статися забивання сопла. Будь ласка, відкрийте " +"передню дверцю та/або видаліть верхнє скло." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5523,12 +6036,14 @@ msgid "" "Enabling traditional timelapse photography may cause surface imperfections. " "It is recommended to change to smooth mode." msgstr "" +"Включення традиційної фотографії таймлапсу може призвести до дефектів на " +"поверхні. Рекомендується перейти в режим згладжування." msgid "Expand sidebar" -msgstr "" +msgstr "Розгорнути бічну панель" msgid "Collapse sidebar" -msgstr "" +msgstr "Згорнути бічну панель" #, c-format, boost-format msgid "Loading file: %s" @@ -5549,9 +6064,6 @@ 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 " @@ -5568,25 +6080,32 @@ msgstr "Будь ласка, виправте їх у вкладках пара msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" +"У файлі 3mf знаходяться наступні змінені G-коди в налаштуваннях філаменту " +"або принтера:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " "the machine!" msgstr "" +"Будь ласка, підтвердьте, що ці змінені G-коди безпечні і не призведуть до " +"пошкодження пристрою!" msgid "Modified G-codes" -msgstr "" +msgstr "Змінені G-коди" msgid "The 3mf has following customized filament or printer presets:" msgstr "" +"У файлі 3mf містяться наступні налаштовані параметри філаменту або принтера:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" +"Будь ласка, підтвердьте, що G-коди в цих налаштованих параметрах безпечні і " +"не призведуть до пошкодження пристрою!" msgid "Customized Preset" -msgstr "" +msgstr "Налаштований параметр" msgid "Name of components inside step file is not UTF8 format!" msgstr "Ім'я компонентів всередині крокового файлу не у форматі UTF8!" @@ -5594,6 +6113,9 @@ msgstr "Ім'я компонентів всередині крокового ф msgid "The name may show garbage characters!" msgstr "Ім'я може містити символи для сміття!" +msgid "Remember my choice." +msgstr "Запам'ятай мій вибір." + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" @@ -5652,22 +6174,24 @@ msgid "Export STL file:" msgstr "Експорт файлу STL:" msgid "Export AMF file:" -msgstr "" +msgstr "Експор файлу AMF:" msgid "Save file as:" msgstr "Зберегти файл як:" msgid "Export OBJ file:" -msgstr "" +msgstr "Експор файлу OBJ:" #, c-format, boost-format msgid "" "The file %s already exists\n" "Do you want to replace it?" msgstr "" +"Файл %s вже існує.\n" +"Бажаєте замінити його?" msgid "Comfirm Save As" -msgstr "" +msgstr "Підтвердити збереження як" msgid "Delete object which is a part of cut object" msgstr "Видалити об'єкт, який є частиною обрізаного об'єкта" @@ -5688,13 +6212,13 @@ msgid "Another export job is running." msgstr "Виконується інше завдання експорту." msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "Неможливо замінити більше, ніж один об’єм" msgid "Error during replace" msgstr "Помилка заміни" msgid "Replace from:" -msgstr "" +msgstr "Замінити з:" msgid "Select a new file" msgstr "Виберіть новий файл" @@ -5706,22 +6230,19 @@ msgid "Please select a file" msgstr "Будь ласка, виберіть файл" msgid "Do you want to replace it" -msgstr "" +msgstr "Ви хочете замінити його" msgid "Message" -msgstr "" +msgstr "Повідомлення" msgid "Reload from:" -msgstr "" +msgstr "Перезавантажити з:" msgid "Unable to reload:" -msgstr "" +msgstr "Не вдається перезавантажити:" msgid "Error during reload" -msgstr "" - -msgid "Slicing" -msgstr "Нарізка" +msgstr "Помилка під час перезавантаження" msgid "There are warnings after slicing models:" msgstr "Є попередження після нарізки моделей:" @@ -5783,9 +6304,15 @@ msgstr "Імпорт моделі" msgid "prepare 3mf file..." msgstr "підготувати файл 3mf..." +msgid "Download failed, unknown file format." +msgstr "Не вдалося завантажити, невідомий формат файлу." + msgid "downloading project ..." msgstr "завантажую проект..." +msgid "Download failed, File size exception." +msgstr "Завантаження не вдалося через виняток розміру файлу." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Проект завантажено %d%%" @@ -5794,9 +6321,11 @@ msgid "" "Importing to Orca Slicer failed. Please download the file and manually " "import it." msgstr "" +"Не вдалося імпортувати файл до Orca Slicer. Завантажте файл і імпортуйте " +"його вручну." msgid "Import SLA archive" -msgstr "" +msgstr "Імпорт SLА-архіву" msgid "The selected file" msgstr "Вибраний файл" @@ -5807,6 +6336,22 @@ msgstr "не містить дійсний gcode." msgid "Error occurs while loading G-code file" msgstr "Помилка під час завантаження файлу G-коду" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "Не вдалося завантажити ZIP-архів за шляхом %1%." + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "Не вдалося розархівувати файл до %1%: %2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" +"Не вдалося знайти розархівований файл за адресою %1%. Не вдалося " +"розархівувати файл." + msgid "Drop project file" msgstr "Видалити файл проекту" @@ -5831,9 +6376,6 @@ msgstr "Файли G-коду не можна завантажувати раз msgid "Can not add models when in preview mode!" msgstr "Неможливо додати моделі у режимі попереднього перегляду!" -msgid "Add Models" -msgstr "Додати моделі" - msgid "All objects will be removed, continue?" msgstr "Усі об'єкти будуть видалені, продовжити?" @@ -5841,9 +6383,6 @@ msgid "The current project has unsaved changes, save it before continue?" msgstr "" "У поточному проекті є незбережені зміни, зберегти їх, перш ніжпродовжити?" -msgid "Remember my choice." -msgstr "Запам'ятай мій вибір." - msgid "Number of copies:" msgstr "Кількість копій:" @@ -5854,13 +6393,13 @@ msgid "Save G-code file as:" msgstr "Збережіть файл G-коду як:" msgid "Save SLA file as:" -msgstr "" +msgstr "Зберегти файл SLA як:" msgid "The provided file name is not valid." -msgstr "" +msgstr "Подана назва файлу недійсна." msgid "The following characters are not allowed by a FAT file system:" -msgstr "" +msgstr "Слідуючі символи не допускаються файловою системою FAT:" msgid "Save Sliced file as:" msgstr "Зберегти нарізаний файл як:" @@ -5874,20 +6413,42 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"will be kept. You may fix the meshes and try agian." msgstr "" +"Неможливо виконати булеву операцію на сітках моделі. Будуть залишені лише " +"позитивні частини. Ви можете виправити сітки і спробувати ще раз." + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "Причина: частина “%1%” порожня." + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "Причина: частина “%1%” не обмежує об’єм." + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "Причина: частина “%1%” має самоперетин." + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "Причина: “%1%” та інша частина не мають перетину." msgid "" "Are you sure you want to store original SVGs with their local paths into the " "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" +"Ви впевнені, що хочете зберегти оригінальні SVG-файли з їхніми локальними " +"шляхами у 3MF-файл?\n" +"Якщо ви натиснете \"НІ\", всі SVG-файли у проекті будуть недоступні для " +"редагування." msgid "Private protection" msgstr "Приватний захист" msgid "Is the printer ready? Is the print sheet in place, empty and clean?" -msgstr "" +msgstr "Чи готовий принтер? Чи є стіл для друку на місці, чистий і порожній?" msgid "Upload and Print" msgstr "Завантажити і друкувати" @@ -5911,7 +6472,7 @@ msgstr "" "Нестандартні опори та кольорове забарвлення були видалені перед ремонтом." msgid "Optimize Rotation" -msgstr "" +msgstr "Оптимізація повороту" msgid "Invalid number" msgstr "Неправильний номер" @@ -5921,11 +6482,11 @@ msgstr "Параметри планшета" #, boost-format msgid "Number of currently selected parts: %1%\n" -msgstr "" +msgstr "Кількість вибраних зараз деталей: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "" +msgstr "Кількість об'єктів, що вибрані зараз: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -6028,13 +6589,21 @@ msgid "Login Region" msgstr "Регіон входу" msgid "Stealth Mode" +msgstr "Прихований режим" + +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +"Це зупиняє передачу даних до хмарних сервісів Bambu. Користувачі, які не " +"користуються машинами BBL або використовують лише режим локальної мережі, " +"можуть безпечно ввімкнути цю функцію." msgid "Enable network plugin" -msgstr "" +msgstr "Увімкнути мережевий плагін" msgid "Check for stable updates only" -msgstr "" +msgstr "Перевіряти лише стабільні оновлення" msgid "Metric" msgstr "Метрика" @@ -6045,14 +6614,51 @@ msgstr "Імперський" msgid "Units" msgstr "Одиниці" -msgid "Home" +msgid "Allow only one OrcaSlicer instance" +msgstr "Дозволити лише один екземпляр OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." msgstr "" +"На MacOS за замовчуванням завжди працює лише один екземпляр програми. Однак " +"з командного рядка дозволяється запускати кілька екземплярів однієї й тієї ж " +"програми. У цьому випадку цей параметр дозволить запускати лише один " +"екземпляр." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Якщо цей параметр увімкнено, під час запуску OrcaSlicer, коли вже запущено " +"інший екземпляр того ж самого OrcaSlicer, цей екземпляр буде повторно " +"активовано замість нього." + +msgid "Home" +msgstr "Домівка" msgid "Default Page" -msgstr "" +msgstr "Сторінка за замовчуванням" msgid "Set the page opened on startup." +msgstr "Задати сторінку, яка відкривається при запуску." + +msgid "Touchpad" +msgstr "Тачпад" + +msgid "Camera style" +msgstr "Тип камери" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" +"Вибір стилю навігації камерою.\n" +"За замовчуванням: ЛКМ+рух для обертання, ПКМ/СКМ+рух для панорамування.\n" +"Сенсорна панель: Alt+рух для обертання, Shift+рух для панорамування." msgid "Zoom to mouse position" msgstr "Наблизити до положення миші" @@ -6064,16 +6670,25 @@ msgstr "" "Наблизьтеся до положення покажчика миші у 3D-виді, а не до центру 2D вікна." msgid "Use free camera" -msgstr "" +msgstr "Використовувати вільну камеру" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "" +"Якщо увімкнено, використовуватиметься вільна камера. Якщо вимкнено, " +"використовуватиметься камера з обмеженими можливостями." + +msgid "Reverse mouse zoom" +msgstr "Реверсний зум миші" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" +"Якщо увімкнено, змінює напрямок масштабування за допомогою коліщатка миші." msgid "Show splash screen" -msgstr "" +msgstr "Показувати заставку" msgid "Show the splash screen during startup." -msgstr "" +msgstr "Показувати заставку під час запуску." msgid "Show \"Tip of the day\" notification after start" msgstr "Показувати повідомлення \"Рада дня\" після запуску" @@ -6083,12 +6698,45 @@ msgstr "Якщо увімкнено, під час запуску відобра msgid "Flushing volumes: Auto-calculate everytime the color changed." msgstr "" +"Змивання обсягів: авто-перераховується кожного разу, коли змінюється колір." msgid "If enabled, auto-calculate everytime the color changed." msgstr "" +"Якщо увімкнено, авто-розраховувння кожного разу, коли змінюється колір." + +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "" +"Об’єми промивання: автоматично обчислювати кожного разу при зміні філаменту." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" +"Якщо ввімкнено, автоматично обчислювати кожного разу, коли змінюється " +"філамент" + +msgid "Remember printer configuration" +msgstr "Запам'ятати конфігурацію принтера" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Якщо увімкнено, Orca запам'ятовує та автоматично перемикає конфігурацію " +"нитки/процесу для кожного принтера." + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" +"Керування кількома пристроями (набуває чинності після перезапуску Orca)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"З цією опцією ввімкненою, ви можете відправляти завдання на кілька пристроїв " +"одночасно та керувати декількома пристроями." msgid "Network" -msgstr "" +msgstr "Мережа" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -6133,6 +6781,42 @@ msgstr "" "Якщо включено, встановлює OrcaSlicer як програму за замовчуваннямдля " "відкриття файлів .step" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "Поточна асоціація: " + +msgid "Associate prusaslicer://" +msgstr "Асоційований prusaslicer://" + +msgid "Not associated to any application" +msgstr "Не пов'язаний з жодним додатком" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "Максимум останніх проектів" @@ -6143,7 +6827,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "Очистити мій вибір для незбережених проектів." msgid "No warnings when loading 3MF with modified G-codes" -msgstr "" +msgstr "Немає попереджень при завантаженні файлу 3MF із зміненими G-кодами" msgid "Auto-Backup" msgstr "Автобекап" @@ -6173,7 +6857,7 @@ msgid "Develop mode" msgstr "Режим розробки" msgid "Skip AMS blacklist check" -msgstr "" +msgstr "Пропустити перевірку чорного списку AMS" msgid "Home page and daily tips" msgstr "Головна сторінка та щоденні поради" @@ -6212,13 +6896,13 @@ msgid "Mouse wheel reverses when zooming" msgstr "Колісок миші реверсує при масштабуванні" msgid "Enable SSL(MQTT)" -msgstr "" +msgstr "Увімкнути SSL (MQTT)" msgid "Enable SSL(FTP)" -msgstr "" +msgstr "Увімкнути SSL(FTP)" msgid "Internal developer mode" -msgstr "" +msgstr "Внутрішній режим розробника" msgid "Log Level" msgstr "Журнал рівня" @@ -6299,16 +6983,25 @@ msgid "Add/Remove materials" msgstr "Додати/видалити матеріали" msgid "Select/Remove printers(system presets)" -msgstr "" +msgstr "Вибрати/Вилучити принтери (системні налаштування)" msgid "Create printer" -msgstr "" - -msgid "Incompatible" -msgstr "" +msgstr "Створити" msgid "The selected preset is null!" -msgstr "" +msgstr "Обраний пресет є порожнім!" + +msgid "End" +msgstr "Кінець" + +msgid "Customize" +msgstr "Налаштувати" + +msgid "Other layer filament sequence" +msgstr "Послідовність філатури на інших шарах" + +msgid "Please input layer value (>= 2)." +msgstr "Будь ласка, введіть значення шару (≥ 2)." msgid "Plate name" msgstr "Назва пластини" @@ -6319,14 +7012,20 @@ msgstr "Те ж, що й глобальна послідовність друк msgid "Print sequence" msgstr "Послідовність друку" -msgid "Customize" -msgstr "" +msgid "Same as Global" +msgstr "Те саме, що й глобально" + +msgid "Disable" +msgstr "Вимкнути" + +msgid "Spiral vase" +msgstr "Спіральна ваза" msgid "First layer filament sequence" -msgstr "" +msgstr "Послідовність філаменту першого шару" msgid "Same as Global Plate Type" -msgstr "" +msgstr "Так само, як Глобальний Тип Пластини" msgid "Same as Global Bed Type" msgstr "Те ж, що й глобальний тип столу" @@ -6384,15 +7083,6 @@ msgstr "Установка користувача" msgid "Preset Inside Project" msgstr "Налаштування проекту всередині" -msgid "Name is invalid;" -msgstr "Ім'я недійсне;" - -msgid "illegal characters:" -msgstr "неприпустимі символи:" - -msgid "illegal suffix:" -msgstr "неприпустимий суфікс:" - msgid "Name is unavailable." msgstr "Ім'я недоступне." @@ -6410,15 +7100,6 @@ 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 "Ім'я не може збігатися з встановленим псевдонімом." @@ -6456,7 +7137,7 @@ msgid "(LAN)" msgstr "(LAN)" msgid "Search" -msgstr "" +msgstr "Пошук" msgid "My Device" msgstr "Мій пристрій" @@ -6476,9 +7157,6 @@ msgstr "Не можу знайти пристрої?" msgid "Log out successful." msgstr "Вийти успішно." -msgid "Offline" -msgstr "Не в мережі" - msgid "Busy" msgstr "Зайнятий" @@ -6486,43 +7164,34 @@ msgid "Bambu Cool Plate" msgstr "Холодний стіл" msgid "PLA Plate" -msgstr "" +msgstr "PLA Plate" msgid "Bambu Engineering Plate" msgstr "Інженерний стіл" msgid "Bambu Smooth PEI Plate" -msgstr "" +msgstr "Bambu Smooth PEI пластина" msgid "High temperature Plate" -msgstr "" +msgstr "High temperature Plate" msgid "Bambu Textured PEI Plate" -msgstr "" +msgstr "Текстурована пластина PEI з текстурою Bambu" msgid "Send print job to" msgstr "Надіслати завдання на друк на" -msgid "Refresh" -msgstr "Оновити" - -msgid "Bed Leveling" -msgstr "Вирівнювання столу" - msgid "Flow Dynamics Calibration" -msgstr "" +msgstr "Калібрування динаміки потоку" msgid "Click here if you can't connect to the printer" -msgstr "" +msgstr "Клацніть тут, якщо ви не можете підключитися до принтера" msgid "send completed" msgstr "відправлення завершено" msgid "Error code" -msgstr "" - -msgid "Printer local connection failed, please try again." -msgstr "" +msgstr "Код помилки" msgid "No login account, only printers in LAN mode are displayed" msgstr "" @@ -6603,8 +7272,12 @@ 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 "Вибраний принтер несумісний зі встановленими налаштуваннями." +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"Вибраний принтер (%s) несумісний з обраним профілем принтера в різальні (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "SD-карта повинна бути вставлена для запису таймлапсу." @@ -6626,10 +7299,14 @@ msgid "" "When enable spiral vase mode, machines with I3 structure will not generate " "timelapse videos." msgstr "" +"При увімкненні режиму спіралі для вази машини з I3 структурою не будуть " +"створювати відео в режимі таймлапсу." msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" +"Таймлапс не підтримується через те, що послідовність друку встановлена в “За " +"об’єктом”." msgid "Errors" msgstr "Помилки" @@ -6657,66 +7334,73 @@ msgstr "" #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "" +msgstr "сопло в налаштуваннях: %s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" +msgid "nozzle memorized: %.2f %s" msgstr "" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" +"Ваш діаметр сопла в розрізаному файлі не відповідає запам’ятаному діаметру " +"сопла. Якщо ви недавно змінили сопло, будь ласка, перейдіть до “Пристрій > " +"Частини принтера”, щоб змінити налаштування." #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" +"Друк високотемпературного матеріалу (%s матеріал) з %s може призвести до " +"пошкодження сопла" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "Будь ласка, виправте помилку вище, інакше друк не може продовжитися." msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "Натисніть кнопку підтвердження, якщо ви все ще хочете продовжити друк." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -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 "" +"Увага! Калібрування потоку на Textured PEI Plate може не вдалося через " +"розсіяну поверхню." msgid "Automatic flow calibration using Micro Lidar" -msgstr "" +msgstr "Автоматична калібрування потоку за допомогою мікро лідару" msgid "Modifying the device name" msgstr "Зміна імені пристрою" +msgid "Bind with Pin Code" +msgstr "Прив’язати за допомогою Пін-коду" + msgid "Send to Printer SD card" msgstr "Надіслати на SD-карту принтера" msgid "Cannot send the print task when the upgrade is in progress" msgstr "Не вдалося надіслати завдання на друк під час оновлення" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "Вибраний принтер несумісний зі встановленими налаштуваннями." + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "Перед надсиланням на картку SD принтера необхідно вставити картку SD." msgid "The printer is required to be in the same LAN as Orca Slicer." msgstr "" +"Принтер повинен бути підключений до тієї ж локальної мережі, що й Orca " +"Slicer." msgid "The printer does not support sending to printer SD card." msgstr "Принтер не підтримує надсилання на картку SD принтера." @@ -6725,35 +7409,58 @@ msgid "Slice ok." msgstr "Нарізка прибл." msgid "View all Daily tips" -msgstr "" +msgstr "Переглянути всі щоденні поради" msgid "Failed to create socket" -msgstr "" +msgstr "Не вдалося створити сокет" msgid "Failed to connect socket" -msgstr "" +msgstr "Не вдалося підключити сокет" msgid "Failed to publish login request" -msgstr "" +msgstr "Не вдалося опублікувати запит на вхід" msgid "Get ticket from device timeout" -msgstr "" +msgstr "Перевищено час очікування при отриманні квитка від пристрою" msgid "Get ticket from server timeout" -msgstr "" +msgstr "Перевищено час очікування при отриманні квитка від сервера" msgid "Failed to post ticket to server" -msgstr "" +msgstr "Не вдалося відправити квиток на сервер" msgid "Failed to parse login report reason" -msgstr "" +msgstr "Не вдалося розібрати причину звіту про вхід" msgid "Receive login report timeout" -msgstr "" +msgstr "Отримано звіт про вхід з перевищеним часом очікування" msgid "Unknown Failure" msgstr "Невідомий збій" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Будь ласка, знайдіть Пін-код на сторінці облікового запису на екрані " +"принтера, \n" +" і введіть Пін-код нижче." + +msgid "Can't find Pin Code?" +msgstr "Не можу знайти Пін-код?" + +msgid "Pin Code" +msgstr "Пін-код" + +msgid "Binding..." +msgstr "Прив’язка…" + +msgid "Please confirm on the printer screen" +msgstr "Будь ласка, підтвердьте на екрані принтера" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Вхід не вдається. Будь ласка, перевірте Пін-код." + msgid "Log in printer" msgstr "Вхід до принтера" @@ -6764,10 +7471,10 @@ msgid "Check the reason" msgstr "Перевірте причину" msgid "Read and accept" -msgstr "" +msgstr "Прочитайте і згодьтеся" msgid "Terms and Conditions" -msgstr "" +msgstr "Умови використання" msgid "" "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " @@ -6776,18 +7483,24 @@ msgid "" "Use(collectively, the \"Terms\"). If you do not comply with or agree to the " "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" +"Дякуємо за покупку пристрою Bambu Lab. Перед використанням вашого пристрою " +"Bambu Lab, ознайомтеся з умовами та положеннями. Клацнувши, щоб погодитися " +"використовувати ваш пристрій Bambu Lab, ви погоджуєтесь дотримуватися " +"Політики конфіденційності та Умов використання (разом \"Умови\"). Якщо ви не " +"виконуєте або не погоджуєтесь із Політикою конфіденційності Bambu Lab, будь " +"ласка, не використовуйте обладнання та послуги Bambu Lab." msgid "and" -msgstr "" +msgstr "і" msgid "Privacy Policy" -msgstr "" +msgstr "Політика конфіденційності" msgid "We ask for your help to improve everyone's printer" -msgstr "" +msgstr "Ми просимо вашої допомоги для покращення роботи всіх принтерів" msgid "Statement about User Experience Improvement Program" -msgstr "" +msgstr "Заява про Програму покращення користувацького досвіду" #, c-format, boost-format msgid "" @@ -6803,9 +7516,21 @@ msgid "" "payment information, or phone numbers. By enabling this service, you agree " "to these terms and the statement about Privacy Policy." msgstr "" +"У спільноті 3D-друку ми навчаємося на прикладі успіхів і невдач інших, щоб " +"налаштувати параметри і налаштування свого власного зрізування. %s " +"дотримується того ж принципу і використовує машинне навчання для покращення " +"своєї ефективності на основі успіхів і невдач великої кількості друків наших " +"користувачів. Ми навчаємо %s бути розумнішими, подаючи їм дані з реального " +"світу. Якщо ви готові, ця послуга буде мати доступ до інформації з вашого " +"журналу помилок і журналу використання, включаючи інформацію, описану в " +"Політиці конфіденційності. Ми не будемо збирати жодних Особистих даних, за " +"якими можна ідентифікувати особу безпосередньо чи опосередковано, включаючи, " +"але не обмежуючись, імена, адреси, інформацію про платежі або номери " +"телефонів. Увімкнувши цю службу, ви погоджуєтеся з цими умовами та заявою " +"про Політику конфіденційності." msgid "Statement on User Experience Improvement Plan" -msgstr "" +msgstr "Заява щодо Плану покращення користувацького досвіду" msgid "Log in successful." msgstr "Авторизація успішна." @@ -6857,7 +7582,7 @@ msgstr "" "моделіБез головної вежі. Ви хочете включити головну вежу?" msgid "Still print by object?" -msgstr "" +msgstr "Ви все ще друкуєте за об’єктом?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -6903,28 +7628,58 @@ msgid "" "precise dimensions or is part of an assembly, it's important to double-check " "whether this change in geometry impacts the functionality of your print." msgstr "" +"Увімкнення цієї опції змінить форму моделі. Якщо ваш друк вимагає точних " +"розмірів або є частиною збірки, важливо перевірити, чи не вплине зміна " +"геометрії на функціональність вашого друку." msgid "Are you sure you want to enable this option?" -msgstr "" +msgstr "Ви впевнені, що хочете ввімкнути цю опцію?" msgid "" "Layer height is too small.\n" "It will set to min_layer_height\n" msgstr "" +"Висота шару занадто мала.\n" +"Буде встановлено значення min_layer_height\n" msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " "height limits ,this may cause printing quality issues." msgstr "" +"Висота шару перевищує ліміт у Налаштуваннях принтера -> Екструдер -> Ліміти " +"висоти шару, це може призвести до проблем з якістю друку." msgid "Adjust to the set range automatically? \n" -msgstr "" +msgstr "Автоматично налаштувати на встановлений діапазон? \n" msgid "Adjust" -msgstr "" +msgstr "Налаштувати" msgid "Ignore" +msgstr "Ігнорувати" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." msgstr "" +"Експериментальна функція: Відведення та відрізання філаменту на більшій " +"відстані під час зміни філаменту для мінімізації промивання. Хоча це може " +"помітно зменшити промивання, це також може підвищити ризик засмічення сопла " +"або інших ускладнень друку." + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"Експериментальна функція: Відведення та відрізання філаменту на більшій " +"відстані під час зміни філаменту для мінімізації промивання. Хоча це може " +"помітно зменшити промивання, це також може підвищити ризик засмічення сопла " +"або інших ускладнень друку. Будь ласка, використовуйте з останнім " +"прошивковим забезпеченням принтера." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -6950,13 +7705,13 @@ msgid "Wall generator" msgstr "Генерація периметрів" msgid "Walls and surfaces" -msgstr "" +msgstr "Стінки та поверхні" msgid "Bridging" -msgstr "" +msgstr "Створення мостів" msgid "Overhangs" -msgstr "" +msgstr "Звисання" msgid "Walls" msgstr "Периметр" @@ -6986,7 +7741,7 @@ msgid "Bridge" msgstr "Міст" msgid "Set speed for external and internal bridges" -msgstr "" +msgstr "Встановіть швидкість для зовнішнього та внутрішнього мостів" msgid "Travel speed" msgstr "Швидкість переміщення" @@ -7004,7 +7759,10 @@ msgid "Support filament" msgstr "Філамент підтримки" msgid "Tree supports" -msgstr "" +msgstr "Органічні підтримки" + +msgid "Skirt" +msgstr "Плінтус" msgid "Prime tower" msgstr "Вежа Очищення" @@ -7064,7 +7822,7 @@ msgstr "" "відсутність установки" msgid "Print chamber temperature" -msgstr "" +msgstr "Температура в камері друку" msgid "Print temperature" msgstr "Температура друку" @@ -7097,13 +7855,16 @@ msgstr "" "Філамент не підтримує друк на інженерній пластині" msgid "Smooth PEI Plate / High Temp Plate" -msgstr "" +msgstr "Smooth PEI Plate / High Temp Plate" msgid "" "Bed temperature when Smooth PEI Plate/High temperature plate is installed. " "Value 0 means the filament does not support to print on the Smooth PEI Plate/" "High Temp Plate" msgstr "" +"Температура столу, коли встановлена Smooth PEI Plate/High Temp Plate. " +"Значення 0 означає, що філамент не підтримує друк на Smooth PEI Plate/High " +"Temp Plate" msgid "Textured PEI Plate" msgstr "Текстурована пластина PEI" @@ -7156,13 +7917,13 @@ msgid "Auxiliary part cooling fan" msgstr "Вентилятор охолодження допоміжних деталей" msgid "Exhaust fan" -msgstr "" +msgstr "Витяжний вентилятор" msgid "During print" -msgstr "" +msgstr "Під час друку" msgid "Complete print" -msgstr "" +msgstr "Завершити друк" msgid "Filament start G-code" msgstr "G-код початку філаменту" @@ -7171,23 +7932,31 @@ msgid "Filament end G-code" msgstr "G-код кінця філаменту" msgid "Multimaterial" -msgstr "" +msgstr "Мультиматеріал" msgid "Wipe tower parameters" -msgstr "" +msgstr "Параметри вежі витирання" msgid "Toolchange parameters with single extruder MM printers" -msgstr "" +msgstr "Параметри зміни інструменту в одно-екструдерному ММ-принтері" msgid "Ramming settings" -msgstr "" +msgstr "Налаштування раммінгу" msgid "Toolchange parameters with multi extruder MM printers" -msgstr "" +msgstr "Параметри заміни інструменту в багатоекструдерних MM-принтерах" msgid "Printable space" msgstr "Місце для друку" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "Охолоджуючий вентилятор" @@ -7198,7 +7967,7 @@ msgid "Extruder Clearance" msgstr "Очищення екструдера" msgid "Adaptive bed mesh" -msgstr "" +msgstr "Адаптивна сітка стола" msgid "Accessory" msgstr "Аксесуари" @@ -7213,7 +7982,7 @@ msgid "Machine end G-code" msgstr "Кінцевий G-code" msgid "Printing by object G-code" -msgstr "" +msgstr "Друк за об’єктом за допомогою G-коду" msgid "Before layer change G-code" msgstr "G-code перед зміною шару" @@ -7222,13 +7991,13 @@ msgid "Layer change G-code" msgstr "G-code Зміни шару" msgid "Time lapse G-code" -msgstr "" +msgstr "G-код для часової зйомки" msgid "Change filament G-code" msgstr "G-code Зміни філаменту" msgid "Change extrusion role G-code" -msgstr "" +msgstr "Змінити роль екструзії G-код" msgid "Pause G-code" msgstr "G-code Паузи" @@ -7252,19 +8021,19 @@ msgid "Jerk limitation" msgstr "Обмеження ривка" msgid "Single extruder multimaterial setup" -msgstr "" +msgstr "Установка для роботи з декількома матеріалами на одному екструдері" msgid "Wipe tower" -msgstr "" +msgstr "Вежа витирання" msgid "Single extruder multimaterial parameters" -msgstr "" +msgstr "Параметри екструдеру в багато-екструдерному принтері" msgid "Layer height limits" msgstr "Обмеження висоти шару" msgid "Lift Z Enforcement" -msgstr "" +msgstr "Забезпечення стрибків Z" msgid "Retraction when switching material" msgstr "Втягування під час перемикання матеріалу" @@ -7289,15 +8058,19 @@ msgid "" "%d Filament Preset and %d Process Preset is attached to this printer. Those " "presets would be deleted if the printer is deleted." msgstr "" +"За цим принтером прикріплено %d налаштувань філаменту та %d налаштувань " +"процесу. Ці налаштування будуть видалені, якщо принтер буде видалено." msgid "Presets inherited by other presets can not be deleted!" msgstr "" +"Налаштування, які успадковуються іншими налаштуваннями, не можуть бути " +"видалені!" msgid "The following presets inherit this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Профіль вказаний нижче, успадковується від поточного профілю." +msgstr[1] "Профілі вказані нижче, успадковуються від поточного профілю." +msgstr[2] "Профілі вказані нижче, успадковуються від поточного профілю." #. TRN Remove/Delete #, boost-format @@ -7315,6 +8088,9 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, " "please reset the filament information for that slot." msgstr "" +"Ви впевнені, що хочете видалити вибраний пресет?\n" +"Якщо пресет відповідає філаменту, який в даний момент використовується на " +"вашому принтері, будь ласка, скиньте інформацію про філамент для цього слоту." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7417,23 +8193,36 @@ msgstr "" "вонамістить такі незбережені зміни:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "" -"Ви змінили деякі налаштування попередньої установки \"%1%\". \n" -"Зберегти ці змінені налаштування (нове значення) після перемикання Набір " -"параметрів?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Ви змінили деякі налаштування пресету “%1%”. " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can save or discard the preset values you have modified." msgstr "" -"Ви змінили деякі налаштування передустановки. \n" -"Зберегти ці змінені налаштування (нове значення) після перемикання Набір " -"параметрів?" +"\n" +"Ви можете зберегти або відхилити змінені значення пресету." + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" +"\n" +"Ви можете зберегти або відкинути змінені значення пресетів, або перенести " +"змінені значення до нового пресету." + +msgid "You have previously modified your settings." +msgstr "Ви раніше змінювали свої налаштування." + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" +"\n" +"Ви можете відкинути попередньо встановлені значення, які ви змінили, або " +"перенести змінені значення до нового проекту" msgid "Extruders count" msgstr "Кількість екструдерів" @@ -7453,20 +8242,27 @@ msgstr "Виберіть налаштування для порівняння" msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" +"Ви можете перейти до поточного активного профілю лише тому, що він був " +"змінений." msgid "" "Transfer the selected options from left preset to the right.\n" "Note: New modified presets will be selected in settings tabs after close " "this dialog." msgstr "" +"Перенесіть вибрані параметри з лівого пресета до правого.\n" +"Примітка: Після закриття цього діалогового вікна у вкладках налаштувань буде " +"обрано нові змінені пресети." msgid "Transfer values from left to right" -msgstr "" +msgstr "Перенесення значень зліва направо" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" +"Якщо увімкнено, цей діалог можна використовувати для перенесення вибраних " +"значень зліва направо." msgid "Add File" msgstr "Додати файл" @@ -7545,8 +8341,62 @@ msgstr "Оновлення відсутні." msgid "The configuration is up to date." msgstr "Конфігурація є актуальною." -msgid "Ramming customization" +msgid "Obj file Import color" +msgstr "Імпорт кольору файлу OBJ" + +msgid "Specify number of colors:" +msgstr "Вкажіть кількість кольорів:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "Кількість кольорів повинна бути в діапазоні [%d, %d]." + +msgid "Recommended " +msgstr "Рекомендовано " + +msgid "Current filament colors:" +msgstr "Поточні кольори філаменту:" + +msgid "Quick set:" +msgstr "Швидке встановлення:" + +msgid "Color match" +msgstr "Відповідність кольору" + +msgid "Approximate color matching." +msgstr "Приблизне відповідання кольору." + +msgid "Append" +msgstr "Додати" + +msgid "Add consumable extruder after existing extruders." +msgstr "Додати споживчий екструдер після існуючих екструдерів." + +msgid "Reset mapped extruders." +msgstr "Скинути відображені екструдери." + +msgid "Cluster colors" +msgstr "Згрупувати кольори" + +msgid "Map Filament" +msgstr "Відображення філаменту" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." msgstr "" +"Примітка: Колір вже вибрано. Ви можете вибрати ОК \n" +" щоб продовжити або вручну відкоригувати його." + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"Попередження: Кількість новостворених та \n" +" поточних екструдерів перевищує 16." + +msgid "Ramming customization" +msgstr "Налаштування раммінгу" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" @@ -7559,27 +8409,36 @@ msgid "" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." msgstr "" +"Раммінг означає швидке екструдування безпосередньо перед заміною інструменту " +"в одно-екструдерному принтері ММ. Його мета полягає у правильній формі кінця " +"виведеного філаменту, щоб вона не заважала вставці нового філаменту і може " +"бути знову встановлений пізніше. Ця фаза є важливою, і різні матеріали " +"можуть вимагати різної швидкості екструзії для отримання гарної форми. З " +"цієї причини швидкість екструдування під час раммінгу регулюється.\n" +"\n" +"Це налаштування на рівні експерта, неправильне регулювання, ймовірно, " +"призведе до заклинювання, подрібнення екструдерного колеса до філаменту тощо." msgid "Total ramming time" -msgstr "" +msgstr "Загальний час швидкої екструзії" msgid "s" msgstr "c" msgid "Total rammed volume" -msgstr "" +msgstr "Загальний обсяг швидкої екструзії" msgid "Ramming line width" -msgstr "" +msgstr "Ширина ліній раммінгу" msgid "Ramming line spacing" -msgstr "" +msgstr "Проміжки між лініями раммінгу" msgid "Auto-Calc" msgstr "Автокалькулятор" msgid "Re-calculate" -msgstr "" +msgstr "Перерахувати" msgid "Flushing volumes for filament change" msgstr "Обсяги промивання для зміни Філаменту" @@ -7588,6 +8447,9 @@ msgid "" "Orca would re-calculate your flushing volumes everytime the filaments color " "changed. You could disable the auto-calculate in Orca Slicer > Preferences" msgstr "" +"Orca буде перераховувати об'єми видавлювання нитки кожного разу, коли колір " +"ниток змінюється. Ви можете вимкнути автоматичний розрахунок у меню Orca " +"Slicer > Параметри" msgid "Flushing volume (mm³) for each filament pair." msgstr "Об'єм промивки (мм³) для кожної пари Філаменту." @@ -7618,12 +8480,38 @@ msgstr "Від" msgid "To" msgstr "В" -msgid "Bambu Network plug-in not detected." +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" msgstr "" -msgid "Click here to download it." +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" msgstr "" +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + +msgid "Bambu Network plug-in not detected." +msgstr "Плагін мережі Bambu не виявлено." + +msgid "Click here to download it." +msgstr "Натисніть тут, щоб завантажити його." + msgid "Login" msgstr "Логін" @@ -7655,7 +8543,7 @@ msgid "Show/Hide 3Dconnexion devices settings dialog" msgstr "Показати/приховати діалог налаштувань пристроїв 3Dconnexion" msgid "Switch table page" -msgstr "" +msgstr "Перемкнути сторінку таблиці" msgid "Show keyboard shortcuts list" msgstr "Показати список клавіш" @@ -7808,13 +8696,13 @@ msgid "Gizmo FDM paint-on seam" msgstr "Швид, що фарбується Gizmo FDM" msgid "Gizmo Text emboss / engrave" -msgstr "" +msgstr "Gizmo Текстове тиснення / гравіювання" msgid "Zoom in" -msgstr "" +msgstr "Приблизити" msgid "Zoom out" -msgstr "" +msgstr "Віддалити" msgid "Switch between Prepare/Preview" msgstr "Переключення між Підготовка/Попередній перегляд" @@ -7888,6 +8776,12 @@ msgstr "Переміщення повзунка в 5 разів швидше" msgid "Shift+Mouse wheel" msgstr "Shift+колесо миші" +msgid "Horizontal slider - Move to start position" +msgstr "Горизонтальний повзунок - Перемістити в початкове положення" + +msgid "Horizontal slider - Move to last position" +msgstr "Горизонтальний повзунок - Перемістити в останню позицію" + msgid "Release Note" msgstr "Примітка до випуску" @@ -7901,22 +8795,60 @@ msgstr "Оновлення мережевого плагіна" msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." msgstr "" +"Натисніть OK, щоб оновити мережевий плагін під час наступного запуску Orca " +"Slicer." #, 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 "" +msgstr "Нова версія Orca Slicer" msgid "Skip this Version" -msgstr "" +msgstr "Пропустити цю версію" msgid "Done" msgstr "Виконано" +msgid "resume" +msgstr "продовжити" + +msgid "Resume Printing" +msgstr "Відновити друк" + +msgid "Resume Printing(defects acceptable)" +msgstr "Відновлення друку (прийнятно дефекти)" + +msgid "Resume Printing(problem solved)" +msgstr "Відновлення друку (проблема вирішена)" + +msgid "Stop Printing" +msgstr "Зупинити друк" + +msgid "Check Assistant" +msgstr "Перевірка помічника" + +msgid "Filament Extruded, Continue" +msgstr "Філамент витиснутий, Продовжити" + +msgid "Not Extruded Yet, Retry" +msgstr "Ще не витиснуто філамент, Повторити" + +msgid "Finished, Continue" +msgstr "Завершено, Продовжити" + +msgid "Load Filament" +msgstr "Завантажте філамент" + +msgid "Filament Loaded, Resume" +msgstr "Філамент завантажений, Відновити" + +msgid "View Liveview" +msgstr "Перегляд в реальному часі" + msgid "Confirm and Update Nozzle" -msgstr "" +msgstr "Підтвердити і оновити сопло" msgid "LAN Connection Failed (Sending print file)" msgstr "Помилка з’єднання LAN (Надсилання файлу друку)" @@ -7924,6 +8856,8 @@ msgstr "Помилка з’єднання LAN (Надсилання файлу msgid "" "Step 1, please confirm Orca Slicer and your printer are in the same LAN." msgstr "" +"Крок 1: Переконайтеся, що Orca Slicer і ваш принтер знаходяться в одній " +"локальній мережі." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " @@ -7944,20 +8878,23 @@ msgstr "Де знайти IP-адресу та код доступу вашог msgid "Step 3: Ping the IP address to check for packet loss and latency." msgstr "" +"Крок 3: Виконайте пінг до IP-адреси для перевірки втрат пакетів та затримки." msgid "Test" msgstr "Тест" msgid "IP and Access Code Verified! You may close the window" -msgstr "" +msgstr "IP-адреса та доступний код перевірено! Ви можете закрити вікно" msgid "Connection failed, please double check IP and Access Code" -msgstr "" +msgstr "З’єднання не вдалося, будь ласка, перевірте IP-адресу та доступний код" msgid "" "Connection failed! If your IP and Access Code is correct, \n" "please move to step 3 for troubleshooting network issues" msgstr "" +"З’єднання не вдалося! Якщо ваша IP-адреса та доступний код вірні, \n" +"перейдіть до кроку 3 для вирішення проблем з мережею" msgid "Model:" msgstr "Модель:" @@ -7971,14 +8908,8 @@ msgstr "Версія:" msgid "Update firmware" msgstr "Оновити прошивку" -msgid "Printing" -msgstr "Друк" - -msgid "Idle" -msgstr "Холостий хід" - msgid "Beta version" -msgstr "" +msgstr "Бета-версія" msgid "Latest version" msgstr "Остання версія" @@ -8011,7 +8942,7 @@ 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." +"update next time starting Orca." msgstr "" "Версія прошивки незвичайна. Потрібно виправити та оновити перед друком. Ви " "хочете оновити зараз? Ви також можете оновити пізніше на принтері або " @@ -8076,10 +9007,10 @@ msgid "Need to check the unsaved changes before configuration updates." msgstr "Необхідність перевірки незбережених змін перед оновленнямконфігурації." msgid "Configuration package: " -msgstr "" +msgstr "Пакет конфігурації: " msgid " updated to " -msgstr "" +msgstr " оновлено до " msgid "Open G-code file:" msgstr "Відкрийте файл G-коду:" @@ -8147,14 +9078,11 @@ msgid "Bottom surface" msgstr "Нижня поверхня" msgid "Internal Bridge" -msgstr "" +msgstr "Внутрішній міст" msgid "Gap infill" msgstr "Заповнення пропусків" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "Інтерфейс підтримки" @@ -8173,6 +9101,8 @@ msgid "" "Invalid spacing supplied to Flow::with_spacing(), check your layer height " "and extrusion width" msgstr "" +"Неправильний інтервал, переданий до Flow::with_spacing(), перевірте висоту " +"шару та ширину екструзії" msgid "undefined error" msgstr "невизначена помилка" @@ -8334,40 +9264,52 @@ msgstr "" #, boost-format msgid "The object %1% exceeds the maximum build volume height." -msgstr "" +msgstr "Об'єкт %1% перевищує максимальну висоту об'єму друку." #, boost-format msgid "" "While the object %1% itself fits the build volume, its last layer exceeds " "the maximum build volume height." msgstr "" +"Хоча сам об'єкт %1% вписується в об'єм збірки, його останній шар перевищує " +"максимальну висоту об'єму друку." msgid "" "You might want to reduce the size of your model or change current print " "settings and retry." msgstr "" +"Можливо, ви захочете зменшити розмір моделі або змінити поточні налаштування " +"друку і спробувати ще раз." msgid "Variable layer height is not supported with Organic supports." -msgstr "" +msgstr "Змінна висота шару не підтримується з органічними підтримками." msgid "" "Different nozzle diameters and different filament diameters is not allowed " "when prime tower is enabled." msgstr "" +"Використання різних діаметрів насадок та різних діаметрів філаментів не " +"допускається, коли увімкнено вежу підготовки." msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" +"Вежа протирання в даний момент підтримується лише з використанням відносної " +"адресації екструдера (use_relative_e_distances=1)." msgid "" "Ooze prevention is currently not supported with the prime tower enabled." msgstr "" +"Запобігання витокам в даний момент не підтримується з увімкненою вежею " +"підготовки." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" +"Вежа підготовки в даний момент підтримується лише для кодів Marlin, RepRap/" +"Sprinter, RepRapFirmware і Repetier G-code." msgid "The prime tower is not supported in \"By object\" print." msgstr "Під час друку \"По об'єкту\" праймер не підтримується." @@ -8420,16 +9362,22 @@ msgid "" "Organic support tree tip diameter must not be smaller than support material " "extrusion width." msgstr "" +"Діаметр наконечника органічного опорного дерева не повинен бути меншим за " +"ширину екструзії опорного матеріалу." msgid "" "Organic support branch diameter must not be smaller than 2x support material " "extrusion width." msgstr "" +"Діаметр гілки органічної опори не повинен бути меншим за 2x ширину екструзії " +"опорного матеріалу." msgid "" "Organic support branch diameter must not be smaller than support tree tip " "diameter." msgstr "" +"Діаметр органічної опорної гілки не повинен бути меншим за діаметр верхівки " +"опорного дерева." msgid "" "Support enforcers are used but support is not enabled. Please enable support." @@ -8445,16 +9393,23 @@ msgid "" "each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" +"Відносна адресація екструдера вимагає скидання позиції екструдера на кожному " +"шарі, щоб запобігти втраті точності обчислень з плаваючою комою. Додайте " +"\"G92 E0\" до layer_gcode." msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" +"У before_layer_gcode знайдено \"G92 E0\", що несумісне з абсолютною " +"адресацією екструдера." msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." msgstr "" +"У layer_gcode знайдено \"G92 E0\", що несумісне з абсолютною адресацією " +"екструдера." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" @@ -8463,6 +9418,8 @@ msgstr "Плита %d: %s не підтримує філамент %s" msgid "" "Setting the jerk speed too low could lead to artifacts on curved surfaces" msgstr "" +"Занадто низька швидкість ривка може призвести до артефактів на вигнутих " +"поверхнях" msgid "" "The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/" @@ -8472,6 +9429,12 @@ msgid "" "You can adjust the maximum jerk setting in your printer's configuration to " "get higher speeds." msgstr "" +"Налаштування ривка перевищує максимальний ривок принтера (machine_max_jerk_x/" +"machine_max_jerk_y).\n" +"Orca автоматично обмежує швидкість ривка, щоб вона не перевищувала " +"можливості принтера.\n" +"Ви можете змінити налаштування максимального ривка у конфігурації принтера, " +"щоб отримати вищу швидкість." msgid "" "The acceleration setting exceeds the printer's maximum acceleration " @@ -8481,6 +9444,12 @@ msgid "" "You can adjust the machine_max_acceleration_extruding value in your " "printer's configuration to get higher speeds." msgstr "" +"Налаштування прискорення перевищує максимальне прискорення принтера " +"(machine_max_acceleration_extruding).\n" +"Orca автоматично обмежує швидкість прискорення, щоб вона не перевищувала " +"можливості принтера.\n" +"Ви можете змінити значення machine_max_acceleration_extruding у конфігурації " +"принтера, щоб отримати вищу швидкість." msgid "" "The travel acceleration setting exceeds the printer's maximum travel " @@ -8490,6 +9459,12 @@ msgid "" "You can adjust the machine_max_acceleration_travel value in your printer's " "configuration to get higher speeds." msgstr "" +"Налаштування прискорення руху перевищує максимальне прискорення руху " +"принтера (machine_max_acceleration_travel).\n" +"Orca автоматично обмежує швидкість прискорення руху, щоб вона не " +"перевищувала можливості принтера.\n" +"Ви можете змінити значення machine_max_acceleration_travel у конфігурації " +"принтера, щоб отримати вищу швидкість." msgid "Generating skirt & brim" msgstr "Створення спідниці та кайми" @@ -8534,7 +9509,7 @@ msgid "" msgstr "Усадка початкового шару на столі для компенсації ефекту слонової ноги" msgid "Elephant foot compensation layers" -msgstr "" +msgstr "Шари компенсації слонячої стопи" msgid "" "The number of layers on which the elephant foot compensation will be active. " @@ -8542,6 +9517,9 @@ msgid "" "the next layers will be linearly shrunk less, up to the layer indicated by " "this value." msgstr "" +"Кількість шарів, на яких буде активна компенсація \"слонової стопи\". Перший " +"шар буде стиснуто на значення компенсації \"слонової стопи\", наступні шари " +"будуть лінійно стискатися менше, аж до шару, вказаного цим значенням." msgid "layers" msgstr "шари" @@ -8560,19 +9538,19 @@ msgid "Maximum printable height which is limited by mechanism of printer" msgstr "Максимальна висота друку, яка обмежена механізмом принтера" msgid "Preferred orientation" -msgstr "" +msgstr "Бажана орієнтація" msgid "Automatically orient stls on the Z-axis upon initial import" -msgstr "" +msgstr "Автоматичне орієнтування stl за віссю Z під час першого імпорту" msgid "Printer preset names" msgstr "Імена налаштувань принтера" msgid "Use 3rd-party print host" -msgstr "" +msgstr "Використовувати сторонній хост для друку" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" -msgstr "" +msgstr "Дозволяє керувати принтером BambuLab через сторонні хости друку" msgid "Hostname, IP or URL" msgstr "Ім'я хоста, IP або URL" @@ -8759,7 +9737,16 @@ msgid "Engineering Plate" msgstr "Інженерна пластина" msgid "First layer print sequence" -msgstr "" +msgstr "Послідовність друку першого шару" + +msgid "Other layers print sequence" +msgstr "Послідовність друку інших шарів" + +msgid "The number of other layers print sequence" +msgstr "Кількість шарів для друку в іншій послідовності" + +msgid "Other layers filament sequence" +msgstr "Послідовність філаменту для інших шарів" msgid "This G-code is inserted at every layer change before lifting z" msgstr "Типи ліжок, які підтримує принтер" @@ -8793,7 +9780,7 @@ msgstr "" "нижньої оболонки" msgid "Apply gap fill" -msgstr "" +msgstr "Заповнення проміжків" msgid "" "Enables gap fill for the selected surfaces. The minimum gap length that will " @@ -8805,15 +9792,25 @@ msgid "" "only\n" "3. Nowhere: Disables gap fill\n" msgstr "" +"Вмикає заповнення проміжків для вибраних поверхонь. Мінімальну довжину " +"проміжку, який буде заповнено, можна контролювати за допомогою опції " +"\"Відфільтрувати крихітні проміжки\" нижче.\n" +"\n" +"Параметри:\n" +"1. Скрізь: Застосовує заповнення проміжків до верхньої, нижньої та " +"внутрішніх суцільних поверхонь\n" +"2. Верхня та нижня поверхні: Застосовує заповнення лише до верхньої та " +"нижньої поверхонь\n" +"3. Ніде: Вимикає заповнення проміжків\n" msgid "Everywhere" -msgstr "" +msgstr "Всюди" msgid "Top and bottom surfaces" -msgstr "" +msgstr "Верхня та нижня поверхні" msgid "Nowhere" -msgstr "" +msgstr "Ніде" msgid "Force cooling for overhang and bridge" msgstr "Силове охолодження для звису та мосту" @@ -8884,13 +9881,16 @@ msgstr "" "матеріалу для мосту, щоб покращити провисання" msgid "Internal bridge flow ratio" -msgstr "" +msgstr "Коефіцієнт потоку для внутрішніх мостів" msgid "" "This value governs the thickness of the internal bridge layer. This is the " "first layer over sparse infill. Decrease this value slightly (for example " "0.9) to improve surface quality over sparse infill." msgstr "" +"Це значення визначає товщину внутрішнього мостовидного шару. Це перший шар " +"над внутрішнім заповненням. Зменшіть це значення (наприклад, до 0,9), щоб " +"покращити якість поверхні над внутрішнім заповненням." msgid "Top surface flow ratio" msgstr "Коефіцієнт потоку верхньої поверхні" @@ -8920,6 +9920,10 @@ msgid "" "Note: This setting will only take effect if the wall sequence is configured " "to Inner-Outer" msgstr "" +"Підвищуйте точність оболонки, регулюючи відстань між зовнішніми стінками. Це " +"також покращує консистенцію шару.\n" +"Примітка: Цей параметр набуде чинності, лише якщо послідовність стінок " +"налаштовано як Внутрішня-зовнішня" msgid "Only one wall on top surfaces" msgstr "Тільки один периметр на верхніх поверхнях" @@ -8932,7 +9936,7 @@ msgstr "" "більше місця для верхнього масиву заповнення" msgid "One wall threshold" -msgstr "" +msgstr "Поріг в одну стіну" #, no-c-format, no-boost-format msgid "" @@ -8945,6 +9949,14 @@ msgid "" "on the next layer, like letters. Set this setting to 0 to remove these " "artifacts." msgstr "" +"Якщо потрібно надрукувати верхню поверхню, яка частково закрита іншим шаром, " +"вона не буде врахована у верхньому шарі, де її ширина менша за це значення. " +"Це може бути корисним для того, щоб не дозволити спрацьовуванню ефекту " +"\"один периметр зверху\" на поверхні, яка має бути покрита лише периметрами. " +"Це значення може бути в мм або у % ширини екструзії периметра.\n" +"Попередження: Якщо цей параметр увімкнено, можуть створюватися артефакти, " +"якщо на наступному шарі є якісь тонкі об'єкти, наприклад, літери. Встановіть " +"цей параметр на 0, щоб усунути ці артефакти." msgid "Only one wall on first layer" msgstr "Тільки один периметр на першому шарі" @@ -8957,18 +9969,20 @@ msgstr "" "для нижнього зразка заповнення" msgid "Extra perimeters on overhangs" -msgstr "" +msgstr "Додаткові периметри на звисах" msgid "" "Create additional perimeter paths over steep overhangs and areas where " "bridges cannot be anchored. " msgstr "" +"Створіть додаткові лінії друку по периметру над крутими виступами та " +"ділянками, де неможливо закріпити мости. " msgid "Reverse on odd" -msgstr "" +msgstr "Реверс на непарних периметрах" msgid "Overhang reversal" -msgstr "" +msgstr "Реверс звису" msgid "" "Extrude perimeters that have a part over an overhang in the reverse " @@ -8978,9 +9992,14 @@ msgid "" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." msgstr "" +"Екструдуйте периметри, які мають деталі над звисом, у зворотному напрямку на " +"непарних шарах. Таке чергування шаблонів може значно покращити круті звиси.\n" +"\n" +"Це налаштування також може допомогти зменшити деформацію деталі завдяки " +"зменшенню напружень у стінках деталі." msgid "Reverse only internal perimeters" -msgstr "" +msgstr "Реверс тільки внутрішніх периметрах" msgid "" "Apply the reverse perimeters logic only on internal perimeters. \n" @@ -8996,9 +10015,21 @@ msgid "" "Reverse Threshold to 0 so that all internal walls print in alternating " "directions on odd layers irrespective of their overhang degree." msgstr "" +"Застосовуйте логіку зворотних периметрів тільки до внутрішніх периметрів. \n" +"\n" +"Це налаштування значно зменшує напруження деталі, оскільки вони " +"розподіляються в різних напрямках. Це повинно зменшити викривлення деталі, " +"зберігаючи при цьому якість зовнішньої стінки. Ця функція може бути дуже " +"корисною для матеріалів, схильних до деформації, таких як ABS/ASA, а також " +"для еластичних ниток, таких як TPU і Silk PLA. Вона також може допомогти " +"зменшити деформацію на пливучих ділянках над опорами.\n" +"\n" +"Щоб це налаштування було найефективнішим, рекомендується встановити Поріг " +"реверсу на 0, щоб усі внутрішні стінки друкувалися в поперемінному напрямку " +"на непарних шарах незалежно від ступеня їхнього вильоту." msgid "Bridge counterbore holes" -msgstr "" +msgstr "Отвори для мостових стійок" msgid "" "This option creates bridges for counterbore holes, allowing them to be " @@ -9007,18 +10038,23 @@ msgid "" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." msgstr "" +"Ця опція створює перемички для зенкованих отворів, що дозволяє друкувати їх " +"без підтримки. Доступні наступні режими\n" +"1. Ніякий: Перемичка не створюється.\n" +"2. Частково з мостом: Буде перекрита лише частина непідтримуваної ділянки.\n" +"3. Жертвенний шар: Створюється повний шар мостового перекриття." msgid "Partially bridged" -msgstr "" +msgstr "Частково перекрито" msgid "Sacrificial layer" -msgstr "" +msgstr "Жертовний пласт" msgid "Reverse threshold" -msgstr "" +msgstr "Зворотний поріг" msgid "Overhang reversal threshold" -msgstr "" +msgstr "Поріг розвороту звису" #, no-c-format, no-boost-format msgid "" @@ -9026,6 +10062,9 @@ msgid "" "useful. Can be a % of the perimeter width.\n" "Value 0 enables reversal on every odd layers regardless." msgstr "" +"Кількість мм вильоту, який повинен бути для того, щоб розворот вважався " +"корисним. Може бути % від ширини периметра.\n" +"Значення 0 вмикає розворот на всіх непарних шарах незалежно від цього." msgid "Classic mode" msgstr "Класичний режим" @@ -9041,18 +10080,20 @@ msgstr "" "Увімкнути цей параметр для уповільнення друку при різних ступенях звису" msgid "Slow down for curled perimeters" -msgstr "" +msgstr "Уповільнення для нависаючих периметрів" msgid "" "Enable this option to slow printing down in areas where potential curled " "perimeters may exist" msgstr "" +"Увімкніть цей параметр, щоб сповільнити друк у зонах, де можуть існувати " +"потенційно нависаючі периметри" msgid "mm/s or %" msgstr "мм/с або %" msgid "External" -msgstr "" +msgstr "Зовнішні" msgid "Speed of bridge and completely overhang wall" msgstr "Швидкість мосту і периметр, що повністю звисає" @@ -9061,12 +10102,14 @@ msgid "mm/s" msgstr "мм/с" msgid "Internal" -msgstr "" +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 "" +"Швидкість внутрішнього мосту. Якщо значення виражено у відсотках, воно буде " +"розраховано на основі bridge_speed. Значення за замовчуванням - 150%." msgid "Brim width" msgstr "Ширина кайми" @@ -9095,28 +10138,34 @@ msgstr "" "кайми" msgid "Brim ears" -msgstr "" +msgstr "Кайма вушка" msgid "Only draw brim over the sharp edges of the model." -msgstr "" +msgstr "Робить кайму вушка лише на гострих краях моделі." msgid "Brim ear max angle" -msgstr "" +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 "" +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 "Сумісна машина" @@ -9143,13 +10192,13 @@ msgid "By object" msgstr "По об'єкту" msgid "Intra-layer order" -msgstr "" +msgstr "Внутрішній порядок шарів" msgid "Print order within a single layer" -msgstr "" +msgstr "Друк замовлення в один шар" msgid "As object list" -msgstr "" +msgstr "Як перелік об'єктів" msgid "Slow printing down for better layer cooling" msgstr "Повільний друк для кращого охолодження шару" @@ -9191,10 +10240,11 @@ msgid "Default process profile when switch to this machine profile" msgstr "Профіль за промовчанням при перемиканні на цей профіль машини" msgid "Activate air filtration" -msgstr "" +msgstr "Активувати повітряну фільтрацію" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" msgstr "" +"Активуйте для кращої фільтрації повітря. Команда G-коду: M106 P3 S(0-255)" msgid "Fan speed" msgstr "Швидкість вентилятора" @@ -9203,9 +10253,11 @@ msgid "" "Speed of exhaust fan during printing.This speed will overwrite the speed in " "filament custom gcode" msgstr "" +"Швидкість вентилятора відсмоктування під час друку. Ця швидкість перезапише " +"швидкість у користувацькому G-коді філаменту" msgid "Speed of exhaust fan after printing completes" -msgstr "" +msgstr "Швидкість витяжного вентилятора після завершення друку" msgid "No cooling for the first" msgstr "Немає охолодження для першого шару" @@ -9241,16 +10293,19 @@ msgstr "" "виглядають краще,Але надійні лише для більш коротких мостових відстаней." msgid "Thick internal bridges" -msgstr "" +msgstr "Товсті внутрішні мости" msgid "" "If enabled, thick internal bridges will be used. It's usually recommended to " "have this feature turned on. However, consider turning it off if you are " "using large nozzles." msgstr "" +"Якщо увімкнено, будуть використовуватися товсті внутрішні мости. Зазвичай " +"рекомендується вмикати цю функцію. Однак, якщо ви використовуєте великі " +"сопла, краще вимкнути її." msgid "Don't filter out small internal bridges (beta)" -msgstr "" +msgstr "Не відфільтровувати маленькі внутрішні мости (бета)" msgid "" "This option can help reducing pillowing on top surfaces in heavily slanted " @@ -9280,15 +10335,44 @@ msgid "" "overhang. This option is useful for heavily slanted top surface models. " "However, in most cases it creates too many unecessary bridges." msgstr "" +"Ця опція може допомогти зменшити подушку на верхніх поверхнях у сильно " +"нахилених або вигнутих моделях.\n" +"\n" +"За замовчуванням невеликі внутрішні містки відфільтровуються, а внутрішня " +"суцільна заливка друкується безпосередньо поверх внутрішнього заповнення. У " +"більшості випадків це добре працює, прискорюючи друк без надто великого " +"компромісу з якістю верхньої поверхні.\n" +"\n" +"Однак у сильно нахилених або вигнутих моделях, особливо якщо " +"використовується надто низька щільність внутрішнього заповнення, це може " +"призвести до скручування непідтримуваного суцільного заповнення, що " +"спричиняє \"подушку\".\n" +"\n" +"Увімкнення цього параметра призведе до друку внутрішнього мостового шару над " +"злегка непідтримуваним внутрішнім суцільним заповненням. Наведені нижче " +"опції контролюють кількість фільтрації, тобто кількість створених внутрішніх " +"мостів.\n" +"\n" +"Вимкнено - вимикає цей параметр. Це поведінка за замовчуванням, яка добре " +"працює у більшості випадків.\n" +"\n" +"Обмежена фільтрація - створює внутрішні мости на сильно нахилених поверхнях, " +"уникаючи створення зайвих проміжних мостів. Це добре працює для більшості " +"складних моделей.\n" +"\n" +"Без фільтрації - створює внутрішні мости на кожному потенційному " +"внутрішньому виступі. Цей параметр корисний для моделей з сильно нахиленою " +"верхньою поверхнею. Однак, у більшості випадків він створює занадто багато " +"непотрібних перемичок." msgid "Disabled" -msgstr "" +msgstr "Вимкнено" msgid "Limited filtering" -msgstr "" +msgstr "Обмежена фільтрація" msgid "No filtering" -msgstr "" +msgstr "Без фільтрації" msgid "Max bridge length" msgstr "Максимальна довжина мосту" @@ -9309,12 +10393,14 @@ msgid "End G-code when finish the whole printing" msgstr "Завершальний G-code, коли закінчити весь друк" msgid "Between Object Gcode" -msgstr "" +msgstr "Між G-кодами об’єктів" msgid "" "Insert Gcode between objects. This parameter will only come into effect when " "you print your models object by object" msgstr "" +"Вставити G-код між об’єктами. Цей параметр буде врахований лише тоді, коли " +"ви друкуєте свої моделі по об’єктах" msgid "End G-code when finish the printing of this filament" msgstr "Завершальний G-code, коли закінчите друк цієї нитки" @@ -9332,12 +10418,20 @@ msgid "" "All: Add solid infill for all suitable sloping surfaces\n" "Default value is All." msgstr "" +"Додайте суцільне заповнення біля похилих поверхонь, щоб гарантувати " +"вертикальну товщину оболонки (верхній+нижній суцільні шари)\n" +"Ні: Ніде не буде додано жодного твердого заповнювача. Увага: Обережно " +"використовуйте цю опцію, якщо ваша модель має похилі поверхні\n" +"Тільки критично: Уникайте додавання суцільної заливки для стін\n" +"Помірно: Додавати суцільну заливку лише для сильно нахилених поверхонь\n" +"Усі: Додати суцільну заливку для всіх придатних похилих поверхонь\n" +"Значення за замовчуванням - Усі." msgid "Critical Only" -msgstr "" +msgstr "Тільки критично" msgid "Moderate" -msgstr "" +msgstr "Помірно" msgid "Top surface pattern" msgstr "Малюнок верхньої поверхні" @@ -9364,7 +10458,7 @@ msgid "Hilbert Curve" msgstr "Крива Гільберта" msgid "Archimedean Chords" -msgstr "Хорди архімеду" +msgstr "Хорди Архімеда" msgid "Octagram Spiral" msgstr "Спіральна октограма" @@ -9376,17 +10470,22 @@ msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "Малюнок заповнення нижньої поверхні, а не заповнення мосту" msgid "Internal solid infill pattern" -msgstr "" +msgstr "Внутрішній малюнок заповнення суцільними шарами" msgid "" "Line pattern of internal solid infill. if the detect narrow internal solid " "infill be enabled, the concentric pattern will be used for the small area." msgstr "" +"Лінійний шаблон внутрішньої суцільної заливки. якщо увімкнено функцію " +"виявлення вузької внутрішньої суцільної заливки, для невеликих ділянок буде " +"використано концентричний шаблон." msgid "" "Line width of outer wall. If expressed as a %, it will be computed over the " "nozzle diameter." msgstr "" +"Ширина лінії зовнішньої стінки. Якщо виражена у %, буде розрахована по " +"діаметру сопла." msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " @@ -9421,7 +10520,7 @@ msgstr "" "замовчуванням - 0 мм" msgid "Walls printing order" -msgstr "" +msgstr "Послідовність друку стінок" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" @@ -9447,24 +10546,46 @@ msgid "" "\n" " " msgstr "" +"Послідовність друку внутрішніх (inner) та зовнішніх (outer) стін. \n" +"\n" +"Використовуйте внутрішню/зовнішню для найкращих виступів. Це пов'язано з " +"тим, що стіни, які виступають, можуть прилипати до сусіднього периметра під " +"час друку. Однак цей параметр призводить до деякого зниження якості " +"поверхні, оскільки зовнішній периметр деформується, притискаючись до " +"внутрішнього.\n" +"\n" +"Використовуйте Внутрішній/Зовнішній/Внутрішній для найкращої якості " +"зовнішньої поверхні та точності розмірів, оскільки зовнішня стіна друкується " +"без порушень від внутрішнього периметра. Однак, продуктивність на виході " +"зменшиться, оскільки немає внутрішнього периметра, до якого можна було б " +"притискати зовнішню стіну. Для ефективної роботи цієї опції потрібно " +"щонайменше 3 стіни, оскільки спочатку друкуються внутрішні стіни, починаючи " +"з 3-го периметра, потім зовнішній периметр і, нарешті, перший внутрішній " +"периметр. У більшості випадків цей параметр рекомендується використовувати " +"замість параметра Зовнішній/Внутрішній. \n" +"\n" +"Використовуйте опцію Зовнішня/Внутрішня для отримання такої ж якості " +"зовнішньої стіни і точності розмірів, як і в опції Внутрішня/Зовнішня/" +"Внутрішня. Однак шви по Z будуть виглядати менш рівномірними, оскільки перша " +"екструзія нового шару починається на видимій поверхні " msgid "Inner/Outer" -msgstr "" +msgstr "Внутрішня/Зовнішня" msgid "Outer/Inner" -msgstr "" +msgstr "Зовнішня/Внутрішня" msgid "Inner/Outer/Inner" -msgstr "" +msgstr "Внутрішня/Зовнішня/Внутрішня" msgid "Print infill first" -msgstr "" +msgstr "Спочатку друкувати заповнення" msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9472,7 +10593,7 @@ msgid "" msgstr "" msgid "Wall loop direction" -msgstr "" +msgstr "Напрямок периметрів стінок" msgid "" "The direction which the wall loops are extruded when looking down from the " @@ -9484,12 +10605,21 @@ msgid "" "\n" "This option will be disabled if sprial vase mode is enabled." msgstr "" +"Напрямок, в якому екструдуються периметри стінок, якщо дивитися зверху " +"вниз.\n" +"\n" +"За замовчуванням усі стінки екструдуються проти годинникової стрілки, якщо " +"тільки не увімкнено Реверс по непарних периметрах. Якщо встановити будь-яку " +"іншу опцію, окрім Авто, то напрямок друку стінки буде визначатися незалежно " +"від значення Реверс по непарних периметрах.\n" +"\n" +"Ця опція буде вимкнена, якщо увімкнено режим Спіральної вази." msgid "Counter clockwise" -msgstr "" +msgstr "Проти годинникової стрілки" msgid "Clockwise" -msgstr "" +msgstr "За годинниковою стрілкою" msgid "Height to rod" msgstr "Висота до сопла" @@ -9518,8 +10648,14 @@ msgstr "" "Радіус вільного простору навколо екструдера. Використовується для уникнення " "зіткнення під час друку за об’єктами." +msgid "Nozzle height" +msgstr "Висота насадки" + +msgid "The height of nozzle tip." +msgstr "Висота кінчика насадки." + msgid "Bed mesh min" -msgstr "" +msgstr "Сітка для стола min" msgid "" "This option sets the min point for the allowed bed mesh area. Due to the " @@ -9531,9 +10667,18 @@ msgid "" "your printer manufacturer. The default setting is (-99999, -99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" +"Цей параметр встановлює мінімальну точку для допустимої площі сітки столу. " +"Через зміщення датчика по осях XY більшість принтерів не можуть промацувати " +"все полотно. Щоб переконатися, що точка зонда не виходить за межі поля, " +"мінімальна і максимальна точки сітки поля повинні бути встановлені " +"відповідним чином. OrcaSlicer гарантує, що значення adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max не перевищують ці мінімальні/максимальні точки. Цю " +"інформацію зазвичай можна отримати від виробника принтера. За замовчуванням " +"встановлено значення (-99999, -99999), що означає відсутність обмежень, що " +"дозволяє проводити зондування по всьому шару." msgid "Bed mesh max" -msgstr "" +msgstr "Сітка столу макс" msgid "" "This option sets the max point for the allowed bed mesh area. Due to the " @@ -9545,22 +10690,35 @@ msgid "" "your printer manufacturer. The default setting is (99999, 99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" +"Цей параметр встановлює максимальну точку для допустимої площі сітки столу. " +"Через зміщення датчика по осях XY більшість принтерів не можуть промацувати " +"всю поверхню полотна. Щоб переконатися, що точка зонда не виходить за межі " +"поля, мінімальна і максимальна точки сітки поля повинні бути встановлені " +"відповідним чином. OrcaSlicer гарантує, що значення adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max не перевищують ці мінімальні/максимальні точки. Цю " +"інформацію зазвичай можна отримати від виробника принтера. За замовчуванням " +"встановлено значення (99999, 99999), що означає відсутність обмежень, що " +"дозволяє проводити зондування по всьому шару." msgid "Probe point distance" -msgstr "" +msgstr "Відстань до зонда" msgid "" "This option sets the preferred distance between probe points (grid size) for " "the X and Y directions, with the default being 50mm for both X and Y." msgstr "" +"Цей параметр встановлює бажану відстань між точками зонда (розмір сітки) для " +"напрямків X і Y, за замовчуванням 50 мм для X і Y." msgid "Mesh margin" -msgstr "" +msgstr "Поле сітки" msgid "" "This option determines the additional distance by which the adaptive bed " "mesh area should be expanded in the XY directions." msgstr "" +"Цей параметр визначає додаткову відстань, на яку слід розширити площу " +"адаптивної сітки в напрямках XY." msgid "Extruder Color" msgstr "Колір екструдера" @@ -9605,6 +10763,8 @@ 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. Якщо " +"виражено у %, вона буде розрахована за діаметром сопла." msgid "Keep fan always on" msgstr "Тримайте вентилятор завжди увімкненим" @@ -9617,6 +10777,22 @@ msgstr "" "будезупинятиметься і працюватиме\n" "хоча б на мінімальній швидкості для зменшення частоти пусків та зупинок" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "Час шару" @@ -9637,10 +10813,10 @@ msgid "Default filament color" msgstr "Колір філаменту за замовчуванням" msgid "Filament notes" -msgstr "" +msgstr "Примітки щодо філаменту" msgid "You can put your notes regarding the filament here." -msgstr "" +msgstr "Ви можете залишити свої примітки щодо філаменту тут." msgid "Required nozzle HRC" msgstr "Потрібний HRC сопла" @@ -9699,56 +10875,73 @@ msgid "" "Be sure to allow enough space between objects, as this compensation is done " "after the checks." msgstr "" +"Введіть відсоток усадки, який отримає нитка після охолодження (94%, якщо ви " +"вимірюєте 94 мм замість 100 мм). Деталь буде масштабовано по осях X та Y для " +"компенсації. До уваги береться лише нитка, що використовується для " +"периметра.\n" +"Переконайтеся, що між об'єктами достатньо місця, оскільки ця компенсація " +"виконується після перевірки." msgid "Loading speed" -msgstr "" +msgstr "Швидкість заведення" msgid "Speed used for loading the filament on the wipe tower." msgstr "" +"Швидкість, що використовується для заведення філаменту на вежі витирання." msgid "Loading speed at the start" -msgstr "" +msgstr "Швидкість заведення на старті" msgid "Speed used at the very beginning of loading phase." -msgstr "" +msgstr "Швидкість, що використовується на самому початку фази заведення." msgid "Unloading speed" -msgstr "" +msgstr "Швидкість виведення" msgid "" "Speed used for unloading the filament on the wipe tower (does not affect " "initial part of unloading just after ramming)." msgstr "" +"Швидкість, яка використовується для виведення філаменту на вежі витирання " +"(не впливає на початкову частину виведення безпосередньо після раммінгу)." msgid "Unloading speed at the start" -msgstr "" +msgstr "Швидкість виведення на старті" msgid "" "Speed used for unloading the tip of the filament immediately after ramming." msgstr "" +"Швидкість, яка використовується для виведення кінчику філаменту " +"безпосередньо після раммінгу." msgid "Delay after unloading" -msgstr "" +msgstr "Затримка після виведення" msgid "" "Time to wait after the filament is unloaded. May help to get reliable " "toolchanges with flexible materials that may need more time to shrink to " "original dimensions." msgstr "" +"Час очікування після виведення філаменту. Може допомогти отримати надійну " +"заміну інструменту для гнучких матеріалів, яким може знадобитися більше " +"часу, щоб зменшитись до початкових розмірів." msgid "Number of cooling moves" -msgstr "" +msgstr "Кількість охолоджуючих рухів" msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" +"Філамент охолоджується шляхом переміщення вперед-назад у охолоджувальних " +"трубках. Вкажіть бажану кількість цих рухів." msgid "Speed of the first cooling move" -msgstr "" +msgstr "Швидкість першого охолоджуючого руху" msgid "Cooling moves are gradually accelerating beginning at this speed." msgstr "" +"Охолоджувальні рухи поступово прискорюються, починаючи з цієї швидкості." msgid "Minimal purge on wipe tower" msgstr "Мінімальне продування на очисній вежі" @@ -9768,33 +10961,41 @@ msgstr "" "послідовне заповненняабо видавлювання об'єкта, що витрачається." msgid "Speed of the last cooling move" -msgstr "" +msgstr "Швидкість останнього охолоджуючого руху" msgid "Cooling moves are gradually accelerating towards this speed." -msgstr "" +msgstr "Охолоджувальні рухи поступово прискорюються до цієї швидкості." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"Час для прошивки принтера (або Multi Material Unit 2.0), щоб завести новий " +"філамент під час заміни інструменту (під час виконання коду Т). Цей час " +"додається до загального часу друку за допомогою оцінювача часу G-коду." msgid "Ramming parameters" -msgstr "" +msgstr "Параметри раммінгу" msgid "" "This string is edited by RammingDialog and contains ramming specific " "parameters." msgstr "" +"Цей рядок відредаговано у діалогу налаштувань раммінгу та містить певні " +"параметри раммінгу." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " "filament during a tool change (when executing the T code). This time is " "added to the total print time by the G-code time estimator." msgstr "" +"Час для прошивки принтера (або Multi Material Unit 2.0), щоб вивести " +"філамент під час заміни інструменту (під час виконання коду Т). Цей час " +"додається до загального часу друку за допомогою оцінювача часу G-коду." msgid "Enable ramming for multitool setups" -msgstr "" +msgstr "Увімкнути накат для багатоінструментальних установок" msgid "" "Perform ramming when using multitool printer (i.e. when the 'Single Extruder " @@ -9802,18 +11003,23 @@ msgid "" "amount of filament is rapidly extruded on the wipe tower just before the " "toolchange. This option is only used when the wipe tower is enabled." msgstr "" +"Виконати накат при використанні багатофункціонального принтера (тобто, коли " +"в налаштуваннях принтера знято прапорець з опції \"Мультиматеріал для одного " +"екструдера\"). Якщо ця опція встановлена, невелика кількість нитки швидко " +"екструдується на витиральні башти безпосередньо перед зміною інструменту. " +"Цей параметр використовується лише тоді, коли увімкнено витиральні башти." msgid "Multitool ramming volume" -msgstr "" +msgstr "Об'єм накату багатофункціонального інструменту" msgid "The volume to be rammed before the toolchange." -msgstr "" +msgstr "Об'єм, який потрібно виштовхнути перед зміною інструменту." msgid "Multitool ramming flow" -msgstr "" +msgstr "Багатоінструментальний потік накату" msgid "Flow used for ramming the filament before the toolchange." -msgstr "" +msgstr "Потік використовується для накату нитки перед зміною інструменту." msgid "Density" msgstr "Щільність" @@ -9842,13 +11048,16 @@ msgid "" msgstr "Допоміжний матеріал зазвичай використовується для друку підтримки" msgid "Softening temperature" -msgstr "" +msgstr "Температура м’якості" msgid "" "The material softens at this temperature, so when the bed temperature is " "equal to or greater than it, it's highly recommended to open the front door " "and/or remove the upper glass to avoid cloggings." msgstr "" +"Матеріал м’якшує при цій температурі, тому, коли температура столу рівна або " +"вища за цей показник, настійно рекомендується відкрити передні двері та/або " +"видалити верхнє скло, щоб уникнути засмічення (clogging)." msgid "Price" msgstr "Ціна" @@ -9860,23 +11069,38 @@ msgid "money/kg" msgstr "р/кг" msgid "Vendor" -msgstr "" +msgstr "Виробник" msgid "Vendor of filament. For show only" -msgstr "" +msgstr "Виробник філаменту. Для показу, тільки для відображення" msgid "(Undefined)" msgstr "(Невизначений)" -msgid "Infill direction" -msgstr "Напрям заповнення" +msgid "Sparse infill direction" +msgstr "Напрямок внутрішнього заповнення" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "" -"Angle for sparse infill pattern, which controls the start or main direction " +"Кут для внутрішнього заповнення, який контролює початок або основний " +"напрямок лінії" + +msgid "Solid infill direction" +msgstr "Суцільний напрямок заповнення" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " "of line" +msgstr "" +"Кут для суцільної заливки, який контролює початок або основний напрямок лінії" + +msgid "Rotate solid infill direction" +msgstr "Поверніть внутрішне заповнення в напрямку" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "Поверніть напрямок внутрішного заповнення на 90° для кожного шару." msgid "Sparse infill density" msgstr "Щільність заповнення" @@ -9886,6 +11110,9 @@ msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" +"Щільність внутрішнього розрідженого заповнення, 100% перетворює все " +"розріджене заповнення на суцільне, і буде використовуватися внутрішній " +"шаблон внутрішнього заповнення" msgid "Sparse infill pattern" msgstr "Малюнок заповнення" @@ -9900,7 +11127,7 @@ msgid "Line" msgstr "Лінія" msgid "Cubic" -msgstr "Кібічний" +msgstr "Кубічний" msgid "Tri-hexagon" msgstr "Зірки" @@ -9923,6 +11150,9 @@ msgstr "Підтримуючий кубічний" msgid "Lightning" msgstr "Блискавка" +msgid "Cross Hatch" +msgstr "Перехресний штрих" + msgid "Sparse infill anchor length" msgstr "Довжина прив'язки заповнення" @@ -10052,7 +11282,7 @@ msgstr "прискорення до уповільнення" #, c-format, boost-format msgid "" "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" -msgstr "" +msgstr "Klipper-ів max_accel_to_decel буде скориговано на цей %% прискорення" msgid "Jerk of outer walls" msgstr "Ривок зовнішніх периметрів" @@ -10076,6 +11306,8 @@ msgid "" "Line width of initial layer. If expressed as a %, it will be computed over " "the nozzle diameter." msgstr "" +"Ширина лінії початкового шару. Якщо виражена у %, вона буде розрахована по " +"діаметру сопла." msgid "Initial layer height" msgstr "Початкова висота шару" @@ -10136,6 +11368,9 @@ msgstr "" "працювати з максимально допустимою швидкістю на " "рівні«close_fan_the_first_x_layers» + 1." +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "Швидкість вентилятора під час друку підтримки" @@ -10187,10 +11422,10 @@ msgstr "" "Середня відстань між випадковими точками, введеними на кожному відрізкулінії" msgid "Apply fuzzy skin to first layer" -msgstr "" +msgstr "Нанести нечітку оболочку на перший шар" msgid "Whether to apply fuzzy skin on the first layer" -msgstr "" +msgstr "Чи потрібно наносити нечітку оболочку на перший шар" msgid "Filter out tiny gaps" msgstr "Відфільтрувати крихітні зазори" @@ -10199,7 +11434,7 @@ msgid "Layers and Perimeters" msgstr "Шари та периметри" msgid "Filter out gaps smaller than the threshold specified" -msgstr "" +msgstr "Відфільтруйте прогалини, менші за вказаний поріг" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " @@ -10208,15 +11443,39 @@ msgstr "" "Швидкість заповнення зазору. Зазор зазвичай має неправильну ширину лінії та " "має друкуватися повільніше" -msgid "Arc fitting" -msgstr "Дуговий фітинг" +msgid "Precise Z height" +msgstr "Точна висота Z" msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." msgstr "" -"Увімкніть цей параметр, щоб отримати файл G-коду з переміщеннями G2 та G3. А " -"допуск припасування однаковим дозволом" +"Увімкніть це, щоб отримати точну висоту об’єкта Z після нарізки. Він отримає " +"точну висоту об’єкта, уточнивши висоти шарів останніх кількох шарів. " +"Зауважте, що це експериментальний параметр." + +msgid "Arc fitting" +msgstr "Дугові траекторії" + +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." +msgstr "" +"Увімкніть цю опцію, щоб отримати файл G-коду з ходами G2 і G3. Допуск на " +"припасування такий самий, як і роздільна здатність. \n" +"\n" +"Примітка: Для машин з кліперним керуванням цю опцію рекомендується вимкнути. " +"Klipper не використовує команди дуги, оскільки вони знову розбиваються " +"прошивкою на сегменти ліній. Це призводить до зниження якості поверхні, " +"оскільки сегменти ліній перетворюються на дуги слайсером, а потім знову на " +"сегменти ліній прошивкою." msgid "Add line number" msgstr "Додати номер рядка" @@ -10272,33 +11531,37 @@ msgid "HRC" msgstr "HRC" msgid "Printer structure" -msgstr "" +msgstr "Структура принтера" msgid "The physical arrangement and components of a printing device" -msgstr "" +msgstr "Фізична структура та компоненти пристрою для друку" msgid "CoreXY" -msgstr "" +msgstr "CoreXY" msgid "I3" -msgstr "" +msgstr "I3" msgid "Hbot" -msgstr "" +msgstr "Hbot" msgid "Delta" -msgstr "" +msgstr "Delta" msgid "Best object position" -msgstr "" +msgstr "Найкраще положення об’єкта" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "" +"Найкраще автоматичне розташування об’єкта в діапазоні [0,1] відносно форми " +"ліжка." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " "command: M106 P2 S(0-255)." msgstr "" +"Увімкніть цю опцію, якщо принтер має вентилятор охолодження допоміжної " +"частини. Команда G-коду: M106 P2 S(0-255)." msgid "" "Start the fan this number of seconds earlier than its target start time (you " @@ -10346,29 +11609,33 @@ msgstr "" "Для деактивації встановіть значення 0." msgid "Time cost" -msgstr "" +msgstr "Вартість часу" msgid "The printer cost per hour" -msgstr "" +msgstr "Вартість друку за годину" msgid "money/h" -msgstr "" +msgstr "гроші/год" msgid "Support control chamber temperature" -msgstr "" +msgstr "Керування температурою камери для підтримки" msgid "" "This option is enabled if machine support controlling chamber temperature\n" "G-code command: M141 S(0-255)" msgstr "" +"Ця опція ввімкнена, якщо машина підтримує контроль температури в камері\n" +"Команда G-коду: M141 S(0-255)" msgid "Support air filtration" -msgstr "" +msgstr "Підтримка повітряної фільтрації" msgid "" "Enable this if printer support air filtration\n" "G-code command: M106 P3 S(0-255)" msgstr "" +"Увімкніть цей параметр, якщо принтер підтримує фільтрацію повітря\n" +"Команда G-коду: M106 P3 S(0-255)" msgid "G-code flavor" msgstr "Тип G-коду" @@ -10380,10 +11647,12 @@ msgid "Klipper" msgstr "Klipper" msgid "Support multi bed types" -msgstr "" +msgstr "Підтримка різних типів поверхонь стола" msgid "Enable this option if you want to use multiple bed types" msgstr "" +"Увімкніть цю опцію, якщо ви хочете використовувати кілька типів поверхонь " +"стола" msgid "Label objects" msgstr "Маркувати об'єкти" @@ -10425,6 +11694,9 @@ msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" +"Автоматично комбінуйте розріджене заповнення кількох шарів, щоб друкувати їх " +"разом і зменшити час друку. Стіни все ще друкуються з оригінальною висотою " +"шару." msgid "Filament to print internal sparse infill." msgstr "Філамент для друку внутрішнього заповнення." @@ -10433,16 +11705,41 @@ msgid "" "Line width of internal sparse infill. If expressed as a %, it will be " "computed over the nozzle diameter." msgstr "" +"Ширина лінії внутрішнього розрідженого заповнення. Якщо виражена у %, вона " +"буде розрахована по діаметру сопла." msgid "Infill/Wall overlap" msgstr "Заповнення/перекриття периметрів" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"Область заповнення трохи збільшена для перекриття периметром для " -"кращогоскріплення. Відсоткове значення щодо ширини лінії заповнення" +"Область заповнення дещо збільшена, щоб перекривати стіну для кращого " +"зчеплення. Значення у відсотках відносно ширини лінії розрідженого " +"заповнення. Встановіть це значення на рівні ~10-15%, щоб мінімізувати " +"можливість надмірного видавлювання та накопичення матеріалу, що призводить " +"до шорсткості верхньої поверхні." + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "Верхнє/нижнє суцільне заповнення/перекриття стін" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"Верхній суцільний шар заповнення трохи збільшується, щоб перекривати стіну " +"для кращого зчеплення і мінімізувати появу прогалин у місцях прилягання " +"верхнього шару заповнення до стінки. Значення 25-30% є хорошою відправною " +"точкою, що мінімізує появу прогалин. Значення у відсотках відносно ширини " +"лінії заповнення" msgid "Speed of internal sparse infill" msgstr "Швидкість внутрішнього заповнення" @@ -10460,16 +11757,17 @@ msgstr "" "або розчинним у ручному режимі матеріалом підкладки" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "Максимальна ширина сегментованої області" msgid "Maximum width of a segmented region. Zero disables this feature." -msgstr "" +msgstr "Максимальна ширина сегментованої області. Нуль вимикає цю функцію." msgid "Interlocking depth of a segmented region" -msgstr "" +msgstr "Глибина взаємного взаємодії сегментованої області" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" +"Глибина взаємного взаємодії сегментованої області. Нуль вимикає цю функцію." msgid "Ironing Type" msgstr "Тип Розглажування" @@ -10495,10 +11793,10 @@ msgid "All solid layer" msgstr "Весь суцільний шар" msgid "Ironing Pattern" -msgstr "" +msgstr "Зразок прасування" msgid "The pattern that will be used when ironing" -msgstr "" +msgstr "Візерунок, який буде використовуватися під час прасування" msgid "Ironing flow" msgstr "Плавний потік" @@ -10524,12 +11822,14 @@ msgid "Print speed of ironing lines" msgstr "Швидкість друку прасувальних ліній" msgid "Ironing angle" -msgstr "" +msgstr "Кут прасування" msgid "" "The angle ironing is done at. A negative number disables this function and " "uses the default method." msgstr "" +"Прасування виконується під кутом. Від'ємне число вимикає цю функцію і " +"використовує метод за замовчуванням." msgid "This gcode part is inserted at every layer change after lift z" msgstr "Ця частина gcode вставляється при кожній зміні шару після підйому z" @@ -10545,7 +11845,7 @@ msgstr "" "меншеприскорення для друку" msgid "Emit limits to G-code" -msgstr "" +msgstr "Обмеження на емітацію G-коду" msgid "Machine limits" msgstr "Обмеження машини" @@ -10554,6 +11854,9 @@ msgid "" "If enabled, the machine limits will be emitted to G-code file.\n" "This option will be ignored if the g-code flavor is set to Klipper." msgstr "" +"Якщо увімкнено, ліміти машини будуть виводитися у файл G-коду.\n" +"Цей параметр буде проігноровано, якщо у параметрах g-коду встановлено " +"значення Klipper." msgid "" "This G-code will be used as a code for the pause print. User can insert " @@ -10566,13 +11869,13 @@ msgid "This G-code will be used as a custom code" msgstr "Цей G-код буде використовуватися як код користувача" msgid "Small area flow compensation (beta)" -msgstr "" +msgstr "Компенсація потоку на малих площах (бета)" msgid "Enable flow compensation for small infill areas" -msgstr "" +msgstr "Увімкніть компенсацію потоку для невеликих ділянок заповнення" msgid "Flow Compensation Model" -msgstr "" +msgstr "Модель компенсації потоку" msgid "" "Flow Compensation Model, used to adjust the flow for small infill areas. The " @@ -10580,6 +11883,10 @@ msgid "" "and flow correction factors, one per line, in the following format: " "\"1.234,5.678\"" msgstr "" +"Модель компенсації потоку, що використовується для коригування потоку для " +"невеликих ділянок заповнення. Модель виражається у вигляді пари значень " +"довжини екструзії та коефіцієнтів корекції потоку, розділених комами, по " +"одному в рядку, у наступному форматі: \"1.234,5.678\"" msgid "Maximum speed X" msgstr "Максимальна швидкість X" @@ -10682,6 +11989,8 @@ msgstr "Максимальне прискорення руху" msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2" msgstr "" +"Максимальне прискорення для пересування (M204 T), застосовується лише до " +"Marlin 2" msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " @@ -10702,7 +12011,7 @@ msgstr "" "обмежує максимальну висоту шару при включенні адаптивної висоти шару" msgid "Extrusion rate smoothing" -msgstr "" +msgstr "Вирівнювання швидкості екструзії" msgid "" "This parameter smooths out sudden extrusion rate changes that happen when " @@ -10732,12 +12041,39 @@ msgid "" "\n" "Note: this parameter disables arc fitting." msgstr "" +"Цей параметр згладжує різкі зміни швидкості екструзії, які відбуваються, " +"коли принтер переходить від друку екструзії з високим об'ємним потоком " +"(висока швидкість/велика ширина) до екструзії з низьким об'ємним потоком " +"(низька швидкість/маленька ширина) і навпаки.\n" +"\n" +"Він визначає максимальну швидкість, на яку з часом може змінюватися об'ємний " +"потік екструдованого матеріалу в мм3/с. Вищі значення означають, що " +"дозволені більші зміни швидкості екструзії, що призводить до швидшого " +"переходу від однієї швидкості до іншої.\n" +"\n" +"Значення 0 вимикає цю функцію. \n" +"\n" +"Для високошвидкісних, високопродуктивних принтерів з прямим приводом " +"(наприклад, Bambu lab або Voron) це значення зазвичай не потрібне. Однак " +"воно може мати певну перевагу в певних випадках, коли швидкість друку дуже " +"різниться. Наприклад, коли виникають агресивні сповільнення через висячі " +"елементи. У таких випадках рекомендується високе значення близько 300-350 " +"мм3/с2, оскільки воно забезпечує достатнє згладжування, щоб допомогти " +"випередженню тиску досягти більш плавного переходу потоку.\n" +"\n" +"Для повільніших принтерів без попереднього випередження тиску значення має " +"бути значно нижчим. Значення 10-15 мм3/с2 є хорошою відправною точкою для " +"екструдерів з прямим приводом і 5-10 мм3/с2 для екструдерів типу Боудена. \n" +"\n" +"Ця функція відома як \"Вирівнювач тиску\" в слайсерах Prusa.\n" +"\n" +"Примітка: цей параметр відключає рух по дугам." msgid "mm³/s²" -msgstr "" +msgstr "мм³/с²" msgid "Smoothing segment length" -msgstr "" +msgstr "Довжина сегмента згладжування" msgid "" "A lower value results in smoother extrusion rate transitions. However, this " @@ -10749,6 +12085,15 @@ msgid "" "\n" "Allowed values: 1-5" msgstr "" +"Менше значення забезпечує плавніші переходи швидкості екструзії. Однак це " +"призводить до значно більшого розміру файлу gcode і більшої кількості " +"інструкцій для обробки принтером. \n" +"\n" +"Значення за замовчуванням 3 добре підходить для більшості випадків. Якщо ваш " +"принтер зависає, збільште це значення, щоб зменшити кількість інструкцій для " +"принтера.\n" +"\n" +"Допустимі значення: 1-5" msgid "Minimum speed for part cooling fan" msgstr "Мінімальна швидкість вентилятора охолодження деталі" @@ -10760,6 +12105,11 @@ msgid "" "Please enable auxiliary_fan in printer settings to use this feature. G-code " "command: M106 P2 S(0-255)" msgstr "" +"Швидкість вентилятора охолодження допоміжної частини. Допоміжний вентилятор " +"працюватиме з цією швидкістю під час друку, окрім перших кількох шарів, що " +"визначаються відсутністю охолоджувальних шарів.\n" +"Щоб скористатися цією функцією, увімкніть параметр auxiliary_fan у " +"налаштуваннях принтера. Команда G-коду: M106 P2 S(0-255)" msgid "Min" msgstr "Мін" @@ -10779,6 +12129,9 @@ msgid "" "maintain the minimum layer time above, when slow down for better layer " "cooling is enabled." msgstr "" +"Мінімальна швидкість друку, до якої принтер сповільнюватиметься, щоб " +"зберегти мінімальний час проходження шару, вказаний вище, коли ввімкнено " +"сповільнення для кращого охолодження шару." msgid "Nozzle diameter" msgstr "Діаметр сопла" @@ -10787,12 +12140,14 @@ msgid "Diameter of nozzle" msgstr "Діаметр сопла" msgid "Configuration notes" -msgstr "" +msgstr "Примітки до конфігурації" msgid "" "You can put here your personal notes. This text will be added to the G-code " "header comments." msgstr "" +"Ви можете додати тут свої особисті примітки. Цей текст буде додано до " +"коментарів заголовка G-коду." msgid "Host Type" msgstr "Тип хоста" @@ -10811,36 +12166,44 @@ msgid "Volume of nozzle between the cutter and the end of nozzle" msgstr "Об'єм сопла між різцем та кінцем сопла" msgid "Cooling tube position" -msgstr "" +msgstr "Позиція охолоджувальної трубки" msgid "Distance of the center-point of the cooling tube from the extruder tip." msgstr "" +"Відстань центральної точки охолоджувальної трубки від наконечника екструдера." msgid "Cooling tube length" -msgstr "" +msgstr "Довжина охолоджувальної трубки" msgid "Length of the cooling tube to limit space for cooling moves inside it." msgstr "" +"Довжина охолоджувальної трубки для обмеження простору для охолоджуючих рухів " +"всередині неї." msgid "High extruder current on filament swap" -msgstr "" +msgstr "Звищення струму екструдера на заміні філамента" msgid "" "It may be beneficial to increase the extruder motor current during the " "filament exchange sequence to allow for rapid ramming feed rates and to " "overcome resistance when loading a filament with an ugly shaped tip." msgstr "" +"Може бути корисно збільшити струм двигуна екструдера під час заміни " +"філаменту, щоб забезпечити швидкий раммінг та подолати опір при заведенні " +"філаменту з кінчиком потворної форми." msgid "Filament parking position" -msgstr "" +msgstr "Позиція паркування філаменту" msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" +"Відстань наконечника екструдера від місця паркування філаменту при " +"виведенні. Це має відповідати значенню в мікропрограмі принтера." msgid "Extra loading distance" -msgstr "" +msgstr "Додаткова відстань заведення" msgid "" "When set to zero, the distance the filament is moved from parking position " @@ -10848,6 +12211,10 @@ msgid "" "positive, it is loaded further, if negative, the loading move is shorter " "than unloading." msgstr "" +"Якщо встановлено на нуль, відстань, на яку філамент переміщується з " +"положення стоянки під час заведення, є точно такою ж, як і при переміщенні " +"назад під час виведення. Якщо позитивне, воно заводеться далі, якщо " +"негативне, рух заведення коротший, ніж виведення." msgid "Start end points" msgstr "Початкові кінцеві точки" @@ -10875,27 +12242,32 @@ msgstr "" "Користувач може самостійно визначити ім'я файлу проекту під час експорту" msgid "Make overhangs printable" -msgstr "" +msgstr "Зробити звиси друкованими" msgid "Modify the geometry to print overhangs without support material." -msgstr "" +msgstr "Змінює геометрію, щоб надрукувати звиси без підтримок." msgid "Make overhangs printable - Maximum angle" -msgstr "" +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 overhangs printable - Hole area" -msgstr "" +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 "мм²" @@ -10915,6 +12287,8 @@ msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " "nozzle diameter." msgstr "" +"Ширина лінії внутрішньої стінки. Якщо виражається у %, вона буде розрахована " +"по діаметру сопла." msgid "Speed of inner wall" msgstr "Швидкість внутрішнього периметра" @@ -10923,7 +12297,7 @@ msgid "Number of walls of every layer" msgstr "Кількість периметрів кожного шару" msgid "Alternate extra wall" -msgstr "" +msgstr "Альтернативна додаткова стіна" msgid "" "This setting adds an extra wall to every other layer. This way the infill " @@ -10935,6 +12309,16 @@ msgid "" "Using lightning infill together with this option is not recommended as there " "is limited infill to anchor the extra perimeters to." msgstr "" +"Цей параметр додає додаткову стінку до кожного другого шару. Таким чином, " +"заповнення затискається вертикально між стінками, що призводить до більш " +"міцних відбитків. \n" +"\n" +"Якщо цей параметр увімкнено, параметр Забезпечити вертикальну товщину " +"оболонки потрібно вимкнути. \n" +"\n" +"Використання блискавичної заливки разом з цією опцією не рекомендується, " +"оскільки кількість заливки, до якої можна прикріпити додаткові периметри, " +"обмежена." msgid "" "If you want to process the output G-code through custom scripts, just list " @@ -10953,7 +12337,7 @@ msgid "Printer notes" msgstr "Нотатки для принтера" msgid "You can put your notes regarding the printer here." -msgstr "" +msgstr "Ви можете залишити свої примітки щодо принтера тут." msgid "Raft contact Z distance" msgstr "Відстань контакту плоту Z" @@ -10996,6 +12380,9 @@ msgid "" "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 "Поріг відстані в дорозі" @@ -11013,6 +12400,8 @@ msgstr "Ретракт при розгладжуванні" 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." msgid "Retract when change layer" msgstr "Ретракт при зміні шару" @@ -11031,6 +12420,30 @@ msgstr "" "свербіння під час тривалого переміщення. Встановіть нуль, щоб відключити " "ретракт" +msgid "Long retraction when cut(experimental)" +msgstr "Довге відведення при вирізанні (експериментально)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Експериментальна функція. Відведення та відрізання філаменту на більшій " +"відстані під час змін для мінімізації вимивання. Хоча це значно зменшує " +"кількість витоку, це також може збільшити ризик засмічення насадки або інших " +"проблем з друку." + +msgid "Retraction distance when cut" +msgstr "Відстань відведення при вирізанні" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Експериментальна функція. Відстань відведення перед відрізанням під час " +"зміни філаменту" + msgid "Z hop when retract" msgstr "Z-стрибок при відкаті" @@ -11045,20 +12458,24 @@ msgstr "" "перешкоджати появі висячих ниток" msgid "Z hop lower boundary" -msgstr "" +msgstr "Межа зниження Z-hop" msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" +"Z-hop буде активуватися лише тоді, коли Z перевищує це значення і " +"знаходиться нижче параметра “Верхня межа зниження Z”." msgid "Z hop upper boundary" -msgstr "" +msgstr "Верхня межа зниження Z" msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" +"Якщо це значення позитивне, то Z-hop буде діяти лише тоді, коли Z перевищує " +"параметр “Межа зниження Z” і знаходиться нижче цього значення" msgid "Z hop type" msgstr "Тип Z-стрибка" @@ -11096,6 +12513,8 @@ msgid "" "Enforce Z Hop behavior. This setting is impacted by the above settings (Only " "lift Z above/below)." msgstr "" +"Увімкнути поведінку стрибків Z. На цей параметр впливають попередні " +"налаштування (Тільки піднімати Z вище/нижче)." msgid "All Surfaces" msgstr "Усі поверхні" @@ -11157,11 +12576,12 @@ msgid "Show auto-calibration marks" msgstr "Показати мітки автоматичного калібрування" msgid "Disable set remaining print time" -msgstr "" +msgstr "Вимкнути опцію Час друку що залишився" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" +"Вимкнути генерацію M73: Встановити час друку, що залишився, у кінцевому gcode" msgid "Seam position" msgstr "Положення шва" @@ -11188,6 +12608,8 @@ msgid "" "This option causes the inner seams to be shifted backwards based on their " "depth, forming a zigzag pattern." msgstr "" +"Ця опція призводить до того, що внутрішні шви зміщуються назад відповідно до " +"їх глибини, утворюючи зигзагоподібний візерунок." msgid "Seam gap" msgstr "Зазор шва" @@ -11205,21 +12627,25 @@ msgstr "" "становить 10%." msgid "Scarf joint seam (beta)" -msgstr "" +msgstr "Шарфовий шов (бета)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" +"Використовуйте з’єднання шва шарфом, щоб мінімізувати видимість шва та " +"збільшити міцність шва." msgid "Conditional scarf joint" -msgstr "" +msgstr "Умовне з’єднання шарфом" msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" +"Застосовувати з’єднання з шарфом лише до гладких периметрів, де традиційні " +"шви не ефективно приховують шви в гострих кутах." msgid "Conditional angle threshold" -msgstr "" +msgstr "Умовний поріг кута" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " @@ -11228,9 +12654,14 @@ msgid "" "(indicating the absence of sharp corners), a scarf joint seam will be used. " "The default value is 155°." msgstr "" +"Ця опція встановлює поріговий кут для застосування умовного з’єднання " +"шарфом.\n" +"Якщо максимальний кут в межах периметрового контуру перевищує це значення " +"(що свідчить про відсутність гострих кутів), використовується з’єднання " +"шарфом. Значення за замовчуванням - 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Умовний поріг звису" #, no-c-format, no-boost-format msgid "" @@ -11240,9 +12671,13 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"Ця опція визначає поріг звису для застосування стрічкових швів. Якщо " +"непідтримувана частина периметра менша за цей поріг, будуть застосовані " +"стрічкові шви. За замовчуванням поріг встановлюється на рівні 40% від ширини " +"зовнішньої стіни. З міркувань продуктивності оцінюється ступінь звису." msgid "Scarf joint speed" -msgstr "" +msgstr "Швидкість з'єднання шва" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " @@ -11254,47 +12689,60 @@ msgid "" "percentage (e.g., 80%), the speed is calculated based on the respective " "outer or inner wall speed. The default value is set to 100%." msgstr "" +"Цей параметр задає швидкість друку швів. Рекомендується друкувати " +"з'єднувальні стрічки на повільній швидкості (менше 100 мм/с). Також " +"рекомендується ввімкнути \"Згладжування швидкості екструзії\", якщо задана " +"швидкість значно відрізняється від швидкості зовнішньої або внутрішньої " +"стінок. Якщо вказана тут швидкість вища за швидкість зовнішньої або " +"внутрішньої стінок, принтер за замовчуванням працюватиме на повільнішій з " +"двох швидкостей. Якщо значення вказано у відсотках (наприклад, 80%), " +"швидкість розраховується на основі відповідної швидкості зовнішньої або " +"внутрішньої стінки. За замовчуванням встановлено значення 100%." msgid "Scarf joint flow ratio" -msgstr "" +msgstr "Коефіцієнт пропускної здатності шарфового шва" msgid "This factor affects the amount of material for scarf joints." -msgstr "" +msgstr "Цей фактор впливає на кількість матеріалу для з'єднання швів." msgid "Scarf start height" -msgstr "" +msgstr "Висота початку шарфу" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the " "current layer height. The default value for this parameter is 0." msgstr "" +"Висота початку шарфу.\n" +"Ця величина може бути вказана в міліметрах або як відсоток від поточної " +"товщини шару. Значення за замовчуванням для цього параметра - 0." msgid "Scarf around entire wall" -msgstr "" +msgstr "Шарф навколо всієї стіни" msgid "The scarf extends to the entire length of the wall." -msgstr "" +msgstr "Шарф простягається на всю довжину стіни." msgid "Scarf length" -msgstr "" +msgstr "Довжина шарфа" msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" +"Довжина шарфа. Встановлення цього параметра на нуль ефективно вимикає шарф." msgid "Scarf steps" -msgstr "" +msgstr "Кроки шарфа" msgid "Minimum number of segments of each scarf." -msgstr "" +msgstr "Мінімальна кількість сегментів кожного шарфу." msgid "Scarf joint for inner walls" -msgstr "" +msgstr "З’єднання з шарфом для внутрішніх стін" msgid "Use scarf joint for inner walls as well." -msgstr "" +msgstr "Використовувати з’єднання з шарфом також для внутрішніх стін." msgid "Role base wipe speed" msgstr "Базова швидкість очищення ролей" @@ -11320,7 +12768,7 @@ msgstr "" "Невеликий рух усередину виконується до виходу екструдера з контуру." msgid "Wipe before external loop" -msgstr "" +msgstr "Протирання перед зовнішньою стінкою" msgid "" "To minimise visibility of potential overextrusion at the start of an " @@ -11333,6 +12781,15 @@ msgid "" "print order as in these modes it is more likely an external perimeter is " "printed immediately after a deretraction move." msgstr "" +"Щоб мінімізувати видимість потенційного надмірного видавлювання на початку " +"зовнішнього периметра під час друку з опцією друку стінок \"Зовнішній/" +"внутрішній\" або \"Внутрішній/зовнішній/внутрішній\", втягування виконується " +"злегка зсередини від початку зовнішнього периметра. Таким чином, будь-який " +"потенційний надлишок накату приховується від зовнішньої поверхні. \n" +"\n" +"Це корисно під час друку із зовнішнім/внутрішнім або внутрішнім/зовнішнім/" +"внутрішнім друком стінок, оскільки в цих режимах, найімовірніше, зовнішній " +"периметр буде надруковано одразу після руху втягування." msgid "Wipe speed" msgstr "Швидкість очищення" @@ -11360,6 +12817,42 @@ msgstr "Шари спідниці" msgid "How many layers of skirt. Usually only one layer" msgstr "Скільки шарів спідниці. Зазвичай лише один шар" +msgid "Draft shield" +msgstr "Чорновий щит" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" +"Захист від протягів потрібен для захисту відбитків на ABS або ASA від " +"деформації та відриву від друкарської платформи через протяги. Зазвичай він " +"потрібен лише для принтерів з відкритою рамою, тобто без корпусу. \n" +"\n" +"Параметри:\n" +"Увімкнено = висота спідниці дорівнює висоті найвищого надрукованого " +"об'єкта.\n" +"Обмежено = висота об'єкта не перевищує заданої висоти об'єкта.\n" +"\n" +"Примітка: При активному захисному екрані спідниця буде надрукована на " +"відстані крайки від об'єкта. Тому, якщо активовані краї, вона може " +"перетинатися з ними. Щоб уникнути цього, збільште значення відстані до " +"об'єкта.\n" + +msgid "Limited" +msgstr "Обмежено" + +msgid "Enabled" +msgstr "Увімкнуто" + msgid "Skirt loops" msgstr "Спідниця навколо моделі" @@ -11374,6 +12867,22 @@ msgstr "" "Швидкість спідниці, у мм/с. Нуль означає використання стандартної швидкості " "екструзії шару." +msgid "Skirt minimum extrusion length" +msgstr "Мінімальна довжина екструзії спідниці" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"Мінімальна довжина витягування нитки в мм під час друку спідниці. Нуль " +"означає, що ця функція вимкнена.\n" +"\n" +"Використання ненульового значення корисне, якщо принтер налаштовано на друк " +"без початкової лінії." + 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" @@ -11396,14 +12905,13 @@ msgid "" "Line width of internal solid infill. If expressed as a %, it will be " "computed over the nozzle diameter." msgstr "" +"Ширина лінії внутрішнього суцільного заповнення. Якщо виражена у %, вона " +"буде розрахована по діаметру сопла." msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" "Швидкість внутрішнього твердого заповнення, а не верхньої та нижньої поверхні" -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 " @@ -11414,20 +12922,25 @@ msgstr "" "згенерована модель не має шва" msgid "Smooth Spiral" -msgstr "" +msgstr "Плавна спіраль" msgid "" "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " "at all, even in the XY directions on walls that are not vertical" msgstr "" +"Плавна спіраль згладжує переміщення по X та Y, що призводить до відсутності " +"видимого шва, навіть у напрямках XY на стінах, які не є вертикальними" msgid "Max XY Smoothing" -msgstr "" +msgstr "Максимальне згладжування XY" msgid "" "Maximum distance to move points in XY to try to achieve a smooth spiralIf " "expressed as a %, it will be computed over nozzle diameter" msgstr "" +"Максимальна відстань переміщення точок по XY для спроби досягнення плавної " +"спіралі. Якщо виражено у відсотках, вона буде обчислена відносно діаметра " +"сопла" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -11464,13 +12977,13 @@ msgid "Start G-code when start the printing of this filament" msgstr "Стартовий G-code при запуску друку цим філаментом" msgid "Single Extruder Multi Material" -msgstr "" +msgstr "Мульти-матеріальний (ММ) друк з одним екструдером" msgid "Use single nozzle to print multi filament" -msgstr "" +msgstr "Використовуйте одне сопло для друку декількома нитками" msgid "Manual Filament Change" -msgstr "" +msgstr "Ручна заміна нитки" msgid "" "Enable this option to omit the custom Change filament G-code only at the " @@ -11479,18 +12992,22 @@ msgid "" "printing, where we use M600/PAUSE to trigger the manual filament change " "action." msgstr "" +"Увімкніть цей параметр, щоб пропустити користувацький G-код зміни нитки лише " +"на початку друку. Команда зміни інструмента (наприклад, T0) буде пропущена " +"протягом усього друку. Це корисно для ручного друку на декількох матеріалах, " +"де ми використовуємо M600/PAUSE для запуску ручної заміни нитки." msgid "Purge in prime tower" -msgstr "" +msgstr "Очищення в головній башті" msgid "Purge remaining filament into prime tower" -msgstr "" +msgstr "Видаліть залишки нитки в башту первинного намотування" msgid "Enable filament ramming" -msgstr "" +msgstr "Увімкнути накат нитки" msgid "No sparse layers (beta)" -msgstr "" +msgstr "Без розріджених шарів (бета)" msgid "" "If enabled, the wipe tower will not be printed on layers with no " @@ -11498,14 +13015,20 @@ msgid "" "print the wipe tower. User is responsible for ensuring there is no collision " "with the print." msgstr "" +"Якщо увімкнено, вежа витирання не друкується на шарах без змін інструментів. " +"На шарах із зміною інструменту екструдер рухатиметься вниз, щоб надрукувати " +"вежу витирання. Користувач несе відповідальність за те, щоб не було " +"зіткнення з друком." msgid "Prime all printing extruders" -msgstr "" +msgstr "Підготовка всіх друкуючих екструдерів" msgid "" "If enabled, all printing extruders will be primed at the front edge of the " "print bed at the start of the print." msgstr "" +"Якщо увімкнено, усі друкуючі екструдери будуть отестовані на передньому краї " +"друкарського столу перед початком друку." msgid "Slice gap closing radius" msgstr "Радіус закриття пробілів під час нарізування" @@ -11527,6 +13050,8 @@ msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" +"Використовуйте «парний-непарний» для моделей літаків 3DLabPrint. " +"Використовуйте «Закрити отвори», щоб закрити всі отвори в моделі." msgid "Regular" msgstr "Звичайний" @@ -11538,7 +13063,7 @@ msgid "Close holes" msgstr "Закрити отвори" msgid "Z offset" -msgstr "" +msgstr "Зміщення Z" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -11546,6 +13071,10 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" +"Це значення буде додано/вилучено до/з усіх координат Z у вихідному G-коді. " +"Воно використовується для зрівноваження поганої кінцевої позиції Z: " +"наприклад, якщо ваш кінцевий нуль фактично залишає сопло на 0,3 мм від " +"полотна друку, встановіть його на значення -0,3 (або виправте ваш endstop)." msgid "Enable support" msgstr "Увімкнути підтримку" @@ -11578,7 +13107,7 @@ msgid "Support/object xy distance" msgstr "Підтримка/об'єкт XY відстань" msgid "XY separation between an object and its support" -msgstr "" +msgstr "Контролює відстань по XY між об’єктом та його опорою" msgid "Pattern angle" msgstr "Кут шаблону" @@ -11605,10 +13134,10 @@ msgstr "" "консоль і т.д." msgid "Remove small overhangs" -msgstr "" +msgstr "Видалити невеликі виступи" msgid "Remove small overhangs that possibly need no supports." -msgstr "" +msgstr "Видалити невеликі виступи, які, можливо, не потребують підтримки." msgid "Top Z distance" msgstr "Верхня відстань Z" @@ -11634,16 +13163,20 @@ msgstr "" "філаменту" msgid "Avoid interface filament for base" -msgstr "" +msgstr "Уникати філаменту інтерфейсу для бази" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" +"Уникайте використання філаменту інтерфейсу опори для друку опорної бази, " +"якщо це можливо." msgid "" "Line width of support. If expressed as a %, it will be computed over the " "nozzle diameter." msgstr "" +"Ширина лінії підтримки. Якщо вона виражена у %, то буде розрахована по " +"діаметру сопла." msgid "Interface use loop pattern" msgstr "Інтерфейс використовує шаблон шлейфу" @@ -11674,10 +13207,10 @@ msgid "Bottom interface layers" msgstr "Нижні шари підтримки" msgid "Number of bottom interface layers" -msgstr "" +msgstr "Кількість шарів інтерфейсу на дні" msgid "Same as top" -msgstr "" +msgstr "Так само, як вище" msgid "Top interface spacing" msgstr "Відстань між верхніми інтерфейсами" @@ -11746,6 +13279,13 @@ msgid "" "style will create similar structure to normal support under large flat " "overhangs." msgstr "" +"Стиль і форма підтримки. Для звичайної підтримки проектування опор на " +"регулярну сітку створить більш стійкі опори (за замовчуванням), тоді як " +"щільно прилягаючі підтримки заощадять матеріал і зменшать пошкодження " +"об'єкта.\n" +"Для підтримок органічний, більш агресивно з'єднує гілки та економить багато " +"матеріалу (за замовчуванням органічний), тоді як гібридний стиль створить " +"структуру, схожу на звичайну опору під великими пласкими звисами." msgid "Snug" msgstr "Обережний" @@ -11760,7 +13300,7 @@ msgid "Tree Hybrid" msgstr "Деревоподібна гібридна" msgid "Organic" -msgstr "" +msgstr "Органічна" msgid "Independent support layer height" msgstr "Незалежна висота опорного шару" @@ -11795,7 +13335,7 @@ msgstr "" "більшегоризонтально, дозволяючи їм досягати більшої відстані." msgid "Preferred Branch Angle" -msgstr "" +msgstr "Бажаний кут повороту гілки" #. TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" msgid "" @@ -11803,6 +13343,9 @@ msgid "" "model. Use a lower angle to make them more vertical and more stable. Use a " "higher angle for branches to merge faster." msgstr "" +"Найкращий кут нахилу гілок, коли вони не повинні уникати моделі. " +"Використовуйте менший кут, щоб зробити їх більш вертикальними та стійкими. " +"Використовуйте вищий кут, щоб гілки швидше зливалися." msgid "Tree support branch distance" msgstr "Адаптивна висота шару" @@ -11812,7 +13355,7 @@ msgid "" msgstr "Цей параметр визначає відстань між сусідніми вузлами підтримки дерева." msgid "Branch Density" -msgstr "" +msgstr "Щільність гілок" #. TRN PrintSettings: "Organic supports" > "Branch Density" msgid "" @@ -11822,6 +13365,10 @@ msgid "" "interfaces instead of a high branch density value if dense interfaces are " "needed." msgstr "" +"Регулює щільність опорної структури, яка використовується для створення " +"кінчиків гілок. Вище значення призводить до кращих звисів, але опори важче " +"видаляти, тому рекомендується увімкнути верхні опорні інтерфейси замість " +"високого значення щільності гілок, якщо потрібні щільні інтерфейси." msgid "Adaptive layer height" msgstr "Адаптивна ширина шару" @@ -11850,11 +13397,11 @@ msgid "Distance from tree branch to the outermost brim line" msgstr "Відстань від гілки дерева до зовнішньої крайньої лінії кайми" msgid "Tip Diameter" -msgstr "" +msgstr "Діаметр кінчика" #. TRN PrintSettings: "Organic supports" > "Tip Diameter" msgid "Branch tip diameter for organic supports." -msgstr "" +msgstr "Діаметр кінчика гілки для органічних підтримок." msgid "Tree support branch diameter" msgstr "Діаметр гілки деревоподібної підтримки" @@ -11864,7 +13411,7 @@ msgstr "Цей параметр визначає початковий діаме #. TRN PrintSettings: #lmFIXME msgid "Branch Diameter Angle" -msgstr "" +msgstr "Діаметр гілки Кут нахилу гілок" #. TRN PrintSettings: "Organic supports" > "Branch Diameter Angle" msgid "" @@ -11873,9 +13420,12 @@ msgid "" "over their length. A bit of an angle can increase stability of the organic " "support." msgstr "" +"Кут нахилу діаметра гілок, оскільки вони поступово стають товстішими донизу. " +"Кут 0 призведе до того, що гілки матимуть рівномірну товщину по всій " +"довжині. Невеликий кут може збільшити стабільність органічної опори." msgid "Branch Diameter with double walls" -msgstr "" +msgstr "Діаметр гілки з двома стінками" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -11883,12 +13433,15 @@ msgid "" "printed with double walls for stability. Set this value to zero for no " "double walls." msgstr "" +"Гілки, площа яких більша за площу кола цього діаметру, будуть надруковані з " +"подвійними стінками для стабільності. Встановіть це значення рівним нулю, " +"щоб не друкувати подвійні стінки." msgid "Support wall loops" -msgstr "" +msgstr "Опорні стінові петлі" msgid "This setting specify the count of walls around support" -msgstr "" +msgstr "Цей параметр визначає кількість стінок навколо підтримки" msgid "Tree support with infill" msgstr "Підтримка дерева із заповненням" @@ -11901,13 +13454,16 @@ msgstr "" "великихПорожнини підтримки дерева" msgid "Activate temperature control" -msgstr "" +msgstr "Увімкнути контроль температури" msgid "" "Enable this option for chamber temperature control. An M191 command will be " "added before \"machine_start_gcode\"\n" "G-code commands: M141/M191 S(0-255)" msgstr "" +"Увімкніть цю опцію для керування температурою в камері. Перед " +"\"machine_start_gcode\" буде додано команду M191\n" +"Команди G-коду: M141/M191 S(0-255)" msgid "Chamber temperature" msgstr "Температура в камері" @@ -11921,6 +13477,13 @@ msgid "" "high to avoid cloggings, so 0 which stands for turning off is highly " "recommended" msgstr "" +"Вища температура камери може допомогти стримувати або зменшувати деформацію " +"та, можливо, підвищити міцність зв’язку між шарами для матеріалів високої " +"температури, таких як ABS, ASA, PC, PA тощо. У той же час, повітряна " +"фільтрація для ABS та ASA може стати гіршею. Однак для PLA, PETG, TPU, PVA " +"та інших матеріалів низької температури фактична температура камери не " +"повинна бути високою, щоб уникнути засмічення, тому рекомендується вимкнути " +"температуру камери (0)" msgid "Nozzle temperature for layers after the initial one" msgstr "Температура сопла для шарів після початкового" @@ -11944,12 +13507,14 @@ msgstr "" "зміни інструменту" msgid "This gcode is inserted when the extrusion role is changed" -msgstr "" +msgstr "Цей gcode вставляється, коли змінюється роль екструзії" msgid "" "Line width for top surfaces. If expressed as a %, it will be computed over " "the nozzle diameter." msgstr "" +"Ширина лінії для верхніх поверхонь. Якщо виражено у %, вона буде розрахована " +"по діаметру сопла." msgid "Speed of top surface infill which is solid" msgstr "Швидкість суцільного заповнення верхньої поверхні" @@ -12013,6 +13578,15 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform " "any excess retraction before the wipe, else it will be performed after." msgstr "" +"Опишіть, як довго сопло буде рухатися вздовж останньої траєкторії під час " +"втягування. \n" +"\n" +"Залежно від тривалості операції витирання, швидкості та тривалості " +"втягування екструдера/нитки, може знадобитися рух накату для нитки. \n" +"\n" +"Якщо встановити значення у параметрі \"Кількість втягування перед витиранням" +"\" нижче, надлишкове втягування буде виконано перед витиранням, інакше воно " +"буде виконано після нього." msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " @@ -12046,41 +13620,93 @@ msgid "Width of prime tower" msgstr "Ширина основної вежі" msgid "Wipe tower rotation angle" -msgstr "" +msgstr "Кут повороту вежі витирання" msgid "Wipe tower rotation angle with respect to x-axis." -msgstr "" +msgstr "Кут повороту вежі витирання за віссю Х." msgid "Stabilization cone apex angle" -msgstr "" +msgstr "Кут нахилу вершини стабілізаційного конуса" msgid "" "Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base." msgstr "" +"Кут на вершині конуса, який використовується для стабілізації очисної вежі. " +"Чим більший кут, тим ширша основа." msgid "Wipe tower purge lines spacing" -msgstr "" +msgstr "Протерти відстань між лініями продувки башти" msgid "Spacing of purge lines on the wipe tower." +msgstr "Відстань між лініями продувки на протиральній башті." + +msgid "Maximum wipe tower print speed" +msgstr "Максимальна швидкість друку протиральної башти" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." msgstr "" +"Максимальна швидкість друку під час продування у башті витирання та друку " +"розріджених шарів у башті витирання. Якщо під час продування швидкість " +"розрідженого заповнення або розрахована швидкість на основі максимальної " +"об'ємної швидкості нитки нижча, замість неї використовуватиметься найнижча " +"швидкість.\n" +"\n" +"Під час друку розріджених шарів, якщо швидкість по внутрішньому периметру " +"або розрахована швидкість на основі максимальної об'ємної швидкості нитки " +"нижча, буде використовуватися найнижча швидкість.\n" +"\n" +"Збільшення цієї швидкості може вплинути на стабільність башти, а також " +"збільшити силу, з якою сопло стикається з будь-якими згустками, що можуть " +"утворитися на башті витирання.\n" +"\n" +"Перш ніж збільшувати цей параметр понад значення за замовчуванням 90 мм/с, " +"переконайтеся, що принтер може надійно працювати на підвищених швидкостях і " +"що витікання під час заміни інструменту добре контролюється.\n" +"\n" +"Для зовнішніх периметрів вежі витирання використовується швидкість " +"внутрішнього периметра незалежно від цього параметра." msgid "Wipe tower extruder" -msgstr "" +msgstr "Очисна башта екструдера" msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." msgstr "" +"Екструдер для друку по периметру очищувальної вежі. Встановіть значення 0, " +"щоб використовувати той, що є в наявності (бажано нерозчинний)." msgid "Purging volumes - load/unload volumes" -msgstr "" +msgstr "Обсяги очищення - обсяги завантаження/розвантаження" msgid "" "This vector saves required volumes to change from/to each tool used on the " "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" +"Цей вектор зберігає необхідні об'єми для заміни кожного інструменту, що " +"використовується на вежі. Ці значення використовуються для спрощення " +"створення повних об'ємів очищення нижче." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -12088,12 +13714,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 "" +"Очищення після зміни філаменту буде виконуватися всередині заповнень " +"об’єктів. Це може зменшити кількість відходів і скоротити час друку. Якщо " +"стінки друкуються прозорим філаментом, заповнення зі змішаним кольором буде " +"видимим. Це не буде мати впливу, якщо не ввімкнено вежу для підготовки " +"філаменту." 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 " @@ -12106,10 +13740,10 @@ msgstr "" "включена первиннавежа." msgid "Maximal bridging distance" -msgstr "" +msgstr "Максимальна мостова відстань" msgid "Maximal distance between supports on sparse infill sections." -msgstr "" +msgstr "Максимальна відстань між підтримками на рідкісних ділянках заповнення." msgid "X-Y hole compensation" msgstr "Компенсація отвору XY" @@ -12139,7 +13773,7 @@ msgstr "" "проблему складання" msgid "Convert holes to polyholes" -msgstr "" +msgstr "Перетворення отворів у поліотвори" msgid "" "Search for almost-circular holes that span more than one layer and convert " @@ -12147,9 +13781,13 @@ msgid "" "compute the polyhole.\n" "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgstr "" +"Знайдіть майже круглі отвори, які охоплюють більше одного шару, і " +"перетворіть їхню геометрію в поліотвори. Використовуйте розмір сопла і " +"(найбільший) діаметр, щоб обчислити багатокутний отвір.\n" +"Дивіться http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgid "Polyhole detection margin" -msgstr "" +msgstr "Межа виявлення полігону" #, no-c-format, no-boost-format msgid "" @@ -12159,12 +13797,17 @@ msgid "" "broaden the detection.\n" "In mm or in % of the radius." msgstr "" +"Максимальне відхилення точки від розрахункового радіуса кола.\n" +"Оскільки циліндри часто експортуються як трикутники різного розміру, точки " +"можуть не потрапляти на окружність кола. Цей параметр дає змогу розширити " +"область виявлення.\n" +"у мм або у % від радіуса." msgid "Polyhole twist" -msgstr "" +msgstr "Скручування полігонів" msgid "Rotate the polyhole every layer." -msgstr "" +msgstr "Повертайте полігон кожен шар." msgid "G-code thumbnails" msgstr "Мініатюри G-code" @@ -12177,12 +13820,14 @@ msgstr "" "наступному форматі: «XxY, XxY»,..." msgid "Format of G-code thumbnails" -msgstr "" +msgstr "Формат мініатюр G-коду" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " "QOI for low memory firmware" msgstr "" +"Формат мініатюр G-коду: PNG для найкращої якості, JPG для найменшого " +"розміру, QOI для прошивок з низьким об'ємом пам'яті" msgid "Use relative E distances" msgstr "Використовуйте відносні відстані E екструдера" @@ -12193,12 +13838,19 @@ msgid "" "Wipe tower is only compatible with relative mode. It is recommended on most " "printers. Default is checked" msgstr "" +"Відносна екструзія рекомендується при використанні опції \"label_objects\". " +"Деякі екструдери працюють краще, якщо ця опція не включена (режим абсолютної " +"екструзії). Витираюча вежа сумісна лише з відносним режимом. Він " +"рекомендується для більшості принтерів. За замовчуванням увімкнено" msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" +"Класичний генератор стін виробляє стіни з постійною шириною екструзії, а для " +"дуже тонких ділянок використовується заповнення прогалин. Двигун Arachne " +"виробляє стіни зі змінною шириною екструзії." msgid "Classic" msgstr "Класичний" @@ -12274,9 +13926,13 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" +"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" msgid "Minimum wall length" -msgstr "" +msgstr "Мінімальна довжина стінок" msgid "" "Adjust this value to prevent short, unclosed walls from being printed, which " @@ -12288,15 +13944,20 @@ msgid "" "top-surface. 'One wall threshold' is only visibile if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" +"Налаштуйте це значення, щоб запобігти друкуванню коротких незакритих стін, " +"що може збільшити час друку. Вищі значення видаляють більше і довші стіни." msgid "First layer minimum wall width" -msgstr "" +msgstr "Мінімальна ширина стінки першого шару" msgid "" "The minimum wall width that should be used for the first layer is " "recommended to be set to the same size as the nozzle. This adjustment is " "expected to enhance adhesion." msgstr "" +"Мінімальну ширину стінки, яку слід використовувати для першого шару, " +"рекомендується встановлювати такого ж розміру, як і сопло. Очікується, що " +"таке налаштування покращить адгезію." msgid "Minimum wall width" msgstr "Мінімальна ширина периметра" @@ -12338,10 +13999,10 @@ msgid " not in range " msgstr " не в зоні " msgid "Minimum save" -msgstr "" +msgstr "Мінімум" msgid "export 3mf with minimum size." -msgstr "" +msgstr "експортувати 3mf з мінімальним розміром." msgid "No check" msgstr "Без перевірки" @@ -12351,26 +14012,28 @@ msgstr "" "Не виконуйте перевірки дійсності, наприклад, перевірку конфліктів шляхуgcode." msgid "Ensure on bed" -msgstr "" +msgstr "Переконайтеся, що на столі" msgid "" "Lift the object above the bed when it is partially below. Disabled by default" msgstr "" +"Підніміть об'єкт над ліжком, коли він частково знаходиться під ним. За " +"замовчуванням вимкнено" msgid "Orient Options" -msgstr "" +msgstr "Параметри орієнтації" msgid "Orient options: 0-disable, 1-enable, others-auto" -msgstr "" +msgstr "Орієнтація: 0 - вимкнено, 1 - увімкнено, інші - автоматично" msgid "Rotation angle around the Z axis in degrees." -msgstr "" +msgstr "Кут обертання навколо осі Z у градусах." msgid "Rotate around Y" -msgstr "" +msgstr "Обертати навколо осі Y" msgid "Rotation angle around the Y axis in degrees." -msgstr "" +msgstr "Кут обертання навколо осі Y у градусах." msgid "Data directory" msgstr "Каталог даних" @@ -12384,131 +14047,149 @@ msgstr "" "підтримки різних профілів або для ввімкнення конфігурацій із сховища мережі." msgid "Load custom gcode" -msgstr "" +msgstr "Завантажити користувацький gcode" msgid "Load custom gcode from json" -msgstr "" +msgstr "Завантажити користувацький код з json" msgid "Current z-hop" -msgstr "" +msgstr "Поточний Z-стрибок" msgid "Contains z-hop present at the beginning of the custom G-code block." -msgstr "" +msgstr "Містить Z-стрибок, присутній на початку користувацького блоку G-коду." msgid "" "Position of the extruder at the beginning of the custom G-code block. If the " "custom G-code travels somewhere else, it should write to this variable so " "PrusaSlicer knows where it travels from when it gets control back." msgstr "" +"Позиція екструдера на початку блоку користувацького G-коду. Якщо " +"користувацький G-код переміщується в інше місце, він повинен бути записаний " +"в цю змінну, щоб PrusaSlicer знав, звідки він переміщується, коли він " +"отримає керування назад." msgid "" "Retraction state at the beginning of the custom G-code block. If the custom " "G-code moves the extruder axis, it should write to this variable so " "PrusaSlicer deretracts correctly when it gets control back." msgstr "" +"Стан втягування на початку блоку користувацького G-коду. Якщо користувацький " +"G-код переміщує вісь екструдера, він повинен записати в цю змінну, щоб " +"PrusaSlicer коректно робив накат, коли повертає керування." msgid "Extra deretraction" -msgstr "" +msgstr "Додаткове втягування" msgid "Currently planned extra extruder priming after deretraction." -msgstr "" +msgstr "В даний час планується додаткове ґрунтування екструдера після накату." msgid "Current extruder" -msgstr "" +msgstr "Поточний екструдер" msgid "Zero-based index of currently used extruder." -msgstr "" +msgstr "Нульовий індекс екструдера, що використовується в даний момент." msgid "Current object index" -msgstr "" +msgstr "Поточний індекс об'єкту" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." msgstr "" +"Специфічний для послідовного друку. Нульовий індекс об'єкта, що друкується в " +"даний момент." msgid "Has wipe tower" -msgstr "" +msgstr "Має протиральну вежу" msgid "Whether or not wipe tower is being generated in the print." -msgstr "" +msgstr "Незалежно від того, чи створюється вежа витирання на відбитку чи ні." msgid "Initial extruder" -msgstr "" +msgstr "Початковий екструдер" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." msgstr "" +"Нульовий індекс першого екструдера, що використовується у друці. Те саме, що " +"й initial_tool." msgid "Initial tool" -msgstr "" +msgstr "Початковий інструмент" msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" +"Нульовий індекс першого екструдера, що використовується у друці. Те саме, що " +"й initial_extruder." msgid "Is extruder used?" -msgstr "" +msgstr "Чи використовується екструдер?" msgid "Vector of bools stating whether a given extruder is used in the print." msgstr "" +"Вектор bool, що вказує на те, чи використовується даний екструдер у друці." msgid "Volume per extruder" -msgstr "" +msgstr "Об'єм на один екструдер" msgid "Total filament volume extruded per extruder during the entire print." -msgstr "" +msgstr "Загальний об'єм нитки, екструдованої одним екструдером за весь друк." msgid "Total toolchanges" -msgstr "" +msgstr "Повні зміни інструменту" msgid "Number of toolchanges during the print." -msgstr "" +msgstr "Кількість замін під час друку." msgid "Total volume" -msgstr "" +msgstr "Загальний обсяг" msgid "Total volume of filament used during the entire print." -msgstr "" +msgstr "Загальний об’єм нитки, використаної під час усього друку." msgid "Weight per extruder" -msgstr "" +msgstr "Вага одного екструдера" msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." -msgstr "" +msgstr "Вага на один екструдер, що видавлюється протягом усього друку." msgid "Total weight" -msgstr "" +msgstr "Загальна вага" msgid "" "Total weight of the print. Calculated from filament_density value in " "Filament Settings." msgstr "" +"Загальна вага друку. Розраховується на основі значення filament_density у " +"налаштуваннях Filament." msgid "Total layer count" -msgstr "" +msgstr "Загальна кількість шарів" msgid "Number of layers in the entire print." -msgstr "" +msgstr "Кількість шарів усього друку." msgid "Number of objects" -msgstr "" +msgstr "Кількість об'єктів" msgid "Total number of objects in the print." -msgstr "" +msgstr "Загальна кількість об’єктів у друці." msgid "Number of instances" -msgstr "" +msgstr "Кількість екземплярів" msgid "Total number of object instances in the print, summed over all objects." msgstr "" +"Загальна кількість екземплярів об’єктів у друці, підсумована за всіма " +"об’єктами." msgid "Scale per object" -msgstr "" +msgstr "Масштаб на об'єкт" msgid "" "Contains a string with the information about what scaling was applied to the " @@ -12516,114 +14197,124 @@ msgid "" "index 0).\n" "Example: 'x:100% y:50% z:100'." msgstr "" +"Містить рядок з інформацією про те, який масштаб було застосовано до окремих " +"об'єктів. Базова індексація об'єктів нульова (перший об'єкт має індекс 0).\n" +"Приклад: 'x:100% y:50% z:100'." msgid "Input filename without extension" -msgstr "" +msgstr "Введіть назву файлу без розширення" msgid "Source filename of the first object, without extension." -msgstr "" +msgstr "Ім'я вихідного файлу першого об'єкта без розширення." msgid "" "The vector has two elements: x and y coordinate of the point. Values in mm." -msgstr "" +msgstr "Вектор має два елементи: X і Y координати точки. Значення в мм." msgid "" "The vector has two elements: x and y dimension of the bounding box. Values " "in mm." msgstr "" +"Вектор має два елементи: розміри X і Y обмежувальної рамки. Значення в мм." msgid "First layer convex hull" -msgstr "" +msgstr "Перший шар опуклої оболонки" msgid "" "Vector of points of the first layer convex hull. Each element has the " "following format:'[x, y]' (x and y are floating-point numbers in mm)." msgstr "" +"Вектор точок опуклої оболонки першого шару. Кожен елемент має такий формат: " +"'[x, y]' (x і y — числа з плаваючою комою в мм)." msgid "Bottom-left corner of first layer bounding box" -msgstr "" +msgstr "Нижній лівий кут обмежувальної рамки першого шару" msgid "Top-right corner of first layer bounding box" -msgstr "" +msgstr "Верхній правий кут обмежувальної рамки першого шару" msgid "Size of the first layer bounding box" -msgstr "" +msgstr "Розмір обмежувальної рамки першого шару" msgid "Bottom-left corner of print bed bounding box" -msgstr "" +msgstr "Нижній лівий кут обмежувальної рамки для друку" msgid "Top-right corner of print bed bounding box" -msgstr "" +msgstr "Верхній правий кут обмежувальної рамки для друку" msgid "Size of the print bed bounding box" -msgstr "" +msgstr "Розмір обмежувальної рамки для друку" msgid "Timestamp" -msgstr "" +msgstr "Мітка часу" msgid "String containing current time in yyyyMMdd-hhmmss format." -msgstr "" +msgstr "Рядок, що містить поточний час у форматі ррррММДД-ГГММСС." msgid "Day" -msgstr "" +msgstr "День" msgid "Hour" -msgstr "" +msgstr "Година" msgid "Minute" -msgstr "" +msgstr "Минута" msgid "Print preset name" -msgstr "" +msgstr "Друк назви попередньо налаштованої" msgid "Name of the print preset used for slicing." -msgstr "" +msgstr "Назва стилю друку, яка використовується для нарізки." msgid "Filament preset name" -msgstr "" +msgstr "Попередня назва нитки" msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" +"Назви попередньо налаштованої нитки, яка використовується для нарізки. " +"Змінна — це вектор, що містить одне ім’я для кожного екструдера." msgid "Printer preset name" -msgstr "" +msgstr "Назва попередньо налаштованого принтера" msgid "Name of the printer preset used for slicing." msgstr "" +"Назва попередньо налаштованого принтера, що використовується для нарізки." msgid "Physical printer name" -msgstr "" +msgstr "Ім'я фізичного принтера" msgid "Name of the physical printer used for slicing." -msgstr "" +msgstr "Назва фізичного принтера, який використовується для нарізки." msgid "Layer number" -msgstr "" +msgstr "Номер шару" msgid "Index of the current layer. One-based (i.e. first layer is number 1)." -msgstr "" +msgstr "Індекс поточного шару. На одній основі (тобто перший шар номер 1)." msgid "Layer z" -msgstr "" +msgstr "Шар Z" msgid "" "Height of the current layer above the print bed, measured to the top of the " "layer." msgstr "" +"Висота поточного шару над поверхнею стола, виміряна до верхньої частини шару." msgid "Maximal layer z" -msgstr "" +msgstr "Максимальний шар Z" msgid "Height of the last layer above the print bed." -msgstr "" +msgstr "Висота останнього шару над друкарським столом." msgid "Filament extruder ID" -msgstr "" +msgstr "ID номер екструдера нитки" msgid "The current extruder ID. The same as current_extruder." -msgstr "" +msgstr "Поточний ідентифікатор екструдера. Те саме, що й current_extruder." msgid "Error in zip archive" msgstr "Помилка у zip архіві" @@ -12719,102 +14410,108 @@ msgstr "Підтримка: розповсюдження гілок на шар 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 "" +msgstr "Не вдалося завантажити файл моделі." msgid "The supplied file couldn't be read because it's empty" -msgstr "" +msgstr "Наданий файл не вдалося прочитати, оскільки він порожній" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" +"Невідомий формат файлу: вхідний файл повинен мати розширення .3mf або .zip." +"amf." msgid "Canceled" -msgstr "" +msgstr "Скасовано" msgid "load_obj: failed to parse" -msgstr "" +msgstr "помилка завантаження файлу OBJ: не вдалося розпізнати формат" + +msgid "load mtl in obj: failed to parse" +msgstr "не вдалося розпізнати mtl у файлі obj: помилка парсингу" msgid "The file contains polygons with more than 4 vertices." -msgstr "" +msgstr "Цей файл містить полігони з більше ніж 4 вершинами." msgid "The file contains polygons with less than 2 vertices." -msgstr "" +msgstr "У файлі містяться полігони з менш ніж 2 вершинами." msgid "The file contains invalid vertex index." -msgstr "" +msgstr "У файлі містяться недійсний індекс вершини." msgid "This OBJ file couldn't be read because it's empty." msgstr "" +"Цей файл формату OBJ не може бути прочитаний через те, що він порожній." msgid "Flow Rate Calibration" -msgstr "" +msgstr "Калібрування витрати матеріалу" msgid "Max Volumetric Speed Calibration" -msgstr "" +msgstr "Максимальна калібрування об’ємної швидкості" msgid "Manage Result" -msgstr "" +msgstr "Керування результатом" msgid "Manual Calibration" -msgstr "" +msgstr "Ручне калібрування" msgid "Result can be read by human eyes." -msgstr "" +msgstr "Результат може бути прочитаний людським оком." msgid "Auto-Calibration" -msgstr "" +msgstr "Автокалібрування" msgid "We would use Lidar to read the calibration result" -msgstr "" +msgstr "Ми використовуватимемо Лідар для зчитування результату калібрування" msgid "Prev" -msgstr "" +msgstr "Попередній" msgid "Recalibration" -msgstr "" +msgstr "Перекалібрування" msgid "Calibrate" -msgstr "" +msgstr "Калібрувати" msgid "Finish" -msgstr "" +msgstr "Завершити" msgid "How to use calibration result?" -msgstr "" +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" +"підтримує калібрування. Будь ласка, оновіть вбудоване програмне \n" +"забезпечення принтера." msgid "Calibration not supported" -msgstr "" +msgstr "Калібрування не підтримується" msgid "Error desc" -msgstr "" +msgstr "Опис помилки" msgid "Extra info" -msgstr "" +msgstr "Додаткова інформація" msgid "Flow Dynamics" -msgstr "" +msgstr "Динаміка потоку" msgid "Flow Rate" -msgstr "" +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 "" +msgstr "Максимальна об’ємна швидкість" #, c-format, boost-format msgid "" @@ -12824,62 +14521,104 @@ msgid "" "End value: > Start value\n" "Value step: >= %.3f)" msgstr "" +"Будь ласка, введіть дійсні значення:\n" +"Початкове значення: >= %.1f\n" +"Кінцеве значення: <= %.1f\n" +"Кінцеве значення: > Початкового значення\n" +"Крок значення: >= %.3f)" msgid "The name cannot be empty." -msgstr "" +msgstr "Ім’я не може бути порожнім." #, c-format, boost-format msgid "The selected preset: %s is not found." -msgstr "" +msgstr "Обраний пресет: %s не знайдено." msgid "The name cannot be the same as the system preset name." -msgstr "" +msgstr "Назва не може бути такою самою, як системна назва." msgid "The name is the same as another existing preset name" -msgstr "" +msgstr "Назва така сама, як інша існуюча назва налаштування" msgid "create new preset failed." -msgstr "" +msgstr "не вдалося створити новий передвстановлений параметр." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" +"Ви впевнені, що хочете скасувати поточну калібрування і повернутися на " +"домашню сторінку?" msgid "No Printer Connected!" -msgstr "" +msgstr "Принтер не підключений!" msgid "Printer is not connected yet." -msgstr "" +msgstr "Принтер ще не підключено." msgid "Please select filament to calibrate." -msgstr "" +msgstr "Будь ласка, виберіть філамент для калібрування." msgid "The input value size must be 3." +msgstr "Розмір введеного значення повинен бути 3." + +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" msgstr "" +"Цей тип машини може зберігати лише 16 результатів історії на сопло. Ви " +"можете видалити існуючі історичні результати та потім розпочати " +"калібрування. Або ви можете продовжити калібрування, але ви не зможете " +"створювати нові історичні результати калібрування. \n" +"Ви все ще хочете продовжити калібрування?" msgid "Connecting to printer..." -msgstr "" +msgstr "Підключення до принтера…" msgid "The failed test result has been dropped." -msgstr "" +msgstr "Неуспішний результат тесту було відхилено." msgid "Flow Dynamics Calibration result has been saved to the printer" +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 override the historical result?" msgstr "" +"Вже існує історичний результат калібрування з такою самою назвою: %s. " +"Зберігається лише один з результатів з такою самою назвою. Ви впевнені, що " +"хочете перезаписати історичний результат?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Цей тип машини може зберігати лише %d результатів історії на сопло. Цей " +"результат не буде збережений." msgid "Internal Error" -msgstr "" +msgstr "Внутрішня помилка" msgid "Please select at least one filament for calibration" -msgstr "" +msgstr "Будь ласка, виберіть принаймні один матеріал для калібрування" msgid "Flow rate calibration result has been saved to preset" msgstr "" +"Результат калібрування витрати матеріалу було збережено в налаштування за " +"замовчуванням" msgid "Max volumetric speed calibration result has been saved to preset" msgstr "" +"Результат калібрування максимальної об’ємної швидкості було збережено в " +"налаштування попередньо заданого значення" msgid "When do you need Flow Dynamics Calibration" -msgstr "" +msgstr "Коли потрібна калібрування динаміки потоку" msgid "" "We now have added the auto-calibration for different filaments, which is " @@ -12891,9 +14630,19 @@ msgid "" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." msgstr "" +"Зараз у нас є можливість автоматичної калібрації для різних філаментів, яка " +"є повністю автоматизованою, і результат буде збережено в принтері для " +"подальшого використання. Вам потрібно робити калібрування лише в таких " +"обмежених випадках:\n" +"\n" +"1. Якщо ви вводите новий філамент різних брендів/моделей або філамент " +"зволожений;\n" +"2. Якщо сопло зношене або замінене новим;\n" +"3. Якщо максимальна об’ємна швидкість або температура друку змінена в " +"налаштуваннях філаменту." msgid "About this calibration" -msgstr "" +msgstr "Про це калібрування" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" @@ -12905,10 +14654,10 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 " @@ -12916,7 +14665,7 @@ msgid "" msgstr "" msgid "When to use Flow Rate Calibration" -msgstr "" +msgstr "Коли використовувати калібрування рівня потоку" msgid "" "After using Flow Dynamics Calibration, there might still be some extrusion " @@ -12929,12 +14678,28 @@ msgid "" "4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " "they should be." msgstr "" +"Після використання калібрування Flow Dynamics можуть все ще виникати деякі " +"проблеми з екструзією, такі як:\n" +"\n" +"Перекістювання: Зайвий матеріал на надрукованому об’єкті, утворення комочків " +"або прищепок, або шари виглядають товщими, ніж очікувалося, і " +"неоднорідними.\n" +"Недостача матеріалу: Дуже тонкі шари, слабка міцність заповнення або " +"прогалини в верхньому шарі моделі, навіть при повільному друку.\n" +"Погана якість поверхні: Поверхня ваших друків виглядає шершавою або " +"нерівною.\n" +"Слабка міцність конструкції: Друки ламаються легко або не виглядають " +"настільки міцними, як повинні бути." 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 "" +"Крім того, калібрування рівня потоку є надзвичайно важливим для матеріалів, " +"як наприклад LW-PLA, які утворюють піну і використовуються в моделях літаків " +"для радіокерованої авіації. Ці матеріали значно розширюються при нагріванні, " +"і калібрування надає корисну посилання на рівень потоку." msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " @@ -12944,6 +14709,13 @@ msgid "" "you still see the listed defects after you have done other calibrations. For " "more details, please check out the wiki article." msgstr "" +"Калібрування швидкості потоку вимірює співвідношення очікуваного до " +"фактичного обсягу викиду. За замовчуванням цей налаштування добре працює на " +"принтерах Bambu Lab і з офіційними філаментами, оскільки вони були " +"попередньо калібровані та налаштовані. Для звичайного філаменту вам, як " +"правило, не потрібно виконувати калібрування швидкості потоку, якщо ви все " +"ще бачите вказані дефекти після проведення інших калібрувань. Для отримання " +"більш докладної інформації ознайомтеся з статтею у вікі." msgid "" "Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " @@ -12963,239 +14735,277 @@ msgid "" "can lead to sub-par prints or printer damage. Please make sure to carefully " "read and understand the process before doing it." msgstr "" +"Автоматичне калібрування швидкості потоку використовує технологію Micro-" +"Lidar від Bambu Lab і безпосередньо вимірює калібровочні зразки. Однак " +"будьте попереджені, що ефективність і точність цього методу можуть бути " +"порушені для певних типів матеріалів. Зокрема, філаменти, які є прозорими чи " +"напівпрозорими, мають блискучі частинки або мають високий ступінь відбиття, " +"можуть бути не підходящими для цього калібрування і давати результати, які " +"не відповідають вимогам.\n" +"\n" +"Результати калібрування можуть варіюватися між кожним калібруванням або " +"філаментом. Ми постійно вдосконалюємо точність і сумісність цього " +"калібрування завдяки оновленням в програмному забезпеченні.\n" +"\n" +"Увага: Калібрування швидкості потоку - це складний процес, який слід " +"спробувати лише тим, хто повністю розуміє його призначення і наслідки. " +"Неправильне використання може призвести до неякісних друків або пошкодження " +"принтера. Будь ласка, перед тим як виконувати калібрування, докладно " +"ознайомтеся та розберіться у процесі." msgid "When you need Max Volumetric Speed Calibration" -msgstr "" +msgstr "Коли вам потрібна калібрування максимальної об'ємної швидкості" msgid "Over-extrusion or under extrusion" -msgstr "" +msgstr "Перевитрати або недостатній видавання" msgid "Max Volumetric Speed calibration is recommended when you print with:" msgstr "" +"Калібрування максимальної об'ємної швидкості рекомендується при друку з " +"такими матеріалами:" msgid "material with significant thermal shrinkage/expansion, such as..." -msgstr "" +msgstr "матеріалами зі значним термічним звуженням/розширенням, такими як..." msgid "materials with inaccurate filament diameter" -msgstr "" +msgstr "матеріалами з неточним діаметром нитки" msgid "We found the best Flow Dynamics Calibration Factor" -msgstr "" +msgstr "Ми знайшли найкращий коефіцієнт калібрування динаміки потоку" msgid "" "Part of the calibration failed! You may clean the plate and retry. The " "failed test result would be dropped." msgstr "" +"Частина калібрування не вдалася! Ви можете очистити плиту і повторити " +"спробу. Невдалі результати тесту будуть видалені." msgid "" "*We recommend you to add brand, materia, type, and even humidity level in " "the Name" msgstr "" +"*Ми рекомендуємо вам додати бренд, матеріал, тип і навіть рівень вологості у " +"назву" msgid "Failed" -msgstr "" +msgstr "Помилка" + +msgid "Please enter the name you want to save to printer." +msgstr "Будь ласка, введіть ім’я, яке ви хочете зберегти на принтері." + +msgid "The name cannot exceed 40 characters." +msgstr "Ім’я не може перевищувати 40 символів." 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?" +"want to override the other results?" msgstr "" +"Тільки один із результатів з однаковою назвою буде збережено. Ви впевнені, " +"що хочете перезаписати інші результати?" msgid "Please find the best line on your plate" -msgstr "" +msgstr "Будь ласка, знайдіть найкращу лінію на вашій пластині" -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "Будь ласка, знайдіть кут з ідеальним ступенем витіснення" msgid "Input Value" -msgstr "" +msgstr "Введіть значення" msgid "Save to Filament Preset" -msgstr "" +msgstr "Зберегти в попередньому матеріалі" msgid "Preset" -msgstr "" +msgstr "Попередній" msgid "Record Factor" -msgstr "" +msgstr "Фактор запису" msgid "We found the best flow ratio for you" -msgstr "" +msgstr "Ми знайшли найкраще співвідношення потоку для вас" msgid "Flow Ratio" -msgstr "" +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 "" +msgstr "Будь ласка, введіть назву попереднього, який ви хочете зберегти." msgid "Calibration1" -msgstr "" +msgstr "Калібрування1" msgid "Calibration2" -msgstr "" +msgstr "Калібрування2" msgid "Please find the best object on your plate" -msgstr "" +msgstr "Будь ласка, знайдіть найкращий об'єкт на вашій пластині" msgid "Fill in the value above the block with smoothest top surface" -msgstr "" +msgstr "Заповніть значення над блоком з найгладшою верхньою поверхнею" msgid "Skip Calibration2" -msgstr "" +msgstr "Пропустити калібрування2" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "" +msgstr "співвідношення потоку : %s " msgid "Please choose a block with smoothest top surface" -msgstr "" +msgstr "Будь ласка, виберіть блок з найгладшою верхньою поверхнею" msgid "Please choose a block with smoothest top surface." -msgstr "" +msgstr "Будь ласка, виберіть блок з найгладшою верхньою поверхнею." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" msgstr "" +"Будь ласка, введіть дійсне значення (0 <= Максимальна об'ємна швидкість <= " +"60)" msgid "Calibration Type" -msgstr "" +msgstr "Тип калібрування" msgid "Complete Calibration" -msgstr "" +msgstr "Повне калібрування" msgid "Fine Calibration based on flow ratio" -msgstr "" +msgstr "Точне калібрування на основі співвідношення потоку" msgid "Title" -msgstr "" +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 "" +msgstr "Параметри друку" msgid "Plate Type" -msgstr "" +msgstr "Тип стільця" msgid "filament position" -msgstr "" +msgstr "положення нитки" msgid "External Spool" -msgstr "" +msgstr "Зовнішній барабан" msgid "Filament For Calibration" -msgstr "" +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" +"- Різні бренди та сімейства ниток (Бренд = Bambu, Сімейство = Basic, Matte)" msgid "Pattern" -msgstr "" +msgstr "Зразок" msgid "Method" msgstr "Метод" #, c-format, boost-format msgid "%s is not compatible with %s" -msgstr "" +msgstr "%s несумісний з %s" msgid "TPU is not supported for Flow Dynamics Auto-Calibration." -msgstr "" +msgstr "TPU не підтримується для автокалібрування Flow Dynamics." msgid "Connecting to printer" -msgstr "" +msgstr "Підключення до принтера" msgid "From k Value" -msgstr "" +msgstr "Зі значення k" msgid "To k Value" -msgstr "" +msgstr "Для значення k" msgid "Step value" -msgstr "" - -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" +msgstr "Величина кроку" msgid "The nozzle diameter has been synchronized from the printer Settings" -msgstr "" +msgstr "Діаметр сопла було синхронізовано з налаштувань принтера" msgid "From Volumetric Speed" -msgstr "" +msgstr "З об'ємною швидкістю" msgid "To Volumetric Speed" -msgstr "" +msgstr "До об'ємної швидкості" msgid "Flow Dynamics Calibration Result" -msgstr "" +msgstr "Результат калібрування динаміки потоку" + +msgid "New" +msgstr "Новий" msgid "No History Result" -msgstr "" +msgstr "Немає історії результатів" msgid "Success to get history result" -msgstr "" +msgstr "Успішно отримано історичний результат" msgid "Refreshing the historical Flow Dynamics Calibration records" -msgstr "" +msgstr "Оновлення історичних записів калібрування динаміки потоку" msgid "Action" -msgstr "" +msgstr "Дія" + +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "Цей тип машини може зберігати лише %d результатів історії на сопло." msgid "Edit Flow Dynamics Calibration" -msgstr "" +msgstr "Редагувати калібрування динаміки потоку" + +msgid "New Flow Dynamic Calibration" +msgstr "Нове калібрування динамічного потоку" + +msgid "Ok" +msgstr "Добре" + +msgid "The filament must be selected." +msgstr "Філамент повинен бути обраний." msgid "Network lookup" -msgstr "" +msgstr "Мережевий пошук" msgid "Address" -msgstr "" +msgstr "Адреса" msgid "Hostname" -msgstr "" +msgstr "Ім'я хоста" msgid "Service name" -msgstr "" +msgstr "Назва служби" msgid "OctoPrint version" -msgstr "" +msgstr "Версія OctoPrint" msgid "Searching for devices" -msgstr "" +msgstr "Пошук пристроїв" msgid "Finished" -msgstr "" +msgstr "Завершено" msgid "Multiple resolved IP addresses" -msgstr "" +msgstr "Кілька дозволених IP-адрес" #, boost-format msgid "" "There are several IP addresses resolving to hostname %1%.\n" "Please select one that should be used." msgstr "" +"Є кілька IP-адрес, які перетворюються на ім’я хоста %1%.\n" +"Будь ласка, виберіть той, який слід використовувати." msgid "PA Calibration" msgstr "Калібрування РА" @@ -13216,7 +15026,7 @@ msgid "PA Line" msgstr "РА лінія" msgid "PA Pattern" -msgstr "" +msgstr "PA Патерн" msgid "Start PA: " msgstr "Стартовий PA: " @@ -13253,6 +15063,9 @@ msgstr "ABS/ASA" msgid "PETG" msgstr "PETG" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "TPU" @@ -13280,6 +15093,10 @@ msgid "" "End temp: >= 170\n" "Start temp > End temp + 5)" msgstr "" +"Будь ласка, введіть правильні значення:\n" +"Початкова температура: <= 350\n" +"Кінцева температура: >= 170\n" +"Початкова температура > Кінцева температура + 5)" msgid "Max volumetric speed test" msgstr "Тест максимальної об'ємної швидкості" @@ -13299,6 +15116,10 @@ msgid "" "step >= 0\n" "end > start + step)" msgstr "" +"Будь ласка, введіть дійсні значення:\n" +"старт > 0 \n" +"крок >= 0\n" +"кінець > початок + крок)" msgid "VFA test" msgstr "VFA тест" @@ -13315,6 +15136,10 @@ msgid "" "step >= 0\n" "end > start + step)" msgstr "" +"Будь ласка, введіть коректні значення:\n" +"початок > 10\n" +"крок >= 0\n" +"кінець > початок + крок)" msgid "Start retraction length: " msgstr "Початкова довжина ретракту: " @@ -13326,338 +15151,371 @@ msgid "mm/mm" msgstr "мм/мм" msgid "Send G-Code to printer host" -msgstr "" +msgstr "Надіслання G-коду на хост друку" msgid "Upload to Printer Host with the following filename:" -msgstr "" +msgstr "Завантажити на хост принтера з наступним іменем файлу:" msgid "Use forward slashes ( / ) as a directory separator if needed." msgstr "" +"Використовуйте косі нахилу ( / ) як роздільник каталогів, якщо потрібно." msgid "Upload to storage" +msgstr "Завантажити до сховища" + +msgid "Switch to Device tab after upload." msgstr "" #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "" +"Назва файлу для завантаження не закінчується на \"%s\". Бажаєте продовжити?" msgid "Upload" -msgstr "" +msgstr "Завантаження" msgid "Print host upload queue" -msgstr "" +msgstr "Черга завантаження на хост друку" msgid "ID" -msgstr "" +msgstr "Ідентифікатор" msgid "Progress" -msgstr "" +msgstr "Прогрес" msgid "Host" -msgstr "" +msgstr "Хост" msgctxt "OfFile" msgid "Size" -msgstr "" +msgstr "Розмір" msgid "Filename" -msgstr "" +msgstr "Ім'я файлу" msgid "Cancel selected" -msgstr "" +msgstr "Скасувати вибране" msgid "Show error message" -msgstr "" +msgstr "Показати повідомлення про помилку" msgid "Enqueued" -msgstr "" +msgstr "У черзі" msgid "Uploading" -msgstr "" +msgstr "Завантаження" msgid "Cancelling" -msgstr "" +msgstr "Скасування" msgid "Error uploading to print host" -msgstr "" +msgstr "Помилка завантаження на хост друку" msgid "Unable to perform boolean operation on selected parts" -msgstr "" +msgstr "Не вдається виконати булеву операцію на вибраних частинах" msgid "Mesh Boolean" -msgstr "" +msgstr "Булева операція меша" msgid "Union" -msgstr "" +msgstr "Об'єднання" msgid "Difference" -msgstr "" +msgstr "Різниця" msgid "Intersection" -msgstr "" +msgstr "Перетин" msgid "Source Volume" -msgstr "" +msgstr "Об'єм джерела" msgid "Tool Volume" -msgstr "" +msgstr "Об'єм інструмента" msgid "Subtract from" -msgstr "" +msgstr "Відняти від" msgid "Subtract with" -msgstr "" +msgstr "Відняти з" msgid "selected" -msgstr "" +msgstr "вибрані" msgid "Part 1" -msgstr "" +msgstr "Частина 1" msgid "Part 2" -msgstr "" +msgstr "Частина 2" msgid "Delete input" -msgstr "" +msgstr "Видалити вхід" msgid "Network Test" -msgstr "" +msgstr "Тест мережі" msgid "Start Test Multi-Thread" -msgstr "" +msgstr "Розпочати тестування багатопотоково" msgid "Start Test Single-Thread" -msgstr "" +msgstr "Розпочати тестування однопотоково" msgid "Export Log" -msgstr "" +msgstr "Експортувати журнал (лог)" msgid "OrcaSlicer Version:" -msgstr "" +msgstr "Версія OrcaSlicer:" msgid "System Version:" -msgstr "" +msgstr "Версія системи:" msgid "DNS Server:" -msgstr "" +msgstr "DNS-сервер:" msgid "Test OrcaSlicer(GitHub)" -msgstr "" +msgstr "Перевірте OrcaSlicer на (GitHub)" msgid "Test OrcaSlicer(GitHub):" -msgstr "" +msgstr "Перевірте OrcaSlicer (GitHub):" msgid "Test Bing.com" -msgstr "" +msgstr "Tест Bing.com" msgid "Test bing.com:" -msgstr "" +msgstr "Tест bing.com:" msgid "Log Info" -msgstr "" +msgstr "Інформація журналу" msgid "Select filament preset" -msgstr "" +msgstr "Вибрати налаштування філаменту" msgid "Create Filament" -msgstr "" +msgstr "Створити Філамент" msgid "Create Based on Current Filament" -msgstr "" +msgstr "Створити на основі поточного філаменту" msgid "Copy Current Filament Preset " -msgstr "" +msgstr "Копіювати поточний набір параметрів філаменту " msgid "Basic Information" -msgstr "" +msgstr "Основна інформація" msgid "Add Filament Preset under this filament" -msgstr "" +msgstr "Додати налаштування філаменту під цим філаментом" msgid "We could create the filament presets for your following printer:" msgstr "" +"Ми можемо створити налаштування філаменту для вашого наступного принтера:" msgid "Select Vendor" -msgstr "" +msgstr "Вибрати виробника" msgid "Input Custom Vendor" -msgstr "" +msgstr "Введіть власного виробника" msgid "Can't find vendor I want" -msgstr "" +msgstr "Не можу знайти виробника, якого я хочу" msgid "Select Type" -msgstr "" +msgstr "Виберіть Тип" msgid "Select Filament Preset" -msgstr "" +msgstr "Виберіть налаштування філаменту" msgid "Serial" -msgstr "" +msgstr "Серійний номер" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "" +msgstr "наприклад, Basic, Matte, Silk, Marble" msgid "Filament Preset" -msgstr "" +msgstr "Набір параметрів філаменту" msgid "Create" -msgstr "" +msgstr "Створити" msgid "Vendor is not selected, please reselect vendor." -msgstr "" +msgstr "Виробник не вибраний. Будь ласка, перевиберіть виробника." msgid "Custom vendor is not input, please input custom vendor." msgstr "" +"Власного виробника не введено. Будь ласка, введіть інформацію про власного " +"виробника." msgid "" "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." msgstr "" +"“Bambu” або “Generic” не може бути використано як виробник для власних " +"налаштувань філаменту." msgid "Filament type is not selected, please reselect type." -msgstr "" +msgstr "Тип філаменту не вибраний. Будь ласка, перевиберіть тип." msgid "Filament serial is not inputed, please input serial." msgstr "" +"Серійний номер філаменту не введено. Будь ласка, введіть серійний номер." msgid "" "There may be escape characters in the vendor or serial input of filament. " "Please delete and re-enter." msgstr "" +"Можливо, введено спеціальні символи у виробника або серійний номер " +"філаменту. Будь ласка, видаліть їх і введіть ще раз." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." msgstr "" +"Усі введені значення в полі власного виробника або серійного номера є " +"пробіли. Будь ласка, введіть щось інше." msgid "The vendor can not be a number. Please re-enter." -msgstr "" +msgstr "Виробник не може бути числом. Будь ласка, введіть ще раз." msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +"Ви ще не вибрали принтер або налаштування. Будь ласка, виберіть принаймні " +"одне з них." + +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"Назва філаменту %s, яку ви створили, вже існує. \n" +"Якщо ви продовжите створення, новий набір параметрів буде відображений з " +"повною назвою. Хочете продовжити?" msgid "Some existing presets have failed to be created, as follows:\n" -msgstr "" +msgstr "Деякі існуючі налаштування не вдалося створити, як показано нижче:\n" msgid "" "\n" "Do you want to rewrite it?" msgstr "" +"\n" +"Чи бажаєте ви їх перезаписати?" msgid "" "We would rename the presets as \"Vendor Type Serial @printer you selected" "\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" +"Ми б перейменували попередні налаштування на «Вибраний вами серійний " +"@принтер постачальника».\n" +"Щоб додати попередні налаштування для інших принтерів, перейдіть до вибору " +"принтера" msgid "Create Printer/Nozzle" -msgstr "" +msgstr "Створити Принтер/Сопло" msgid "Create Printer" -msgstr "" +msgstr "Принтер" msgid "Create Nozzle for Existing Printer" -msgstr "" +msgstr "Створити сопло для існуючого принтера" msgid "Create from Template" -msgstr "" +msgstr "Створити з шаблону" msgid "Create Based on Current Printer" -msgstr "" +msgstr "Створити на основі поточного принтера" msgid "Import Preset" -msgstr "" +msgstr "Імпорт набору параметрів" msgid "Create Type" -msgstr "" +msgstr "Тип" msgid "The model is not fond, place reselect vendor." -msgstr "" +msgstr "Модель не знайдено. Будь ласка, перевиберіть виробника." msgid "Select Model" -msgstr "" +msgstr "Виберіть модель" msgid "Select Printer" -msgstr "" +msgstr "Виберіть принтер" msgid "Input Custom Model" -msgstr "" +msgstr "Введіть власну модель" msgid "Can't find my printer model" -msgstr "" +msgstr "Не можу знайти свою модель принтера" msgid "Rectangle" -msgstr "" +msgstr "Прямокутник" msgid "Printable Space" -msgstr "" - -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" +msgstr "Простір для друку" msgid "Hot Bed STL" -msgstr "" +msgstr "STL файл для гарячого столу" msgid "Load stl" -msgstr "" +msgstr "Завантажити STL" msgid "Hot Bed SVG" -msgstr "" +msgstr "SVG для гарячого ліжка" msgid "Load svg" -msgstr "" +msgstr "Завантажити SVG" msgid "Max Print Height" -msgstr "" +msgstr "Максимальна висота друку" #, c-format, boost-format msgid "The file exceeds %d MB, please import again." -msgstr "" +msgstr "Файл перевищує %d МБ, будь ласка, імпортуйте знову." msgid "Exception in obtaining file size, please import again." msgstr "" +"Виникла помилка під час визначення розміру файлу, будь ласка, імпортуйте " +"знову." msgid "Preset path is not find, please reselect vendor." -msgstr "" +msgstr "Шлях до налаштувань не знайдено. Будь ласка, перевиберіть виробника." msgid "The printer model was not found, please reselect." -msgstr "" +msgstr "Модель принтера не було знайдено. Будь ласка, перевиберіть її." msgid "The nozzle diameter is not fond, place reselect." -msgstr "" +msgstr "Діаметр сопла не знайдено. Будь ласка, перевиберіть його." msgid "The printer preset is not fond, place reselect." -msgstr "" +msgstr "Налаштування принтера не знайдено. Будь ласка, перевиберіть його." msgid "Printer Preset" -msgstr "" +msgstr "Набір параметрів принтера" msgid "Filament Preset Template" -msgstr "" +msgstr "Шаблон набору параметрів філаменту" msgid "Deselect All" -msgstr "" +msgstr "Скасувати вибір всіх" msgid "Process Preset Template" -msgstr "" +msgstr "Шаблон набору параметрів процесу" msgid "Back Page 1" -msgstr "" +msgstr "Повернутися на 1 сторінку" msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" +"Ви ще не вибрали налаштування принтера, на основі якого створювати. Будь " +"ласка, виберіть виробника та модель принтера" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" +"Ви ввели недопустимий ввід у розділі “Друкована область” на першій сторінці. " +"Будь ласка, перевірте перед створенням." msgid "The custom printer or model is not inputed, place input." -msgstr "" +msgstr "Власна модель або принтер не введені. Будь ласка, введіть дані." msgid "" "The printer preset you created already has a preset with the same name. Do " @@ -13668,106 +15526,141 @@ msgid "" "reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" +"Налаштування принтера, яке ви створили, вже має налаштування з такою ж " +"назвою. Бажаєте перезаписати його?\n" +"\tТак: Перезаписати налаштування принтера з такою ж назвою, і налаштування " +"філаменту та процесу з \n" +"такою ж назвою буде створено знову, а налаштування філаменту та процесу без " +"такої ж назви буде збережено.\n" +"\tСкасувати: Не створювати налаштування, повернутися до інтерфейсу створення." msgid "You need to select at least one filament preset." -msgstr "" +msgstr "Вам потрібно вибрати принаймні одне налаштування філаменту." msgid "You need to select at least one process preset." -msgstr "" +msgstr "Вам потрібно вибрати принаймні одне налаштування процесу." msgid "Create filament presets failed. As follows:\n" -msgstr "" +msgstr "Створення налаштувань філаменту не вдалося. Ось докладніше:\n" msgid "Create process presets failed. As follows:\n" -msgstr "" +msgstr "Створення налаштувань процесу не вдалося. Ось докладніше:\n" msgid "Vendor is not find, please reselect." -msgstr "" +msgstr "Виробника не знайдено, будь ласка, перевиберіть." msgid "Current vendor has no models, please reselect." -msgstr "" +msgstr "Поточний виробник не має моделей, будь ласка, перевиберіть." msgid "" "You have not selected the vendor and model or inputed the custom vendor and " "model." msgstr "" +"Ви не вибрали виробника та модель або не ввели власного виробника та модель." msgid "" "There may be escape characters in the custom printer vendor or model. Please " "delete and re-enter." msgstr "" +"Можливо, в власному виробнику або моделі принтера є керуючі послідовності. " +"Будь ласка, видаліть їх і введіть ще раз." msgid "" "All inputs in the custom printer vendor or model are spaces. Please re-enter." msgstr "" +"Усі введені дані в власному виробнику або моделі принтера є пропусками. Будь " +"ласка, введіть ще раз." msgid "Please check bed printable shape and origin input." msgstr "" +"Будь ласка, перевірте введення форми друку на ліжку та початкову точку." msgid "" "You have not yet selected the printer to replace the nozzle, please choose." msgstr "" +"Ви ще не вибрали принтер, для якого потрібно замінити сопло. Будь ласка, " +"оберіть." msgid "Create Printer Successful" -msgstr "" +msgstr "Створення принтера успішно завершено" msgid "Create Filament Successful" -msgstr "" +msgstr "Створення філаменту успішно завершено" msgid "Printer Created" -msgstr "" +msgstr "Принтер створено" msgid "Please go to printer settings to edit your presets" msgstr "" +"Будь ласка, перейдіть до налаштувань принтера, щоб редагувати свої " +"налаштування" msgid "Filament Created" -msgstr "" +msgstr "Філамент створено" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"Будь ласка, перейдіть до налаштувань філаменту, щоб відредагувати свої " +"налаштування, якщо потрібно. \n" +"Зверніть увагу, що температура насадки, температура гарячого ліжка і " +"максимальна об’ємна швидкість мають значний вплив на якість друку. Будь " +"ласка, встановіть їх обережно." + +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" +"\n" +"\n" +"Orca виявила, що функція синхронізації ваших попередніх налаштувань " +"користувача не ввімкнена, що може призвести до невдалого налаштування нитки " +"на сторінці пристрою.\n" +"Натисніть «Синхронізувати налаштування користувача», щоб увімкнути функцію " +"синхронізації." msgid "Printer Setting" -msgstr "" - -msgid "Export Configs" -msgstr "" +msgstr "Налаштування принтера" msgid "Printer config bundle(.orca_printer)" -msgstr "" +msgstr "Пакет конфігурації принтера (.orca_printer)" msgid "Filament bundle(.orca_filament)" -msgstr "" +msgstr "Пакет конфігурації ниток (.orca_filament)" msgid "Printer presets(.zip)" -msgstr "" +msgstr "Налаштування принтера (.zip)" msgid "Filament presets(.zip)" -msgstr "" +msgstr "Налаштування філаменту (.zip)" msgid "Process presets(.zip)" -msgstr "" +msgstr "Налаштування процесу (.zip)" msgid "initialize fail" -msgstr "" +msgstr "помилка ініціалізації" msgid "add file fail" -msgstr "" +msgstr "помилка додавання файлу" msgid "add bundle structure file fail" -msgstr "" +msgstr "помилка додавання файлу структури пакунка" msgid "finalize fail" -msgstr "" +msgstr "помилка завершення" msgid "open zip written fail" -msgstr "" +msgstr "помилка відкриття записаного файлу ZIP" msgid "Export successful" -msgstr "" +msgstr "Експорт успішний" #, c-format, boost-format msgid "" @@ -13776,129 +15669,185 @@ msgid "" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" +"Папка ‘%s’ вже існує в поточному каталозі. Бажаєте очистити її і побудувати " +"заново?\n" +"Якщо ні, буде додано суфікс з часом, і ви зможете змінити ім’я після " +"створення." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" +"Принтер і всі нитки та налаштування процесу, які належать принтеру.\n" +"Ними можна ділитись з іншими." msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" +"Налаштування філаменту користувача \n" +"можна поділитися з іншими користувачами." msgid "" "Only display printer names with changes to printer, filament, and process " "presets." msgstr "" +"Показувати лише назви принтерів зі змінами у налаштуваннях принтера, " +"філаменту та процесу." msgid "Only display the filament names with changes to filament presets." -msgstr "" +msgstr "Показувати лише назви філаментів зі змінами у налаштуваннях філаменту." msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" +"Будуть відображатися лише назви принтерів з налаштуваннями принтера " +"користувача, і кожне обране налаштування буде експортовано у форматі ZIP." msgid "" "Only the filament names with user filament presets will be displayed, \n" "and all user filament presets in each filament name you select will be " "exported as a zip." msgstr "" +"Будуть відображатися лише назви філаментів з налаштуваннями філаменту " +"користувача, \n" +"і всі налаштування філаменту користувача для кожної вибраної назви " +"філаменту \n" +"будуть експортовані у форматі ZIP." msgid "" "Only printer names with changed process presets will be displayed, \n" "and all user process presets in each printer name you select will be " "exported as a zip." msgstr "" +"Будуть відображатися лише назви принтерів зі зміненими налаштуваннями " +"процесу, \n" +"і всі налаштування процесу користувача для кожної вибраної назви принтера " +"будуть \n" +"експортовані у форматі ZIP." msgid "Please select at least one printer or filament." -msgstr "" +msgstr "Будь ласка, виберіть принаймні один принтер або філамент." msgid "Please select a type you want to export" +msgstr "Будь ласка, виберіть тип, який ви хочете експортувати" + +msgid "Failed to create temporary folder, please try Export Configs again." msgstr "" +"Не вдалося створити тимчасову теку. Будь ласка, спробуйте експортувати " +"налаштування знову." msgid "Edit Filament" -msgstr "" +msgstr "Редагувати філамент" msgid "Filament presets under this filament" -msgstr "" +msgstr "Налаштування філаменту під цим філаментом" msgid "" "Note: If the only preset under this filament is deleted, the filament will " "be deleted after exiting the dialog." msgstr "" +"Примітка: Якщо єдиний пресет під цим філаментом буде видалений, то філамент " +"також буде видалений після виходу з діалогового вікна." msgid "Presets inherited by other presets can not be deleted" msgstr "" +"Налаштування, що успадковуються іншими налаштуваннями, не можуть бути " +"видалені" msgid "The following presets inherits this preset." msgid_plural "The following preset inherits this preset." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Профіль вказаний нижче, успадковується від поточного профілю." +msgstr[1] "Профілі вказані нижче, успадковуються від поточного профілю." +msgstr[2] "Профілі вказані нижче, успадковуються від поточного профілю." msgid "Delete Preset" -msgstr "" +msgstr "Видалити пресет" msgid "Are you sure to delete the selected preset?" -msgstr "" +msgstr "Ви впевнені, що хочете видалити вибраний пресет?" msgid "Delete preset" -msgstr "" +msgstr "Видалити пресет" msgid "+ Add Preset" -msgstr "" +msgstr "+ Додати пресет" msgid "Delete Filament" -msgstr "" +msgstr "Видалити Філамент" msgid "" "All the filament presets belong to this filament would be deleted. \n" "If you are using this filament on your printer, please reset the filament " "information for that slot." msgstr "" +"Всі набори параметрів філаменту, що належать до цього філаменту, будуть " +"видалені. \n" +"Якщо ви використовуєте цей філамент на своєму принтері, будь ласка, скиньте " +"інформацію про філамент для цього слоту." msgid "Delete filament" -msgstr "" +msgstr "Видалити філамент" msgid "Add Preset" -msgstr "" +msgstr "Додати пресет" msgid "Add preset for new printer" -msgstr "" +msgstr "Додати налаштування для нового принтера" msgid "Copy preset from filament" -msgstr "" +msgstr "Скопіювати налаштування з філаменту" msgid "The filament choice not find filament preset, please reselect it" msgstr "" +"Вибір філаменту не знайдено в налаштуваннях філаменту. Будь ласка, " +"перевиберіть його" msgid "[Delete Required]" -msgstr "" +msgstr "[Потрібно видалення]" msgid "Edit Preset" -msgstr "" +msgstr "Редагувати налаштування" msgid "For more information, please check out Wiki" -msgstr "" +msgstr "Для отримання додаткової інформації, будь ласка, перевірте Вікі" msgid "Collapse" -msgstr "" +msgstr "Згорнути" msgid "Daily Tips" +msgstr "Щоденні поради" + +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "запам’ятоване сопло: %.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" msgstr "" +"Діаметр вашого сопла в налаштуваннях не відповідає запам’ятованому діаметру " +"сопла. Чи змінювали ви своє сопло останнім часом?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "" +"*Друк матеріалу %s з використанням сопла %s може призвести до пошкодження " +"сопла" msgid "Need select printer" -msgstr "" +msgstr "Потрібно вибрати принтер" msgid "The start, end or step is not valid value." -msgstr "" +msgstr "Початок, кінець або крок не є дійсним значенням." msgid "" "Unable to calibrate: maybe because the set calibration value range is too " "large, or the step is too small" msgstr "" +"Неможливо калібрувати: можливо, через те, що діапазон встановлених значень " +"калібрування занадто великий, або крок занадто малий" msgid "Physical Printer" msgstr "Фізичний принтер" @@ -13913,11 +15862,17 @@ msgid "Success!" msgstr "Успіх!" msgid "Are you sure to log out?" -msgstr "" +msgstr "Ви впевнені, що вийшли?" msgid "Refresh Printers" msgstr "Оновити принтери" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." @@ -13947,118 +15902,124 @@ msgstr "" "сертифікатів/Keychain." msgid "Login/Test" -msgstr "" +msgstr "Вхід/Тест" msgid "Connection to printers connected via the print host failed." msgstr "Не вдалося підключитися до принтерів, підключених через вузол друку." #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "Невідповідність типу принт-сервера: %s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "З’єднання з AstroBox працює коректно." msgid "Could not connect to AstroBox" -msgstr "" +msgstr "Не вдалося з’єднатися з AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "Примітка: Для AstroBox потрібна версія щонайменше 1.1.0." msgid "Connection to Duet works correctly." -msgstr "" +msgstr "З’єднання з Duet працює коректно." msgid "Could not connect to Duet" -msgstr "" +msgstr "Не вдалося з’єднатися з Duet" msgid "Unknown error occured" -msgstr "" +msgstr "Сталася невідома помилка" msgid "Wrong password" -msgstr "" +msgstr "Неправильний пароль" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "Не вдалося отримати ресурси для створення нового з’єднання" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "Завантаження не активовано на картці FlashAir." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "З’єднання з FlashAir працює коректно, і завантаження активовано." msgid "Could not connect to FlashAir" -msgstr "" +msgstr "Не вдалося з’єднатися з FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." msgstr "" +"Примітка: Для FlashAir потрібна прошивка версії 2.00.02 або новіша з " +"активованою функцією завантаження." msgid "Connection to MKS works correctly." -msgstr "" +msgstr "З’єднання з MKS працює коректно." msgid "Could not connect to MKS" -msgstr "" +msgstr "Не вдалося підключитися до MKS" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "Підключення до OctoPrint працює правильно." msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "Не вдалося підключитися до OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "Примітка. Потрібна версія OctoPrint не нижче 1.1.0." msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "Підключення до Prusa SL1 / SL1S працює правильно." msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "Не вдалося підключитися до Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "Підключення до PrusaLink працює коректно." msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "Не вдалося підключитися до PrusaLink" msgid "Storages found" -msgstr "" +msgstr "Сховища знайдено" #. TRN %1% = storage path #, boost-format msgid "%1% : read only" -msgstr "" +msgstr "%1% : лише читання" #. TRN %1% = storage path #, boost-format msgid "%1% : no free space" -msgstr "" +msgstr "%1% : немає вільного місця" #. TRN %1% = host #, boost-format msgid "Upload has failed. There is no suitable storage found at %1%." msgstr "" +"Відбулася помилка завантаження. За адресою %1% не знайдено відповідного " +"сховища." msgid "Connection to Prusa Connect works correctly." -msgstr "" +msgstr "Підключення до Prusa Connect працює коректно." msgid "Could not connect to Prusa Connect" -msgstr "" +msgstr "Не вдалося підключитися до Prusa Connect" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "Підключення до Repetier працює правильно." msgid "Could not connect to Repetier" -msgstr "" +msgstr "Не вдалося підключитися до Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "Примітка: потрібна версія Repetier принаймні 0.90.0." #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"Статус HTTP: %1%\n" +"Тіло повідомлення: “%2%" #, boost-format msgid "" @@ -14066,6 +16027,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"Помилка аналізу відповіді хоста.\n" +"Тіло повідомлення: “%1%”\n" +"Помилка: “%2%”" #, boost-format msgid "" @@ -14073,47 +16037,310 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" - -msgid "Connected to Obico successfully!" -msgstr "" - -msgid "Could not connect to Obico" -msgstr "" - -msgid "Connected to SimplyPrint successfully!" -msgstr "" - -msgid "Could not connect to SimplyPrint" -msgstr "" - -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" +"Помилка переліку хост-принтерів.\n" +"Тіло повідомлення: “%1%”\n" +"Помилка: “%2%”" msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Він має малу висоту шару, що призводить до майже непомітних ліній " +"шаруватості та високої якості друку. Він підходить для більшості загальних " +"випадків друку." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки 0,2 мм, він має менші швидкості і " +"прискорення, а також розріджену структуру наповнення у вигляді гіроїда. " +"Таким чином, він забезпечує значно вищу якість друку, але при цьому " +"друкується значно довше." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Порівняно з типовим профілем для насадки 0,2 мм, він має трохи більшу висоту " +"шару, що призводить до майже непомітних ліній шаруватості та трохи коротший " +"час друку." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Порівняно з типовим профілем для насадки 0,2 мм, він має більшу висоту шару, " +"що призводить до слабко видимих ліній шаруватості, але при цьому друкується " +"трохи швидше." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Порівняно з типовим профілем для насадки 0,2 мм, це має меншу висоту шару, і " +"результатом є майже невидимі лінії шару та вища якість друку, але коротший " +"час друку." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки 0,2 мм, цей профіль має меншу " +"кількість ліній шарування, менші швидкості і прискорення, і розріджене " +"наповнення виконане у вигляді геометрії “Gyroid”. Таким чином, він " +"забезпечує майже невидимі лінії шарування та значно вищу якість друку, але " +"довший час друку." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,2 мм, цей профіль має " +"меншу висоту шару, що призводить до мінімальних ліній шарування та вищої " +"якості друку, але скорочує час друку." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки 0,2 мм, цей профіль має меншу " +"кількість ліній шарування, менші швидкості та прискорення, а також " +"розріджене наповнення виконане у вигляді геометрії “Gyroid”. Таким чином, " +"він забезпечує мінімальні лінії шарування та значно вищу якість друку, але " +"збільшує час друку." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Він має загальну висоту шару та призводить до загальних ліній шарування і " +"якості друку. Він підходить для більшості загальних випадків друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"більше кількість обводок стін та вищу щільність розрідженого наповнювача. " +"Таким чином, він забезпечує більшу міцність друків, але вимагає більше " +"витрати філаменту та більшого часу друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"більшу висоту шару, що призводить до більш помітних ліній шарування та " +"меншої якості друку, але трохи скорочує час друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"більшу висоту шару, що призводить до більш помітних ліній шарування та " +"меншої якості друку, але скорочує час друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"меншу висоту шару, що призводить до менш помітних ліній шарування та вищої " +"якості друку, але збільшує час друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"меншу висоту шару, менші швидкості і прискорення, а також розріджений " +"внутрішній наповнювач у вигляді геоіда. Таким чином, це призводить до менш " +"помітних ліній шарування та значно вищої якості друку, але збільшує час " +"друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"меншу висоту шару, що призводить до майже непомітних ліній шарування та " +"вищої якості друку, але збільшує час друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"меншу висоту шару, менші швидкості та прискорення, а також розріджений " +"малюнок наповнення у вигляді геоїда. Тому він має майже непомітні лінії " +"шарування і набагато вищу якість друку, але значно довший час друку." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Порівняно з типовим профілем для насадки діаметром 0,4 мм, цей профіль має " +"меншу висоту шару, що призводить до майже непомітних ліній шарування, але " +"також збільшує час друку." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Він має велику висоту шару, що призводить до видимих ліній шарування і " +"звичайної якості друку та часу друку." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Порівняно з типовим профілем з 0,6 мм сопла, він має більше стінних петель і " +"вищу щільність розрідженого наповнювача. Таким чином, він забезпечує більшу " +"міцність друків, але споживає більше філаменту і має довший час друку." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Порівняно з типовим профілем з 0,6 мм сопла, він має більшу висоту шару, що " +"призводить до більш помітних ліній шару та нижчої якості друку, але " +"коротшого часу друку у деяких випадках друку." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Порівняно з типовим профілем з 0,6 мм сопла, він має більшу висоту шару, що " +"призводить до набагато більш помітних ліній шару та значно нижчої якості " +"друку, але коротшого часу друку у деяких випадках друку." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Порівняно з типовим профілем з 0,6 мм сопла, він має меншу висоту шару, що " +"призводить до менш помітних ліній шару і трохи вищої якості друку, але " +"довшого часу друку." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Порівняно з типовим профілем з 0,6 мм сопла, він має меншу висоту шару, що " +"призводить до менш помітних ліній шару та вищої якості друку, але більш " +"тривалого часу друку." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Він має дуже велику висоту шару, що призводить до дуже помітних ліній шару, " +"низької якості друку і загального часу друку." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Порівняно з типовим профілем для сопла 0,8 мм, цей профіль має більшу висоту " +"шару, що призводить до дуже помітних ліній шару і значно нижчої якості " +"друку, але коротшого часу друку у деяких випадках друку." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Порівняно з типовим профілем для сопла 0,8 мм, цей профіль має набагато " +"більшу висоту шару, що призводить до надзвичайно помітних ліній шару і " +"значно нижчої якості друку, але набагато коротшого часу друку у деяких " +"випадках друку." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Порівняно з типовим профілем для сопла 0,8 мм, цей профіль має трохи меншу " +"висоту шару, що призводить до трохи менше, але все ще помітних ліній шару і " +"трохи вищої якості друку, але довшого часу друку у деяких випадках друку." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Порівняно з типовим профілем для сопла 0,8 мм, цей профіль має меншу висоту " +"шару, що призводить до менше, але все ще помітних ліній шару і трохи вищої " +"якості друку, але довшого часу друку у деяких випадках друку." + +msgid "Connected to Obico successfully!" +msgstr "Підключення до Obico успішно!" + +msgid "Could not connect to Obico" +msgstr "Не вдалося з'єднатися з Obico" + +msgid "Connected to SimplyPrint successfully!" +msgstr "Успішне підключення до SimplyPrint!" + +msgid "Could not connect to SimplyPrint" +msgstr "Не вдалося підключитися до SimplyPrint" + +msgid "Internel error" msgstr "" msgid "Unknown error" +msgstr "Невідома помилка" + +msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" +"Обліковий запис SimplyPrint не пов’язано. Щоб налаштувати його, перейдіть до " +"параметрів підключення." msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "Підключення до Flashforge працює правильно." msgid "Could not connect to Flashforge" -msgstr "" +msgstr "Не вдалося підключитися до Flashforge" msgid "The provided state is not correct." -msgstr "" +msgstr "Наданий стан невірний." msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "Надайте необхідні дозволи під час авторизації цієї програми." msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Під час спроби входу трапилося щось несподіване. Повторіть спробу." msgid "User cancelled." -msgstr "" +msgstr "Користувача скасовано." #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -14121,6 +16348,9 @@ msgid "" "Did you know that turning on precise wall can improve precision and layer " "consistency?" msgstr "" +"Точна стінка\n" +"Чи знаєте ви, що ввімкнення точної стінки може покращити точність і " +"узгодженість шару?" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" @@ -14129,12 +16359,18 @@ msgid "" "precision and layer consistency if your model doesn't have very steep " "overhangs?" msgstr "" +"Сендвіч режим\n" +"Чи знаєте ви, що можна використовувати сендвіч-режим (внутрішній-зовнішній-" +"внутрішній), щоб покращити точність і узгодженість шарів, якщо ваша модель " +"не має дуже крутих звисів?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" "Chamber temperature\n" "Did you know that OrcaSlicer supports chamber temperature?" msgstr "" +"Температура камери\n" +"Чи знаєте ви, що OrcaSlicer вміє керувати температурою камери?" #: resources/data/hints.ini: [hint:Calibration] msgid "" @@ -14142,24 +16378,34 @@ msgid "" "Did you know that calibrating your printer can do wonders? Check out our " "beloved calibration solution in OrcaSlicer." msgstr "" +"Калібрування\n" +"Чи знаєте ви, що калібрування принтера може творити чудеса? Перегляньте наш " +"улюблений набір тестів для калібрування в OrcaSlicer." #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" "Auxiliary fan\n" "Did you know that OrcaSlicer supports Auxiliary part cooling fan?" msgstr "" +"Допоміжний вентилятор\n" +"Чи знаєте ви, що OrcaSlicer підтримує вентилятор охолодження допоміжної " +"частини?" #: resources/data/hints.ini: [hint:Air filtration] msgid "" "Air filtration/Exhaust Fan\n" "Did you know that OrcaSlicer can support Air filtration/Exhaust Fan?" msgstr "" +"Фільтрація повітря/витяжний вентилятор\n" +"Чи знаєте ви, що OrcaSlicer підтримує фільтрацію повітря/витяжний вентилятор?" #: resources/data/hints.ini: [hint:G-code window] msgid "" "G-code window\n" "You can turn on/off the G-code window by pressing the C key." msgstr "" +"Вікно G-коду\n" +"Ви можете вмикати/вимикати вікно G-коду, натискаючи клавішу C." #: resources/data/hints.ini: [hint:Switch workspaces] msgid "" @@ -14167,6 +16413,9 @@ msgid "" "You can switch between Prepare and Preview workspaces by " "pressing the Tab key." msgstr "" +"Перемикання робочих областей\n" +"Ви можете переключатися між робочими областями Підготовка і " +"Перегляд, натискаючи клавішу Tab." #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" @@ -14174,6 +16423,9 @@ msgid "" "Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " "3D scene operations." msgstr "" +"Як використовувати комбінації клавіш\n" +"Чи знаєте ви, що Orca Slicer пропонує широкий спектр комбінацій клавіш для " +"роботи з 3D-сценами." #: resources/data/hints.ini: [hint:Reverse on odd] msgid "" @@ -14181,6 +16433,9 @@ msgid "" "Did you know that Reverse on odd feature can significantly improve " "the surface quality of your overhangs?" msgstr "" +"Reverse on odd\n" +"Чи знали ви, що функція Реверс по непарних периметрах може значно " +"покращити якість поверхні ваших звисів?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -14198,6 +16453,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems on the Windows system?" msgstr "" +"Виправлення моделі\n" +"Чи знаєте ви, що ви можете виправити пошкоджену 3D-модель, щоб уникнути " +"багатьох проблем з нарізанням (slicing) на операційній системі Windows?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -14253,6 +16511,9 @@ msgid "" "Did you know that you use the Search tool to quickly find a specific Orca " "Slicer setting?" msgstr "" +"Функція пошуку\n" +"Чи знаєте ви, що для швидкого пошуку певних налаштувань Orca Slicer ви " +"можете скористатися інструментом \"Пошук\"?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -14260,6 +16521,10 @@ msgid "" "Did you know that you can reduce the number of triangles in a mesh using the " "Simplify mesh feature? Right-click the model and select Simplify model." msgstr "" +"Спростити модель\n" +"Чи знаєте ви, що можна зменшити кількість трикутників у сітці за допомогою " +"функції Спростити сітку? Клацніть правою кнопкою миші на моделі і виберіть " +"Спростити модель." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -14288,6 +16553,10 @@ msgid "" "part modifier? That way you can, for example, create easily resizable holes " "directly in Orca Slicer." msgstr "" +"Відняти частину\n" +"Чи знаєте ви, що можна віднімати одну сіть від іншої за допомогою " +"модифікатора \"Від'ємна частина\"? Таким чином, ви можете, наприклад, " +"створювати отвори зі змінним розміром безпосередньо в Orca Slicer." #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -14310,6 +16579,10 @@ msgid "" "paint it on your print, to have it in a less visible location? This improves " "the overall look of your model. Check it out!" msgstr "" +"Місце з'єднання Z-шва\n" +"Чи знали ви, що ви можете налаштовувати розташування Z-шва, і навіть " +"розфарбовувати його на друці, щоб зробити його менш видимим? Це покращує " +"загальний вигляд вашої моделі. Перевірте це!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -14406,8 +16679,8 @@ msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" -"Об'єкти стека\n" -"Ви знали, що можете складати об'єкти?" +"Стек об’єктів\n" +"Чи знаєте ви, що можна складати об’єкти як одне ціле?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -14437,6 +16710,11 @@ msgid "" "extruder/hotend clogging when printing lower temperature filament with a " "higher enclosure temperature. More info about this in the Wiki." msgstr "" +"Коли потрібно друкувати з відкритими дверцятами принтера\n" +"Чи знаєте ви, що відкриття дверцят принтера може знизити ймовірність " +"засмічення екструдера/гарячого блока при друку низькотемпературного " +"філаменту при вищій температурі усередині корпусу? Більше інформації " +"знаходиться в Вікі." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -14445,6 +16723,288 @@ msgid "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping." msgstr "" +"Уникнення деформації\n" +"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як " +"ABS, відповідне підвищення температури гарячого ліжка може зменшити " +"ймовірність деформації." + +#~ msgid "" +#~ "File size exceeds the 100MB upload limit. Please upload your file through " +#~ "the panel." +#~ msgstr "" +#~ "Розмір файлу перевищує ліміт завантаження в 100 Мб. Будь ласка, " +#~ "завантажте свій файл через панель." + +#~ msgid "Please input a valid value (K in 0~0.3)" +#~ msgstr "Введіть допустиме значення (K в діапазоні 0~0.3)" + +#~ msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#~ msgstr "Будь ласка, введіть допустиме значення (K від 0~0.3, N від 0.6~2.0)" + +#~ msgid "Select connected printetrs (0/6)" +#~ msgstr "Вибір підключених принтерів (0/6)" + +#, c-format, boost-format +#~ msgid "Select Connected Printetrs (%d/6)" +#~ msgstr "Виберіть Підключені принтери (%d/6)" + +#~ msgid "PrintingPause" +#~ msgstr "Пауза друку" + +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "" +#~ "Не вдалося встановити локальне підключення до принтера; спробуйте ще раз." + +#~ msgid "" +#~ "Please find the details of Flow Dynamics Calibration from our wiki.\n" +#~ "\n" +#~ "Usually the calibration is unnecessary. When you start a single color/" +#~ "material print, with the \"flow dynamics calibration\" option checked in " +#~ "the print start menu, the printer will follow the old way, calibrate the " +#~ "filament before the print; When you start a multi color/material print, " +#~ "the printer will use the default compensation parameter for the filament " +#~ "during every filament switch which will have a good result in most " +#~ "cases.\n" +#~ "\n" +#~ "Please note there are a few cases that will make the calibration result " +#~ "not reliable: using a texture plate to do the calibration; the build " +#~ "plate does not have good adhesion (please wash the build plate or apply " +#~ "gluestick!) ...You can find more from our wiki.\n" +#~ "\n" +#~ "The calibration results have about 10 percent jitter in our test, which " +#~ "may cause the result not exactly the same in each calibration. We are " +#~ "still investigating the root cause to do improvements with new updates." +#~ msgstr "" +#~ "Будь ласка, знайдіть докладну інформацію щодо калібрування “Flow Dynamics " +#~ "Calibration” у нашому вікі.\n" +#~ "\n" +#~ "Зазвичай калібрування не є необхідним. Коли ви розпочинаєте друк з одним " +#~ "кольором/матеріалом, з опцією “калібрування динаміки потоку” включеною у " +#~ "меню початку друку, принтер буде використовувати старий спосіб " +#~ "калібрування філаменту перед початком друку; Коли ви розпочинаєте друк з " +#~ "декількома кольорами/матеріалами, принтер використовуватиме стандартні " +#~ "параметри компенсації для філаменту під час кожного перемикання " +#~ "філаменту, що в більшості випадків дає гарний результат.\n" +#~ "\n" +#~ "Зверніть увагу, що є деякі випадки, коли результат калібрування може бути " +#~ "ненадійним: використання текстурної підкладки для калібрування; слабка " +#~ "адгезія підкладки (будь ласка, вимийте підкладку або нанесіть клей!) … " +#~ "Більше інформації можна знайти у нашому вікі.\n" +#~ "\n" +#~ "Результати калібрування мають приблизно 10-відсотковий шум у наших " +#~ "тестах, що може призвести до незначних відмінностей у кожному " +#~ "калібруванні. Ми все ще вивчаємо кореневу причину, щоб внести поліпшення " +#~ "в майбутніх оновленнях." + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "" +#~ "Збережено буде лише один із результатів з однаковою назвою. Ви впевнені," +#~ "що хочете перезаписати інші результати?" + +#, c-format, boost-format +#~ msgid "" +#~ "There is already a historical calibration result with the same name: %s. " +#~ "Only one of the results with the same name is saved. Are you sure you " +#~ "want to overrides the historical result?" +#~ msgstr "" +#~ "Вже існує історичний результат калібрування з такою самою назвою: %s. " +#~ "Зберігається лише один результат з такою самою назвою. Ви впевнені, що " +#~ "хочете замінити історичний результат?" + +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "Будь ласка, знайдіть кут із ідеальним ступенем екструзії" + +#~ msgid "" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " +#~ "PrusaSlicer links from Printable.com" +#~ msgstr "" +#~ "Зв'язати OrcaSlicer з посиланнями prusaslicer://, щоб Orca могла " +#~ "відкривати посилання PrusaSlicer з Printable.com" + +#~ msgid "" +#~ "Order of wall/infill. When the tickbox is unchecked the walls are printed " +#~ "first, which works best in most cases.\n" +#~ "\n" +#~ "Printing walls first may help with extreme overhangs as the walls have " +#~ "the neighbouring infill to adhere to. However, the infill will slighly " +#~ "push out the printed walls where it is attached to them, resulting in a " +#~ "worse external surface finish. It can also cause the infill to shine " +#~ "through the external surfaces of the part." +#~ msgstr "" +#~ "Порядок стінка/заповнення. Якщо прапорець знято, першими друкуються " +#~ "стіни, що в більшості випадків працює найкраще.\n" +#~ "\n" +#~ "Друк стінок першими може допомогти у випадку екстремальних виступів, " +#~ "оскільки стінки мають сусіднє заповнення, до якого вони прилягають. Однак " +#~ "заповнення злегка виштовхує надруковані стінки там, де воно прикріплене " +#~ "до них, що призводить до погіршення зовнішньої обробки поверхні. Це також " +#~ "може призвести до того, що заповнення просвічуватиметься крізь зовнішні " +#~ "поверхні деталі." + +#~ msgid "X" +#~ msgstr "X" + +#~ msgid "Y" +#~ msgstr "Y" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer заснований на BambuStudio від Bambulab, який належить " +#~ "PrusaSlicer.\n" +#~ "Prusa Research. PrusaSlicer від Slic3r Алессандро Ранеллуччі і\n" +#~ "спільнота RepRap" + +#~ msgid "Export &Configs" +#~ msgstr "Експорт &конфігурації" + +#~ msgid "Infill direction" +#~ 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 "" +#~ "Увімкніть цей параметр, щоб отримати файл G-коду з переміщеннями G2 та " +#~ "G3. А допуск припасування однаковим дозволом" + +#~ msgid "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill" +#~ msgstr "" +#~ "Область заповнення трохи збільшена для перекриття периметром для " +#~ "кращогоскріплення. Відсоткове значення щодо ширини лінії заповнення" + +#~ msgid "Unload Filament" +#~ msgstr "Вивантажте філамент" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Виберіть слот AMS, потім натисніть кнопку \\Load\\ або \\Unload\\, щоб " +#~ "автоматично\n" +#~ "завантажити або вивантажити філамент." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Основна плата" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "active" +#~ msgstr "активно" + +#~ msgid "Jump to layer" +#~ 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 нормальна, помаранчевий означає, " +#~ "щоВологість висока,\n" +#~ "червоний означає, що вологість занадто висока. (Гігрометр: чим нижче, тим " +#~ "краще.)" + +#~ 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 "" +#~ "Стан влагопоглинача нижче двох поділів свідчить про те, що вологопоглинач " +#~ "може бути\n" +#~ "неактивний. Будь ласка, замініть осушувач. (Смуги: чим вище, тим краще.)" + +#~ 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 "" +#~ "Примітка. Коли кришку відкрито або замінено пакет з вологопоглиначем, це " +#~ "може зайняти деякий час.\n" +#~ "годин або ночі, щоб увібрати вологу. Низькі температури також " +#~ "уповільнюють\n" +#~ "процес. У цей час індикатор може не відображати патронник.\n" +#~ "точно." + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Примітка: якщо під час друку буде вставлено новий філамент, AMS не буде " +#~ "автоматично читати будь-яку інформацію до завершення друку." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Успішно експортувати G-код у %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Помилка ініціалізації (немає пристрою)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Помилка ініціалізації (немає камери)!" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "Принтер зайнятий завантаженням. Дочекайтеся завершення завантаження." + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Ініціалізація не вдалася (недоступна лише в режимі LAN)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "" +#~ "Помилка ініціалізації (відсутня IP-адреса принтера в локальній мережі)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Зупинено [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Завантаження не вдалося [%d]!" + +#, 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 "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 56ca0ac147..7fca4dede8 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: 2023-04-01 13:21+0800\n" "Last-Translator: SoftFever \n" "Language-Team: \n" @@ -106,7 +106,7 @@ msgid "Support Generated" msgstr "已生成支撑" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "选择底面" msgid "Lay on face" msgstr "选择底面" @@ -186,13 +186,13 @@ msgid "Move" msgstr "移动" msgid "Gizmo-Move" -msgstr "" +msgstr "Gizmo-移动" msgid "Rotate" msgstr "旋转" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Gizmo-旋转" msgid "Optimize orientation" msgstr "优化朝向" @@ -204,7 +204,7 @@ msgid "Scale" msgstr "缩放" msgid "Gizmo-Scale" -msgstr "" +msgstr "缩放工具" msgid "Error: Please close all toolbar menus first" msgstr "错误:请先关闭所有工具栏菜单" @@ -257,6 +257,9 @@ msgstr "重置旋转" msgid "World coordinates" msgstr "世界坐标" +msgid "Object coordinates" +msgstr "物体坐标" + msgid "°" msgstr "°" @@ -280,7 +283,7 @@ msgid "Auto" msgstr "自动" msgid "Manual" -msgstr "" +msgstr "手动" msgid "Plug" msgstr "插销" @@ -292,7 +295,7 @@ msgid "Snap" msgstr "按扣" msgid "Prism" -msgstr "" +msgstr "棱角" msgid "Frustum" msgstr "锥体" @@ -310,7 +313,7 @@ msgid "Place on cut" msgstr "切割面放置到热床" msgid "Flip upside down" -msgstr "" +msgstr "倒置" msgid "Connectors" msgstr "连接件" @@ -358,9 +361,12 @@ msgid "" "Drag to move the cut plane\n" "Right-click a part to assign it to the other side" msgstr "" +"单击以翻转剖切面\n" +"拖动以移动剖切面\n" +"在零件上单击鼠标右键以将其指定给另一侧" msgid "Move cut plane" -msgstr "" +msgstr "移动剖切面" msgid "Mode" msgstr "模式" @@ -405,7 +411,7 @@ msgid "Cut" msgstr "剪切" msgid "Rotate cut plane" -msgstr "" +msgstr "旋转剖切面" msgid "Remove connectors" msgstr "删除所有连接件" @@ -432,7 +438,7 @@ msgid "Build Volume" msgstr "零件体积" msgid "Flip cut plane" -msgstr "" +msgstr "翻转剖切面" msgid "Groove change" msgstr "" @@ -448,7 +454,7 @@ msgid "Cut position" msgstr "切割位置" msgid "Reset cutting plane" -msgstr "" +msgstr "重置切割平面" msgid "Edit connectors" msgstr "编辑连接件" @@ -460,7 +466,7 @@ msgid "Reset cut" msgstr "重置" msgid "Reset cutting plane and remove connectors" -msgstr "" +msgstr "重置切割平面并移除连接器" msgid "Upper part" msgstr "上半部分" @@ -503,10 +509,10 @@ msgid "Some connectors are overlapped" msgstr "存在连接件相互重叠" msgid "Select at least one object to keep after cutting." -msgstr "" +msgstr "切割后至少选择一个要保留的对象。" msgid "Cut plane is placed out of object" -msgstr "" +msgstr "剖切面放置在对象之外" msgid "Cut plane with groove is invalid" msgstr "" @@ -515,7 +521,7 @@ msgid "Connector" msgstr "连接件" msgid "Cut by Plane" -msgstr "" +msgstr "按平面切割" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "因切割产生了非流形边,您是否想现在修复?" @@ -524,10 +530,10 @@ msgid "Repairing model object" msgstr "修复模型对象" msgid "Cut by line" -msgstr "" +msgstr "按线切割" msgid "Delete connector" -msgstr "" +msgstr "删除连接器" msgid "Mesh name" msgstr "Mesh名" @@ -613,13 +619,13 @@ msgid "Remove selection" msgstr "移除绘制" msgid "Entering Seam painting" -msgstr "" +msgstr "进入Z缝绘制" msgid "Leaving Seam painting" -msgstr "" +msgstr "退出Z缝绘制" msgid "Paint-on seam editing" -msgstr "" +msgstr "编辑手绘填缝" #. TRN - Input label. Be short as possible #. Select look of letter shape @@ -667,19 +673,19 @@ msgid "Text move" msgstr "" msgid "Set Mirror" -msgstr "" +msgstr "设置镜像" msgid "Embossed text" -msgstr "" +msgstr "浮雕文字" msgid "Enter emboss gizmo" -msgstr "" +msgstr "进入浮雕小工具" msgid "Leave emboss gizmo" -msgstr "" +msgstr "离开浮雕小工具" msgid "Embossing actions" -msgstr "" +msgstr "浮雕动作" msgid "Emboss" msgstr "浮雕" @@ -697,13 +703,13 @@ msgid "SWISS" msgstr "" msgid "MODERN" -msgstr "" +msgstr "现代" msgid "First font" -msgstr "" +msgstr "第一个字体" msgid "Default font" -msgstr "" +msgstr "缺省字体" msgid "Advanced" msgstr "高级" @@ -711,38 +717,38 @@ msgstr "高级" msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." -msgstr "" +msgstr "无法使用所选字体书写文本。请尝试选择其他字体。" msgid "Embossed text cannot contain only white spaces." -msgstr "" +msgstr "浮雕文本不能只包含空格。" msgid "Text contains character glyph (represented by '?') unknown by font." -msgstr "" +msgstr "文本包含字体未知的字符字形(用“?”表示)。" msgid "Text input doesn't show font skew." -msgstr "" +msgstr "文本输入不显示字体倾斜。" msgid "Text input doesn't show font boldness." -msgstr "" +msgstr "文本输入不显示字体加粗。" msgid "Text input doesn't show gap between lines." -msgstr "" +msgstr "文本输入不显示行之间的间隙。" msgid "Too tall, diminished font height inside text input." -msgstr "" +msgstr "太高,文本输入中的字体高度减小。" msgid "Too small, enlarged font height inside text input." -msgstr "" +msgstr "文字输入里面的字体高度太小,放大了。" msgid "Text doesn't show current horizontal alignment." msgstr "" msgid "Revert font changes." -msgstr "" +msgstr "还原字体更改。" #, boost-format msgid "Font \"%1%\" can't be selected." -msgstr "" +msgstr "无法选择字体“%1%”。" msgid "Operation" msgstr "操作" @@ -751,103 +757,103 @@ msgid "Join" msgstr "合并" msgid "Click to change text into object part." -msgstr "" +msgstr "单击可将文本更改为对象部分。" msgid "You can't change a type of the last solid part of the object." -msgstr "" +msgstr "不能更改对象的最后一个实体部分的类型。" msgctxt "EmbossOperation" msgid "Cut" msgstr "切割" msgid "Click to change part type into negative volume." -msgstr "" +msgstr "单击可将零件类型更改为负体积。" msgid "Modifier" msgstr "修改器" msgid "Click to change part type into modifier." -msgstr "" +msgstr "单击可将零件类型更改为修改器。" msgid "Change Text Type" -msgstr "" +msgstr "更改文本类型" #, boost-format msgid "Rename style(%1%) for embossing text" -msgstr "" +msgstr "重命名浮雕文本的样式(%1%)" msgid "Name can't be empty." -msgstr "" +msgstr "名称不能为空。" msgid "Name has to be unique." -msgstr "" +msgstr "名称必须是唯一的。" msgid "OK" msgstr "确认" msgid "Rename style" -msgstr "" +msgstr "重命名样式" msgid "Rename current style." -msgstr "" +msgstr "重命名当前样式。" msgid "Can't rename temporary style." -msgstr "" +msgstr "无法重命名临时样式。" msgid "First Add style to list." -msgstr "" +msgstr "首先将样式添加到列表中。" #, boost-format msgid "Save %1% style" -msgstr "" +msgstr "保存%1%样式" msgid "No changes to save." -msgstr "" +msgstr "没有要保存的更改。" msgid "New name of style" -msgstr "" +msgstr "样式的新名称" msgid "Save as new style" -msgstr "" +msgstr "另存为新样式" msgid "Only valid font can be added to style." -msgstr "" +msgstr "只有有效的字体才能添加到样式中。" msgid "Add style to my list." -msgstr "" +msgstr "将样式添加到我的列表中。" msgid "Save as new style." -msgstr "" +msgstr "另存为新样式。" msgid "Remove style" -msgstr "" +msgstr "删除样式" msgid "Can't remove the last existing style." -msgstr "" +msgstr "无法删除最后一个现有样式。" #, boost-format msgid "Are you sure you want to permanently remove the \"%1%\" style?" -msgstr "" +msgstr "您确定要永久删除“%1%”样式吗?" #, boost-format msgid "Delete \"%1%\" style." -msgstr "" +msgstr "删除“%1%”样式。" #, boost-format msgid "Can't delete \"%1%\". It is last style." -msgstr "" +msgstr "无法删除“%1%”。这是最后一种风格。" #, boost-format msgid "Can't delete temporary style \"%1%\"." -msgstr "" +msgstr "无法删除临时样式“%1%”。" #, boost-format msgid "Modified style \"%1%\"" -msgstr "" +msgstr "已修改样式“%1%”" #, boost-format msgid "Current style is \"%1%\"" -msgstr "" +msgstr "当前样式为“%1%”" #, boost-format msgid "" @@ -855,39 +861,43 @@ msgid "" "\n" "Would you like to continue anyway?" msgstr "" +"将样式更改为“%1%”将放弃当前的样式修改。\n" +"是否仍要继续?" msgid "Not valid style." -msgstr "" +msgstr "无效的样式。" #, boost-format msgid "Style \"%1%\" can't be used and will be removed from a list." -msgstr "" +msgstr "样式“%1%”无法使用,将从列表中删除。" msgid "Unset italic" -msgstr "" +msgstr "取消斜体" msgid "Set italic" -msgstr "" +msgstr "斜体" msgid "Unset bold" -msgstr "" +msgstr "取消加粗" msgid "Set bold" -msgstr "" +msgstr "加粗" msgid "Revert text size." -msgstr "" +msgstr "恢复文本大小。" msgid "Revert embossed depth." -msgstr "" +msgstr "还原浮雕深度。" msgid "" "Advanced options cannot be changed for the selected font.\n" "Select another font." msgstr "" +"无法更改所选字体的高级选项。\n" +"选择其他字体。" msgid "Revert using of model surface." -msgstr "" +msgstr "恢复使用模型曲面。" msgid "Revert Transformation per glyph." msgstr "" @@ -900,19 +910,19 @@ msgstr "" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "左面" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "居中" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "右面" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "顶部" msgctxt "Alignment" msgid "Middle" @@ -920,7 +930,7 @@ msgstr "" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "底部" msgid "Revert alignment." msgstr "" @@ -930,49 +940,49 @@ msgid "points" msgstr "" msgid "Revert gap between characters" -msgstr "" +msgstr "恢复字间距" msgid "Distance between characters" -msgstr "" +msgstr "字间距" msgid "Revert gap between lines" -msgstr "" +msgstr "恢复行间距" msgid "Distance between lines" -msgstr "" +msgstr "行间距" msgid "Undo boldness" msgstr "" msgid "Tiny / Wide glyphs" -msgstr "" +msgstr "细小/宽大的字形" msgid "Undo letter's skew" -msgstr "" +msgstr "撤消字母的歪斜" msgid "Italic strength ratio" -msgstr "" +msgstr "倾斜强度比" msgid "Undo translation" -msgstr "" +msgstr "撤消翻译" msgid "Distance of the center of the text to the model surface." -msgstr "" +msgstr "文字中心到模型曲面的距离。" msgid "Undo rotation" -msgstr "" +msgstr "撤消旋转" msgid "Rotate text Clock-wise." -msgstr "" +msgstr "顺时针旋转文本。" msgid "Unlock the text's rotation when moving text along the object's surface." -msgstr "" +msgstr "沿对象曲面移动文本时,解除锁定文本的旋转。" msgid "Lock the text's rotation when moving text along the object's surface." -msgstr "" +msgstr "沿对象曲面移动文本时,锁定文本的旋转。" msgid "Select from True Type Collection." -msgstr "" +msgstr "从True Type集合中选择。" msgid "Set text to face camera" msgstr "文字面向摄像头" @@ -985,9 +995,11 @@ msgid "" "Can't load exactly same font(\"%1%\"). Aplication selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" +"不能加载完全相同的字体(\"%1%\")。应用程序选择了一种类似的字体(\"%2%\")。你" +"必须为启用编辑文本指定字体。" msgid "No symbol" -msgstr "" +msgstr "无符号" msgid "Loading" msgstr "载入中" @@ -1051,7 +1063,7 @@ msgstr "保持向上" #. Some Font file contain multiple fonts inside and #. this is numerical selector of font inside font collections msgid "Collection" -msgstr "" +msgstr "收集" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" @@ -1158,7 +1170,7 @@ msgid "Bake into model as uneditable part" msgstr "" msgid "Save as" -msgstr "" +msgstr "另存为" msgid "Save SVG file" msgstr "" @@ -1184,7 +1196,7 @@ msgid "Lock/unlock the aspect ratio of the SVG." msgstr "" msgid "Reset scale" -msgstr "" +msgstr "重置缩放" msgid "Distance of the center of the SVG to the model surface." msgstr "" @@ -1193,16 +1205,16 @@ msgid "Reset distance" msgstr "" msgid "Reset rotation" -msgstr "" +msgstr "重置旋转" msgid "Lock/unlock rotation angle when dragging above the surface." msgstr "" msgid "Mirror vertically" -msgstr "" +msgstr "垂直镜像" msgid "Mirror horizontally" -msgstr "" +msgstr "水平镜像" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" @@ -1271,7 +1283,7 @@ msgid "Restart selection" msgstr "重新选择" msgid "Esc" -msgstr "" +msgstr "Esc" msgid "Unselect" msgstr "取消选择" @@ -1314,7 +1326,7 @@ msgid "Distance XYZ" msgstr "距离 XYZ" msgid "Ctrl+" -msgstr "" +msgstr "Ctrl+" msgid "Notice" msgstr "通知" @@ -1349,9 +1361,6 @@ msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "配置文件“%1%”已被加载,但部分数值未被识别。" -msgid "V" -msgstr "V" - 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." @@ -1451,6 +1460,9 @@ msgstr "选择一个或多个文件(3mf/step/stl/svg/obj/amf/usd*/abc/ply):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "选择一个或多个文件(3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "选择ZIP文件" + msgid "Choose one file (gcode/3mf):" msgstr "选择一个文件(gcode/3mf):" @@ -1514,6 +1526,11 @@ msgstr "正在进行的上传" msgid "Select a G-code file:" msgstr "选择一个G-code文件:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "无法启动URL下载。目标文件夹没有设置。请在配置向导中选择目标文件夹。" + msgid "Import File" msgstr "导入文件" @@ -1603,13 +1620,13 @@ msgid "Add support enforcer" msgstr "添加支撑生成器" msgid "Add text" -msgstr "" +msgstr "添加文本" msgid "Add negative text" -msgstr "" +msgstr "添加负文本" msgid "Add text modifier" -msgstr "" +msgstr "添加文本修改器" msgid "Add SVG part" msgstr "" @@ -1740,8 +1757,8 @@ msgstr "缺省" msgid "Filament %d" msgstr "耗材丝%d" -msgid "active" -msgstr "活动的" +msgid "current" +msgstr "当前" msgid "Scale to build volume" msgstr "缩放到构建空间大小" @@ -1816,7 +1833,7 @@ msgid "Edit text" msgstr "编辑文字" msgid "Ability to change text, font, size, ..." -msgstr "" +msgstr "能够更改文本、字体、大小。。。" msgid "Edit SVG" msgstr "编辑SVG" @@ -1833,6 +1850,9 @@ msgstr "添加标准模型" msgid "Add Handy models" msgstr "添加实用模型" +msgid "Add Models" +msgstr "添加模型" + msgid "Show Labels" msgstr "显示标签" @@ -1884,6 +1904,12 @@ msgstr "自动摆放" msgid "arrange current plate" msgstr "在当前盘执行自动摆放" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自动朝向" @@ -1917,9 +1943,6 @@ msgstr "更换耗材丝" msgid "Set Filament for selected items" msgstr "设置所选项的耗材丝" -msgid "current" -msgstr "当前" - msgid "Unlock" msgstr "解锁" @@ -2234,9 +2257,6 @@ msgstr "输入当前层上使用的自定义G-code:" msgid "Jump to Layer" msgstr "跳转到层" -msgid "Jump to layer" -msgstr "跳转到层" - msgid "Please enter the layer number" msgstr "请输入层数" @@ -2283,7 +2303,7 @@ msgid "No printer" msgstr "无打印机" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "无法连接服务器" @@ -2306,7 +2326,7 @@ msgstr "无法连接打印机" msgid "Connection to printer failed" msgstr "连接打印机失败" -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "请检查打印机和工作室的网络连接" msgid "Connecting..." @@ -2330,10 +2350,10 @@ msgstr "自动补给" msgid "AMS not connected" msgstr "AMS 未连接" -msgid "Load Filament" +msgid "Load" msgstr "进料" -msgid "Unload Filament" +msgid "Unload" msgstr "退料" msgid "Ext Spool" @@ -2351,7 +2371,7 @@ msgstr "重试" msgid "Calibrating AMS..." msgstr "正在校准AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "校准过程遇到问题。点击查看解决方案。" msgid "Calibrate again" @@ -2392,7 +2412,7 @@ msgstr "咬入耗材丝" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "选择1个AMS槽位,然后点击进料/退料按钮以自动进料/退料。" msgid "Edit" @@ -2475,13 +2495,13 @@ msgid "Bed filling done." msgstr "填充热床已完成。" msgid "Searching for optimal orientation" -msgstr "" +msgstr "搜索最佳方向" msgid "Orientation search canceled." -msgstr "" +msgstr "方向搜索已取消。" msgid "Orientation found." -msgstr "" +msgstr "找到方向。" msgid "Logging in" msgstr "登录中" @@ -2639,10 +2659,7 @@ msgstr "逆戟鲸是在" 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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" msgid "Libraries" @@ -2731,11 +2748,13 @@ msgstr "您确定要清除耗材丝信息吗?" msgid "You need to select the material type and color first." msgstr "您需要先选择材料类型和颜色。" -msgid "Please input a valid value (K in 0~0.3)" -msgstr "请输入有效的数值 (K的范围为0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" +msgstr "请输入有效的数值(K的范围为%.1f~%.1f)" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" -msgstr "请输入有效的数值 (K的范围为0~0.3,N的范围为0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" +msgstr "请输入有效的数值(K的范围为%.1f~%.1f,N的范围为%.1f~%.1f)" msgid "Other Color" msgstr "其他颜色" @@ -2837,31 +2856,17 @@ 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.)" +msgid "Current Cabin humidity" msgstr "" -"绿色表示 AMS 湿度正常,橙色表示湿度高,红色表示湿度过高。(湿度计:越低越好。)" - -msgid "Desiccant status" -msgstr "干燥剂状态" msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "干燥剂状态低于两格表示干燥剂可能不活跃。请更换干燥剂。(杠:越高越好)。" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"注意:当盖子打开或更换干燥剂包装时,可能需要数小时或一晚才能吸收水分,低温也" -"会减慢这一过程。在此期间,指示器的数值可能并不准确。" +"当干燥剂过于潮湿时,请及时更换。以下几种情况下,指示器可能无法准确反映情况:盖子" +"打开或干燥剂包被替换时。干燥剂需要数小时吸收潮气,低温也会延缓该过程。" msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2912,6 +2917,12 @@ msgstr "" "如果AMS中有两卷相同的耗材,则自动补给启用。\n" "(目前支持品牌、材料种类、颜色相同的耗材的自动补给)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 设置" @@ -2926,7 +2937,7 @@ msgstr "" "秒。" msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" "注意:如果是在打印过程中插入新的耗材丝,AMS会在打印结束后自动读取此耗材丝信" @@ -2975,6 +2986,14 @@ msgid "" "automatically when current filament runs out" msgstr "AMS料材丝耗尽后将自动切换到属性完全相同的耗材丝" +msgid "Air Printing Detection" +msgstr "空打检测" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "检测到堵塞和耗材丝碾磨,立即停止打印以节约时间和耗材丝" + msgid "File" msgstr "文件" @@ -3040,6 +3059,61 @@ msgstr "浮点保留操作数" msgid "Stack overflow" msgstr "栈溢出" +msgid "Running post-processing scripts" +msgstr "运行后处理脚本" + +msgid "Successfully executed post-processing script" +msgstr "成功执行后处理脚本" + +msgid "Unknown error occured during exporting G-code." +msgstr "导出 G-Code 时出现未知错误。" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"将临时 G-Code 复制到输出 G-Code 失败。也许 SD 卡被写锁定了?\n" +"错误消息:%1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"将临时 G-Code 复制到输出 G-Code 失败。目标设备可能有问题,请再次尝试导出或使" +"用其他设备。损坏的输出 G-Code 在 %1%.tmp。" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"复制到所选目标文件夹后重命名 G-Code 失败。当前路径为 %1%.tmp。请再次尝试导" +"出。" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"临时 G-Code 的复制已完成,但在复制检查期间无法打开位于 %1% 的原始代码。输出 " +"G-Code 为 %2%.tmp。" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"临时 G-Code 的复制已完成,但在复制检查期间无法打开导出的代码。输出 G-Code 为 " +"%1%.tmp。" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G 代码文件导出到 %1%" + msgid "Unknown error when export G-code." msgstr "导出G-code文件发生未知错误。" @@ -3053,13 +3127,6 @@ msgstr "" "错误信息:%1%。\n" "源文件 %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "成功导出G-code至 %1%" - -msgid "Running post-processing scripts" -msgstr "运行后处理脚本" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "将临时 G 代码复制到输出 G 代码失败" @@ -3067,6 +3134,222 @@ msgstr "将临时 G 代码复制到输出 G 代码失败" msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "计划上传到 `%1%`。请参阅窗口-> 打印主机上传队列" +msgid "Device" +msgstr "设备" + +msgid "Task Sending" +msgstr "正在发送的任务" + +msgid "Task Sent" +msgstr "已发送的任务" + +msgid "Edit multiple printers" +msgstr "编辑多个打印机" + +msgid "Select connected printers (0/6)" +msgstr "选择已连接的打印机 (0/6)" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "选择已连接的打印机 (%d/6)" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "可以选择的打印机数量最多为 %d。" + +msgid "Offline" +msgstr "离线" + +msgid "No task" +msgstr "没有任务" + +msgid "View" +msgstr "视图" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "编辑打印机" + +msgid "Device Name" +msgstr "设备名" + +msgid "Task Name" +msgstr "任务名" + +msgid "Device Status" +msgstr "设备状态" + +msgid "Actions" +msgstr "动作" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "请在此处选择您想管理的设备(最多6个设备)。" + +msgid "Add" +msgstr "添加" + +msgid "Idle" +msgstr "空闲" + +msgid "Printing" +msgstr "打印中" + +msgid "Upgrading" +msgstr "升级中" + +msgid "Incompatible" +msgstr "不兼容的预设" + +msgid "syncing" +msgstr "同步中" + +msgid "Printing Finish" +msgstr "打印成功" + +msgid "Printing Failed" +msgstr "打印失败" + +msgid "Printing Pause" +msgstr "打印暂停" + +msgid "Prepare" +msgstr "准备" + +msgid "Slicing" +msgstr "正在切片" + +msgid "Pending" +msgstr "等待中" + +msgid "Sending" +msgstr "发送中" + +msgid "Sending Finish" +msgstr "发送成功" + +msgid "Sending Cancel" +msgstr "取消发送" + +msgid "Sending Failed" +msgstr "发送失败" + +msgid "Print Success" +msgstr "打印成功" + +msgid "Print Failed" +msgstr "打印失败" + +msgid "Removed" +msgstr "移除" + +msgid "Resume" +msgstr "继续" + +msgid "Stop" +msgstr "停止" + +msgid "Task Status" +msgstr "任务状态" + +msgid "Sent Time" +msgstr "发送时间" + +msgid "There are no tasks to be sent!" +msgstr "没有任务正在发送!" + +msgid "No historical tasks!" +msgstr "没有历史任务!" + +msgid "Loading..." +msgstr "正在加载视频……" + +msgid "No AMS" +msgstr "没有AMS" + +msgid "Send to Multi-device" +msgstr "发送到多设备" + +msgid "Preparing print job" +msgstr "正在准备打印任务" + +msgid "Abnormal print file data. Please slice again" +msgstr "打印文件数据异常,请重新切片" + +msgid "There is no device available to send printing." +msgstr "没有可用于发送打印的设备。" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "同时使用的打印机数量不能等于0。" + +msgid "Use External Spool" +msgstr "使用外挂料卷" + +msgid "Use AMS" +msgstr "使用AMS" + +msgid "Select Printers" +msgstr "选择打印机" + +msgid "Ams Status" +msgstr "AMS状态" + +msgid "Printing Options" +msgstr "打印选项" + +msgid "Bed Leveling" +msgstr "热床调平" + +msgid "Timelapse" +msgstr "延时摄影" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "发送选项" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "打印机在同一时间。(这取决于有多少设备可以接受同时加热。)" + +msgid "Wait" +msgstr "等待" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "分钟发送一次。(这取决于完成加热需要多长时间。)" + +msgid "Send" +msgstr "发送" + +msgid "Name is invalid;" +msgstr "无效名称;" + +msgid "illegal characters:" +msgstr "非法字符:" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "名称长度超过限制。" + msgid "Origin" msgstr "原点" @@ -3132,6 +3415,19 @@ msgstr "选择 STL 文件来导入床模型:" msgid "Bed Shape" msgstr "热床形状" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "建议最低温度低于 190 度或建议最高温度高于 300 度。\n" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "推荐最低温度不能大于推荐最高温度。\n" + +msgid "Please check.\n" +msgstr "请检查。\n" + 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" @@ -3208,25 +3504,6 @@ msgstr "" "\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 " But machines with I3 structure will not generate timelapse videos." -msgstr "但是使用I3结构的机器将不会生成延时视频。" - -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 "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3288,6 +3565,25 @@ msgstr "" "seam_slope_start_height需要小于layer_height。\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 " But machines with I3 structure will not generate timelapse videos." +msgstr "但是使用I3结构的机器将不会生成延时视频。" + +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 "Auto bed leveling" msgstr "自动热床调平" @@ -3393,18 +3689,6 @@ msgstr "首层扫描异常暂停" msgid "Nozzle clog pause" msgstr "堵头暂停" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "主板" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "未定义" @@ -3528,7 +3812,7 @@ msgid "Dimensions" msgstr "" msgid "Temperatures" -msgstr "" +msgstr "温度" msgid "Timestamps" msgstr "" @@ -3555,9 +3839,6 @@ msgstr "打印机设置" msgid "parameter name" msgstr "参数名称" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s 不可以是百分比" @@ -3569,6 +3850,10 @@ msgstr "值 %s 越界,是否继续?" msgid "Parameter validation" msgstr "参数验证" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "值 %s 超出了范围,有效的范围是从 %d 到 %d 。" + msgid "Value is out of range." msgstr "值越界。" @@ -3582,6 +3867,18 @@ msgstr "" "是:%s%%\n" "否:%s %s" +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "输入格式无效。应为以下格式的维度向量:“%1%”" + +msgid "Input value is out of range" +msgstr "输入值超出范围外" + +msgid "Some extension in the input is invalid" +msgstr "" + #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "无效格式,应该是\"%1%\"这种数组格式" @@ -3649,12 +3946,12 @@ msgstr "显示" msgid "Flushed" msgstr "冲刷" -msgid "Total" -msgstr "总计" - msgid "Tower" msgstr "擦料塔" +msgid "Total" +msgstr "总计" + msgid "Total Estimation" msgstr "总预估" @@ -3757,6 +4054,12 @@ msgstr "时间预估" msgid "Normal mode" msgstr "普通模式" +msgid "Total Filament" +msgstr "总耗材丝" + +msgid "Model Filament" +msgstr "模型耗材丝" + msgid "Prepare time" msgstr "准备时间" @@ -3851,6 +4154,9 @@ msgstr "自动摆放选项" msgid "Spacing" msgstr "间距" +msgid "0 means auto spacing." +msgstr "0 表示自动间距。" + msgid "Auto rotate for arrangement" msgstr "自动旋转以优化自动摆放效果" @@ -3863,9 +4169,6 @@ msgstr "避开挤出标定区域" msgid "Align to Y axis" msgstr "对齐到Y轴" -msgid "Add" -msgstr "添加" - msgid "Add plate" msgstr "添加新盘" @@ -3995,6 +4298,9 @@ msgstr "监控录像" msgid "Go Live" msgstr "开启直播" +msgid "Liveview Retry" +msgstr "实时预览重试" + msgid "Resolution" msgstr "分辨率" @@ -4047,14 +4353,11 @@ msgstr "正在关闭应用程序,部分预设已修改。" msgid "Logging" msgstr "日志" -msgid "Prepare" -msgstr "准备" - msgid "Preview" msgstr "预览" -msgid "Device" -msgstr "设备" +msgid "Multi-device" +msgstr "多设备" msgid "Project" msgstr "项目" @@ -4080,9 +4383,6 @@ msgstr "切片所有盘" msgid "Export G-code file" msgstr "导出G-code文件" -msgid "Send" -msgstr "发送" - msgid "Export plate sliced file" msgstr "导出单盘切片文件" @@ -4192,7 +4492,7 @@ msgid "Save Project as" msgstr "项目另存为" msgid "Shift+" -msgstr "" +msgstr "Shift+" msgid "Save current project as" msgstr "项目另存为" @@ -4203,6 +4503,12 @@ msgstr "导入 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "加载模型" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + msgid "Import Configs" msgstr "导入预设" @@ -4236,8 +4542,8 @@ msgstr "导出 G-code" msgid "Export current plate as G-code" msgstr "导出当前盘的G-code" -msgid "Export &Configs" -msgstr "导出预设" +msgid "Export Preset Bundle" +msgstr "导出预设包" msgid "Export current configuration to files" msgstr "导出当前选择的预设" @@ -4338,9 +4644,6 @@ msgstr "在3D场景中显示悬空高亮" msgid "Preferences" msgstr "偏好设置" -msgid "View" -msgstr "视图" - msgid "Help" msgstr "帮助" @@ -4408,10 +4711,10 @@ msgstr "将工具路径导出为OBJ格式" msgid "Export toolpaths as OBJ" msgstr "将工具路径导出为OBJ格式" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "打开 Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "打开 Studio" msgid "&Quit" @@ -4501,40 +4804,49 @@ msgstr "" msgid "Synchronization" msgstr "同步" -msgid "Initialize failed (No Device)!" -msgstr "初始化失败(没有设备)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "设备无法处理更多的对话。请稍后重试。" -msgid "Initialize failed (Device connection not ready)!" -msgstr "初始化失败(设备未连接)" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "播放器异常,请重新安装系统播放器。" -msgid "Initialize failed (No Camera Device)!" -msgstr "初始化失败(没有摄像头)" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "未能加载播放器,请重新点击“播放”按钮。" -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "打印机正忙于下载,请等待下载完成。" +msgid "Please confirm if the printer is connected." +msgstr "请确认打印机是否连接成功。" -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "初始化失败(当前打印机的版本不支持)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "打印机正在忙于下载,请等下载完成后再尝试。" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初始化失败(在局域网模式中不可访问)!" +msgid "Printer camera is malfunctioning." +msgstr "打印机摄像头异常。" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "初始化失败(未找到打印机的局域网地址)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "出现了一些问题。请更新打印机固件后重试。" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "局域网模式直播未开启,请前往打印机屏幕开启。" + +msgid "Please enter the IP of printer to connect." +msgstr "请输入打印机IP后尝试连接。" msgid "Initializing..." msgstr "正在初始化……" -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "初始化失败(%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "链接失败。请检查网络后重试" -msgid "Network unreachable" -msgstr "网络不可访问" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "检查网络后重试。如仍未恢复,可重启或更新打印机。" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "已停止 [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "打印机已注销,无法连接。" msgid "Stopped." msgstr "已经停止。" @@ -4563,19 +4875,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "虚拟摄像头初始化失败(%s)!" +msgid "Network unreachable" +msgstr "网络不可访问" + msgid "Information" msgstr "信息" msgid "Playing..." msgstr "正在播放中……" -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "加载失败 [%d]!" - -msgid "Loading..." -msgstr "正在加载视频……" - msgid "Year" msgstr "年" @@ -4594,9 +4902,6 @@ msgstr "按月份分组,从最近的开始展示" msgid "Show all files, recent first." msgstr "显示所有文件,从最近的开始展示" -msgid "Timelapse" -msgstr "延时摄影" - msgid "Switch to timelapse files." msgstr "切换到延时摄影文件列表" @@ -4624,6 +4929,12 @@ msgstr "选择" msgid "Batch manage files." msgstr "批量管理文件" +msgid "Refresh" +msgstr "刷新" + +msgid "Reload file list from printer." +msgstr "从打印机重新加载文件列表。" + msgid "No printers." msgstr "未选择打印机" @@ -4634,13 +4945,32 @@ msgstr "连接失败 [%d]!" msgid "Loading file list..." msgstr "加载文件列表..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "文件列表为空[%d]" +msgid "No files" +msgstr "文件列表为空" + +msgid "Load failed" +msgstr "加载失败" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "初始化失败(设备未连接)" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "当前固件暂不支持查看SD卡中文件。请更新打印机固件后重试。" + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "初始化失败(存储不可用,请插入 SD 卡)!" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "局域网连接失败(无法查看SD卡)" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "局域网模式下暂不支持查看SD卡内文件。" #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "加载失败 [%d]" +msgid "Initialize failed (%s)!" +msgstr "初始化失败(%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4661,10 +4991,10 @@ msgstr "删除文件" msgid "Fetching model infomations ..." msgstr "正在获取模型信息..." -msgid "Failed to fetching model infomations from printer." +msgid "Failed to fetch model information from printer." msgstr "无法从打印机获取模型信息。" -msgid "Failed to parse model infomations." +msgid "Failed to parse model information." msgstr "解析模型信息失败。" msgid "" @@ -4678,6 +5008,12 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "文件%s丢失,请重新下载。" +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" + msgid "Download waiting..." msgstr "等待下载中..." @@ -4694,14 +5030,13 @@ msgstr "下载完成" msgid "Downloading %d%%..." msgstr "下载中 %d%%..." -msgid "Connection lost. Please retry." -msgstr "连接丢失。请重试。" +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "重新连接打印机,该操作无法立即完成,请稍后再试。" -msgid "The device cannot handle more conversations. Please retry later." -msgstr "设备无法处理更多的对话。请稍后重试。" - -msgid "File not exists." -msgstr "文件不存在" +msgid "File does not exist." +msgstr "文件不存在。" msgid "File checksum error. Please retry." msgstr "文件校验和错误。请重试。" @@ -4758,12 +5093,6 @@ msgstr "反转纵轴,横滚轴" msgid "Printing Progress" msgstr "打印进度" -msgid "Resume" -msgstr "继续" - -msgid "Stop" -msgstr "停止" - msgid "0" msgstr "" @@ -4804,6 +5133,9 @@ msgstr "" msgid "Control" msgstr "控制" +msgid "Printer Parts" +msgstr "打印机零件" + msgid "Print Options" msgstr "打印选项" @@ -4822,9 +5154,6 @@ msgstr "机箱" msgid "Bed" msgstr "热床" -msgid "Unload" -msgstr "退料" - msgid "Debug Info" msgstr "调试信息" @@ -5000,9 +5329,6 @@ msgstr "设备状态" msgid "Update" msgstr "固件更新" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "不再显示" @@ -5033,6 +5359,35 @@ msgstr "%s 信息" msgid "Skip" msgstr "跳过" +msgid "Newer 3mf version" +msgstr "较新的3mf版本" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "3mf文件版本处于Beta测试阶段,比当前OrcaSlicer版本更新。" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "如果您想尝试Orca Slicer Beta,您可以点击" + +msgid "Download Beta Version" +msgstr "下载Beta版本" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "3mf文件版本比当前Orca Slicer版本更新。" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "更新你的Orca Slicer以启用3mf文件中的所有功能。" + +msgid "Current Version: " +msgstr "当前版本:" + +msgid "Latest Version: " +msgstr "最新版本:" + +msgid "Not for now" +msgstr "" + msgid "3D Mouse disconnected." msgstr "3D鼠标断连。" @@ -5099,12 +5454,12 @@ msgstr[0] "%1$d对象加载为一个切割对象的子部件" msgid "ERROR" msgstr "错误" -msgid "CANCELED" -msgstr "已取消" - msgid "COMPLETED" msgstr "已完成" +msgid "CANCELED" +msgstr "已取消" + msgid "Cancel upload" msgstr "取消上传" @@ -5210,6 +5565,25 @@ msgstr "允许提示音" msgid "Filament Tangle Detect" msgstr "缠料检测" +msgid "Nozzle Clumping Detection" +msgstr "裹头检测" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "检查喷嘴是否被耗材丝或其他异物裹住" + +msgid "Nozzle Type" +msgstr "喷嘴类型" + +msgid "Stainless Steel" +msgstr "不锈钢" + +msgid "Hardened Steel" +msgstr "硬化钢" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "全局" @@ -5377,10 +5751,10 @@ msgid "" msgstr "启用传统的延时摄影可能会导致表面瑕疵。建议更改为平滑模式。" msgid "Expand sidebar" -msgstr "" +msgstr "展开侧边栏" msgid "Collapse sidebar" -msgstr "" +msgstr "折叠边栏" #, c-format, boost-format msgid "Loading file: %s" @@ -5401,9 +5775,6 @@ 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 " @@ -5444,6 +5815,9 @@ msgstr "step 文件中的部件名称包含非UTF8格式的字符!" msgid "The name may show garbage characters!" msgstr "此名称可能显示乱码字符!" +msgid "Remember my choice." +msgstr "记住我的选择。" + #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "加载文件“%1%”失败。发现无效配置。" @@ -5566,9 +5940,6 @@ msgstr "无法重新加载:" msgid "Error during reload" msgstr "重新加载时发生错误" -msgid "Slicing" -msgstr "正在切片" - msgid "There are warnings after slicing models:" msgstr "模型切片警告:" @@ -5623,9 +5994,15 @@ msgstr "正在导入模型" msgid "prepare 3mf file..." msgstr "正在准备3mf文件..." +msgid "Download failed, unknown file format." +msgstr "下载失败,未知文件格式。" + msgid "downloading project ..." msgstr "项目下载中..." +msgid "Download failed, File size exception." +msgstr "下载失败,文件大小异常。" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "项目已下载%d%%" @@ -5633,10 +6010,10 @@ msgstr "项目已下载%d%%" msgid "" "Importing to Orca Slicer failed. Please download the file and manually " "import it." -msgstr "" +msgstr "导入到Orca Slicer失败。请下载文件并手动导入。" msgid "Import SLA archive" -msgstr "" +msgstr "导入 SLA 存档" msgid "The selected file" msgstr "已选择的文件" @@ -5647,6 +6024,20 @@ msgstr "不包含有效的G-code文件。" msgid "Error occurs while loading G-code file" msgstr "加载G-code文件时遇到错误" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "加载路径为%1%的ZIP档案失败。" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "解压文件到%1%失败:%2%" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "未能找到位于 %1% 的解压文件。解压缩文件失败。" + msgid "Drop project file" msgstr "项目文件操作" @@ -5671,18 +6062,12 @@ msgstr "G-code文件不能和模型一起加载" 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 "克隆数量:" @@ -5712,17 +6097,36 @@ msgstr "文件%s已经发送到打印机的存储空间,可以在打印机上 msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." -msgstr "无法对模型网格执行布尔运算。只有正面部分将被导出。" +"will be kept. You may fix the meshes and try agian." +msgstr "" +"无法对模型网格执行布尔运算。只保留正体积部分。您可以修复网格后再试一次。" + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "原因:零件\"%1%\"为空。" + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "原因:零件\"%1%\"没有封闭一个体积。" + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "原因:零件\"%1%\"有自相交。" + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "原因:零件\"%1%\"与另一个零件没有交集。" msgid "" "Are you sure you want to store original SVGs with their local paths into the " "3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" +"您确定要将原始SVG文件与其本地路径存储到3MF文件中吗?\n" +"如果选择“否”,项目中的所有SVG文件将不再可编辑。" msgid "Private protection" -msgstr "" +msgstr "隐私保护" msgid "Is the printer ready? Is the print sheet in place, empty and clean?" msgstr "打印机是否就绪?打印平台是否在正确的位置、有没有异物、是否干净?" @@ -5747,7 +6151,7 @@ msgid "Custom supports and color painting were removed before repairing." msgstr "自定义的支撑和涂色在模型修复之前将被清除。" msgid "Optimize Rotation" -msgstr "" +msgstr "优化旋转" msgid "Invalid number" msgstr "无效数字" @@ -5863,6 +6267,11 @@ msgstr "登录区域" msgid "Stealth Mode" msgstr "局域网模式" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "启用网络插件" @@ -5878,15 +6287,44 @@ msgstr "英制" msgid "Units" msgstr "单位" -msgid "Home" +msgid "Allow only one OrcaSlicer instance" msgstr "" +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"在OSX上,默认情况下总是只有一个应用程序实例在运行。但是,允许从命令行运行同一" +"应用程序的多个实例。在这种情况下,此设置将只允许一个实例。" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + +msgid "Home" +msgstr "首页" + msgid "Default Page" msgstr "" msgid "Set the page opened on startup." msgstr "" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "放大到鼠标位置" @@ -5901,6 +6339,12 @@ msgstr "使用自由视角" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "如果启用,使用自由视角。如果未启用,使用约束视角。" +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "显示启动画面" @@ -5919,6 +6363,29 @@ msgstr "冲刷体积:每一次更换颜色时自动计算。" msgid "If enabled, auto-calculate everytime the color changed." msgstr "如果启用,会在每一次更换颜色时自动计算。" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "冲刷体积:每一次更换材料时自动计算。" + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "如果启用,会在每一次更换材料时自动计算。" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "启用此选项后,您可以同时向多个设备发送任务并管理多个设备。" + msgid "Network" msgstr "网络" @@ -5958,6 +6425,42 @@ msgstr "使用逆戟鲸打开.step/.stp文件" msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "开启后,将缺省使用逆戟鲸打开.step文件" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "近期项目的最大数量" @@ -6127,12 +6630,21 @@ msgstr "选择/移除打印机(系统预设)" msgid "Create printer" msgstr "创建打印机" -msgid "Incompatible" -msgstr "不兼容的预设" - msgid "The selected preset is null!" msgstr "选择的预设为空!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "自定义" + +msgid "Other layer filament sequence" +msgstr "其它层耗材打印顺序" + +msgid "Please input layer value (>= 2)." +msgstr "请输入层号(>=2)。" + msgid "Plate name" msgstr "盘名称" @@ -6142,8 +6654,14 @@ msgstr "跟随全局打印顺序" msgid "Print sequence" msgstr "打印顺序" -msgid "Customize" -msgstr "自定义" +msgid "Same as Global" +msgstr "跟随全局" + +msgid "Disable" +msgstr "禁用" + +msgid "Spiral vase" +msgstr "旋转花瓶" msgid "First layer filament sequence" msgstr "首层耗材打印顺序" @@ -6206,15 +6724,6 @@ msgstr "用户预设" msgid "Preset Inside Project" msgstr "项目预设" -msgid "Name is invalid;" -msgstr "无效名称;" - -msgid "illegal characters:" -msgstr "非法字符:" - -msgid "illegal suffix:" -msgstr "非法后缀:" - msgid "Name is unavailable." msgstr "名称不可用。" @@ -6232,15 +6741,6 @@ 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 "名称不能和一个预设的别名相同。" @@ -6298,9 +6798,6 @@ msgstr "无法找到我的设备?" msgid "Log out successful." msgstr "登出成功。" -msgid "Offline" -msgstr "离线" - msgid "Busy" msgstr "忙碌" @@ -6325,12 +6822,6 @@ msgstr "" msgid "Send print job to" msgstr "发送打印任务至" -msgid "Refresh" -msgstr "刷新" - -msgid "Bed Leveling" -msgstr "热床调平" - msgid "Flow Dynamics Calibration" msgstr "动态流量校准" @@ -6343,9 +6834,6 @@ msgstr "发送完成" msgid "Error code" msgstr "错误代码" -msgid "Printer local connection failed, please try again." -msgstr "打印机局域网连接失败,请重试。" - msgid "No login account, only printers in LAN mode are displayed" msgstr "未登录账号,仅显示局域网模式的打印机" @@ -6415,8 +6903,11 @@ 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 "所选打印机与选择的打印机预设不兼容。" +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "所选打印机(%s)与切片软件中选择的打印机配置文件(%s)不兼容。" msgid "An SD card needs to be inserted to record timelapse." msgstr "开启延迟摄影功能需要插入SD卡" @@ -6468,41 +6959,34 @@ msgid "nozzle in preset: %s %s" msgstr "预设中的喷嘴:%s %s" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" -msgstr "记忆中的喷嘴:%.1f %s" +msgid "nozzle memorized: %.2f %s" +msgstr "记忆中的喷嘴:%.2f %s" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" -msgstr "预设中的喷嘴直径与记忆的喷嘴直径不一致。您最近更换了喷嘴吗?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." +msgstr "" +"切片文件中的喷嘴直径与记忆的喷嘴不一致。如果您最近更换了喷嘴,请前往设备 > 打" +"印机零件进行更改设置。" #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" -msgstr "*使用 %s 材料和 %s 打印可能会导致喷嘴损坏" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "用%s打印高温材料(%s材料)可能会导致喷嘴损坏" + +msgid "Please fix the error above, otherwise printing cannot continue." +msgstr "请修复上述错误,否则打印无法继续。" msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "如果您仍然想继续打印,请单击“确定”按钮。" -msgid "Hardened Steel" -msgstr "硬化钢" - -msgid "Stainless Steel" -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." @@ -6514,12 +6998,18 @@ msgstr "使用微型激光雷达进行自动流量校准" msgid "Modifying the device name" msgstr "修改打印机名称" +msgid "Bind with Pin Code" +msgstr "通过Pin码绑定" + msgid "Send to Printer SD card" msgstr "发送到打印机的SD卡" msgid "Cannot send the print task when the upgrade is in progress" msgstr "设备升级中,无法发送打印任务" +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "所选打印机与选择的打印机预设不兼容。" + msgid "An SD card needs to be inserted before send to printer SD card." msgstr "发送到打印机需要插入SD卡" @@ -6562,6 +7052,26 @@ msgstr "接收登录报告超时" msgid "Unknown Failure" msgstr "发生错误" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "请在打印机屏幕上的“帐户”页面中找到Pin码,然后在下面输入Pin码。" + +msgid "Can't find Pin Code?" +msgstr "无法找到Pin码?" + +msgid "Pin Code" +msgstr "Pin码" + +msgid "Binding..." +msgstr "绑定..." + +msgid "Please confirm on the printer screen" +msgstr "请在打印机屏幕上确认。" + +msgid "Log in failed. Please check the Pin Code." +msgstr "登录失败,请检查Pin码。" + msgid "Log in printer" msgstr "登录打印机" @@ -6711,14 +7221,18 @@ msgid "" "precise dimensions or is part of an assembly, it's important to double-check " "whether this change in geometry impacts the functionality of your print." msgstr "" +"启用此选项将改变模型的形状。如果您的打印件需要精确的尺寸或是装配体的一部分," +"请务必仔细检查这种形状的变化是否影响了最终功能。" msgid "Are you sure you want to enable this option?" -msgstr "" +msgstr "您确定要启用此选项吗?" msgid "" "Layer height is too small.\n" "It will set to min_layer_height\n" msgstr "" +"层高太小。\n" +"将自动设置为min_layer_height的值\n" msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " @@ -6735,6 +7249,25 @@ msgstr "调整" msgid "Ignore" msgstr "忽略" +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"实验性选项。在更换耗材丝时,将耗材丝回抽一段距离后再切断以最小化冲刷。虽然这" +"可以显著减少冲刷,但也可能增加喷嘴堵塞或其他打印问题的风险。" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." +msgstr "" +"实验性选项。在更换耗材丝时,将耗材丝回抽一段距离后再切断以最小化冲刷。虽然这" +"可以显著减少冲刷,但也可能增加喷嘴堵塞或其他打印问题的风险。请配合打印机最新" +"固件使用。" + msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" @@ -6812,6 +7345,9 @@ msgstr "支撑耗材" msgid "Tree supports" msgstr "树状支撑" +msgid "Skirt" +msgstr "裙边" + msgid "Prime tower" msgstr "擦拭塔" @@ -6976,6 +7512,14 @@ msgstr "多挤出机多材料打印机的换色参数" msgid "Printable space" msgstr "可打印区域" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "G-code风格已切换" + msgid "Cooling Fan" msgstr "冷却风扇" @@ -7016,7 +7560,7 @@ msgid "Change filament G-code" msgstr "耗材丝更换G-code" msgid "Change extrusion role G-code" -msgstr "" +msgstr "挤出类型更换G-code" msgid "Pause G-code" msgstr "暂停 G-code" @@ -7197,17 +7741,30 @@ msgid "" 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%\",是否在切换后要保留这些更改的预设参数?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "您已更改了预设 “%1%” 的一些设置。" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已经更改了预设参数,是否在切换后要保留这些更改的预设参数?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" +"\n" +"您可以保存或丢弃已经修改的预设值。" + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "您已经修改了预设参数。" + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" msgid "Extruders count" msgstr "挤出机数量" @@ -7233,12 +7790,14 @@ msgid "" "Note: New modified presets will be selected in settings tabs after close " "this dialog." msgstr "" +"将选定的选项从左边的预设转移到右边。\n" +"注意:关闭此对话框后,新修改的预置将在设置标签中被选中。" msgid "Transfer values from left to right" -msgstr "" +msgstr "从左到右的转移值" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7319,6 +7878,60 @@ msgstr "没有可用的更新。" msgid "The configuration is up to date." msgstr "当前配置已经是最新版本。" +msgid "Obj file Import color" +msgstr "Obj文件导入颜色" + +msgid "Specify number of colors:" +msgstr "指定颜色数量:" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "颜色数量范围应该是[%d, %d]。" + +msgid "Recommended " +msgstr "推荐" + +msgid "Current filament colors:" +msgstr "当前耗材丝颜色:" + +msgid "Quick set:" +msgstr "快捷设置:" + +msgid "Color match" +msgstr "颜色匹配" + +msgid "Approximate color matching." +msgstr "近似的颜色匹配。" + +msgid "Append" +msgstr "追加" + +msgid "Add consumable extruder after existing extruders." +msgstr "近似的颜色匹配。" + +msgid "Reset mapped extruders." +msgstr "重置匹配的耗材丝。" + +msgid "Cluster colors" +msgstr "重置匹配的耗材丝" + +msgid "Map Filament" +msgstr "匹配耗材丝" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" +"注意:颜色已经选好了,您可以选中确认 \n" +" 继续或手动修改它。" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" +"警告:新增追加耗材丝数量 \n" +" 和已有耗材丝数量超过了16." + msgid "Ramming customization" msgstr "自定义尖端成型" @@ -7400,6 +8013,32 @@ msgstr "从" msgid "To" msgstr "到" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "未检测到Bambu网络插件。" @@ -7589,13 +8228,13 @@ msgid "Gizmo FDM paint-on seam" msgstr "FDM涂装接缝" msgid "Gizmo Text emboss / engrave" -msgstr "" +msgstr "Gizmo文本浮雕/雕刻" msgid "Zoom in" -msgstr "" +msgstr "放大" msgid "Zoom out" -msgstr "" +msgstr "缩小" msgid "Switch between Prepare/Preview" msgstr "准备/预览之间的切换" @@ -7669,6 +8308,12 @@ msgstr "5倍速移动滑动条" msgid "Shift+Mouse wheel" msgstr "Shift+鼠标滚轮" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "更新说明" @@ -7696,6 +8341,42 @@ msgstr "跳过本版本" msgid "Done" msgstr "完成" +msgid "resume" +msgstr "继续" + +msgid "Resume Printing" +msgstr "继续打印" + +msgid "Resume Printing(defects acceptable)" +msgstr "继续打印(缺陷可接受)" + +msgid "Resume Printing(problem solved)" +msgstr "继续打印(问题已解决)" + +msgid "Stop Printing" +msgstr "停止打印" + +msgid "Check Assistant" +msgstr "前往机器助手" + +msgid "Filament Extruded, Continue" +msgstr "耗材已挤出,继续" + +msgid "Not Extruded Yet, Retry" +msgstr "耗材未挤出,重试" + +msgid "Finished, Continue" +msgstr "已完成,继续" + +msgid "Load Filament" +msgstr "进料" + +msgid "Filament Loaded, Resume" +msgstr "耗材已加载,继续" + +msgid "View Liveview" +msgstr "查看LiveView" + msgid "Confirm and Update Nozzle" msgstr "确认并更新喷嘴" @@ -7751,14 +8432,8 @@ msgstr "版本:" msgid "Update firmware" msgstr "更新固件" -msgid "Printing" -msgstr "打印中" - -msgid "Idle" -msgstr "空闲" - msgid "Beta version" -msgstr "" +msgstr "Beta版本" msgid "Latest version" msgstr "最新版本" @@ -7788,7 +8463,7 @@ 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." +"update next time starting Orca." msgstr "" "当前固件版本异常,需要进行修复升级,否则无法继续打印。你想现在就开始升级吗?" "你也可以稍后在打印机上升级,或者下一次启动studio再升级。" @@ -7922,9 +8597,6 @@ msgstr "内部搭桥" msgid "Gap infill" msgstr "填缝" -msgid "Skirt" -msgstr "裙边" - msgid "Support interface" msgstr "支撑面" @@ -8196,16 +8868,18 @@ msgid "" "each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" +"相对挤出机寻址要求在每层重置挤出机位置,以防止浮点精度损失。将 \"G92E0\" 添加" +"到图层代码中。" msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." -msgstr "" +msgstr "\"G92E0\" 出现在 before_layer_gcode 中,与绝对挤出机寻址不兼容。" msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " "extruder addressing." -msgstr "" +msgstr "\"G92E0\" 出现在 layer_gcode 中,这与绝对挤出机寻址不兼容。" #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" @@ -8492,6 +9166,15 @@ msgstr "工程材料热床" msgid "First layer print sequence" msgstr "第一层打印顺序" +msgid "Other layers print sequence" +msgstr "其他层打印顺序" + +msgid "The number of other layers print sequence" +msgstr "其他层的打印顺序数量" + +msgid "Other layers filament sequence" +msgstr "其他层的耗材打印顺序" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "在每次换层抬升z高度之前插入这段G-code" @@ -9226,7 +9909,7 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9234,7 +9917,7 @@ msgid "" msgstr "" "墙/填充的顺序。当未启用时,首先打印墙壁,这在大多数情况下都是最好的。\n" "\n" -"首先打印墙壁可能有助于极端悬垂,因为墙壁有相邻的填充物可以粘附。但是,填充物" +"首先打印填充可能有助于极端悬垂,因为墙壁有相邻的填充物可以粘附。但是,填充物" "会在附着在墙壁上的地方轻微地挤出打印的墙壁,导致外部表面质量更差。它还会导致" "填充物透过零件的外部表面。" @@ -9285,6 +9968,12 @@ msgid "" "printing." msgstr "挤出机四周的避让半径。用于在逐件打印中避免碰撞。" +msgid "Nozzle height" +msgstr "喷嘴高度" + +msgid "The height of nozzle tip." +msgstr "喷嘴尖端的高度。" + msgid "Bed mesh min" msgstr "网床最小点" @@ -9390,6 +10079,29 @@ msgstr "" "如果勾选这个选项,部件冷却风扇将永远不会停止,并且会至少运行在最小风扇转速值" "以减少风扇的启停频次" +msgid "Don't slow down outer walls" +msgstr "不减速外墙" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" +"如果启用,此设置将确保外墙不会为了满足最小层时间而减速。这在以下情况下特别有" +"帮助:\n" +"\n" +"1. 避免在打印光滑耗材时改变光泽\n" +"2. 避免改变外墙速度,可能会产生轻微的墙壁伪影,看起来像z条纹\n" +"3. 避免以会在外墙上产生VFAs(细微伪影)的速度打印\n" +"\n" + msgid "Layer time" msgstr "层时间" @@ -9640,14 +10352,28 @@ msgstr "打印耗材的供应商。仅用于展示。" msgid "(Undefined)" msgstr "(未定义)" -msgid "Infill direction" -msgstr "填充方向" +msgid "Sparse infill direction" +msgstr "稀疏填充方向" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "稀疏填充图案的角度,决定走线的开始或整体方向。" +msgid "Solid infill direction" +msgstr "实心填充方向" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "实心填充图案的角度,决定走线的开始或整体方向。" + +msgid "Rotate solid infill direction" +msgstr "旋转实心填充方向" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "每层都旋转实心填充方向90°。" + msgid "Sparse infill density" msgstr "稀疏填充密度" @@ -9693,6 +10419,9 @@ msgstr "支撑立方体" msgid "Lightning" msgstr "闪电" +msgid "Cross Hatch" +msgstr "交叉层叠" + msgid "Sparse infill anchor length" msgstr "稀疏填充锚线长度" @@ -9877,6 +10606,9 @@ msgstr "" "第一层”,则“全风扇速度第一层”将被忽略,在这种情况下,风扇将在“禁用风扇第一" "层”+1层以最大允许速度运行。" +msgid "layer" +msgstr "" + msgid "Support interface fan speed" msgstr "支撐接触面风扇" @@ -9937,14 +10669,30 @@ msgid "" "printed more slowly" msgstr "填缝的速度。缝隙通常有不一致的线宽,应改用较慢速度打印。" +msgid "Precise Z height" +msgstr "精准Z高度" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"开启这个设置,对象在切片后将得到精准的Z高度。它将通过微调对象最后几层的层高来" +"确保对象Z高度精准。注意这是一个实验性参数。" + 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" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"打开这个设置,导出的G-code将包含G2 G3指令。圆弧拟合的容许值和精度相同。" msgid "Add line number" msgstr "标注行号" @@ -10145,12 +10893,28 @@ msgstr "内部稀疏填充的线宽。如果以%表示,它将基于喷嘴直 msgid "Infill/Wall overlap" msgstr "填充/墙 重叠" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." msgstr "" -"填充区域被轻微扩大,并和外墙产生重叠,进而产生更好的粘接。表示为相对稀疏填充" -"的线宽的百分比。" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "顶/底部实心填充/墙重叠率" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" +msgstr "" +"顶部实心填充区域略微扩大,以便与墙壁重叠,以获得更好的粘合,并减少顶部填充与" +"墙壁相接处的小孔出现。25-30%的值是一个很好的起点,可以减少小孔的出现。百分比" +"值相对于稀疏填充的线宽" msgid "Speed of internal sparse infill" msgstr "内部稀疏填充的打印速度" @@ -10451,7 +11215,7 @@ msgstr "" "注意:此参数禁用圆弧拟合。" msgid "mm³/s²" -msgstr "" +msgstr "mm³/s²" msgid "Smoothing segment length" msgstr "平滑段长度" @@ -10751,6 +11515,26 @@ msgstr "" "挤出机中的一些材料会被拉回特定长度,避免空驶较长时材料渗出。设置为0表示关闭回" "抽。" +msgid "Long retraction when cut(experimental)" +msgstr "切料时回抽(实验)" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"实验性选项。在更换耗材丝时,将耗材丝回抽一段距离后再切断以最小化冲刷。虽然这" +"大大减少了冲刷,但也可能增加喷嘴堵塞或其他打印问题的风险。" + +msgid "Retraction distance when cut" +msgstr "切料回抽距离" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "实验性选项。在更换耗材丝时,切断前的回抽长度" + msgid "Z hop when retract" msgstr "回抽时抬升Z" @@ -11075,6 +11859,29 @@ msgstr "Skirt高度" msgid "How many layers of skirt. Usually only one layer" msgstr "skirt有多少层。通常只有一层" +msgid "Draft shield" +msgstr "风挡" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "限制" + +msgid "Enabled" +msgstr "打开" + msgid "Skirt loops" msgstr "Skirt圈数" @@ -11087,6 +11894,20 @@ msgstr "Skirt速度" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "skirt速度,单位为mm/s。0表示使用默认的层挤出速度。" +msgid "Skirt minimum extrusion length" +msgstr "Skirt最小挤出长度" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +msgstr "" +"打印skirt时的最小挤出长度,单位为mm。0表示关闭此功能。\n" +"\n" +"如果打印机设置为不使用擦拭塔,使用非零值是有用的。" + 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" @@ -11109,9 +11930,6 @@ 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 " @@ -11254,6 +12072,9 @@ msgid "" "example, if your endstop zero actually leaves the nozzle 0.3mm far from the " "print bed, set this to -0.3 (or fix your endstop)." msgstr "" +"此值将从输出 G-Code 中的所有 Z 坐标中添加(或减去)。它用于补偿损坏的 Z 端限位" +"器置:例如,如果限位器零实际离开喷嘴 0.3mm 远离构建板(打印床),将其设置为 " +"-0.3(或调整限位器)。" msgid "Enable support" msgstr "开启支撑" @@ -11640,7 +12461,7 @@ msgid "" msgstr "换料时插入的G-code,包括T命令。" msgid "This gcode is inserted when the extrusion role is changed" -msgstr "" +msgstr "当挤出类型改变时会插入此G-code" msgid "" "Line width for top surfaces. If expressed as a %, it will be computed over " @@ -11754,6 +12575,44 @@ msgstr "擦拭塔冲刷线间距" msgid "Spacing of purge lines on the wipe tower." msgstr "擦拭塔上冲刷线的间距" +msgid "Maximum wipe tower print speed" +msgstr "擦拭塔最大打印速度" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" +"擦拭塔冲刷和稀疏层的最大打印速度。当冲刷时,如果稀疏填充速度或从耗材最大体积" +"速度计算出的速度较低,则使用最低速度。\n" +"\n" +"当打印稀疏层时,如果内墙速度或从耗材最大体积速度计算出的速度较低,则使用最低" +"速度。\n" +"\n" +"增加此速度可能会影响塔的稳定性,同时增加喷嘴与擦拭塔上可能形成的任何斑点碰撞" +"的力。\n" +"\n" +"在将此参数增加到默认值90mm/sec之外之前,请确保您的打印机可以可靠地在增加的速" +"度下桥接,并且换料时的滴漏得到了很好的控制。\n" +"\n" +"对于擦拭塔外墙,无论此设置如何,都使用内墙速度。" + msgid "Wipe tower extruder" msgstr "擦拭塔挤出机" @@ -11880,7 +12739,7 @@ msgstr "G-code缩略图的格式" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " "QOI for low memory firmware" -msgstr "" +msgstr "G-Code 缩略图格式: PNG 质量最佳,JPG 尺寸最小,QOI 用于低内存固件" msgid "Use relative E distances" msgstr "使用相对E距离" @@ -12036,7 +12895,7 @@ msgid " not in range " msgstr " 不在合理的区间" msgid "Minimum save" -msgstr "" +msgstr "最小保存" msgid "export 3mf with minimum size." msgstr "以最小尺寸导出3mf。" @@ -12055,10 +12914,10 @@ msgid "" msgstr "当物体部分位于热床的下方时,将其提升到热床的上方。默认情况下禁用" msgid "Orient Options" -msgstr "" +msgstr "方向选项" msgid "Orient options: 0-disable, 1-enable, others-auto" -msgstr "" +msgstr "方向选项:0-禁用,1-启用,其他-自动" msgid "Rotation angle around the Z axis in degrees." msgstr "绕Z轴的旋转角度(以度为单位)。" @@ -12077,6 +12936,8 @@ msgid "" "maintaining different profiles or including configurations from a network " "storage." msgstr "" +"在给定目录加载和存储设置。这对于维护不同的配置文件或包括网络存储中的配置非常" +"有用。" msgid "Load custom gcode" msgstr "加载自定义G-code" @@ -12426,6 +13287,9 @@ msgstr "已取消" msgid "load_obj: failed to parse" msgstr "加载对象:无法分析" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "该文件包含顶点超过4个的多边形。" @@ -12503,12 +13367,6 @@ 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个字符。" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12555,6 +13413,16 @@ msgstr "请选择要校准的耗材丝。" msgid "The input value size must be 3." msgstr "输入值大小必须为3。" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"该机型每个喷嘴最多只能保存16个历史结果。您可以删除先已有历史结果再开始校准。" +"或者您可以直接开始校准,但是无法创建新的校准历史结果。您仍继续校准吗?" + msgid "Connecting to printer..." msgstr "正在连接打印机..." @@ -12564,6 +13432,21 @@ msgstr "测试失败的结果已被删除。" msgid "Flow Dynamics Calibration result has been saved to the printer" 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 override the historical result?" +msgstr "" +"已经存在一个具有相同名称的历史校准结果:%s。相同名称的结果只会保存一个。您确" +"定要覆盖历史结果吗?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "该机型每个喷嘴最多只能保存%d个历史结果, 该结果将不会被保存" + msgid "Internal Error" msgstr "内部错误" @@ -12608,24 +13491,24 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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" +"请从我们的wiki中找到动态流量校准的详细信息。\n" "\n" "通常情况下,校准是不必要的。当您开始单色/单材料打印,并在打印开始菜单中勾选" -"了“流量动态校准”选项时,打印机将按照旧的方式,在打印前校准丝料;当您开始多色/" +"了“动态流量校准”选项时,打印机将按照旧的方式,在打印前校准丝料;当您开始多色/" "多材料打印时,打印机将在每次换丝料时使用默认的补偿参数,这在大多数情况下会产" "生良好的效果。\n" "\n" -"请注意,有几种情况会导致校准结果不可靠:使用纹理板进行校准;建模平台粘附效果" -"不好(请清洗建模平台或涂抹胶棒)... 您可以在我们的wiki中找到更多信息。\n" +"有几种情况可能导致校准结果不可靠,例如打印板的的附着力不足。清洗打印板或者使" +"用胶水可以增强打印板附着力。您可以在我们的维基上找到更多相关信息。\n" "\n" "在我们的测试中,校准结果有约10%的波动,这可能导致每次校准的结果略有不同。我们" "仍在调查根本原因,并通过新的更新进行改进。" @@ -12733,25 +13616,22 @@ msgstr "*我们建议您在名称中添加品牌、材料、类型,甚至湿 msgid "Failed" msgstr "失败" +msgid "Please enter the name you want to save to printer." +msgstr "请输入要保存到打印机的名称。" + +msgid "The name cannot exceed 40 characters." +msgstr "名称不能超过40个字符。" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" +"want to override 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 "Please find the cornor with perfect degree of extrusion" -msgstr "请找出最佳挤出角度" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "请找到具有完美挤出度的角落" msgid "Input Value" msgstr "输入值" @@ -12825,12 +13705,6 @@ msgstr "将打印一份测试模型。在校准之前,请清理打印平台并 msgid "Printing Parameters" msgstr "打印参数" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "热床类型" @@ -12877,12 +13751,6 @@ msgstr "结束k值" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "喷嘴直径已从打印机设置同步" @@ -12895,6 +13763,9 @@ msgstr "至体积速度" msgid "Flow Dynamics Calibration Result" msgstr "动态流量校准结果" +msgid "New" +msgstr "新建" + msgid "No History Result" msgstr "无历史结果" @@ -12907,9 +13778,22 @@ msgstr "刷新历史流量动态校准记录" msgid "Action" msgstr "操作" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "该机型每个喷嘴最多只能保存%d个历史结果" + msgid "Edit Flow Dynamics Calibration" msgstr "编辑动态流量校准" +msgid "New Flow Dynamic Calibration" +msgstr "新建动态流量校准" + +msgid "Ok" +msgstr "确认" + +msgid "The filament must be selected." +msgstr "请选择材料" + msgid "Network lookup" msgstr "搜索网络" @@ -12932,13 +13816,15 @@ msgid "Finished" msgstr "完成" msgid "Multiple resolved IP addresses" -msgstr "" +msgstr "多个解析的IP地址" #, boost-format msgid "" "There are several IP addresses resolving to hostname %1%.\n" "Please select one that should be used." msgstr "" +"有几个IP地址可以解析到主机名 %1%。\n" +"请选择一个应该使用的地址。" msgid "PA Calibration" msgstr "PA校准" @@ -12996,6 +13882,9 @@ msgstr "" msgid "PETG" msgstr "" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "" @@ -13092,6 +13981,9 @@ msgstr "如有需要,请使用正斜杠( / )作为目录分隔符。" msgid "Upload to storage" msgstr "上传到存储单位" +msgid "Switch to Device tab after upload." +msgstr "上传后跳转到设备页。" + #, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "上传文件名不以\"%s\"结尾。您是否要继续?" @@ -13103,7 +13995,7 @@ msgid "Print host upload queue" msgstr "打印主机上传队列" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" msgstr "进程" @@ -13290,6 +14182,15 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "您还没有选择打印机或预设。请至少选择一个。" +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" +"您创建的耗材丝名字%s已经存在。\n" +"如果您继续创建,您创建的预设将以全名显示。您想继续吗?" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "以下一些现有预设未能成功创建:\n" @@ -13348,12 +14249,6 @@ msgstr "矩形" msgid "Printable Space" msgstr "可打印形状" -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" - msgid "Hot Bed STL" msgstr "热床STL模型" @@ -13487,18 +14382,24 @@ msgstr "材料已创建" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" "如果需要,请转到灯丝设置以编辑您的预设。\n" "请注意喷嘴温度、热床温度和最大体积流量对打印质量有重大影响。请小心设置它们。" +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." +msgstr "" + msgid "Printer Setting" msgstr "打印机设置" -msgid "Export Configs" -msgstr "导出预设" - msgid "Printer config bundle(.orca_printer)" msgstr "打印机预设集(.orca_printer)" @@ -13593,6 +14494,9 @@ msgstr "请至少选择一种打印机或耗材丝。" msgid "Please select a type you want to export" msgstr "请选择一个你想导出的类型" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" + msgid "Edit Filament" msgstr "编辑材料" @@ -13651,7 +14555,7 @@ msgid "The filament choice not find filament preset, please reselect it" msgstr "您选择的材料未找到材料预设,请重新选择。" msgid "[Delete Required]" -msgstr "" +msgstr "[删除请求]" msgid "Edit Preset" msgstr "编辑预设" @@ -13665,6 +14569,19 @@ msgstr "收起" msgid "Daily Tips" msgstr "每日贴士" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "记忆中的喷嘴:%.1f %s" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "预设中的喷嘴直径与记忆的喷嘴直径不一致。您最近更换了喷嘴吗?" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "*使用 %s 材料和 %s 打印可能会导致喷嘴损坏" + msgid "Need select printer" msgstr "需要选择打印机" @@ -13694,13 +14611,19 @@ msgstr "" msgid "Refresh Printers" msgstr "刷新打印机" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "HTTPS CA文件是可选的。只有在使用自签名证书进行HTTPS连接时才需要。" msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "" +msgstr "证书文件 (*.crt,*.pem)|*.crt;*.pem|所有文件|*.*" msgid "Open CA certificate file" msgstr "打开CA证书文件" @@ -13792,28 +14715,28 @@ msgid "Could not connect to PrusaLink" msgstr "无法连接到 PrusaLink。" msgid "Storages found" -msgstr "" +msgstr "已找到存储" #. TRN %1% = storage path #, boost-format msgid "%1% : read only" -msgstr "" +msgstr "%1%:只读" #. TRN %1% = storage path #, boost-format msgid "%1% : no free space" -msgstr "" +msgstr "%1%:没有可用空间" #. TRN %1% = host #, boost-format msgid "Upload has failed. There is no suitable storage found at %1%." -msgstr "" +msgstr "上载失败。在%1%找不到合适的存储。" msgid "Connection to Prusa Connect works correctly." -msgstr "" +msgstr "与Prusa Connect的连接工作正常。" msgid "Could not connect to Prusa Connect" -msgstr "" +msgstr "无法连接到Prusa connect" msgid "Connection to Repetier works correctly." msgstr "与 Repetier 的连接正常。" @@ -13848,6 +14771,225 @@ msgid "" "Error: \"%2%\"" msgstr "主机打印机的枚举失败。消息体:\"%1%\"错误:\"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"0.2 mm 喷嘴的默认参数,层高小,层纹不明显,打印质量高,适合大部分常规打印场" +"景。" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"此为高质量参数,相比于此喷嘴的默认参数,打印速度、加速度较低,稀疏填充图案为" +"螺旋体,打印质量更高,但耗时更长。" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "相比于此喷嘴的默认参数,层高较大,层纹不明显,打印耗时稍短。" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "相比于此喷嘴的默认参数,层高较大,层纹稍显现,打印耗时较短。" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,几乎不显层纹,打印质量较高,但打印耗时较" +"长。" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"此为高质量参数,相比于此喷嘴的默认参数,层高较小,打印速度、加速度较低,稀疏" +"填充图案为螺旋体,几乎不显层纹,打印质量非常高,但打印耗时很长。" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,几乎不显层纹,打印质量较高,但打印耗时较" +"长。" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"此为高质量参数,相比于此喷嘴的默认参数,层高较小,打印速度、加速度较低,稀疏" +"填充图案为螺旋体,几乎不显层纹,打印质量非常高,但打印耗时很长。" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"0.4 mm 喷嘴的默认参数,层高常规,层纹一般,打印质量常规,适合大部分常规打印场" +"景。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"此为强度参数,相比于此喷嘴的默认参数,墙层数较大,稀疏填充密度较高,打印件的" +"强度更高,但耗材用量更大,耗时更长。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较大,层纹较明显,打印质量较低,部分模型的打印耗" +"时稍短。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较大,层纹较明显,打印质量较低,部分模型的打印耗" +"时较短。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹较不明显,打印质量较高,但打印耗时较" +"长。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"此为高质量参数,相比于此喷嘴的默认参数,层高较小,打印速度、加速度较低,稀疏" +"填充图案为螺旋体,层纹较不明显,打印质量较高,但打印耗时很长。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹更不明显,打印质量较高,但打印耗时较" +"长。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"此为高质量参数,相比于此喷嘴的默认参数,层高较小,打印速度、加速度较低,稀疏" +"填充图案为螺旋体,层纹更不明显,打印质量很高,但打印耗时很长。" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹更不明显,打印质量较高,但打印耗时较" +"长。" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"0.6 mm 喷嘴的默认参数,层高较大,层纹明显,打印质量一般,打印耗时一般。" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"此为强度参数,相比于此喷嘴的默认参数,墙层数较大,稀疏填充密度较高,打印件的" +"强度更高,但耗材用量更大,耗时更长。" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"相比于此喷嘴的默认参数,层高较大,层纹较明显,打印质量较低,部分模型的打印耗" +"时较短。" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"相比于此喷嘴的默认参数,层高较大,层纹很明显,打印质量较低,部分模型的打印耗" +"时较短。" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹较不明显,打印质量稍微较高,部分模型的" +"打印耗时较长。" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹较不明显,打印质量较高,部分模型的打印" +"耗时较长。" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"0.8 mm 喷嘴的默认参数,层高较大,层纹很明显,打印质量低,打印耗时一般。" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"相比于此喷嘴的默认参数,层高更大,层纹非常明显,打印质量较低,部分模型的打印" +"耗时较短。" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"相比于此喷嘴的默认参数,层高较大,层纹非常明显,打印质量较低,部分模型的打印" +"耗时较短。" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹较不明显,打印质量稍微较高,部分模型的" +"打印耗时较长。" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"相比于此喷嘴的默认参数,层高较小,层纹较不明显,打印质量较高,部分模型的打印" +"耗时较长。" + msgid "Connected to Obico successfully!" msgstr "" @@ -13860,17 +15002,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14242,6 +15382,162 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "Export &Configs" +#~ msgstr "导出预设" + +#~ msgid "Infill direction" +#~ 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 "" +#~ "打开这个设置,导出的G-code将包含G2 G3指令。圆弧拟合的容许值和精度相同。" + +#~ msgid "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill" +#~ msgstr "" +#~ "填充区域被轻微扩大,并和外墙产生重叠,进而产生更好的粘接。表示为相对稀疏填" +#~ "充的线宽的百分比。" + +#~ msgid "Export Configs" +#~ msgstr "导出预设" + +#~ msgid "Unload Filament" +#~ msgstr "退料" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "选择1个AMS槽位,然后点击进料/退料按钮以自动进料/退料。" + +#~ msgid "MainBoard" +#~ msgstr "主板" + +#~ msgid "active" +#~ msgstr "活动的" + +#~ msgid "Jump to layer" +#~ msgstr "跳转到层" + +#~ msgid "Cabin humidity" +#~ msgstr "舱内湿度" + +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "绿色表示 AMS 湿度正常,橙色表示湿度高,红色表示湿度过高。(湿度计:越低越" +#~ "好。)" + +#~ msgid "Desiccant status" +#~ msgstr "干燥剂状态" + +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "干燥剂状态低于两格表示干燥剂可能不活跃。请更换干燥剂。(杠:越高越好)。" + +#~ msgid "" +#~ "Note: When the lid is open or the desiccant pack is changed, it can take " +#~ "hours or a night to absorb the moisture. Low temperatures also slow down " +#~ "the process. During this time, the indicator may not represent the " +#~ "chamber accurately." +#~ msgstr "" +#~ "注意:当盖子打开或更换干燥剂包装时,可能需要数小时或一晚才能吸收水分,低温" +#~ "也会减慢这一过程。在此期间,指示器的数值可能并不准确。" + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "注意:如果是在打印过程中插入新的耗材丝,AMS会在打印结束后自动读取此耗材丝" +#~ "信息。" + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "成功导出G-code至 %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "初始化失败(没有设备)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "初始化失败(没有摄像头)" + +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "打印机正忙于下载,请等待下载完成。" + +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "初始化失败(当前打印机的版本不支持)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "初始化失败(在局域网模式中不可访问)!" + +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "初始化失败(未找到打印机的局域网地址)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "已停止 [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "加载失败 [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "文件列表为空[%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "加载失败 [%d]" + +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "无法从打印机获取模型信息。" + +#~ msgid "Failed to parse model infomations." +#~ msgstr "解析模型信息失败。" + +#~ msgid "Connection lost. Please retry." +#~ msgstr "连接丢失。请重试。" + +#~ msgid "File not exists." +#~ msgstr "文件不存在" + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "无法对模型网格执行布尔运算。只有正面部分将被导出。" + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "您已经更改了预设 \"%1%\",是否在切换后要保留这些更改的预设参数?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "您已经更改了预设参数,是否在切换后要保留这些更改的预设参数?" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "如果需要,请转到灯丝设置以编辑您的预设。\n" +#~ "请注意喷嘴温度、热床温度和最大体积流量对打印质量有重大影响。请小心设置它" +#~ "们。" + #~ msgid "Studio Version:" #~ msgstr "Studio 版本:" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 7c28c15559..6ede9cbe2c 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-06-21 20:03+0800\n" "PO-Revision-Date: 2023-11-06 14:37+0800\n" "Last-Translator: ablegods \n" "Language-Team: \n" @@ -117,7 +117,7 @@ msgid "Support Generated" msgstr "已產生支撐" msgid "Gizmo-Place on Face" -msgstr "" +msgstr "Gizmo-放置在臉上" msgid "Lay on face" msgstr "選擇底面" @@ -201,13 +201,13 @@ msgid "Move" msgstr "移動" msgid "Gizmo-Move" -msgstr "" +msgstr "Gizmo-移動" msgid "Rotate" msgstr "旋轉" msgid "Gizmo-Rotate" -msgstr "" +msgstr "Gizmo-旋轉" msgid "Optimize orientation" msgstr "最佳化方向" @@ -219,13 +219,13 @@ msgid "Scale" msgstr "縮放" msgid "Gizmo-Scale" -msgstr "" +msgstr "Gizmo 比例" msgid "Error: Please close all toolbar menus first" msgstr "錯誤:請先關閉所有工具欄選單" msgid "in" -msgstr "" +msgstr "在" msgid "mm" msgstr "mm" @@ -275,15 +275,18 @@ msgstr "重設旋轉" msgid "World coordinates" msgstr "世界坐標" -msgid "°" +msgid "Object coordinates" msgstr "" +msgid "°" +msgstr "°" + #. TRN - Input label. Be short as possible msgid "Size" msgstr "尺寸" msgid "%" -msgstr "" +msgstr "%" msgid "uniform scale" msgstr "等比例縮放" @@ -350,7 +353,7 @@ msgid "Depth" msgstr "" msgid "Groove" -msgstr "" +msgstr "溝槽" msgid "Width" msgstr "寬度" @@ -382,7 +385,7 @@ msgid "Move cut plane" msgstr "" msgid "Mode" -msgstr "" +msgstr "模式" msgid "Change cut mode" msgstr "" @@ -536,7 +539,7 @@ msgid "Connector" msgstr "連接件" msgid "Cut by Plane" -msgstr "" +msgstr "用平面分割" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" @@ -694,7 +697,7 @@ msgid "Text move" msgstr "" msgid "Set Mirror" -msgstr "" +msgstr "設定鏡像" msgid "Embossed text" msgstr "" @@ -730,7 +733,7 @@ msgid "First font" msgstr "" msgid "Default font" -msgstr "" +msgstr "預設字型" msgid "Advanced" msgstr "高級" @@ -781,11 +784,11 @@ msgid "Click to change text into object part." msgstr "" msgid "You can't change a type of the last solid part of the object." -msgstr "" +msgstr "您無法變更模型最後一個實體部分的類型。" msgctxt "EmbossOperation" msgid "Cut" -msgstr "" +msgstr "切割" msgid "Click to change part type into negative volume." msgstr "" @@ -927,19 +930,19 @@ msgstr "" msgctxt "Alignment" msgid "Left" -msgstr "" +msgstr "左" msgctxt "Alignment" msgid "Center" -msgstr "" +msgstr "置中" msgctxt "Alignment" msgid "Right" -msgstr "" +msgstr "右" msgctxt "Alignment" msgid "Top" -msgstr "" +msgstr "頂部" msgctxt "Alignment" msgid "Middle" @@ -947,7 +950,7 @@ msgstr "" msgctxt "Alignment" msgid "Bottom" -msgstr "" +msgstr "底部" msgid "Revert alignment." msgstr "" @@ -1042,7 +1045,7 @@ msgstr "" #. TRN - Input label. Be short as possible #. Align Top|Middle|Bottom and Left|Center|Right msgid "Alignment" -msgstr "" +msgstr "對齊" #. TRN - Input label. Be short as possible msgid "Char gap" @@ -1098,7 +1101,7 @@ msgid "SVG actions" msgstr "" msgid "SVG" -msgstr "" +msgstr "SVG" #, boost-format msgid "Opacity (%1%)" @@ -1211,7 +1214,7 @@ msgid "Lock/unlock the aspect ratio of the SVG." msgstr "" msgid "Reset scale" -msgstr "" +msgstr "重置比例" msgid "Distance of the center of the SVG to the model surface." msgstr "" @@ -1220,16 +1223,16 @@ msgid "Reset distance" msgstr "" msgid "Reset rotation" -msgstr "" +msgstr "重置旋轉" msgid "Lock/unlock rotation angle when dragging above the surface." msgstr "" msgid "Mirror vertically" -msgstr "" +msgstr "垂直鏡像" msgid "Mirror horizontally" -msgstr "" +msgstr "水平鏡像" #. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else). msgid "Change SVG Type" @@ -1298,7 +1301,7 @@ msgid "Restart selection" msgstr "" msgid "Esc" -msgstr "" +msgstr "Esc" msgid "Unselect" msgstr "" @@ -1311,7 +1314,7 @@ msgstr "" msgctxt "Verb" msgid "Scale" -msgstr "" +msgstr "縮放" msgid "None" msgstr "無" @@ -1323,7 +1326,7 @@ msgid "Length" msgstr "長度" msgid "Selection" -msgstr "" +msgstr "所選項目" msgid "Copy to clipboard" msgstr "複製到剪貼簿" @@ -1341,7 +1344,7 @@ msgid "Distance XYZ" msgstr "" msgid "Ctrl+" -msgstr "" +msgstr "Ctrl+" msgid "Notice" msgstr "通知" @@ -1379,9 +1382,6 @@ msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "設定檔 “%1%” 已被載入,但部分數值未被識別。" -msgid "V" -msgstr "版本:" - #, fuzzy msgid "" "OrcaSlicer will terminate because of running out of memory.It may be a bug. " @@ -1492,6 +1492,9 @@ msgstr "選擇一個或多個檔案(3mf/step/stl/svg/obj/amf/usd*/abc/ply) msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "選擇一個或多個檔案(3mf/step/stl/svg/obj/amf):" +msgid "Choose ZIP file" +msgstr "" + #, fuzzy msgid "Choose one file (gcode/3mf):" msgstr "選擇一個檔案(gcode/3mf):" @@ -1543,7 +1546,7 @@ msgid "Language" msgstr "語言" msgid "*" -msgstr "" +msgstr "*" msgid "The uploads are still ongoing" msgstr "正在上傳任務中" @@ -1557,6 +1560,11 @@ msgstr "正在進行的上傳" msgid "Select a G-code file:" msgstr "選擇一個 G-code 檔案:" +msgid "" +"Could not start URL download. Destination folder is not set. Please choose " +"destination folder in Configuration Wizard." +msgstr "" + msgid "Import File" msgstr "匯入檔案" @@ -1792,8 +1800,9 @@ msgstr "預設" msgid "Filament %d" msgstr "線材 %d" -msgid "active" -msgstr "活動的" +#, fuzzy +msgid "current" +msgstr "目前" msgid "Scale to build volume" msgstr "縮放到列印空間範圍大小" @@ -1888,6 +1897,9 @@ msgstr "新增標準模型" msgid "Add Handy models" msgstr "" +msgid "Add Models" +msgstr "新增模型" + msgid "Show Labels" msgstr "顯示標籤" @@ -1943,6 +1955,12 @@ msgstr "自動擺放" msgid "arrange current plate" msgstr "在列印板執行自動擺放" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自動旋轉方向" @@ -1979,10 +1997,6 @@ msgstr "更換線材" msgid "Set Filament for selected items" msgstr "為所選項目設定使用的線材" -#, fuzzy -msgid "current" -msgstr "目前" - msgid "Unlock" msgstr "解鎖" @@ -2199,7 +2213,7 @@ msgid "Remove parameter" msgstr "刪除參數" msgid "to" -msgstr "" +msgstr "到" msgid "Remove height range" msgstr "移除高度範圍" @@ -2316,9 +2330,6 @@ msgstr "輸入目前層上使用的自訂 G-code:" msgid "Jump to Layer" msgstr "轉換到層" -msgid "Jump to layer" -msgstr "轉換到層" - msgid "Please enter the layer number" msgstr "請輸入層數" @@ -2366,7 +2377,7 @@ msgid "No printer" msgstr "無列印設備" msgid "..." -msgstr "" +msgstr "..." msgid "Failed to connect to the server" msgstr "無法連接伺服器" @@ -2393,7 +2404,7 @@ msgid "Connection to printer failed" msgstr "連接列印設備失敗" #, fuzzy -msgid "Please check the network connection of the printer and Studio." +msgid "Please check the network connection of the printer and Orca." msgstr "請檢查列印設備和 Orca Slicer 的網路連接" msgid "Connecting..." @@ -2417,10 +2428,10 @@ msgstr "自動補充" msgid "AMS not connected" msgstr "AMS 尚未連接" -msgid "Load Filament" -msgstr "進料" +msgid "Load" +msgstr "匯入" -msgid "Unload Filament" +msgid "Unload" msgstr "退料" msgid "Ext Spool" @@ -2438,7 +2449,7 @@ msgstr "重試" msgid "Calibrating AMS..." msgstr "正在校準 AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "校準過程遇到問題。點擊查看解決方案。" msgid "Calibrate again" @@ -2479,8 +2490,8 @@ msgstr "咬入線材" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." -msgstr "選擇 1 個 AMS 槽位,然後點擊進料/退料按鈕以自動進料/退料。" +"load or unload filaments." +msgstr "" msgid "Edit" msgstr "編輯" @@ -2567,13 +2578,13 @@ msgid "Bed filling done." msgstr "填充列印板已完成。" msgid "Searching for optimal orientation" -msgstr "" +msgstr "查詢最佳方向" msgid "Orientation search canceled." -msgstr "" +msgstr "定向搜尋已取消." msgid "Orientation found." -msgstr "" +msgstr "找到方向。" msgid "Logging in" msgstr "登入中" @@ -2736,15 +2747,8 @@ msgstr " Orca Slicer 是在" msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero 通用公共許可證,版本 3 下授權的" -#, fuzzy -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" +msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" msgstr "" -"Orca Slicer 是基於 Bambulab 的 BambuStudio 開發,而 BambuStudio 源自於 Prusa " -"Research 的 PrusaSlicer。PrusaSlicer 源自於 Alessandro Ranellucci 的 Slic3r " -"和 RepRap 社群" msgid "Libraries" msgstr "庫" @@ -2835,10 +2839,12 @@ msgstr "您確定要清除線材資訊嗎?" msgid "You need to select the material type and color first." msgstr "您需要先選擇線材類型和顏色。" -msgid "Please input a valid value (K in 0~0.3)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f)" msgstr "" -msgid "Please input a valid value (K in 0~0.3, N in 0.6~2.0)" +#, c-format, boost-format +msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" msgstr "" msgid "Other Color" @@ -2946,36 +2952,15 @@ msgstr "停用 AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "使用機箱背後掛載的線材列印" -msgid "Cabin humidity" -msgstr "AMS 內部濕度" - -#, fuzzy -msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +msgid "Current Cabin humidity" msgstr "" -"綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" -"好。)" - -msgid "Desiccant status" -msgstr "乾燥劑狀態" - -#, fuzzy -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" -"好)。" msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"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." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"注意:當 AMS 蓋子打開或更換乾燥劑包裝時,可能需要數小時或一晚才能吸收水分,低" -"溫也會減慢這一過程。在此期間,濕度指示的數值可能並不準確。" #, fuzzy msgid "" @@ -3033,6 +3018,12 @@ msgstr "" "如果 AMS 中有兩個相同的線材,則會啟用 AMS 備用線材自動補給功能。\n" "(目前支援同品牌、同材質、同顏色的耗材自動供應)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -3047,11 +3038,9 @@ msgstr "" "20秒。" msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材信" -"息。" msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3099,6 +3088,14 @@ msgid "" "automatically when current filament runs out" msgstr "AMS 線材耗盡後將自動切換到屬性完全相同的線材" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "檔案" @@ -3167,6 +3164,61 @@ msgstr "浮點保留操作數" msgid "Stack overflow" msgstr "堆疊溢位" +msgid "Running post-processing scripts" +msgstr "執行後處理腳本" + +msgid "Successfully executed post-processing script" +msgstr "" + +msgid "Unknown error occured during exporting G-code." +msgstr "匯出 G-code 期間發生未知錯誤。" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"將臨時的 G-code 複製到輸出的 G-code 失敗 ,也許 SD 卡寫入被鎖定?\n" +"錯誤訊息:%1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"將臨時 G-code 複製到輸出 G-code 時失敗。目標設備可能存在問題,請嘗試再次匯出" +"或使用不同的設備。損壞的G-code 已輸出為%1%.tmp。" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"複製到選取之目標檔案夾的 G-code 重命名失敗。當前路徑為%1%.tmp。請再試看看匯" +"出。" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"臨時 G-code 的 複製已完成,但原始 G-code 因%1%在複製檢查期間無法打開。輸出 G-" +"code 為%2%.tmp。" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"臨時 G-code 的複制已完成,但匯出的 G-code 無法在復製檢查過程中打開。輸出 G-" +"code 為%1%.tmp。" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G-code 檔案已匯出為 %1%" + msgid "Unknown error when export G-code." msgstr "匯出 G-code 檔案發生未知錯誤。" @@ -3180,13 +3232,6 @@ msgstr "" "錯誤資訊:%1%。\n" "原始檔 %2%." -#, boost-format -msgid "Succeed to export G-code to %1%" -msgstr "成功匯出 G-code 至 %1%" - -msgid "Running post-processing scripts" -msgstr "執行後處理腳本" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "將臨時 G-Code 複製到輸出 G-Code 失敗" @@ -3194,6 +3239,224 @@ msgstr "將臨時 G-Code 複製到輸出 G-Code 失敗" msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "計劃上傳到 `%1%`。請參閱視窗-> 列印設備上傳隊列" +msgid "Device" +msgstr "設備" + +msgid "Task Sending" +msgstr "" + +msgid "Task Sent" +msgstr "" + +msgid "Edit multiple printers" +msgstr "" + +msgid "Select connected printers (0/6)" +msgstr "" + +#, c-format, boost-format +msgid "Select Connected Printers (%d/6)" +msgstr "" + +#, c-format, boost-format +msgid "The maximum number of printers that can be selected is %d" +msgstr "" + +msgid "Offline" +msgstr "離線" + +msgid "No task" +msgstr "" + +msgid "View" +msgstr "視角" + +msgid "N/A" +msgstr "N/A" + +msgid "Edit Printers" +msgstr "" + +msgid "Device Name" +msgstr "" + +msgid "Task Name" +msgstr "" + +msgid "Device Status" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "" +"Please select the devices you would like to manage here (up to 6 devices)" +msgstr "" + +msgid "Add" +msgstr "新增" + +msgid "Idle" +msgstr "閒置" + +msgid "Printing" +msgstr "列印中" + +msgid "Upgrading" +msgstr "" + +msgid "Incompatible" +msgstr "不相容的預設" + +msgid "syncing" +msgstr "" + +msgid "Printing Finish" +msgstr "" + +msgid "Printing Failed" +msgstr "" + +msgid "Printing Pause" +msgstr "" + +msgid "Prepare" +msgstr "準備" + +#, fuzzy +msgid "Slicing" +msgstr "正在切片中" + +msgid "Pending" +msgstr "" + +msgid "Sending" +msgstr "" + +msgid "Sending Finish" +msgstr "" + +msgid "Sending Cancel" +msgstr "" + +msgid "Sending Failed" +msgstr "" + +msgid "Print Success" +msgstr "" + +msgid "Print Failed" +msgstr "" + +msgid "Removed" +msgstr "" + +msgid "Resume" +msgstr "繼續" + +msgid "Stop" +msgstr "停止" + +msgid "Task Status" +msgstr "" + +msgid "Sent Time" +msgstr "" + +msgid "There are no tasks to be sent!" +msgstr "" + +msgid "No historical tasks!" +msgstr "" + +msgid "Loading..." +msgstr "正在載入影片……" + +msgid "No AMS" +msgstr "" + +msgid "Send to Multi-device" +msgstr "" + +msgid "Preparing print job" +msgstr "正在準備列印作業" + +#, fuzzy +msgid "Abnormal print file data. Please slice again" +msgstr "列印檔案資料異常,請重新切片" + +msgid "There is no device available to send printing." +msgstr "" + +msgid "The number of printers in use simultaneously cannot be equal to 0." +msgstr "" + +msgid "Use External Spool" +msgstr "" + +msgid "Use AMS" +msgstr "" + +msgid "Select Printers" +msgstr "" + +msgid "Ams Status" +msgstr "" + +msgid "Printing Options" +msgstr "" + +msgid "Bed Leveling" +msgstr "熱床調平" + +msgid "Timelapse" +msgstr "縮時攝影" + +msgid "Flow Dynamic Calibration" +msgstr "" + +msgid "Send Options" +msgstr "" + +msgid "Send to" +msgstr "" + +msgid "" +"printers at the same time.(It depends on how many devices can undergo " +"heating at the same time.)" +msgstr "" + +msgid "Wait" +msgstr "等待" + +msgid "" +"minute each batch.(It depends on how long it takes to complete the heating.)" +msgstr "" + +msgid "Send" +msgstr "傳送" + +msgid "Name is invalid;" +msgstr "無效名稱;" + +msgid "illegal characters:" +msgstr "非法字元:" + +msgid "illegal suffix:" +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 length exceeds the limit." +msgstr "名稱長度超過限制。" + msgid "Origin" msgstr "原點" @@ -3262,6 +3525,19 @@ msgstr "選擇 STL 檔案來匯入熱床模型:" msgid "Bed Shape" msgstr "熱床形狀" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" + +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" + +msgid "Please check.\n" +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" @@ -3347,27 +3623,6 @@ msgstr "" "\n" "這個數值將被重設為 0。" -#, fuzzy -msgid "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional." -msgstr "" -"花瓶模式只能在外牆層數為 1,關閉支撐,頂層層數為 0,稀疏填充密度為 0,傳統縮" -"時攝影時有效。" - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "I3 結構機型將不產生縮時攝影。" - -#, fuzzy -msgid "" -"Change these settings automatically? \n" -"Yes - Change these settings and enable spiral mode automatically\n" -"No - Give up using spiral mode this time" -msgstr "" -"自動調整這些設定?\n" -"是 - 自動調整這些設定並開啟花瓶模式\n" -"否 - 不使用花瓶模式" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3425,6 +3680,27 @@ msgid "" "Reset to 0." msgstr "" +#, fuzzy +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional." +msgstr "" +"花瓶模式只能在外牆層數為 1,關閉支撐,頂層層數為 0,稀疏填充密度為 0,傳統縮" +"時攝影時有效。" + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr "I3 結構機型將不產生縮時攝影。" + +#, fuzzy +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral mode automatically\n" +"No - Give up using spiral mode this time" +msgstr "" +"自動調整這些設定?\n" +"是 - 自動調整這些設定並開啟花瓶模式\n" +"否 - 不使用花瓶模式" + msgid "Auto bed leveling" msgstr "熱床自動調平" @@ -3535,18 +3811,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "主板" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "未定義" @@ -3675,7 +3939,7 @@ msgid "Dimensions" msgstr "" msgid "Temperatures" -msgstr "" +msgstr "溫度" msgid "Timestamps" msgstr "" @@ -3703,9 +3967,6 @@ msgstr "列印設備設定" msgid "parameter name" msgstr "參數名稱" -msgid "N/A" -msgstr "N/A" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s 不可以是百分比" @@ -3717,6 +3978,10 @@ msgstr "值 %s 超出範圍,是否繼續?" msgid "Parameter validation" msgstr "參數驗證" +#, c-format, boost-format +msgid "Value %s is out of range. The valid range is from %d to %d." +msgstr "" + msgid "Value is out of range." msgstr "值超出範圍。" @@ -3730,6 +3995,18 @@ msgstr "" "是:%s%%\n" "否:%s %s" +#, boost-format +msgid "" +"Invalid input format. Expected vector of dimensions in the following format: " +"\"%1%\"" +msgstr "輸入格式無效。預期向量應使用以下格式:“%1%”" + +msgid "Input value is out of range" +msgstr "輸入值超出範圍" + +msgid "Some extension in the input is invalid" +msgstr "" + #, fuzzy, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無效格式,應該是 \"%1%\" 這種格式" @@ -3808,12 +4085,12 @@ msgstr "顯示" msgid "Flushed" msgstr "廢料" -msgid "Total" -msgstr "總計" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "總計" + msgid "Total Estimation" msgstr "總預估" @@ -3921,6 +4198,12 @@ msgstr "時間預估" msgid "Normal mode" msgstr "普通模式" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "準備時間" @@ -4015,6 +4298,9 @@ msgstr "自動擺放選項" msgid "Spacing" msgstr "間距" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自動旋轉以最佳化自動擺放效果" @@ -4028,9 +4314,6 @@ msgstr "避開擠出校準區域" msgid "Align to Y axis" msgstr "與 Y 軸對齊" -msgid "Add" -msgstr "新增" - #, fuzzy msgid "Add plate" msgstr "新增列印板" @@ -4164,6 +4447,9 @@ msgstr "監控錄影" msgid "Go Live" msgstr "開啟直播" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "解析度" @@ -4219,14 +4505,11 @@ msgstr "正在關閉應用程式,部分預設已修改。" msgid "Logging" msgstr "日誌" -msgid "Prepare" -msgstr "準備" - msgid "Preview" msgstr "預覽" -msgid "Device" -msgstr "設備" +msgid "Multi-device" +msgstr "" msgid "Project" msgstr "專案項目" @@ -4235,7 +4518,7 @@ msgid "Yes" msgstr "是" msgid "No" -msgstr "" +msgstr "否" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "將會被關閉以建立新模型,是否繼續?" @@ -4255,9 +4538,6 @@ msgstr "切片所有列印板" msgid "Export G-code file" msgstr "匯出 G-code 檔案" -msgid "Send" -msgstr "傳送" - #, fuzzy msgid "Export plate sliced file" msgstr "匯出單一列印板切片檔案" @@ -4383,6 +4663,12 @@ msgstr "匯入 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "載入模型" +msgid "Import Zip Archive" +msgstr "" + +msgid "Load models contained within a zip archive" +msgstr "" + #, fuzzy msgid "Import Configs" msgstr "匯入設定檔" @@ -4421,9 +4707,8 @@ msgstr "匯出 G-code" msgid "Export current plate as G-code" msgstr "匯出目前列印板的 G-code" -#, fuzzy -msgid "Export &Configs" -msgstr "匯出設定檔" +msgid "Export Preset Bundle" +msgstr "" #, fuzzy msgid "Export current configuration to files" @@ -4527,9 +4812,6 @@ msgstr "在 3D 場景中凸顯懸空" msgid "Preferences" msgstr "偏好設定" -msgid "View" -msgstr "視角" - msgid "Help" msgstr "幫助" @@ -4598,10 +4880,10 @@ msgstr "將工具路徑匯出為 OBJ 格式" msgid "Export toolpaths as OBJ" msgstr "將工具路徑匯出為 OBJ 格式" -msgid "Open &Studio" +msgid "Open &Slicer" msgstr "開啟 Studio" -msgid "Open Studio" +msgid "Open Slicer" msgstr "開啟 Studio" msgid "&Quit" @@ -4694,43 +4976,49 @@ msgstr "" msgid "Synchronization" msgstr "同步" -msgid "Initialize failed (No Device)!" -msgstr "初始化失敗(沒有列印設備)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" -msgid "Initialize failed (Device connection not ready)!" -msgstr "初始化失敗(未連接列印設備)" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "初始化失敗(沒有攝影機)" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -#, fuzzy -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "列印設備正忙於下載,請等待下載完成。" +msgid "Please confirm if the printer is connected." +msgstr "" -#, fuzzy -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "初始化失敗(目前列印設備的版本不支援)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初始化失敗(在區域網路模式中不可存取)!" +msgid "Printer camera is malfunctioning." +msgstr "" -#, fuzzy -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "初始化失敗(未找到列印設備的區域網路地址)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "正在初始化……" -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "初始化失敗(%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" -msgid "Network unreachable" -msgstr "網路不可存取" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "已停止 [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "已經停止。" @@ -4760,19 +5048,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "虛擬攝影機初始化失敗(%s)!" +msgid "Network unreachable" +msgstr "網路不可存取" + msgid "Information" msgstr "資訊" msgid "Playing..." msgstr "正在播放中……" -#, c-format, boost-format -msgid "Load failed [%d]!" -msgstr "載入失敗 [%d]!" - -msgid "Loading..." -msgstr "正在載入影片……" - msgid "Year" msgstr "年" @@ -4791,9 +5075,6 @@ msgstr "按月份分組,從最近的開始展示" msgid "Show all files, recent first." msgstr "顯示所有檔案,從最近的開始展示" -msgid "Timelapse" -msgstr "縮時攝影" - msgid "Switch to timelapse files." msgstr "切換到縮時攝影檔案清單" @@ -4823,6 +5104,12 @@ msgstr "選擇" msgid "Batch manage files." msgstr "批次管理檔案" +msgid "Refresh" +msgstr "刷新" + +msgid "Reload file list from printer." +msgstr "" + #, fuzzy msgid "No printers." msgstr "未選擇列印設備" @@ -4834,13 +5121,32 @@ msgstr "連接失敗 [%d]!" msgid "Loading file list..." msgstr "載入檔案清單..." -#, c-format, boost-format -msgid "No files [%d]" -msgstr "檔案清單為空[%d]" +msgid "No files" +msgstr "" + +msgid "Load failed" +msgstr "" + +msgid "Initialize failed (Device connection not ready)!" +msgstr "初始化失敗(未連接列印設備)" + +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" + +msgid "Initialize failed (Storage unavailable, insert SD card.)!" +msgstr "" + +msgid "LAN Connection Failed (Failed to view sdcard)" +msgstr "" + +msgid "Browsing file in SD card is not supported in LAN Only Mode." +msgstr "" #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "載入失敗 [%d]" +msgid "Initialize failed (%s)!" +msgstr "初始化失敗(%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4861,12 +5167,11 @@ msgstr "刪除檔案" msgid "Fetching model infomations ..." msgstr "正在獲取模型資訊..." -#, fuzzy -msgid "Failed to fetching model infomations from printer." -msgstr "無法從列印設備獲取模型資訊。" +msgid "Failed to fetch model information from printer." +msgstr "" -msgid "Failed to parse model infomations." -msgstr "解析模型資訊失敗。" +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4879,6 +5184,12 @@ msgstr "" msgid "File '%s' was lost! Please download it again." msgstr "檔案 %s 遺失,請重新下載。" +#, c-format, boost-format +msgid "" +"File: %s\n" +"Title: %s\n" +msgstr "" + msgid "Download waiting..." msgstr "等待下載中..." @@ -4895,13 +5206,12 @@ msgstr "下載完成" msgid "Downloading %d%%..." msgstr "下載中 %d%%..." -msgid "Connection lost. Please retry." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -msgid "The device cannot handle more conversations. Please retry later." -msgstr "" - -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4962,12 +5272,6 @@ msgstr "反轉橫滾軸(縱軸)" msgid "Printing Progress" msgstr "列印進度" -msgid "Resume" -msgstr "繼續" - -msgid "Stop" -msgstr "停止" - msgid "0" msgstr "0" @@ -5009,6 +5313,9 @@ msgstr "" msgid "Control" msgstr "控制" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "列印選項" @@ -5027,9 +5334,6 @@ msgstr "機箱" msgid "Bed" msgstr "熱床" -msgid "Unload" -msgstr "退料" - msgid "Debug Info" msgstr "除錯資訊" @@ -5213,9 +5517,6 @@ msgstr "設備狀態" msgid "Update" msgstr "韌體更新" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "不再顯示" @@ -5246,6 +5547,35 @@ msgstr "%s 資訊" msgid "Skip" msgstr "跳過" +msgid "Newer 3mf version" +msgstr "較新的 3mf 版本" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" + +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" + +msgid "Current Version: " +msgstr "" + +msgid "Latest Version: " +msgstr "" + +msgid "Not for now" +msgstr "" + #, fuzzy msgid "3D Mouse disconnected." msgstr "3D 滑鼠已中斷連線。" @@ -5315,12 +5645,12 @@ msgstr[0] "%1$d 物件載入為一個切割物件的子零件" msgid "ERROR" msgstr "錯誤" -msgid "CANCELED" -msgstr "已取消" - msgid "COMPLETED" msgstr "已完成" +msgid "CANCELED" +msgstr "已取消" + msgid "Cancel upload" msgstr "取消上傳" @@ -5429,6 +5759,25 @@ msgstr "允許提示音效" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "" + +msgid "Hardened Steel" +msgstr "" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "全局" @@ -5615,10 +5964,10 @@ msgid "" msgstr "使用傳統模式的縮時攝影可能會導致表面缺陷。建議改為平滑模式。" msgid "Expand sidebar" -msgstr "" +msgstr "展開側邊欄" msgid "Collapse sidebar" -msgstr "" +msgstr "折疊側邊欄" #, c-format, boost-format msgid "Loading file: %s" @@ -5639,9 +5988,6 @@ msgstr "該 3mf 的版本 %s 比 %s 的版本 %s 新,發現以下參數值無 msgid "You'd better upgrade your software.\n" msgstr "建議升級您的軟體版本。\n" -msgid "Newer 3mf version" -msgstr "較新的 3mf 版本" - #, fuzzy, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " @@ -5684,6 +6030,9 @@ msgstr "step 檔案中的零件名稱包含非 UTF8 格式的字元!" msgid "The name may show garbage characters!" msgstr "此名稱可能顯示亂碼字元!" +msgid "Remember my choice." +msgstr "記住我的選擇。" + #, fuzzy, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "載入檔案 \"%1%\" 失敗。發現無效設定值。" @@ -5773,7 +6122,7 @@ msgid "Another export job is running." msgstr "有其他匯出任務正在進行中。" msgid "Unable to replace with more than one volume" -msgstr "" +msgstr "無法取代超過一個體積" msgid "Error during replace" msgstr "替換時發生錯誤" @@ -5805,10 +6154,6 @@ msgstr "無法重新載入:" msgid "Error during reload" msgstr "重新載入時出現錯誤" -#, fuzzy -msgid "Slicing" -msgstr "正在切片中" - msgid "There are warnings after slicing models:" msgstr "模型切片警告:" @@ -5867,9 +6212,15 @@ msgstr "正在匯入模型" msgid "prepare 3mf file..." msgstr "正在準備 3mf 檔案..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "專案項目下載中..." +msgid "Download failed, File size exception." +msgstr "" + #, fuzzy, c-format, boost-format msgid "Project downloaded %d%%" msgstr "專案項目已下載 %d%%" @@ -5880,7 +6231,7 @@ msgid "" msgstr "匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" msgid "Import SLA archive" -msgstr "" +msgstr "匯入 SLA 存檔" msgid "The selected file" msgstr "已選擇的檔案" @@ -5891,6 +6242,20 @@ msgstr "不包含有效的 G-code 檔案。" msgid "Error occurs while loading G-code file" msgstr "載入 G-code 檔案時遇到錯誤" +#. TRN %1% is archive path +#, boost-format +msgid "Loading of a ZIP archive on path %1% has failed." +msgstr "" + +#. TRN: First argument = path to file, second argument = error description +#, boost-format +msgid "Failed to unzip file to %1%: %2%" +msgstr "" + +#, boost-format +msgid "Failed to find unzipped file at %1%. Unzipping of file has failed." +msgstr "" + #, fuzzy msgid "Drop project file" msgstr "刪除專案項目" @@ -5916,9 +6281,6 @@ msgstr "G-code 檔案不能和模型一起載入" msgid "Can not add models when in preview mode!" msgstr "在預覽模式不允許增加模型" -msgid "Add Models" -msgstr "新增模型" - msgid "All objects will be removed, continue?" msgstr "即將刪除所有物件,是否繼續?" @@ -5926,9 +6288,6 @@ msgstr "即將刪除所有物件,是否繼續?" msgid "The current project has unsaved changes, save it before continue?" msgstr "目前專案項目包含未儲存的修改,是否先儲存?" -msgid "Remember my choice." -msgstr "記住我的選擇。" - msgid "Number of copies:" msgstr "複製數量:" @@ -5957,11 +6316,26 @@ msgid "" "on the printer." msgstr "檔案 %s 已經傳送到列印設備的儲存空間,可以在列印設備上瀏覽。" -#, fuzzy msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." -msgstr "無法對模型網格執行布林運算。只有正面部分將被導出。" +"will be kept. You may fix the meshes and try agian." +msgstr "" + +#, boost-format +msgid "Reason: part \"%1%\" is empty." +msgstr "" + +#, boost-format +msgid "Reason: part \"%1%\" does not bound a volume." +msgstr "" + +#, boost-format +msgid "Reason: part \"%1%\" has self intersection." +msgstr "" + +#, boost-format +msgid "Reason: \"%1%\" and another part have no intersection." +msgstr "" msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6119,6 +6493,11 @@ msgstr "登入區域" msgid "Stealth Mode" msgstr "區域網路模式" +msgid "" +"This stops the transmission of data to Bambu's cloud services. Users who " +"don't use BBL machines or use LAN mode only can safely turn on this function." +msgstr "" + msgid "Enable network plugin" msgstr "" @@ -6134,6 +6513,23 @@ msgstr "英製" msgid "Units" msgstr "單位" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"在 OSX 上,預設情況下總是只有一個應用程式實例在運行。但是卻允許從命令視窗執行" +"同一應用程式的多個實例。當您設定了這個設定後將只允許一個實例執行。" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "首頁" @@ -6143,6 +6539,18 @@ msgstr "預設頁面" msgid "Set the page opened on startup." msgstr "設定為啟動頁面。" +msgid "Touchpad" +msgstr "" + +msgid "Camera style" +msgstr "" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" + msgid "Zoom to mouse position" msgstr "放大到滑鼠位置" @@ -6157,6 +6565,12 @@ msgstr "使用自由鏡頭" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "如果啟用,則使用自由鏡頭。若未啟用,則使用受限鏡頭。" +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "顯示啟動動畫" @@ -6176,9 +6590,32 @@ msgstr "" msgid "If enabled, auto-calculate everytime the color changed." msgstr "" -msgid "Network" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Multi-device Management(Take effect after restarting Orca)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + +msgid "Network" +msgstr "網路" + #, fuzzy msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "同步使用者預設(列印設備/線材/列印品質參數)" @@ -6223,6 +6660,42 @@ msgstr "使用 Orca Slicer 打開 .step/.stp 檔案" msgid "If enabled, sets OrcaSlicer as default application to open .step files" msgstr "開啟後,將預設使用 Orca Slicer 打開 .step 檔案" +msgid "Associate web links to OrcaSlicer" +msgstr "" + +msgid "Associate URLs to OrcaSlicer" +msgstr "" + +msgid "Current association: " +msgstr "" + +msgid "Associate prusaslicer://" +msgstr "" + +msgid "Not associated to any application" +msgstr "" + +msgid "" +"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " +"from Printable.com" +msgstr "" + +msgid "Associate bambustudio://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " +"from makerworld.com" +msgstr "" + +msgid "Associate cura://" +msgstr "" + +msgid "" +"Associate OrcaSlicer with cura:// links so that Orca can open models from " +"thingiverse.com" +msgstr "" + msgid "Maximum recent projects" msgstr "最近專案項目的最大數量" @@ -6402,12 +6875,21 @@ msgstr "" msgid "Create printer" msgstr "" -msgid "Incompatible" -msgstr "不相容的預設" - msgid "The selected preset is null!" msgstr "選擇的預設為空!" +msgid "End" +msgstr "End" + +msgid "Customize" +msgstr "自訂" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + #, fuzzy msgid "Plate name" msgstr "列印板名稱" @@ -6418,8 +6900,14 @@ msgstr "跟隨全局列印順序" msgid "Print sequence" msgstr "列印順序" -msgid "Customize" -msgstr "自訂" +msgid "Same as Global" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "花瓶模式" msgid "First layer filament sequence" msgstr "首層線材列印順序" @@ -6488,15 +6976,6 @@ msgstr "使用者預設" msgid "Preset Inside Project" msgstr "項目預設" -msgid "Name is invalid;" -msgstr "無效名稱;" - -msgid "illegal characters:" -msgstr "非法字元:" - -msgid "illegal suffix:" -msgstr "非法後綴:" - msgid "Name is unavailable." msgstr "名稱不可用。" @@ -6514,15 +6993,6 @@ 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 "名稱不能和一個預設的別名相同。" @@ -6560,7 +7030,7 @@ msgid "(LAN)" msgstr "(區域網路)" msgid "Search" -msgstr "" +msgstr "搜尋" msgid "My Device" msgstr "我的設備" @@ -6580,9 +7050,6 @@ msgstr "無法找到我的設備?" msgid "Log out successful." msgstr "登出成功。" -msgid "Offline" -msgstr "離線" - msgid "Busy" msgstr "忙碌" @@ -6609,12 +7076,6 @@ msgstr "" msgid "Send print job to" msgstr "傳送列印作業至" -msgid "Refresh" -msgstr "刷新" - -msgid "Bed Leveling" -msgstr "熱床調平" - msgid "Flow Dynamics Calibration" msgstr "動態流量校準" @@ -6627,10 +7088,6 @@ msgstr "傳送完成" msgid "Error code" msgstr "錯誤代碼" -#, fuzzy -msgid "Printer local connection failed, please try again." -msgstr "列印設備區域網路連接失敗,請重試。" - #, fuzzy msgid "No login account, only printers in LAN mode are displayed" msgstr "未登入帳號,僅顯示區域網路模式的列印設備" @@ -6710,9 +7167,11 @@ msgstr "" msgid "An SD card needs to be inserted before printing." msgstr "請在進行列印前插入 SD記憶卡" -#, fuzzy -msgid "The selected printer is incompatible with the chosen printer presets." -msgstr "所選列印設備與選擇的列印設備預設檔不相容。" +#, c-format, boost-format +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" #, fuzzy msgid "An SD card needs to be inserted to record timelapse." @@ -6771,43 +7230,33 @@ msgid "nozzle in preset: %s %s" msgstr "" #, c-format, boost-format -msgid "nozzle memorized: %.1f %s" +msgid "nozzle memorized: %.2f %s" msgstr "" msgid "" -"Your nozzle diameter in preset is not consistent with memorized nozzle " -"diameter. Did you change your nozzle lately?" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." msgstr "" #, c-format, boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" + +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "如果您仍然想繼續列印,請滑鼠左鍵點擊 確定 按鈕。" -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - #, fuzzy msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "正在連接列印設備。連接過程中無法取消。" -msgid "Preparing print job" -msgstr "正在準備列印作業" - -#, fuzzy -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." @@ -6820,6 +7269,9 @@ msgstr "使用微型雷射雷達進行自動流量校準" msgid "Modifying the device name" msgstr "修改列印設備名稱" +msgid "Bind with Pin Code" +msgstr "" + #, fuzzy msgid "Send to Printer SD card" msgstr "傳送到列印設備的 SD 記憶卡" @@ -6827,6 +7279,10 @@ msgstr "傳送到列印設備的 SD 記憶卡" msgid "Cannot send the print task when the upgrade is in progress" msgstr "設備升級中,無法傳送列印作業" +#, fuzzy +msgid "The selected printer is incompatible with the chosen printer presets." +msgstr "所選列印設備與選擇的列印設備預設檔不相容。" + #, fuzzy msgid "An SD card needs to be inserted before send to printer SD card." msgstr "傳送到列印設備需要插入 SD 記憶卡" @@ -6873,6 +7329,26 @@ msgstr "接收登入回覆逾時" msgid "Unknown Failure" msgstr "未知錯誤" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + #, fuzzy msgid "Log in printer" msgstr "登入列印設備" @@ -7058,6 +7534,20 @@ msgid "Adjust" msgstr "" msgid "Ignore" +msgstr "忽略" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" + +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." msgstr "" #, fuzzy @@ -7142,6 +7632,9 @@ msgstr "支撐線材" msgid "Tree supports" msgstr "樹狀支撐" +msgid "Skirt" +msgstr "側裙" + msgid "Prime tower" msgstr "擦拭塔" @@ -7329,6 +7822,14 @@ msgstr "多擠出機多線材列印設備換色參數" msgid "Printable space" msgstr "可列印區域" +#. TRN: First argument is parameter name, the second one is the value. +#, boost-format +msgid "Invalid value provided for parameter %1%: %2%" +msgstr "" + +msgid "G-code flavor is switched" +msgstr "" + msgid "Cooling Fan" msgstr "冷卻風扇" @@ -7553,17 +8054,28 @@ msgid "" 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%\",是否在切換後要保留這些更改的預設參數?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." +msgstr "" + +msgid "" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" +msgstr "" msgid "Extruders count" msgstr "擠出機數量" @@ -7596,7 +8108,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7687,6 +8199,56 @@ msgstr "以更新到最新。" msgid "The configuration is up to date." msgstr "目前設定檔已經是最新版本。" +msgid "Obj file Import color" +msgstr "" + +msgid "Specify number of colors:" +msgstr "" + +#, c-format, boost-format +msgid "The color count should be in range [%d, %d]." +msgstr "" + +msgid "Recommended " +msgstr "" + +msgid "Current filament colors:" +msgstr "" + +msgid "Quick set:" +msgstr "" + +msgid "Color match" +msgstr "" + +msgid "Approximate color matching." +msgstr "" + +msgid "Append" +msgstr "" + +msgid "Add consumable extruder after existing extruders." +msgstr "" + +msgid "Reset mapped extruders." +msgstr "" + +msgid "Cluster colors" +msgstr "" + +msgid "Map Filament" +msgstr "" + +msgid "" +"Note:The color has been selected, you can choose OK \n" +" to continue or manually adjust it." +msgstr "" + +msgid "" +"Waring:The count of newly added and \n" +" current extruders exceeds 16." +msgstr "" + #, fuzzy msgid "Ramming customization" msgstr "自訂尖端成型" @@ -7773,6 +8335,32 @@ msgstr "從" msgid "To" msgstr "" +msgid "" +"Windows Media Player is required for this task! Do you want to enable " +"'Windows Media Player' for your operation system?" +msgstr "" + +msgid "" +"BambuSource has not correctly been registered for media playing! Press Yes " +"to re-register it. You will be promoted twice" +msgstr "" + +msgid "" +"Missing BambuSource component registered for media playing! Please re-" +"install BambuStutio or seek after-sales help." +msgstr "" + +msgid "" +"Using a BambuSource from a different install, video play may not work " +"correctly! Press Yes to fix it." +msgstr "" + +msgid "" +"Your system is missing H.264 codecs for GStreamer, which are required to " +"play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-" +"libav packages, then restart Orca Slicer?)" +msgstr "" + msgid "Bambu Network plug-in not detected." msgstr "" @@ -7980,10 +8568,10 @@ msgid "Gizmo Text emboss / engrave" msgstr "" msgid "Zoom in" -msgstr "" +msgstr "放大" msgid "Zoom out" -msgstr "" +msgstr "縮小" msgid "Switch between Prepare/Preview" msgstr "在準備/預覽模式之中切換" @@ -8060,6 +8648,12 @@ msgstr "5 倍速移動滑動條" msgid "Shift+Mouse wheel" msgstr "Shift+滑鼠滾輪" +msgid "Horizontal slider - Move to start position" +msgstr "" + +msgid "Horizontal slider - Move to last position" +msgstr "" + msgid "Release Note" msgstr "更新說明" @@ -8089,6 +8683,42 @@ msgstr "" msgid "Done" msgstr "完成" +msgid "resume" +msgstr "" + +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "進料" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8147,12 +8777,6 @@ msgstr "版本:" msgid "Update firmware" msgstr "更新韌體" -msgid "Printing" -msgstr "列印中" - -msgid "Idle" -msgstr "閒置" - msgid "Beta version" msgstr "" @@ -8185,7 +8809,7 @@ 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." +"update next time starting Orca." msgstr "" "目前韌體版本異常,需要進行修復升級,否則無法繼續列印。你想現在就開始升級嗎?" "你也可以稍後在列印設備上升級,或者下一次啟動 Orca Slicer 再升級。" @@ -8324,9 +8948,6 @@ msgstr "內部橋接" msgid "Gap infill" msgstr "填縫" -msgid "Skirt" -msgstr "" - msgid "Support interface" msgstr "支撐面" @@ -8518,7 +9139,7 @@ msgstr "" msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." -msgstr "" +msgstr "擦拭塔目前僅支援相對擠出機定址 (use_relative_e_distances=1)。" msgid "" "Ooze prevention is currently not supported with the prime tower enabled." @@ -8815,10 +9436,10 @@ msgid "Authorization Type" msgstr "授權類型" msgid "API key" -msgstr "" +msgstr "API 金鑰" msgid "HTTP digest" -msgstr "" +msgstr "HTTP摘要" msgid "Avoid crossing wall" msgstr "避免跨越外牆" @@ -8917,6 +9538,15 @@ msgstr "工程高溫列印板" msgid "First layer print sequence" msgstr "首層列印順序" +msgid "Other layers print sequence" +msgstr "" + +msgid "The number of other layers print sequence" +msgstr "" + +msgid "Other layers filament sequence" +msgstr "" + msgid "This G-code is inserted at every layer change before lifting z" msgstr "在每次換層抬升z高度之前插入這段 G-code" @@ -8961,7 +9591,7 @@ msgid "" msgstr "" msgid "Everywhere" -msgstr "" +msgstr "全部" msgid "Top and bottom surfaces" msgstr "" @@ -9460,7 +10090,7 @@ msgid "" msgstr "" msgid "Disabled" -msgstr "" +msgstr "停用" msgid "Limited filtering" msgstr "" @@ -9641,7 +10271,7 @@ msgid "" "Order of wall/infill. When the tickbox is unchecked the walls are printed " "first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the " +"Printing infill first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " "the printed walls where it is attached to them, resulting in a worse " "external surface finish. It can also cause the infill to shine through the " @@ -9689,6 +10319,12 @@ msgid "" "printing." msgstr "擠出機四周的避讓半徑。用於在逐件列印中避免碰撞。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9788,6 +10424,22 @@ msgstr "" "如果勾選這個選項,部件冷卻風扇將永遠不會停止,並且會以最小風扇轉速設定值持運" "運轉以減少風扇的頻繁開關" +msgid "Don't slow down outer walls" +msgstr "" + +msgid "" +"If enabled, this setting will ensure external perimeters are not slowed down " +"to meet the minimum layer time. This is particularly helpful in the below " +"scenarios:\n" +"\n" +" 1. To avoid changes in shine when printing glossy filaments \n" +"2. To avoid changes in external wall speed which may create slight wall " +"artefacts that appear like z banding \n" +"3. To avoid printing at speeds which cause VFAs (fine artefacts) on the " +"external walls\n" +"\n" +msgstr "" + msgid "Layer time" msgstr "層時間" @@ -10048,14 +10700,28 @@ msgstr "列印線材的供應商。僅用於展示。" msgid "(Undefined)" msgstr "(未定義)" -msgid "Infill direction" -msgstr "填充方向" +msgid "Sparse infill direction" +msgstr "" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "稀疏填充圖案的角度,決定走線的開始或整體方向。" +msgid "Solid infill direction" +msgstr "" + +msgid "" +"Angle for solid infill pattern, which controls the start or main direction " +"of line" +msgstr "" + +msgid "Rotate solid infill direction" +msgstr "" + +msgid "Rotate the solid infill direction by 90° for each layer." +msgstr "" + msgid "Sparse infill density" msgstr "稀疏填充密度" @@ -10101,6 +10767,9 @@ msgstr "支撐立方體" msgid "Lightning" msgstr "閃電" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "稀疏填充錨線長度" @@ -10292,6 +10961,9 @@ msgstr "" "第一層”,則“全風扇速度第一層”將被忽略,在這種情況下,風扇將在“禁用風扇第一" "層”+1層以最大允許速度運行。" +msgid "layer" +msgstr "" + #, fuzzy msgid "Support interface fan speed" msgstr "支撐接觸面風扇速度" @@ -10358,15 +11030,28 @@ msgid "" "printed more slowly" msgstr "填縫的速度。縫隙通常有不一致的線寬,應改用較慢速度列印。" +msgid "Precise Z height" +msgstr "" + +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" + msgid "Arc fitting" msgstr "圓弧擬合" -#, fuzzy msgid "" -"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " -"tolerance is same with resolution" +"Enable this to get a G-code file which has G2 and G3 moves. The fitting " +"tolerance is same as the resolution. \n" +"\n" +"Note: For klipper machines, this option is recomended to be disabled. " +"Klipper does not benefit from arc commands as these are split again into " +"line segments by the firmware. This results in a reduction in surface " +"quality as line segments are converted to arcs by the slicer and then back " +"to line segments by the firmware." msgstr "" -"打開這個設定,匯出的 G-code 將包含 G2 G3 指令。圓弧擬合的容許值和精度相同。" msgid "Add line number" msgstr "標註行號" @@ -10586,12 +11271,25 @@ msgstr "內部稀疏填充的線寬。如果以%表示,它將以噴嘴直徑 msgid "Infill/Wall overlap" msgstr "填充/牆 重疊" +#, no-c-format, no-boost-format msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"The percentage value is relative to line width of sparse infill. Set this " +"value to ~10-15% to minimize potential over extrusion and accumulation of " +"material resulting in rough top surfaces." +msgstr "" + +msgid "Top/Bottom solid infill/wall overlap" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"Top solid infill area is enlarged slightly to overlap with wall for better " +"bonding and to minimize the appearance of pinholes where the top infill " +"meets the walls. A value of 25-30% is a good starting point, minimising the " +"appearance of pinholes. The percentage value is relative to line width of " +"sparse infill" msgstr "" -"填充區域被輕微擴大,並和外牆產生重疊,進而產生更好的黏接。表示為相對稀疏填充" -"的線寬的百分比。" msgid "Speed of internal sparse infill" msgstr "內部稀疏填充的列印速度" @@ -10608,10 +11306,10 @@ msgstr "" "多擠出機列印" msgid "Maximum width of a segmented region" -msgstr "" +msgstr "分隔區域的最大寬度" msgid "Maximum width of a segmented region. Zero disables this feature." -msgstr "" +msgstr "分隔區域的最大寬度。零表示禁用此功能。" msgid "Interlocking depth of a segmented region" msgstr "" @@ -10895,7 +11593,7 @@ msgstr "" "注意:此參數會停用圓弧擬合。" msgid "mm³/s²" -msgstr "" +msgstr "mm³/s²" msgid "Smoothing segment length" msgstr "平滑段長度" @@ -11199,6 +11897,24 @@ msgstr "" "擠出機中的一些材料會被拉回特定長度,避免空駛較長時軟化的線材滲出。設定為 0 表" "示關閉回抽。" +msgid "Long retraction when cut(experimental)" +msgstr "" + +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" + +msgid "Retraction distance when cut" +msgstr "" + +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" + msgid "Z hop when retract" msgstr "回抽時抬升Z" @@ -11506,6 +12222,29 @@ msgstr "Skirt 高度" msgid "How many layers of skirt. Usually only one layer" msgstr "skirt 有多少層。通常只有一層" +msgid "Draft shield" +msgstr "防風罩" + +msgid "" +"A draft shield is useful to protect an ABS or ASA print from warping and " +"detaching from print bed due to wind draft. It is usually needed only with " +"open frame printers, i.e. without an enclosure. \n" +"\n" +"Options:\n" +"Enabled = skirt is as tall as the highest printed object.\n" +"Limited = skirt is as tall as specified by skirt height.\n" +"\n" +"Note: With the draft shield active, the skirt will be printed at skirt " +"distance from the object. Therefore, if brims are active it may intersect " +"with them. To avoid this, increase the skirt distance value.\n" +msgstr "" + +msgid "Limited" +msgstr "有限" + +msgid "Enabled" +msgstr "啟用" + msgid "Skirt loops" msgstr "Skirt 圈數" @@ -11518,6 +12257,17 @@ msgstr "Skirt 速度" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "Skirt 速度,單位為 mm/秒。 0 表示使用預設層擠出速度。" +msgid "Skirt minimum extrusion length" +msgstr "" + +msgid "" +"Minimum filament extrusion length in mm when printing the skirt. Zero means " +"this feature is disabled.\n" +"\n" +"Using a non zero value is useful if the printer is set up to print without a " +"prime line." +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" @@ -11540,9 +12290,6 @@ msgstr "內部實心填充的線寬。如果以%表示,它將以噴嘴直徑 msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "內部實心填充的速度,不是頂面和底面。" -msgid "Spiral vase" -msgstr "花瓶模式" - #, fuzzy msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -11812,7 +12559,7 @@ msgid "Number of bottom interface layers" msgstr "" msgid "Same as top" -msgstr "" +msgstr "與頂部相同" msgid "Top interface spacing" msgstr "頂部接觸面線距" @@ -12206,6 +12953,31 @@ msgstr "擦拭塔線距" msgid "Spacing of purge lines on the wipe tower." msgstr "擦拭塔上的線距。" +msgid "Maximum wipe tower print speed" +msgstr "" + +msgid "" +"The maximum print speed when purging in the wipe tower and printing the wipe " +"tower sparse layers. When purging, if the sparse infill speed or calculated " +"speed from the filament max volumetric speed is lower, the lowest will be " +"used instead.\n" +"\n" +"When printing the sparse layers, if the internal perimeter speed or " +"calculated speed from the filament max volumetric speed is lower, the lowest " +"will be used instead.\n" +"\n" +"Increasing this speed may affect the tower's stability as well as increase " +"the force with which the nozzle collides with any blobs that may have formed " +"on the wipe tower.\n" +"\n" +"Before increasing this parameter beyond the default of 90mm/sec, make sure " +"your printer can reliably bridge at the increased speeds and that ooze when " +"tool changing is well controlled.\n" +"\n" +"For the wipe tower external perimeters the internal perimeter speed is used " +"regardless of this setting." +msgstr "" + msgid "Wipe tower extruder" msgstr "擦拭塔擠出機" @@ -12337,7 +13109,7 @@ msgstr "G-code 縮圖的格式" msgid "" "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " "QOI for low memory firmware" -msgstr "" +msgstr "G-code 縮圖的格式:PNG 品質最佳,JPG 檔案最小,QOI 最低記憶體韌體" msgid "Use relative E distances" msgstr "使用相對 E 距離" @@ -12890,6 +13662,9 @@ msgstr "已取消" msgid "load_obj: failed to parse" msgstr "載入物件:無法分析" +msgid "load mtl in obj: failed to parse" +msgstr "" + #, fuzzy msgid "The file contains polygons with more than 4 vertices." msgstr "該檔案包含頂點超過 4 個的多邊形。" @@ -12972,13 +13747,6 @@ msgstr "流量比例" msgid "Max Volumetric Speed" msgstr "最大體積速度" -#, fuzzy -msgid "Please enter the name you want to save to printer." -msgstr "請輸入要儲存到列印設備的名稱。" - -msgid "The name cannot exceed 40 characters." -msgstr "名稱不能超過40個字元。" - #, fuzzy, c-format, boost-format msgid "" "Please input valid values:\n" @@ -13032,6 +13800,14 @@ msgstr "請選擇要校準的線材。" msgid "The input value size must be 3." msgstr "輸入值大小必須為 3。" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + #, fuzzy msgid "Connecting to printer..." msgstr "正在連接列印設備..." @@ -13043,6 +13819,19 @@ msgstr "測試失敗的結果已被刪除。" msgid "Flow Dynamics Calibration result has been saved to the printer" 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 override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "內部錯誤" @@ -13079,7 +13868,6 @@ msgstr "" msgid "About this calibration" msgstr "關於此校準" -#, fuzzy msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" "\n" @@ -13090,27 +13878,15 @@ msgid "" "printer will use the default compensation parameter for the filament during " "every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not " -"reliable: using a texture plate to do the calibration; the build plate does " -"not have good adhesion (please wash the build plate or apply gluestick!) ..." -"You can find more from our wiki.\n" +"Please note that there are a few cases that can make the calibration results " +"unreliable, such as insufficient adhesion on the build plate. Improving " +"adhesion can be achieved by washing the build plate or applying glue. For " +"more information on this topic, please refer to our Wiki.\n" "\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 "何時使用流量率校準" @@ -13219,26 +13995,23 @@ msgstr "*我們建議您在名稱中加入品牌、材料、類型,甚至濕 msgid "Failed" msgstr "失敗" +#, fuzzy +msgid "Please enter the name you want to save to printer." +msgstr "請輸入要儲存到列印設備的名稱。" + +msgid "The name cannot exceed 40 characters." +msgstr "名稱不能超過40個字元。" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " -"want to overrides the other results?" -msgstr "相同名稱的結果只會儲存一個。確定要覆蓋其他結果嗎?" - -#, fuzzy, 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?" +"want to override the other results?" msgstr "" -"已經存在一個具有相同名稱的校準結果:%s。相同名稱的結果只會儲存一個。確定要覆" -"蓋嗎?" msgid "Please find the best line on your plate" msgstr "請在您的列印板上找到最佳線條" -#, fuzzy -msgid "Please find the cornor with perfect degree of extrusion" -msgstr "請在您的列印板上找到最接近完美的直角" +msgid "Please find the corner with perfect degree of extrusion" +msgstr "" msgid "Input Value" msgstr "輸入值" @@ -13317,12 +14090,6 @@ msgstr "將列印一份測試模型。在校準之前,請清理列印板並將 msgid "Printing Parameters" msgstr "列印參數" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "熱床類型" @@ -13345,7 +14112,7 @@ msgstr "" "-不同的線材品牌和系列(Brand = Bambu, Family = Basic, Matte)" msgid "Pattern" -msgstr "" +msgstr "花紋" msgid "Method" msgstr "方法" @@ -13370,12 +14137,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - #, fuzzy msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "噴嘴直徑已從列印設備設定中同步" @@ -13389,6 +14150,9 @@ msgstr "至體積速度" msgid "Flow Dynamics Calibration Result" msgstr "動態流量校準結果" +msgid "New" +msgstr "新增" + msgid "No History Result" msgstr "無歷史結果" @@ -13401,9 +14165,22 @@ msgstr "重整歷史流量動態校準記錄" msgid "Action" msgstr "操作" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "編輯動態流量校準" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "" + msgid "Network lookup" msgstr "搜尋網路" @@ -13490,6 +14267,9 @@ msgstr "" msgid "PETG" msgstr "" +msgid "PCTG" +msgstr "" + msgid "TPU" msgstr "" @@ -13590,6 +14370,9 @@ msgstr "如有需要,請使用正斜槓( / )作為目錄分隔符號。" msgid "Upload to storage" msgstr "上傳到儲存單位" +msgid "Switch to Device tab after upload." +msgstr "" + #, fuzzy, c-format, boost-format msgid "Upload filename doesn't end with \"%s\". Do you wish to continue?" msgstr "上傳的檔名不以 \"%s\" 結尾。確定要繼續嗎?" @@ -13601,10 +14384,10 @@ msgid "Print host upload queue" msgstr "列印主機上傳隊列" msgid "ID" -msgstr "" +msgstr "ID" msgid "Progress" -msgstr "" +msgstr "進度" msgid "Host" msgstr "主機" @@ -13791,6 +14574,13 @@ msgid "" "You have not selected a printer or preset yet. Please select at least one." msgstr "" +#, c-format, boost-format +msgid "" +"The Filament name %s you created already exists. \n" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" +msgstr "" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" @@ -13847,12 +14637,6 @@ msgstr "" msgid "Printable Space" msgstr "" -msgid "X" -msgstr "" - -msgid "Y" -msgstr "" - msgid "Hot Bed STL" msgstr "" @@ -13982,14 +14766,20 @@ msgstr "" msgid "" "Please go to filament setting to edit your presets if you need.\n" "Please note that nozzle temperature, hot bed temperature, and maximum " -"volumetric speed have a significant impact on printing quality. Please set " +"volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" -msgid "Printer Setting" +msgid "" +"\n" +"\n" +"Orca has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" +"Click \"Sync user presets\" to enable the synchronization function." msgstr "" -msgid "Export Configs" +msgid "Printer Setting" msgstr "" msgid "Printer config bundle(.orca_printer)" @@ -14074,6 +14864,9 @@ msgstr "" msgid "Please select a type you want to export" msgstr "" +msgid "Failed to create temporary folder, please try Export Configs again." +msgstr "" + msgid "Edit Filament" msgstr "" @@ -14138,11 +14931,24 @@ msgid "For more information, please check out Wiki" msgstr "" msgid "Collapse" -msgstr "" +msgstr "摺疊" msgid "Daily Tips" msgstr "" +#, c-format, boost-format +msgid "nozzle memorized: %.1f %s" +msgstr "" + +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" + +#, c-format, boost-format +msgid "*Printing %s material with %s may cause nozzle damage" +msgstr "" + #, fuzzy msgid "Need select printer" msgstr "需要選擇列印設備" @@ -14160,10 +14966,10 @@ msgid "Physical Printer" msgstr "實體列印設備" msgid "Print Host upload" -msgstr "" +msgstr "打印主機上傳" msgid "Could not get a valid Printer Host reference" -msgstr "" +msgstr "無法獲得有效的打印機主機參考資料" msgid "Success!" msgstr "成功!" @@ -14175,6 +14981,12 @@ msgstr "" msgid "Refresh Printers" msgstr "重新整理列印設備" +msgid "View print host webui in Device tab" +msgstr "" + +msgid "Replace the BambuLab's device tab with print host webui" +msgstr "" + #, fuzzy msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" @@ -14204,49 +15016,49 @@ msgid "Login/Test" msgstr "" msgid "Connection to printers connected via the print host failed." -msgstr "" +msgstr "經由打印主機連接的打印機連接失敗。" #, c-format, boost-format msgid "Mismatched type of print host: %s" -msgstr "" +msgstr "打印主機類型不符:%s" msgid "Connection to AstroBox works correctly." -msgstr "" +msgstr "與 AstroBox 的連接工作正常。" msgid "Could not connect to AstroBox" -msgstr "" +msgstr "無法連接到 AstroBox" msgid "Note: AstroBox version at least 1.1.0 is required." -msgstr "" +msgstr "注意:AstroBox 版本至少需要 1.1.0。" msgid "Connection to Duet works correctly." -msgstr "" +msgstr "與 Duet 的連接工作正常。" msgid "Could not connect to Duet" -msgstr "" +msgstr "無法連接到 Duet" msgid "Unknown error occured" -msgstr "" +msgstr "發生未知的錯誤" msgid "Wrong password" -msgstr "" +msgstr "密碼錯誤" msgid "Could not get resources to create a new connection" -msgstr "" +msgstr "無法取得建立新連結的資源" msgid "Upload not enabled on FlashAir card." -msgstr "" +msgstr "FlashAir 卡上未啟用上傳。" msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "" +msgstr "與 FlashAir 的連接工作正常並啟用上傳。" msgid "Could not connect to FlashAir" -msgstr "" +msgstr "無法連接到 FlashAir" msgid "" "Note: FlashAir with firmware 2.00.02 or newer and activated upload function " "is required." -msgstr "" +msgstr "注意:FlashAir 需要韌體為 2.00.02 或更新版本並啟動上傳功能。" msgid "Connection to MKS works correctly." msgstr "" @@ -14255,25 +15067,25 @@ msgid "Could not connect to MKS" msgstr "" msgid "Connection to OctoPrint works correctly." -msgstr "" +msgstr "與 OctoPrint 的連接工作正常。" msgid "Could not connect to OctoPrint" -msgstr "" +msgstr "無法連接到 OctoPrint" msgid "Note: OctoPrint version at least 1.1.0 is required." -msgstr "" +msgstr "注意:OctoPrint 版本至少需要 1.1.0。" msgid "Connection to Prusa SL1 / SL1S works correctly." -msgstr "" +msgstr "與 Prusa SL1 / SL1S 的連接工作正常。" msgid "Could not connect to Prusa SLA" -msgstr "" +msgstr "無法連接到 Prusa SLA" msgid "Connection to PrusaLink works correctly." -msgstr "" +msgstr "與 PrusaLink 的連接工作正常。" msgid "Could not connect to PrusaLink" -msgstr "" +msgstr "無法連接到 PrusaLink" msgid "Storages found" msgstr "" @@ -14300,19 +15112,21 @@ msgid "Could not connect to Prusa Connect" msgstr "" msgid "Connection to Repetier works correctly." -msgstr "" +msgstr "與 Repetier 的連接工作正常。" msgid "Could not connect to Repetier" -msgstr "" +msgstr "無法連接到 Repetier" msgid "Note: Repetier version at least 0.90.0 is required." -msgstr "" +msgstr "注意:Repetier 版本至少需要 0.90.0。" #, boost-format msgid "" "HTTP status: %1%\n" "Message body: \"%2%\"" msgstr "" +"HTTP 狀態:%1%\n" +"訊息內容:“%2%”" #, boost-format msgid "" @@ -14320,6 +15134,9 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"主機溝通解析失敗。\n" +"訊息內容:“%1%”\n" +"錯誤碼:“%2%”" #, boost-format msgid "" @@ -14327,6 +15144,178 @@ msgid "" "Message body: \"%1%\"\n" "Error: \"%2%\"" msgstr "" +"主機打印機例舉失敗。\n" +"訊息內容:“%1%”\n" +"錯誤碼:“%2%”" + +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" msgid "Connected to Obico successfully!" msgstr "" @@ -14340,17 +15329,15 @@ msgstr "" msgid "Could not connect to SimplyPrint" msgstr "" -msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" - -msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +msgid "Internel error" msgstr "" msgid "Unknown error" msgstr "" +msgid "SimplyPrint account not linked. Go to Connect options to set it up." +msgstr "" + msgid "Connection to Flashforge works correctly." msgstr "" @@ -14699,6 +15686,220 @@ msgid "" "probability of warping." msgstr "" +#, fuzzy +#~ msgid "Printer local connection failed, please try again." +#~ msgstr "列印設備區域網路連接失敗,請重試。" + +#, fuzzy +#~ msgid "" +#~ "Please find the details of Flow Dynamics Calibration from our wiki.\n" +#~ "\n" +#~ "Usually the calibration is unnecessary. When you start a single color/" +#~ "material print, with the \"flow dynamics calibration\" option checked in " +#~ "the print start menu, the printer will follow the old way, calibrate the " +#~ "filament before the print; When you start a multi color/material print, " +#~ "the printer will use the default compensation parameter for the filament " +#~ "during every filament switch which will have a good result in most " +#~ "cases.\n" +#~ "\n" +#~ "Please note there are a few cases that will make the calibration result " +#~ "not reliable: using a texture plate to do the calibration; the build " +#~ "plate does not have good adhesion (please wash the build plate or apply " +#~ "gluestick!) ...You can find more from our wiki.\n" +#~ "\n" +#~ "The calibration results have about 10 percent jitter in our test, which " +#~ "may cause the result not exactly the same in each calibration. We are " +#~ "still investigating the root cause to do improvements with new updates." +#~ msgstr "" +#~ "請從我們的wiki中找到流量動態校準的詳細資訊。\n" +#~ "\n" +#~ "通常情況下,校準是不必要的。當您開始單色/單線材列印,並在列印開始選單中勾" +#~ "選了“流量動態校準”選項時,列印設備將按照舊的方式,在列印前校準絲料;當您開" +#~ "始多色/多線材列印時,列印設備將在每次換絲料時使用預設的補償參數,這在大多" +#~ "數情況下會產生良好的效果。\n" +#~ "\n" +#~ "請注意,有幾種情況會導致校準結果不可靠:使用紋理板進行校準;建模平台黏附效" +#~ "果不好(請清洗建模平台或塗抹膠棒)... 您可以在我們的wiki中找到更多資訊。\n" +#~ "\n" +#~ "在我們的測試中,校準結果有約 10% 的波動,這可能導致每次校準的結果略有不" +#~ "同。我們仍在調查根本原因,並通過新的更新進行改進。" + +#~ msgid "" +#~ "Only one of the results with the same name will be saved. Are you sure " +#~ "you want to overrides the other results?" +#~ msgstr "相同名稱的結果只會儲存一個。確定要覆蓋其他結果嗎?" + +#, fuzzy, 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。相同名稱的結果只會儲存一個。確定要" +#~ "覆蓋嗎?" + +#, fuzzy +#~ msgid "Please find the cornor with perfect degree of extrusion" +#~ msgstr "請在您的列印板上找到最接近完美的直角" + +#~ msgid "V" +#~ msgstr "版本:" + +#, fuzzy +#~ msgid "" +#~ "Orca Slicer is based on BambuStudio by Bambulab, which is from " +#~ "PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro " +#~ "Ranellucci and the RepRap community" +#~ msgstr "" +#~ "Orca Slicer 是基於 Bambulab 的 BambuStudio 開發,而 BambuStudio 源自於 " +#~ "Prusa Research 的 PrusaSlicer。PrusaSlicer 源自於 Alessandro Ranellucci " +#~ "的 Slic3r 和 RepRap 社群" + +#, fuzzy +#~ msgid "Export &Configs" +#~ msgstr "匯出設定檔" + +#~ msgid "Infill direction" +#~ msgstr "填充方向" + +#, fuzzy +#~ msgid "" +#~ "Enable this to get a G-code file which has G2 and G3 moves. And the " +#~ "fitting tolerance is same with resolution" +#~ msgstr "" +#~ "打開這個設定,匯出的 G-code 將包含 G2 G3 指令。圓弧擬合的容許值和精度相" +#~ "同。" + +#~ msgid "" +#~ "Infill area is enlarged slightly to overlap with wall for better bonding. " +#~ "The percentage value is relative to line width of sparse infill" +#~ msgstr "" +#~ "填充區域被輕微擴大,並和外牆產生重疊,進而產生更好的黏接。表示為相對稀疏填" +#~ "充的線寬的百分比。" + +#~ msgid "Unload Filament" +#~ msgstr "退料" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "選擇 1 個 AMS 槽位,然後點擊進料/退料按鈕以自動進料/退料。" + +#~ msgid "MainBoard" +#~ msgstr "主板" + +#~ msgid "active" +#~ msgstr "活動的" + +#~ msgid "Jump to layer" +#~ msgstr "轉換到層" + +#~ msgid "Cabin humidity" +#~ msgstr "AMS 內部濕度" + +#, fuzzy +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" +#~ "好。)" + +#~ msgid "Desiccant status" +#~ msgstr "乾燥劑狀態" + +#, fuzzy +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" +#~ "好)。" + +#~ msgid "" +#~ "Note: When the lid is open or the desiccant pack is changed, it can take " +#~ "hours or a night to absorb the moisture. Low temperatures also slow down " +#~ "the process. During this time, the indicator may not represent the " +#~ "chamber accurately." +#~ msgstr "" +#~ "注意:當 AMS 蓋子打開或更換乾燥劑包裝時,可能需要數小時或一晚才能吸收水" +#~ "分,低溫也會減慢這一過程。在此期間,濕度指示的數值可能並不準確。" + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材" +#~ "信息。" + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "成功匯出 G-code 至 %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "初始化失敗(沒有列印設備)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "初始化失敗(沒有攝影機)" + +#, fuzzy +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "列印設備正忙於下載,請等待下載完成。" + +#, fuzzy +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "初始化失敗(目前列印設備的版本不支援)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "初始化失敗(在區域網路模式中不可存取)!" + +#, fuzzy +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "初始化失敗(未找到列印設備的區域網路地址)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "已停止 [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "載入失敗 [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "檔案清單為空[%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "載入失敗 [%d]" + +#, fuzzy +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "無法從列印設備獲取模型資訊。" + +#~ msgid "Failed to parse model infomations." +#~ msgstr "解析模型資訊失敗。" + +#, fuzzy +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "無法對模型網格執行布林運算。只有正面部分將被導出。" + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "您已經更改了預設 \"%1%\",是否在切換後要保留這些更改的預設參數?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "您已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" + #~ msgid "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " #~ "thickness (top+bottom solid layers)" diff --git a/resources/handy_models/3DBenchy.3mf b/resources/handy_models/3DBenchy.3mf new file mode 100644 index 0000000000..61dcb1b329 Binary files /dev/null and b/resources/handy_models/3DBenchy.3mf differ diff --git a/resources/handy_models/3DBenchy.stl b/resources/handy_models/3DBenchy.stl deleted file mode 100644 index 5a51bb5f3f..0000000000 Binary files a/resources/handy_models/3DBenchy.stl and /dev/null differ diff --git a/resources/handy_models/OrcaCube_v2.3mf b/resources/handy_models/OrcaCube_v2.3mf index 14fba9eac0..ede7d884b9 100644 Binary files a/resources/handy_models/OrcaCube_v2.3mf and b/resources/handy_models/OrcaCube_v2.3mf differ diff --git a/resources/handy_models/Orca_stringhell.3mf b/resources/handy_models/Orca_stringhell.3mf new file mode 100644 index 0000000000..9221dde644 Binary files /dev/null and b/resources/handy_models/Orca_stringhell.3mf differ diff --git a/resources/handy_models/Orca_stringhell.stl b/resources/handy_models/Orca_stringhell.stl deleted file mode 100644 index f9a4d9823e..0000000000 Binary files a/resources/handy_models/Orca_stringhell.stl and /dev/null differ diff --git a/resources/handy_models/Stanford_Bunny.3mf b/resources/handy_models/Stanford_Bunny.3mf new file mode 100644 index 0000000000..f3f19d294c Binary files /dev/null and b/resources/handy_models/Stanford_Bunny.3mf differ diff --git a/resources/handy_models/Stanford_Bunny.stl b/resources/handy_models/Stanford_Bunny.stl deleted file mode 100644 index fbbf2632f8..0000000000 Binary files a/resources/handy_models/Stanford_Bunny.stl and /dev/null differ diff --git a/resources/handy_models/Voron_Design_Cube_v7.3mf b/resources/handy_models/Voron_Design_Cube_v7.3mf new file mode 100644 index 0000000000..5b91187cbe Binary files /dev/null and b/resources/handy_models/Voron_Design_Cube_v7.3mf differ diff --git a/resources/handy_models/Voron_Design_Cube_v7.stl b/resources/handy_models/Voron_Design_Cube_v7.stl deleted file mode 100644 index edb229b6df..0000000000 Binary files a/resources/handy_models/Voron_Design_Cube_v7.stl and /dev/null differ diff --git a/resources/handy_models/ksr_fdmtest_v4.3mf b/resources/handy_models/ksr_fdmtest_v4.3mf new file mode 100644 index 0000000000..11d6c74268 Binary files /dev/null and b/resources/handy_models/ksr_fdmtest_v4.3mf differ diff --git a/resources/handy_models/ksr_fdmtest_v4.stl b/resources/handy_models/ksr_fdmtest_v4.stl deleted file mode 100644 index 804727fd1c..0000000000 Binary files a/resources/handy_models/ksr_fdmtest_v4.stl and /dev/null differ diff --git a/resources/images/OrcaSlicer.svg b/resources/images/OrcaSlicer.svg index 66324266e9..f8d677c555 100644 --- a/resources/images/OrcaSlicer.svg +++ b/resources/images/OrcaSlicer.svg @@ -1,137 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/OrcaSlicer_192px_grayscale.png b/resources/images/OrcaSlicer_192px_grayscale.png index b8d04439ad..9570a16be6 100644 Binary files a/resources/images/OrcaSlicer_192px_grayscale.png and b/resources/images/OrcaSlicer_192px_grayscale.png differ diff --git a/resources/images/add.svg b/resources/images/add.svg index 37050d7481..cbaa7056fb 100644 --- a/resources/images/add.svg +++ b/resources/images/add.svg @@ -1,22 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/add_copies.svg b/resources/images/add_copies.svg index 7eb75471ef..a1af9f8389 100644 --- a/resources/images/add_copies.svg +++ b/resources/images/add_copies.svg @@ -1,19 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/add_filament.svg b/resources/images/add_filament.svg index 01e567c89a..47fd58c02b 100644 --- a/resources/images/add_filament.svg +++ b/resources/images/add_filament.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/add_text_modifier.svg b/resources/images/add_text_modifier.svg index d79499eff8..efb21d9257 100644 --- a/resources/images/add_text_modifier.svg +++ b/resources/images/add_text_modifier.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/add_text_negative.svg b/resources/images/add_text_negative.svg index 2cf4456925..a59209746b 100644 --- a/resources/images/add_text_negative.svg +++ b/resources/images/add_text_negative.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/add_text_part.svg b/resources/images/add_text_part.svg index c4972e6cbe..d36ff970cd 100644 --- a/resources/images/add_text_part.svg +++ b/resources/images/add_text_part.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/advanced.svg b/resources/images/advanced.svg index 591e82ff2d..561a15b303 100644 --- a/resources/images/advanced.svg +++ b/resources/images/advanced.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/align_horizontal_center.svg b/resources/images/align_horizontal_center.svg index a91ab70ac6..3f67d2682f 100644 --- a/resources/images/align_horizontal_center.svg +++ b/resources/images/align_horizontal_center.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_horizontal_left.svg b/resources/images/align_horizontal_left.svg index fc72e75cf0..aeee375a42 100644 --- a/resources/images/align_horizontal_left.svg +++ b/resources/images/align_horizontal_left.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/align_horizontal_right.svg b/resources/images/align_horizontal_right.svg index 2e83ee635a..e558465943 100644 --- a/resources/images/align_horizontal_right.svg +++ b/resources/images/align_horizontal_right.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_vertical_bottom.svg b/resources/images/align_vertical_bottom.svg index 9f65196ed7..7f3d90e686 100644 --- a/resources/images/align_vertical_bottom.svg +++ b/resources/images/align_vertical_bottom.svg @@ -1,60 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_vertical_center.svg b/resources/images/align_vertical_center.svg index 348c08a981..0b173d5eb8 100644 --- a/resources/images/align_vertical_center.svg +++ b/resources/images/align_vertical_center.svg @@ -1,60 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_vertical_top.svg b/resources/images/align_vertical_top.svg index 0bcb4b9e0b..c6812edd93 100644 --- a/resources/images/align_vertical_top.svg +++ b/resources/images/align_vertical_top.svg @@ -1,60 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_arrow.svg b/resources/images/ams_arrow.svg index 6c317fbdc7..f5c39a6388 100644 --- a/resources/images/ams_arrow.svg +++ b/resources/images/ams_arrow.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/ams_editable.svg b/resources/images/ams_editable.svg index a75941f4ab..ef79670fd6 100644 --- a/resources/images/ams_editable.svg +++ b/resources/images/ams_editable.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/ams_editable_light.svg b/resources/images/ams_editable_light.svg index ca0d37646e..ef79670fd6 100644 --- a/resources/images/ams_editable_light.svg +++ b/resources/images/ams_editable_light.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/ams_fila_sync.svg b/resources/images/ams_fila_sync.svg index 407aa53197..eb6452e894 100644 --- a/resources/images/ams_fila_sync.svg +++ b/resources/images/ams_fila_sync.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_0.svg b/resources/images/ams_humidity_0.svg index d438d503a9..8e6ebdcb92 100644 --- a/resources/images/ams_humidity_0.svg +++ b/resources/images/ams_humidity_0.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_1.svg b/resources/images/ams_humidity_1.svg index caabcbdbe1..e94d718e52 100644 --- a/resources/images/ams_humidity_1.svg +++ b/resources/images/ams_humidity_1.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_2.svg b/resources/images/ams_humidity_2.svg index 817c9ba5a3..d3f6e01349 100644 --- a/resources/images/ams_humidity_2.svg +++ b/resources/images/ams_humidity_2.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_3.svg b/resources/images/ams_humidity_3.svg index 4b11064e0c..fa193ebd33 100644 --- a/resources/images/ams_humidity_3.svg +++ b/resources/images/ams_humidity_3.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_4.svg b/resources/images/ams_humidity_4.svg index c317b1658c..ae76dc32e8 100644 --- a/resources/images/ams_humidity_4.svg +++ b/resources/images/ams_humidity_4.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_tips.svg b/resources/images/ams_humidity_tips.svg index cbafcbab22..336c4475c6 100644 --- a/resources/images/ams_humidity_tips.svg +++ b/resources/images/ams_humidity_tips.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_setting_hover.svg b/resources/images/ams_setting_hover.svg index 36625b7e4d..956316a9de 100644 --- a/resources/images/ams_setting_hover.svg +++ b/resources/images/ams_setting_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_setting_normal.svg b/resources/images/ams_setting_normal.svg index 41836434ca..cc1b89e219 100644 --- a/resources/images/ams_setting_normal.svg +++ b/resources/images/ams_setting_normal.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/ams_setting_press.svg b/resources/images/ams_setting_press.svg index 123325ec39..b7ec40359e 100644 --- a/resources/images/ams_setting_press.svg +++ b/resources/images/ams_setting_press.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/assemble_return.svg b/resources/images/assemble_return.svg index ae6dda44df..314757070e 100644 --- a/resources/images/assemble_return.svg +++ b/resources/images/assemble_return.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/automatic_material_renewal.svg b/resources/images/automatic_material_renewal.svg index 7cc2ef0afc..eec2034555 100644 --- a/resources/images/automatic_material_renewal.svg +++ b/resources/images/automatic_material_renewal.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/auxiliary_cover.svg b/resources/images/auxiliary_cover.svg index 66522b2ffd..b37fff7842 100644 --- a/resources/images/auxiliary_cover.svg +++ b/resources/images/auxiliary_cover.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/auxiliary_delete.svg b/resources/images/auxiliary_delete.svg index 73af09389a..3246500218 100644 --- a/resources/images/auxiliary_delete.svg +++ b/resources/images/auxiliary_delete.svg @@ -1,9 +1 @@ - - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/bar_publish.svg b/resources/images/bar_publish.svg index 51e5cb2d24..91cb386dd2 100644 --- a/resources/images/bar_publish.svg +++ b/resources/images/bar_publish.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/bind_device_ping_code.svg b/resources/images/bind_device_ping_code.svg new file mode 100644 index 0000000000..5c1ff4742d --- /dev/null +++ b/resources/images/bind_device_ping_code.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/bind_machine.svg b/resources/images/bind_machine.svg index 047741ea9a..a67e4fc0db 100644 --- a/resources/images/bind_machine.svg +++ b/resources/images/bind_machine.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/block_notification_close.svg b/resources/images/block_notification_close.svg index a55fe49f7c..c3c11a829a 100644 --- a/resources/images/block_notification_close.svg +++ b/resources/images/block_notification_close.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/block_notification_close_hover.svg b/resources/images/block_notification_close_hover.svg index afb1dc2a7d..c3c11a829a 100644 --- a/resources/images/block_notification_close_hover.svg +++ b/resources/images/block_notification_close_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/block_notification_error.svg b/resources/images/block_notification_error.svg index 902027fae7..172b9e4cee 100644 --- a/resources/images/block_notification_error.svg +++ b/resources/images/block_notification_error.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/browse.svg b/resources/images/browse.svg index c4297c41da..4d0d582572 100644 --- a/resources/images/browse.svg +++ b/resources/images/browse.svg @@ -1,11 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/burn.svg b/resources/images/burn.svg index 685999cd14..4d89b3657d 100644 --- a/resources/images/burn.svg +++ b/resources/images/burn.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cali_page_caption_help.svg b/resources/images/cali_page_caption_help.svg index 70babeb017..d05b27b1c8 100644 --- a/resources/images/cali_page_caption_help.svg +++ b/resources/images/cali_page_caption_help.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cali_page_caption_help_hover.svg b/resources/images/cali_page_caption_help_hover.svg index 70babeb017..d05b27b1c8 100644 --- a/resources/images/cali_page_caption_help_hover.svg +++ b/resources/images/cali_page_caption_help_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/calib_sf.svg b/resources/images/calib_sf.svg index 54f08c2f2c..42efab7ce6 100644 --- a/resources/images/calib_sf.svg +++ b/resources/images/calib_sf.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/calib_sf_inactive.svg b/resources/images/calib_sf_inactive.svg index 31a8351a7c..7e5d9ac581 100644 --- a/resources/images/calib_sf_inactive.svg +++ b/resources/images/calib_sf_inactive.svg @@ -1,17 +1 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/camera_setting.svg b/resources/images/camera_setting.svg index 3b276aa227..0549b1b47a 100644 --- a/resources/images/camera_setting.svg +++ b/resources/images/camera_setting.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/camera_setting_hover.svg b/resources/images/camera_setting_hover.svg index 9ab6dcfacc..e7c06f8d2d 100644 --- a/resources/images/camera_setting_hover.svg +++ b/resources/images/camera_setting_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/camera_switch.svg b/resources/images/camera_switch.svg index be8cf27a09..271e38f8ed 100644 --- a/resources/images/camera_switch.svg +++ b/resources/images/camera_switch.svg @@ -1,76 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/camera_switch_dark.svg b/resources/images/camera_switch_dark.svg index 5c40b35d14..fbc1159ab5 100644 --- a/resources/images/camera_switch_dark.svg +++ b/resources/images/camera_switch_dark.svg @@ -1,76 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/check_half.svg b/resources/images/check_half.svg index bc99d2d0d1..0e543a7773 100644 --- a/resources/images/check_half.svg +++ b/resources/images/check_half.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_half_disabled.svg b/resources/images/check_half_disabled.svg index 1e6fb24d7b..97feb9dc91 100644 --- a/resources/images/check_half_disabled.svg +++ b/resources/images/check_half_disabled.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_half_focused.svg b/resources/images/check_half_focused.svg index 517bb7acbc..f0fa31276c 100644 --- a/resources/images/check_half_focused.svg +++ b/resources/images/check_half_focused.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_off.svg b/resources/images/check_off.svg index cf58fbc94c..1bd142b66a 100644 --- a/resources/images/check_off.svg +++ b/resources/images/check_off.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/check_off_disabled.svg b/resources/images/check_off_disabled.svg index 8653c1f7bb..8c4818d204 100644 --- a/resources/images/check_off_disabled.svg +++ b/resources/images/check_off_disabled.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/check_off_focused.svg b/resources/images/check_off_focused.svg index 474375d84e..ea1e1bdbdc 100644 --- a/resources/images/check_off_focused.svg +++ b/resources/images/check_off_focused.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/check_on.svg b/resources/images/check_on.svg index 029abf8510..e4d1caa369 100644 --- a/resources/images/check_on.svg +++ b/resources/images/check_on.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_on_disabled.svg b/resources/images/check_on_disabled.svg index dfd917fb30..35e6d0b926 100644 --- a/resources/images/check_on_disabled.svg +++ b/resources/images/check_on_disabled.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_on_focused.svg b/resources/images/check_on_focused.svg index 3c1c56c7c4..5b5f2f2591 100644 --- a/resources/images/check_on_focused.svg +++ b/resources/images/check_on_focused.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/checked.svg b/resources/images/checked.svg index 88747cb95d..1d0369da74 100644 --- a/resources/images/checked.svg +++ b/resources/images/checked.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/circle_paint.svg b/resources/images/circle_paint.svg index 9472a10cb8..a5a49689fb 100644 --- a/resources/images/circle_paint.svg +++ b/resources/images/circle_paint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/circle_paint_dark.svg b/resources/images/circle_paint_dark.svg index d96f4ed4be..923ba593bd 100644 --- a/resources/images/circle_paint_dark.svg +++ b/resources/images/circle_paint_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/cog.svg b/resources/images/cog.svg index e7866313b5..aa70d6c043 100644 --- a/resources/images/cog.svg +++ b/resources/images/cog.svg @@ -1,12 +1 @@ - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/collapse.svg b/resources/images/collapse.svg index eb4c8e47cf..d27721b74b 100644 --- a/resources/images/collapse.svg +++ b/resources/images/collapse.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/compare.svg b/resources/images/compare.svg index 6dbef6ecbf..17f1c9ff41 100644 --- a/resources/images/compare.svg +++ b/resources/images/compare.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/completed.svg b/resources/images/completed.svg index 902100da24..9b2a0f862c 100644 --- a/resources/images/completed.svg +++ b/resources/images/completed.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/confirm.svg b/resources/images/confirm.svg index 1351d3b6f5..0f38b061bb 100644 --- a/resources/images/confirm.svg +++ b/resources/images/confirm.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/confirm_dark.svg b/resources/images/confirm_dark.svg index 1351d3b6f5..0f38b061bb 100644 --- a/resources/images/confirm_dark.svg +++ b/resources/images/confirm_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/copy_menu.svg b/resources/images/copy_menu.svg index 23e0bfeb2a..231d471e9d 100644 --- a/resources/images/copy_menu.svg +++ b/resources/images/copy_menu.svg @@ -1,37 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/copy_menu_dark.svg b/resources/images/copy_menu_dark.svg index eaee113a1b..f2c3965b40 100644 --- a/resources/images/copy_menu_dark.svg +++ b/resources/images/copy_menu_dark.svg @@ -1,37 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/create_success.svg b/resources/images/create_success.svg index d49d396125..9b2a0f862c 100644 --- a/resources/images/create_success.svg +++ b/resources/images/create_success.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/cross.svg b/resources/images/cross.svg index 4d832a5887..a8598bdf7d 100644 --- a/resources/images/cross.svg +++ b/resources/images/cross.svg @@ -1,8 +1 @@ - - - - - Slice 41 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/cross_focus.svg b/resources/images/cross_focus.svg index 2efebf2110..efd434b13f 100644 --- a/resources/images/cross_focus.svg +++ b/resources/images/cross_focus.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cross_focus_large.svg b/resources/images/cross_focus_large.svg index 49316ef6ea..efd434b13f 100644 --- a/resources/images/cross_focus_large.svg +++ b/resources/images/cross_focus_large.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/custom-gcode_advanced.svg b/resources/images/custom-gcode_advanced.svg new file mode 100644 index 0000000000..561a15b303 --- /dev/null +++ b/resources/images/custom-gcode_advanced.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_cooling_fan.svg b/resources/images/custom-gcode_cooling_fan.svg new file mode 100644 index 0000000000..98ef8fedb2 --- /dev/null +++ b/resources/images/custom-gcode_cooling_fan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_extruder.svg b/resources/images/custom-gcode_extruder.svg new file mode 100644 index 0000000000..d55852897f --- /dev/null +++ b/resources/images/custom-gcode_extruder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_filament.svg b/resources/images/custom-gcode_filament.svg new file mode 100644 index 0000000000..9facb665a5 --- /dev/null +++ b/resources/images/custom-gcode_filament.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_gcode.svg b/resources/images/custom-gcode_gcode.svg index 38bcd21729..af90e3cd20 100644 --- a/resources/images/custom-gcode_gcode.svg +++ b/resources/images/custom-gcode_gcode.svg @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_measure.svg b/resources/images/custom-gcode_measure.svg index 3c13dd7cc7..0436e83b3e 100644 --- a/resources/images/custom-gcode_measure.svg +++ b/resources/images/custom-gcode_measure.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_motion.svg b/resources/images/custom-gcode_motion.svg new file mode 100644 index 0000000000..260f65ab26 --- /dev/null +++ b/resources/images/custom-gcode_motion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_multi_material.svg b/resources/images/custom-gcode_multi_material.svg new file mode 100644 index 0000000000..bc6cf03f0e --- /dev/null +++ b/resources/images/custom-gcode_multi_material.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_note.svg b/resources/images/custom-gcode_note.svg new file mode 100644 index 0000000000..fd8ef09117 --- /dev/null +++ b/resources/images/custom-gcode_note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_object-info.svg b/resources/images/custom-gcode_object-info.svg index 2c24bdc8a2..2605321f45 100644 --- a/resources/images/custom-gcode_object-info.svg +++ b/resources/images/custom-gcode_object-info.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_other.svg b/resources/images/custom-gcode_other.svg new file mode 100644 index 0000000000..f2510eacda --- /dev/null +++ b/resources/images/custom-gcode_other.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_quality.svg b/resources/images/custom-gcode_quality.svg new file mode 100644 index 0000000000..e4ff3f1da9 --- /dev/null +++ b/resources/images/custom-gcode_quality.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_setting_override.svg b/resources/images/custom-gcode_setting_override.svg new file mode 100644 index 0000000000..ce66aa93d3 --- /dev/null +++ b/resources/images/custom-gcode_setting_override.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_single.svg b/resources/images/custom-gcode_single.svg index d177860bc9..26a5123d82 100644 --- a/resources/images/custom-gcode_single.svg +++ b/resources/images/custom-gcode_single.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_slicing-state.svg b/resources/images/custom-gcode_slicing-state.svg index 4b4bef6ecf..8e0548235f 100644 --- a/resources/images/custom-gcode_slicing-state.svg +++ b/resources/images/custom-gcode_slicing-state.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_slicing-state_global.svg b/resources/images/custom-gcode_slicing-state_global.svg index 7f4e685a1b..d1189a99b2 100644 --- a/resources/images/custom-gcode_slicing-state_global.svg +++ b/resources/images/custom-gcode_slicing-state_global.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_speed.svg b/resources/images/custom-gcode_speed.svg new file mode 100644 index 0000000000..8f2a00f896 --- /dev/null +++ b/resources/images/custom-gcode_speed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_stats.svg b/resources/images/custom-gcode_stats.svg index 96dfe8decf..538bdf19c9 100644 --- a/resources/images/custom-gcode_stats.svg +++ b/resources/images/custom-gcode_stats.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_strength.svg b/resources/images/custom-gcode_strength.svg new file mode 100644 index 0000000000..0f1e7996d1 --- /dev/null +++ b/resources/images/custom-gcode_strength.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_support.svg b/resources/images/custom-gcode_support.svg new file mode 100644 index 0000000000..b34d3a7f85 --- /dev/null +++ b/resources/images/custom-gcode_support.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_temperature.svg b/resources/images/custom-gcode_temperature.svg index d14cd1a31c..19fa2fa52b 100644 --- a/resources/images/custom-gcode_temperature.svg +++ b/resources/images/custom-gcode_temperature.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/custom-gcode_time.svg b/resources/images/custom-gcode_time.svg new file mode 100644 index 0000000000..be3d415343 --- /dev/null +++ b/resources/images/custom-gcode_time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_vector-index.svg b/resources/images/custom-gcode_vector-index.svg index 68aef590bb..105ebfd2e3 100644 --- a/resources/images/custom-gcode_vector-index.svg +++ b/resources/images/custom-gcode_vector-index.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_vector.svg b/resources/images/custom-gcode_vector.svg index 396f0e7b82..e1a23694ca 100644 --- a/resources/images/custom-gcode_vector.svg +++ b/resources/images/custom-gcode_vector.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/cut_.svg b/resources/images/cut_.svg index 23de6f381b..7486f83d36 100644 --- a/resources/images/cut_.svg +++ b/resources/images/cut_.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cut_connectors.svg b/resources/images/cut_connectors.svg index 053b163bf7..324aa987c5 100644 --- a/resources/images/cut_connectors.svg +++ b/resources/images/cut_connectors.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/debugtool.svg b/resources/images/debugtool.svg index b234f59879..e9fd011d73 100644 --- a/resources/images/debugtool.svg +++ b/resources/images/debugtool.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/degree.svg b/resources/images/degree.svg index 188d57a53e..269d737c3f 100644 --- a/resources/images/degree.svg +++ b/resources/images/degree.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/delete.svg b/resources/images/delete.svg index 91d56e91d1..a8598bdf7d 100644 --- a/resources/images/delete.svg +++ b/resources/images/delete.svg @@ -1,22 +1 @@ - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/delete_filament.svg b/resources/images/delete_filament.svg index 07c60793d7..9cfbe4813e 100644 --- a/resources/images/delete_filament.svg +++ b/resources/images/delete_filament.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/drop_down.svg b/resources/images/drop_down.svg index 7b6cc0eb7e..6ecf48d1d9 100644 --- a/resources/images/drop_down.svg +++ b/resources/images/drop_down.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/edit.svg b/resources/images/edit.svg index 9766302c70..e32229d429 100644 --- a/resources/images/edit.svg +++ b/resources/images/edit.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/edit_button.svg b/resources/images/edit_button.svg index 2d298f5661..e32229d429 100644 --- a/resources/images/edit_button.svg +++ b/resources/images/edit_button.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/enable_ams.svg b/resources/images/enable_ams.svg index d28b7004bd..6a238c6e31 100644 --- a/resources/images/enable_ams.svg +++ b/resources/images/enable_ams.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/equal.svg b/resources/images/equal.svg index bce4a24f7c..de2000d61b 100644 --- a/resources/images/equal.svg +++ b/resources/images/equal.svg @@ -1,15 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/exclamation.svg b/resources/images/exclamation.svg index 5a5b631a46..4721d1f39d 100644 --- a/resources/images/exclamation.svg +++ b/resources/images/exclamation.svg @@ -1,17 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/fan_control_add.svg b/resources/images/fan_control_add.svg index 19d9e41cce..5d33dd8e83 100644 --- a/resources/images/fan_control_add.svg +++ b/resources/images/fan_control_add.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/fan_control_decrease.svg b/resources/images/fan_control_decrease.svg index 7a68c36d11..d5935c53a3 100644 --- a/resources/images/fan_control_decrease.svg +++ b/resources/images/fan_control_decrease.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/fan_icon.svg b/resources/images/fan_icon.svg index 67a6071952..f149580bed 100644 --- a/resources/images/fan_icon.svg +++ b/resources/images/fan_icon.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/fd_pattern_manual_device.png b/resources/images/fd_pattern_manual_device.png new file mode 100644 index 0000000000..a5d5b90bc1 Binary files /dev/null and b/resources/images/fd_pattern_manual_device.png differ diff --git a/resources/images/filament.svg b/resources/images/filament.svg index 8a2fb06bd2..a5fe1d0155 100644 --- a/resources/images/filament.svg +++ b/resources/images/filament.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/fill_paint.svg b/resources/images/fill_paint.svg index 584cdc4ec9..09985f91b4 100644 --- a/resources/images/fill_paint.svg +++ b/resources/images/fill_paint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/fill_paint_dark.svg b/resources/images/fill_paint_dark.svg index 6e8e76f6c4..1181e7e637 100644 --- a/resources/images/fill_paint_dark.svg +++ b/resources/images/fill_paint_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/flush_volumes.svg b/resources/images/flush_volumes.svg index 4db16f937b..8b5ef4ba0b 100644 --- a/resources/images/flush_volumes.svg +++ b/resources/images/flush_volumes.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/gap_fill.svg b/resources/images/gap_fill.svg index ed78455cab..edd0fc6659 100644 --- a/resources/images/gap_fill.svg +++ b/resources/images/gap_fill.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/gap_fill_dark.svg b/resources/images/gap_fill_dark.svg index 09e898ce8b..b533510758 100644 --- a/resources/images/gap_fill_dark.svg +++ b/resources/images/gap_fill_dark.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/height_range.svg b/resources/images/height_range.svg index 0f5d5539d3..01e7659a89 100644 --- a/resources/images/height_range.svg +++ b/resources/images/height_range.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/height_range_dark.svg b/resources/images/height_range_dark.svg index 5b352af377..397def9eba 100644 --- a/resources/images/height_range_dark.svg +++ b/resources/images/height_range_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/height_range_layer.svg b/resources/images/height_range_layer.svg new file mode 100644 index 0000000000..ee44d86a23 --- /dev/null +++ b/resources/images/height_range_layer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/height_range_modifier.svg b/resources/images/height_range_modifier.svg new file mode 100644 index 0000000000..698f6f2bd8 --- /dev/null +++ b/resources/images/height_range_modifier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/hms_notify_lv1.svg b/resources/images/hms_notify_lv1.svg index 3c030c381f..f4e086b38b 100644 --- a/resources/images/hms_notify_lv1.svg +++ b/resources/images/hms_notify_lv1.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/hms_notify_lv2.svg b/resources/images/hms_notify_lv2.svg index bc02fb1a8a..fa356713bd 100644 --- a/resources/images/hms_notify_lv2.svg +++ b/resources/images/hms_notify_lv2.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/hms_notify_lv3.svg b/resources/images/hms_notify_lv3.svg index dced1688be..7001b8aef3 100644 --- a/resources/images/hms_notify_lv3.svg +++ b/resources/images/hms_notify_lv3.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/hum_level1_dark.svg b/resources/images/hum_level1_dark.svg new file mode 100644 index 0000000000..16511f4f53 --- /dev/null +++ b/resources/images/hum_level1_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level1_light.svg b/resources/images/hum_level1_light.svg new file mode 100644 index 0000000000..37870888f9 --- /dev/null +++ b/resources/images/hum_level1_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level2_dark.svg b/resources/images/hum_level2_dark.svg new file mode 100644 index 0000000000..66951ad474 --- /dev/null +++ b/resources/images/hum_level2_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level2_light.svg b/resources/images/hum_level2_light.svg new file mode 100644 index 0000000000..4d62440ae4 --- /dev/null +++ b/resources/images/hum_level2_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level3_dark.svg b/resources/images/hum_level3_dark.svg new file mode 100644 index 0000000000..be9f85965d --- /dev/null +++ b/resources/images/hum_level3_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level3_light.svg b/resources/images/hum_level3_light.svg new file mode 100644 index 0000000000..2c0334ee35 --- /dev/null +++ b/resources/images/hum_level3_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level4_dark.svg b/resources/images/hum_level4_dark.svg new file mode 100644 index 0000000000..4dc749ccb9 --- /dev/null +++ b/resources/images/hum_level4_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level4_light.svg b/resources/images/hum_level4_light.svg new file mode 100644 index 0000000000..299c1506c8 --- /dev/null +++ b/resources/images/hum_level4_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level5_dark.svg b/resources/images/hum_level5_dark.svg new file mode 100644 index 0000000000..d7ef458e09 --- /dev/null +++ b/resources/images/hum_level5_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level5_light.svg b/resources/images/hum_level5_light.svg new file mode 100644 index 0000000000..4121832f98 --- /dev/null +++ b/resources/images/hum_level5_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_popup_close.svg b/resources/images/hum_popup_close.svg new file mode 100644 index 0000000000..cf48700ee1 --- /dev/null +++ b/resources/images/hum_popup_close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/humidity_list_background.png b/resources/images/humidity_list_background.png new file mode 100644 index 0000000000..d482fb1b32 Binary files /dev/null and b/resources/images/humidity_list_background.png differ diff --git a/resources/images/im_all_plates_stats.svg b/resources/images/im_all_plates_stats.svg index 26d7f97c21..711b59ee02 100644 --- a/resources/images/im_all_plates_stats.svg +++ b/resources/images/im_all_plates_stats.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/im_all_plates_stats_transparent.svg b/resources/images/im_all_plates_stats_transparent.svg index c52a4cb079..8254696754 100644 --- a/resources/images/im_all_plates_stats_transparent.svg +++ b/resources/images/im_all_plates_stats_transparent.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/im_fold.svg b/resources/images/im_fold.svg index 7eb9100a83..f4f3286dd4 100644 --- a/resources/images/im_fold.svg +++ b/resources/images/im_fold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/im_gcode_custom.svg b/resources/images/im_gcode_custom.svg index a844eb2542..e5e975fa3e 100644 --- a/resources/images/im_gcode_custom.svg +++ b/resources/images/im_gcode_custom.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/im_gcode_pause.svg b/resources/images/im_gcode_pause.svg index dd87f0c11c..51d3c06135 100644 --- a/resources/images/im_gcode_pause.svg +++ b/resources/images/im_gcode_pause.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/im_slider_delete.svg b/resources/images/im_slider_delete.svg index 2b4e2430b7..ecc41f6b98 100644 --- a/resources/images/im_slider_delete.svg +++ b/resources/images/im_slider_delete.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/im_text_search.svg b/resources/images/im_text_search.svg index 64abb3d222..4d0d582572 100644 --- a/resources/images/im_text_search.svg +++ b/resources/images/im_text_search.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/im_text_search_close.svg b/resources/images/im_text_search_close.svg index 86133d1566..e0936e64ee 100644 --- a/resources/images/im_text_search_close.svg +++ b/resources/images/im_text_search_close.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/im_unfold.svg b/resources/images/im_unfold.svg index fd45960665..45bcec6fbb 100644 --- a/resources/images/im_unfold.svg +++ b/resources/images/im_unfold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/info.svg b/resources/images/info.svg index 276b260610..cc052410d2 100644 --- a/resources/images/info.svg +++ b/resources/images/info.svg @@ -1,71 +1 @@ - -image/svg+xml - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/inputbox_x.svg b/resources/images/inputbox_x.svg new file mode 100644 index 0000000000..e3553fc300 --- /dev/null +++ b/resources/images/inputbox_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/inputbox_y.svg b/resources/images/inputbox_y.svg new file mode 100644 index 0000000000..6ff78e2421 --- /dev/null +++ b/resources/images/inputbox_y.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/link_wiki_img.svg b/resources/images/link_wiki_img.svg index ef913c5db9..a8f049f67e 100644 --- a/resources/images/link_wiki_img.svg +++ b/resources/images/link_wiki_img.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/lock_closed.svg b/resources/images/lock_closed.svg index 549cdba239..ba2bf7b4a2 100644 --- a/resources/images/lock_closed.svg +++ b/resources/images/lock_closed.svg @@ -1,10 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/lock_closed_f.svg b/resources/images/lock_closed_f.svg index 2920ea0aae..ba2bf7b4a2 100644 --- a/resources/images/lock_closed_f.svg +++ b/resources/images/lock_closed_f.svg @@ -1,10 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/lock_hover.svg b/resources/images/lock_hover.svg index 4b3cb164a0..b25ba1cfdc 100644 --- a/resources/images/lock_hover.svg +++ b/resources/images/lock_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/lock_normal.svg b/resources/images/lock_normal.svg index 6fc1038221..e585aba3f6 100644 --- a/resources/images/lock_normal.svg +++ b/resources/images/lock_normal.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/lock_open.svg b/resources/images/lock_open.svg index 3f0da9ae09..12f4202746 100644 --- a/resources/images/lock_open.svg +++ b/resources/images/lock_open.svg @@ -1,11 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/lock_open_f.svg b/resources/images/lock_open_f.svg index 3d12d78746..12f4202746 100644 --- a/resources/images/lock_open_f.svg +++ b/resources/images/lock_open_f.svg @@ -1,11 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/machine_obejct_type.svg b/resources/images/machine_obejct_type.svg index 4cb57152e1..6eb6cd8186 100644 --- a/resources/images/machine_obejct_type.svg +++ b/resources/images/machine_obejct_type.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/machine_object_owner.svg b/resources/images/machine_object_owner.svg index e803f131a1..976ca31874 100644 --- a/resources/images/machine_object_owner.svg +++ b/resources/images/machine_object_owner.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/machine_object_printing.svg b/resources/images/machine_object_printing.svg index 32aa1d569c..3ba1ff2dde 100644 --- a/resources/images/machine_object_printing.svg +++ b/resources/images/machine_object_printing.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/make_bold.svg b/resources/images/make_bold.svg index 1c39a3d23f..a0d961cdca 100644 --- a/resources/images/make_bold.svg +++ b/resources/images/make_bold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/make_italic.svg b/resources/images/make_italic.svg index 5c128e6302..61b1a0881f 100644 --- a/resources/images/make_italic.svg +++ b/resources/images/make_italic.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/make_unbold.svg b/resources/images/make_unbold.svg index 7a99cc227f..57b60f20fa 100644 --- a/resources/images/make_unbold.svg +++ b/resources/images/make_unbold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/make_unitalic.svg b/resources/images/make_unitalic.svg index f3c4d90685..ba77e68172 100644 --- a/resources/images/make_unitalic.svg +++ b/resources/images/make_unitalic.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/media_empty.svg b/resources/images/media_empty.svg index aa040502a3..be2e2ab5a4 100644 --- a/resources/images/media_empty.svg +++ b/resources/images/media_empty.svg @@ -1,18 +1 @@ - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/media_failed.svg b/resources/images/media_failed.svg index 83dd7a7923..f9dc13a7df 100644 --- a/resources/images/media_failed.svg +++ b/resources/images/media_failed.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/media_play.svg b/resources/images/media_play.svg index 20c2ae551e..17bc0ae699 100644 --- a/resources/images/media_play.svg +++ b/resources/images/media_play.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/media_stop.svg b/resources/images/media_stop.svg index eef22c1d4a..0f130d0918 100644 --- a/resources/images/media_stop.svg +++ b/resources/images/media_stop.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_add_modifier.svg b/resources/images/menu_add_modifier.svg index f95bbb3ee7..7b7aa198a3 100644 --- a/resources/images/menu_add_modifier.svg +++ b/resources/images/menu_add_modifier.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/menu_add_negative.svg b/resources/images/menu_add_negative.svg index 8e2ef36eec..c12e0b3650 100644 --- a/resources/images/menu_add_negative.svg +++ b/resources/images/menu_add_negative.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/menu_add_part.svg b/resources/images/menu_add_part.svg index edff8942f3..37726f79fa 100644 --- a/resources/images/menu_add_part.svg +++ b/resources/images/menu_add_part.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/menu_copy.svg b/resources/images/menu_copy.svg index 1f09490f1a..39c95f933a 100644 --- a/resources/images/menu_copy.svg +++ b/resources/images/menu_copy.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_cut.svg b/resources/images/menu_cut.svg index 1f09490f1a..31e96ba9db 100644 --- a/resources/images/menu_cut.svg +++ b/resources/images/menu_cut.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_delete.svg b/resources/images/menu_delete.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_delete.svg +++ b/resources/images/menu_delete.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_edit_preset.svg b/resources/images/menu_edit_preset.svg index 1f09490f1a..1f6f7d95d9 100644 --- a/resources/images/menu_edit_preset.svg +++ b/resources/images/menu_edit_preset.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_exit.svg b/resources/images/menu_exit.svg index 1f09490f1a..eba35dc391 100644 --- a/resources/images/menu_exit.svg +++ b/resources/images/menu_exit.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_config.svg b/resources/images/menu_export_config.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_config.svg +++ b/resources/images/menu_export_config.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_gcode.svg b/resources/images/menu_export_gcode.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_gcode.svg +++ b/resources/images/menu_export_gcode.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_sliced_file.svg b/resources/images/menu_export_sliced_file.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_sliced_file.svg +++ b/resources/images/menu_export_sliced_file.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_stl.svg b/resources/images/menu_export_stl.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_stl.svg +++ b/resources/images/menu_export_stl.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_fuzzy_skin.svg b/resources/images/menu_fuzzy_skin.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_fuzzy_skin.svg +++ b/resources/images/menu_fuzzy_skin.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_import.svg b/resources/images/menu_import.svg index 1f09490f1a..41eb1cfafc 100644 --- a/resources/images/menu_import.svg +++ b/resources/images/menu_import.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_load.svg b/resources/images/menu_load.svg new file mode 100644 index 0000000000..219caf1f89 --- /dev/null +++ b/resources/images/menu_load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_mirror_x.svg b/resources/images/menu_mirror_x.svg new file mode 100644 index 0000000000..4a94013895 --- /dev/null +++ b/resources/images/menu_mirror_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_mirror_y.svg b/resources/images/menu_mirror_y.svg new file mode 100644 index 0000000000..55d357df6f --- /dev/null +++ b/resources/images/menu_mirror_y.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_mirror_z.svg b/resources/images/menu_mirror_z.svg new file mode 100644 index 0000000000..f4ff82ae28 --- /dev/null +++ b/resources/images/menu_mirror_z.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_cone.svg b/resources/images/menu_obj_cone.svg new file mode 100644 index 0000000000..c7cb1d40f5 --- /dev/null +++ b/resources/images/menu_obj_cone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_cube.svg b/resources/images/menu_obj_cube.svg new file mode 100644 index 0000000000..f5ca71f76c --- /dev/null +++ b/resources/images/menu_obj_cube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_cylinder.svg b/resources/images/menu_obj_cylinder.svg new file mode 100644 index 0000000000..3f6e90713f --- /dev/null +++ b/resources/images/menu_obj_cylinder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_disc.svg b/resources/images/menu_obj_disc.svg new file mode 100644 index 0000000000..57ecc7faca --- /dev/null +++ b/resources/images/menu_obj_disc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_sphere.svg b/resources/images/menu_obj_sphere.svg new file mode 100644 index 0000000000..6c517af9ad --- /dev/null +++ b/resources/images/menu_obj_sphere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_svg.svg b/resources/images/menu_obj_svg.svg new file mode 100644 index 0000000000..039ac65d94 --- /dev/null +++ b/resources/images/menu_obj_svg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_text.svg b/resources/images/menu_obj_text.svg new file mode 100644 index 0000000000..48661b30ff --- /dev/null +++ b/resources/images/menu_obj_text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_torus.svg b/resources/images/menu_obj_torus.svg new file mode 100644 index 0000000000..ddf636711a --- /dev/null +++ b/resources/images/menu_obj_torus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_open.svg b/resources/images/menu_open.svg index 1f09490f1a..7168576ca8 100644 --- a/resources/images/menu_open.svg +++ b/resources/images/menu_open.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_paste.svg b/resources/images/menu_paste.svg index 1f09490f1a..8546fb08a6 100644 --- a/resources/images/menu_paste.svg +++ b/resources/images/menu_paste.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_redo.svg b/resources/images/menu_redo.svg index 1f09490f1a..eaa46dc7b7 100644 --- a/resources/images/menu_redo.svg +++ b/resources/images/menu_redo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_remove.svg b/resources/images/menu_remove.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_remove.svg +++ b/resources/images/menu_remove.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_save.svg b/resources/images/menu_save.svg index 1f09490f1a..3aea4e1e9d 100644 --- a/resources/images/menu_save.svg +++ b/resources/images/menu_save.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_split_objects.svg b/resources/images/menu_split_objects.svg new file mode 100644 index 0000000000..8c5cdbc207 --- /dev/null +++ b/resources/images/menu_split_objects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_split_parts.svg b/resources/images/menu_split_parts.svg new file mode 100644 index 0000000000..cdc11e865a --- /dev/null +++ b/resources/images/menu_split_parts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_support_blocker.svg b/resources/images/menu_support_blocker.svg index fd7c16ea27..1f20929a57 100644 --- a/resources/images/menu_support_blocker.svg +++ b/resources/images/menu_support_blocker.svg @@ -1,22 +1 @@ - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/menu_support_enforcer.svg b/resources/images/menu_support_enforcer.svg index 4ef28d62a3..df0baee799 100644 --- a/resources/images/menu_support_enforcer.svg +++ b/resources/images/menu_support_enforcer.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/menu_undo.svg b/resources/images/menu_undo.svg index 1f09490f1a..27226a299e 100644 --- a/resources/images/menu_undo.svg +++ b/resources/images/menu_undo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/mmu_segmentation.svg b/resources/images/mmu_segmentation.svg index 68796acd21..085ebc006c 100644 --- a/resources/images/mmu_segmentation.svg +++ b/resources/images/mmu_segmentation.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/mmu_segmentation_dark.svg b/resources/images/mmu_segmentation_dark.svg index 58798d62ec..9946079ab9 100644 --- a/resources/images/mmu_segmentation_dark.svg +++ b/resources/images/mmu_segmentation_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/model_time.svg b/resources/images/model_time.svg index 0808f4545d..18b52e8532 100644 --- a/resources/images/model_time.svg +++ b/resources/images/model_time.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/model_weight.svg b/resources/images/model_weight.svg index 31417e6569..54f93efbd7 100644 --- a/resources/images/model_weight.svg +++ b/resources/images/model_weight.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_axis_home.svg b/resources/images/monitor_axis_home.svg index fcc1854fdc..bcfb80d812 100644 --- a/resources/images/monitor_axis_home.svg +++ b/resources/images/monitor_axis_home.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_axis_home_icon.svg b/resources/images/monitor_axis_home_icon.svg index a8baa9f09e..bcfb80d812 100644 --- a/resources/images/monitor_axis_home_icon.svg +++ b/resources/images/monitor_axis_home_icon.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_down.svg b/resources/images/monitor_bed_down.svg index 25869ee644..73a04a74a5 100644 --- a/resources/images/monitor_bed_down.svg +++ b/resources/images/monitor_bed_down.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_down_disable.svg b/resources/images/monitor_bed_down_disable.svg index 2551512d0a..01d1d1345f 100644 --- a/resources/images/monitor_bed_down_disable.svg +++ b/resources/images/monitor_bed_down_disable.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_temp.svg b/resources/images/monitor_bed_temp.svg index 919b543d23..67017deedc 100644 --- a/resources/images/monitor_bed_temp.svg +++ b/resources/images/monitor_bed_temp.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_temp_active.svg b/resources/images/monitor_bed_temp_active.svg index caee244e9e..6970ad84c3 100644 --- a/resources/images/monitor_bed_temp_active.svg +++ b/resources/images/monitor_bed_temp_active.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_up.svg b/resources/images/monitor_bed_up.svg index 2ef6e06bf0..dec6384a60 100644 --- a/resources/images/monitor_bed_up.svg +++ b/resources/images/monitor_bed_up.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_up_disable.svg b/resources/images/monitor_bed_up_disable.svg index 4e69a78c3c..b20668b4c2 100644 --- a/resources/images/monitor_bed_up_disable.svg +++ b/resources/images/monitor_bed_up_disable.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_camera.svg b/resources/images/monitor_camera.svg index 97136e8f37..158565e32e 100644 --- a/resources/images/monitor_camera.svg +++ b/resources/images/monitor_camera.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_extrduer_down.svg b/resources/images/monitor_extrduer_down.svg index e7bf0df7a6..a43c65a3ae 100644 --- a/resources/images/monitor_extrduer_down.svg +++ b/resources/images/monitor_extrduer_down.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_extrduer_down_disable.svg b/resources/images/monitor_extrduer_down_disable.svg index 80beaf8126..e1f38bf2bf 100644 --- a/resources/images/monitor_extrduer_down_disable.svg +++ b/resources/images/monitor_extrduer_down_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_extruder_up.svg b/resources/images/monitor_extruder_up.svg index a36d1db160..79b45d4ed6 100644 --- a/resources/images/monitor_extruder_up.svg +++ b/resources/images/monitor_extruder_up.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_extruder_up_disable.svg b/resources/images/monitor_extruder_up_disable.svg index ba1be74c07..dd898555dc 100644 --- a/resources/images/monitor_extruder_up_disable.svg +++ b/resources/images/monitor_extruder_up_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_fan.svg b/resources/images/monitor_fan.svg index 0fc12daf18..f149580bed 100644 --- a/resources/images/monitor_fan.svg +++ b/resources/images/monitor_fan.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_fan_off.svg b/resources/images/monitor_fan_off.svg index 4c492f0abe..56da537f6e 100644 --- a/resources/images/monitor_fan_off.svg +++ b/resources/images/monitor_fan_off.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_fan_on.svg b/resources/images/monitor_fan_on.svg index a44f5ff420..dfc955f5d7 100644 --- a/resources/images/monitor_fan_on.svg +++ b/resources/images/monitor_fan_on.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_frame_temp.svg b/resources/images/monitor_frame_temp.svg index 87740af172..dd9ece5406 100644 --- a/resources/images/monitor_frame_temp.svg +++ b/resources/images/monitor_frame_temp.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_frame_temp_active.svg b/resources/images/monitor_frame_temp_active.svg index 920345fc83..5c3031b6ce 100644 --- a/resources/images/monitor_frame_temp_active.svg +++ b/resources/images/monitor_frame_temp_active.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_hms_new.svg b/resources/images/monitor_hms_new.svg new file mode 100644 index 0000000000..eb8d6a1474 --- /dev/null +++ b/resources/images/monitor_hms_new.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/monitor_item_cost.svg b/resources/images/monitor_item_cost.svg index ed69e068a7..0d5ba62d98 100644 --- a/resources/images/monitor_item_cost.svg +++ b/resources/images/monitor_item_cost.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_item_prediction.svg b/resources/images/monitor_item_prediction.svg index 34056c482a..2d3693b314 100644 --- a/resources/images/monitor_item_prediction.svg +++ b/resources/images/monitor_item_prediction.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_item_print.svg b/resources/images/monitor_item_print.svg index efad4aaf6d..11ef669010 100644 --- a/resources/images/monitor_item_print.svg +++ b/resources/images/monitor_item_print.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_lamp_off.svg b/resources/images/monitor_lamp_off.svg index 2a8e4af627..9611b8d078 100644 --- a/resources/images/monitor_lamp_off.svg +++ b/resources/images/monitor_lamp_off.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_lamp_on.svg b/resources/images/monitor_lamp_on.svg index cc6f32dcf5..99c3964d67 100644 --- a/resources/images/monitor_lamp_on.svg +++ b/resources/images/monitor_lamp_on.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_none_add.svg b/resources/images/monitor_none_add.svg index bd3e1ebec1..c2aa3f14e2 100644 --- a/resources/images/monitor_none_add.svg +++ b/resources/images/monitor_none_add.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_none_arrow.svg b/resources/images/monitor_none_arrow.svg index 370d007364..8f3bade771 100644 --- a/resources/images/monitor_none_arrow.svg +++ b/resources/images/monitor_none_arrow.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_none_printer.svg b/resources/images/monitor_none_printer.svg index 3cae57af74..7acdd954db 100644 --- a/resources/images/monitor_none_printer.svg +++ b/resources/images/monitor_none_printer.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_nozzle_temp.svg b/resources/images/monitor_nozzle_temp.svg index 4fee482f97..47bcb6541a 100644 --- a/resources/images/monitor_nozzle_temp.svg +++ b/resources/images/monitor_nozzle_temp.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_nozzle_temp_active.svg b/resources/images/monitor_nozzle_temp_active.svg index 78679c2a84..99acbc231e 100644 --- a/resources/images/monitor_nozzle_temp_active.svg +++ b/resources/images/monitor_nozzle_temp_active.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_play.svg b/resources/images/monitor_play.svg index c94e39d67e..144efc21b3 100644 --- a/resources/images/monitor_play.svg +++ b/resources/images/monitor_play.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_printer.svg b/resources/images/monitor_printer.svg index d896d09d24..750693bd7a 100644 --- a/resources/images/monitor_printer.svg +++ b/resources/images/monitor_printer.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_off.svg b/resources/images/monitor_recording_off.svg index c45f93e9a6..ee2ccdccce 100644 --- a/resources/images/monitor_recording_off.svg +++ b/resources/images/monitor_recording_off.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_off_dark.svg b/resources/images/monitor_recording_off_dark.svg index 520dd1bdb1..ee2ccdccce 100644 --- a/resources/images/monitor_recording_off_dark.svg +++ b/resources/images/monitor_recording_off_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_on.svg b/resources/images/monitor_recording_on.svg index 4bccded8bd..e07c4f31a4 100644 --- a/resources/images/monitor_recording_on.svg +++ b/resources/images/monitor_recording_on.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_on_dark.svg b/resources/images/monitor_recording_on_dark.svg index cc0b3ec16f..e07c4f31a4 100644 --- a/resources/images/monitor_recording_on_dark.svg +++ b/resources/images/monitor_recording_on_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_middle.svg b/resources/images/monitor_signal_middle.svg index 31ee0a15a2..8b864c53e0 100644 --- a/resources/images/monitor_signal_middle.svg +++ b/resources/images/monitor_signal_middle.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_no.svg b/resources/images/monitor_signal_no.svg index f4ed816748..9daf9350b5 100644 --- a/resources/images/monitor_signal_no.svg +++ b/resources/images/monitor_signal_no.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_strong.svg b/resources/images/monitor_signal_strong.svg index 52f5532b2f..74214e6c0e 100644 --- a/resources/images/monitor_signal_strong.svg +++ b/resources/images/monitor_signal_strong.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_weak.svg b/resources/images/monitor_signal_weak.svg index a41171b01d..1923f2381b 100644 --- a/resources/images/monitor_signal_weak.svg +++ b/resources/images/monitor_signal_weak.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_speed.svg b/resources/images/monitor_speed.svg index 48164768ee..95ec1195d1 100644 --- a/resources/images/monitor_speed.svg +++ b/resources/images/monitor_speed.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_speed_active.svg b/resources/images/monitor_speed_active.svg index f8e7e68639..bb332f16b6 100644 --- a/resources/images/monitor_speed_active.svg +++ b/resources/images/monitor_speed_active.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_state_on.svg b/resources/images/monitor_state_on.svg index 04ff497ba4..7d3e222c81 100644 --- a/resources/images/monitor_state_on.svg +++ b/resources/images/monitor_state_on.svg @@ -1,10 +1 @@ - - - - Layer 1 - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_tasklist_print.svg b/resources/images/monitor_tasklist_print.svg index f2b6b4cd3e..235fccf830 100644 --- a/resources/images/monitor_tasklist_print.svg +++ b/resources/images/monitor_tasklist_print.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_tasklist_time.svg b/resources/images/monitor_tasklist_time.svg index 437532d18f..be3d415343 100644 --- a/resources/images/monitor_tasklist_time.svg +++ b/resources/images/monitor_tasklist_time.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_tasklist_weight.svg b/resources/images/monitor_tasklist_weight.svg index 7ffd2a051b..1eb07b7f5f 100644 --- a/resources/images/monitor_tasklist_weight.svg +++ b/resources/images/monitor_tasklist_weight.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_off.svg b/resources/images/monitor_timelapse_off.svg index 103a97f3fc..88cde143fc 100644 --- a/resources/images/monitor_timelapse_off.svg +++ b/resources/images/monitor_timelapse_off.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_off_dark.svg b/resources/images/monitor_timelapse_off_dark.svg index 19785321b1..9a971114bd 100644 --- a/resources/images/monitor_timelapse_off_dark.svg +++ b/resources/images/monitor_timelapse_off_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_on.svg b/resources/images/monitor_timelapse_on.svg index ca46179f76..2f67ca720c 100644 --- a/resources/images/monitor_timelapse_on.svg +++ b/resources/images/monitor_timelapse_on.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_on_dark.svg b/resources/images/monitor_timelapse_on_dark.svg index 63ab2297c2..2f67ca720c 100644 --- a/resources/images/monitor_timelapse_on_dark.svg +++ b/resources/images/monitor_timelapse_on_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_upgrade_busy.svg b/resources/images/monitor_upgrade_busy.svg index 70c185dcf1..b3395c2280 100644 --- a/resources/images/monitor_upgrade_busy.svg +++ b/resources/images/monitor_upgrade_busy.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_upgrade_offline.svg b/resources/images/monitor_upgrade_offline.svg index d40878488f..c1dd2a9f8e 100644 --- a/resources/images/monitor_upgrade_offline.svg +++ b/resources/images/monitor_upgrade_offline.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_upgrade_online.svg b/resources/images/monitor_upgrade_online.svg index a37e784ee3..3a903a5ebb 100644 --- a/resources/images/monitor_upgrade_online.svg +++ b/resources/images/monitor_upgrade_online.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_off.svg b/resources/images/monitor_vcamera_off.svg index edbcc92370..17227bf7b3 100644 --- a/resources/images/monitor_vcamera_off.svg +++ b/resources/images/monitor_vcamera_off.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_off_dark.svg b/resources/images/monitor_vcamera_off_dark.svg index 8ed58c9da9..c8f073676a 100644 --- a/resources/images/monitor_vcamera_off_dark.svg +++ b/resources/images/monitor_vcamera_off_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_on.svg b/resources/images/monitor_vcamera_on.svg index b26c3f10cf..0c4b97c109 100644 --- a/resources/images/monitor_vcamera_on.svg +++ b/resources/images/monitor_vcamera_on.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_on_dark.svg b/resources/images/monitor_vcamera_on_dark.svg index 1c829d6554..0c4b97c109 100644 --- a/resources/images/monitor_vcamera_on_dark.svg +++ b/resources/images/monitor_vcamera_on_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/node_dot.svg b/resources/images/node_dot.svg index 474142a57f..3443df3d36 100644 --- a/resources/images/node_dot.svg +++ b/resources/images/node_dot.svg @@ -1,8 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/not_equal.svg b/resources/images/not_equal.svg index bc88144353..4cc2cfd099 100644 --- a/resources/images/not_equal.svg +++ b/resources/images/not_equal.svg @@ -1,16 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/note.svg b/resources/images/note.svg index b02fc4b9bf..0ee879f842 100644 --- a/resources/images/note.svg +++ b/resources/images/note.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_arrow_left.svg b/resources/images/notification_arrow_left.svg index f4b4616c18..e1291d1249 100644 --- a/resources/images/notification_arrow_left.svg +++ b/resources/images/notification_arrow_left.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_arrow_open.svg b/resources/images/notification_arrow_open.svg index 7ae92e27ba..4f8798980e 100644 --- a/resources/images/notification_arrow_open.svg +++ b/resources/images/notification_arrow_open.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_arrow_right.svg b/resources/images/notification_arrow_right.svg index c6784277e3..332a16a93b 100644 --- a/resources/images/notification_arrow_right.svg +++ b/resources/images/notification_arrow_right.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_cancel.svg b/resources/images/notification_cancel.svg index 1430bc492e..2156625def 100644 --- a/resources/images/notification_cancel.svg +++ b/resources/images/notification_cancel.svg @@ -1,19 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_cancel_hover.svg b/resources/images/notification_cancel_hover.svg index a7ac9d15f5..2a19e06f7a 100644 --- a/resources/images/notification_cancel_hover.svg +++ b/resources/images/notification_cancel_hover.svg @@ -1,16 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close.svg b/resources/images/notification_close.svg index ef94f19b96..12142fa9f9 100644 --- a/resources/images/notification_close.svg +++ b/resources/images/notification_close.svg @@ -1,14 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close_dark.svg b/resources/images/notification_close_dark.svg index ab0dd789e5..81926cb405 100644 --- a/resources/images/notification_close_dark.svg +++ b/resources/images/notification_close_dark.svg @@ -1,14 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close_hover.svg b/resources/images/notification_close_hover.svg index ea5b7d8b58..7717605678 100644 --- a/resources/images/notification_close_hover.svg +++ b/resources/images/notification_close_hover.svg @@ -1,13 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close_hover_dark.svg b/resources/images/notification_close_hover_dark.svg index 68c49e8a3a..b4fa2f66bc 100644 --- a/resources/images/notification_close_hover_dark.svg +++ b/resources/images/notification_close_hover_dark.svg @@ -1,13 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_collapse.svg b/resources/images/notification_collapse.svg index 9f569d093f..303cecab38 100644 --- a/resources/images/notification_collapse.svg +++ b/resources/images/notification_collapse.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation.svg b/resources/images/notification_documentation.svg index abfcf0c838..b0c5658124 100644 --- a/resources/images/notification_documentation.svg +++ b/resources/images/notification_documentation.svg @@ -1,42 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation_dark.svg b/resources/images/notification_documentation_dark.svg index 7528a061f2..691f09f326 100644 --- a/resources/images/notification_documentation_dark.svg +++ b/resources/images/notification_documentation_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation_hover.svg b/resources/images/notification_documentation_hover.svg index 146747db0a..7a2c3447eb 100644 --- a/resources/images/notification_documentation_hover.svg +++ b/resources/images/notification_documentation_hover.svg @@ -1,40 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation_hover_dark.svg b/resources/images/notification_documentation_hover_dark.svg index 6913787cb7..03fb6d745d 100644 --- a/resources/images/notification_documentation_hover_dark.svg +++ b/resources/images/notification_documentation_hover_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_eject_sd.svg b/resources/images/notification_eject_sd.svg index 692c50d03b..a7635e63c2 100644 --- a/resources/images/notification_eject_sd.svg +++ b/resources/images/notification_eject_sd.svg @@ -1 +1 @@ -notification_eject_sd \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_eject_sd_hover.svg b/resources/images/notification_eject_sd_hover.svg index d41e03f097..07d60f7dd3 100644 --- a/resources/images/notification_eject_sd_hover.svg +++ b/resources/images/notification_eject_sd_hover.svg @@ -1 +1 @@ -notification_eject_sd_hover \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_expand.svg b/resources/images/notification_expand.svg index 91ac2a55bd..02b182476d 100644 --- a/resources/images/notification_expand.svg +++ b/resources/images/notification_expand.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize.svg b/resources/images/notification_minimalize.svg index 955006e497..0b1d7dd284 100644 --- a/resources/images/notification_minimalize.svg +++ b/resources/images/notification_minimalize.svg @@ -1,9 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize_dark.svg b/resources/images/notification_minimalize_dark.svg index 1eb4bc2ea3..3345ac845f 100644 --- a/resources/images/notification_minimalize_dark.svg +++ b/resources/images/notification_minimalize_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize_hover.svg b/resources/images/notification_minimalize_hover.svg index 2f11e46f86..4eefb7f721 100644 --- a/resources/images/notification_minimalize_hover.svg +++ b/resources/images/notification_minimalize_hover.svg @@ -1,10 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize_hover_dark.svg b/resources/images/notification_minimalize_hover_dark.svg index 85899b8ffc..c81e9674a4 100644 --- a/resources/images/notification_minimalize_hover_dark.svg +++ b/resources/images/notification_minimalize_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_open.svg b/resources/images/notification_open.svg new file mode 100644 index 0000000000..0532391f05 --- /dev/null +++ b/resources/images/notification_open.svg @@ -0,0 +1,40 @@ + +image/svg+xml + + + + diff --git a/resources/images/notification_open_dark.svg b/resources/images/notification_open_dark.svg new file mode 100644 index 0000000000..00589c1819 --- /dev/null +++ b/resources/images/notification_open_dark.svg @@ -0,0 +1,40 @@ + +image/svg+xml + + + + diff --git a/resources/images/notification_open_hover.svg b/resources/images/notification_open_hover.svg new file mode 100644 index 0000000000..207e9ac75c --- /dev/null +++ b/resources/images/notification_open_hover.svg @@ -0,0 +1,40 @@ + +image/svg+xml + + + + diff --git a/resources/images/notification_open_hover_dark.svg b/resources/images/notification_open_hover_dark.svg new file mode 100644 index 0000000000..07ac166190 --- /dev/null +++ b/resources/images/notification_open_hover_dark.svg @@ -0,0 +1,40 @@ + +image/svg+xml + + + + diff --git a/resources/images/notification_pause.svg b/resources/images/notification_pause.svg new file mode 100644 index 0000000000..fe108b8cae --- /dev/null +++ b/resources/images/notification_pause.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_pause_dark.svg b/resources/images/notification_pause_dark.svg new file mode 100644 index 0000000000..f2dc08fb8d --- /dev/null +++ b/resources/images/notification_pause_dark.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_pause_hover.svg b/resources/images/notification_pause_hover.svg new file mode 100644 index 0000000000..012e34f5d4 --- /dev/null +++ b/resources/images/notification_pause_hover.svg @@ -0,0 +1,48 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_pause_hover_dark.svg b/resources/images/notification_pause_hover_dark.svg new file mode 100644 index 0000000000..8933199eb7 --- /dev/null +++ b/resources/images/notification_pause_hover_dark.svg @@ -0,0 +1,48 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_play.svg b/resources/images/notification_play.svg new file mode 100644 index 0000000000..6ff4389ac8 --- /dev/null +++ b/resources/images/notification_play.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_play_dark.svg b/resources/images/notification_play_dark.svg new file mode 100644 index 0000000000..974e653f3a --- /dev/null +++ b/resources/images/notification_play_dark.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_play_hover.svg b/resources/images/notification_play_hover.svg new file mode 100644 index 0000000000..3a0ff0b223 --- /dev/null +++ b/resources/images/notification_play_hover.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_play_hover_dark.svg b/resources/images/notification_play_hover_dark.svg new file mode 100644 index 0000000000..5a41f14fea --- /dev/null +++ b/resources/images/notification_play_hover_dark.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + diff --git a/resources/images/notification_preferences.svg b/resources/images/notification_preferences.svg index 454150dd29..fdc9e4a026 100644 --- a/resources/images/notification_preferences.svg +++ b/resources/images/notification_preferences.svg @@ -1,15 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences_dark.svg b/resources/images/notification_preferences_dark.svg index fcc65bad35..946f564f84 100644 --- a/resources/images/notification_preferences_dark.svg +++ b/resources/images/notification_preferences_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences_hover.svg b/resources/images/notification_preferences_hover.svg index fbfa5299f1..38aadaa1b4 100644 --- a/resources/images/notification_preferences_hover.svg +++ b/resources/images/notification_preferences_hover.svg @@ -1,15 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences_hover_dark.svg b/resources/images/notification_preferences_hover_dark.svg index 4a98b5bc07..a080eec4d4 100644 --- a/resources/images/notification_preferences_hover_dark.svg +++ b/resources/images/notification_preferences_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_right.svg b/resources/images/notification_right.svg index bc8ae57529..c18967b013 100644 --- a/resources/images/notification_right.svg +++ b/resources/images/notification_right.svg @@ -1 +1 @@ -1234214 \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_right_dark.svg b/resources/images/notification_right_dark.svg index eedaf36a64..2f62855ed9 100644 --- a/resources/images/notification_right_dark.svg +++ b/resources/images/notification_right_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_right_hover.svg b/resources/images/notification_right_hover.svg index 4bfe4bd607..0a238990e2 100644 --- a/resources/images/notification_right_hover.svg +++ b/resources/images/notification_right_hover.svg @@ -1 +1 @@ -123124 \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_right_hover_dark.svg b/resources/images/notification_right_hover_dark.svg index da98eebc7c..da60e06158 100644 --- a/resources/images/notification_right_hover_dark.svg +++ b/resources/images/notification_right_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_slicing_complete.svg b/resources/images/notification_slicing_complete.svg index da677939a5..4f98e485f8 100644 --- a/resources/images/notification_slicing_complete.svg +++ b/resources/images/notification_slicing_complete.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/obj_warning.svg b/resources/images/obj_warning.svg index b1ba3828f6..239e6b7256 100644 --- a/resources/images/obj_warning.svg +++ b/resources/images/obj_warning.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/objlist_color_painting.svg b/resources/images/objlist_color_painting.svg new file mode 100644 index 0000000000..fc454ed063 --- /dev/null +++ b/resources/images/objlist_color_painting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/objlist_seam_painting.svg b/resources/images/objlist_seam_painting.svg new file mode 100644 index 0000000000..d8571e04e4 --- /dev/null +++ b/resources/images/objlist_seam_painting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/objlist_sinking.svg b/resources/images/objlist_sinking.svg index fbdd2822aa..d8f0e78284 100644 --- a/resources/images/objlist_sinking.svg +++ b/resources/images/objlist_sinking.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/objlist_support_painting.svg b/resources/images/objlist_support_painting.svg new file mode 100644 index 0000000000..21158ffc1b --- /dev/null +++ b/resources/images/objlist_support_painting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/one_layer_off.svg b/resources/images/one_layer_off.svg index 0f6feb84f1..9667fc203d 100644 --- a/resources/images/one_layer_off.svg +++ b/resources/images/one_layer_off.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_off_dark.svg b/resources/images/one_layer_off_dark.svg index c0be9191fe..ad6ac73fbc 100644 --- a/resources/images/one_layer_off_dark.svg +++ b/resources/images/one_layer_off_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_off_hover.svg b/resources/images/one_layer_off_hover.svg index bd8fed7121..ff85085667 100644 --- a/resources/images/one_layer_off_hover.svg +++ b/resources/images/one_layer_off_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_off_hover_dark.svg b/resources/images/one_layer_off_hover_dark.svg index 1f50980c16..ca124cbe53 100644 --- a/resources/images/one_layer_off_hover_dark.svg +++ b/resources/images/one_layer_off_hover_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on.svg b/resources/images/one_layer_on.svg index 2c0677d2db..16a9c502d2 100644 --- a/resources/images/one_layer_on.svg +++ b/resources/images/one_layer_on.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on_dark.svg b/resources/images/one_layer_on_dark.svg index dd2dfb216b..023525640b 100644 --- a/resources/images/one_layer_on_dark.svg +++ b/resources/images/one_layer_on_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on_hover.svg b/resources/images/one_layer_on_hover.svg index bbbeeaebda..86402d70c2 100644 --- a/resources/images/one_layer_on_hover.svg +++ b/resources/images/one_layer_on_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on_hover_dark.svg b/resources/images/one_layer_on_hover_dark.svg index c5c9776371..d2c310bc96 100644 --- a/resources/images/one_layer_on_hover_dark.svg +++ b/resources/images/one_layer_on_hover_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/open.svg b/resources/images/open.svg index 5c7fa81be3..466eace4d3 100644 --- a/resources/images/open.svg +++ b/resources/images/open.svg @@ -1,11 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_3dhoneycomb.svg b/resources/images/param_3dhoneycomb.svg index 9d2b94182b..779ab3c047 100644 --- a/resources/images/param_3dhoneycomb.svg +++ b/resources/images/param_3dhoneycomb.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_acceleration.svg b/resources/images/param_acceleration.svg index ef9858a206..8e42c6be40 100644 --- a/resources/images/param_acceleration.svg +++ b/resources/images/param_acceleration.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_accessory.svg b/resources/images/param_accessory.svg new file mode 100644 index 0000000000..4ff05ce15e --- /dev/null +++ b/resources/images/param_accessory.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_adaptive_mesh.svg b/resources/images/param_adaptive_mesh.svg new file mode 100644 index 0000000000..6b9884e76b --- /dev/null +++ b/resources/images/param_adaptive_mesh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_adaptivecubic.svg b/resources/images/param_adaptivecubic.svg index 7490ca81bd..2f0b51b05f 100644 --- a/resources/images/param_adaptivecubic.svg +++ b/resources/images/param_adaptivecubic.svg @@ -1,30 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_adhension.svg b/resources/images/param_adhension.svg index d9578b441f..c8baa303d5 100644 --- a/resources/images/param_adhension.svg +++ b/resources/images/param_adhension.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/param_advanced.svg b/resources/images/param_advanced.svg index 238c2424c3..86d13f71a7 100644 --- a/resources/images/param_advanced.svg +++ b/resources/images/param_advanced.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_alignedrectilinear.svg b/resources/images/param_alignedrectilinear.svg index 3e29d271a4..f988bb75a5 100644 --- a/resources/images/param_alignedrectilinear.svg +++ b/resources/images/param_alignedrectilinear.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_archimedeanchords.svg b/resources/images/param_archimedeanchords.svg index 80d6539166..44a8ec3944 100644 --- a/resources/images/param_archimedeanchords.svg +++ b/resources/images/param_archimedeanchords.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_bed_temp.svg b/resources/images/param_bed_temp.svg new file mode 100644 index 0000000000..74af1d256f --- /dev/null +++ b/resources/images/param_bed_temp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_bridge.svg b/resources/images/param_bridge.svg new file mode 100644 index 0000000000..54b4d47077 --- /dev/null +++ b/resources/images/param_bridge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_chamber_temp.svg b/resources/images/param_chamber_temp.svg index 919b543d23..729b469138 100644 --- a/resources/images/param_chamber_temp.svg +++ b/resources/images/param_chamber_temp.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/param_concentric.svg b/resources/images/param_concentric.svg index 47062df636..c449e08a81 100644 --- a/resources/images/param_concentric.svg +++ b/resources/images/param_concentric.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_cooling.svg b/resources/images/param_cooling.svg index 5903299939..6e8afe772b 100644 --- a/resources/images/param_cooling.svg +++ b/resources/images/param_cooling.svg @@ -1,17 +1 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_cooling_aux_fan.svg b/resources/images/param_cooling_aux_fan.svg new file mode 100644 index 0000000000..a566224cc4 --- /dev/null +++ b/resources/images/param_cooling_aux_fan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cooling_exhaust.svg b/resources/images/param_cooling_exhaust.svg new file mode 100644 index 0000000000..e0794e1a56 --- /dev/null +++ b/resources/images/param_cooling_exhaust.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cooling_fan.svg b/resources/images/param_cooling_fan.svg index 93f12898fd..10dfc1cc3e 100644 --- a/resources/images/param_cooling_fan.svg +++ b/resources/images/param_cooling_fan.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_cooling_part_fan.svg b/resources/images/param_cooling_part_fan.svg new file mode 100644 index 0000000000..693f26ed41 --- /dev/null +++ b/resources/images/param_cooling_part_fan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cooling_specific_layer.svg b/resources/images/param_cooling_specific_layer.svg new file mode 100644 index 0000000000..945ba0d9a1 --- /dev/null +++ b/resources/images/param_cooling_specific_layer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_crosshatch.svg b/resources/images/param_crosshatch.svg new file mode 100644 index 0000000000..3e5e81648c --- /dev/null +++ b/resources/images/param_crosshatch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cubic.svg b/resources/images/param_cubic.svg index 344aeb1c89..1a237a73e0 100644 --- a/resources/images/param_cubic.svg +++ b/resources/images/param_cubic.svg @@ -1,30 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_extruder_clearence.svg b/resources/images/param_extruder_clearence.svg new file mode 100644 index 0000000000..d498632597 --- /dev/null +++ b/resources/images/param_extruder_clearence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_lift_enforcement.svg b/resources/images/param_extruder_lift_enforcement.svg new file mode 100644 index 0000000000..91cc530900 --- /dev/null +++ b/resources/images/param_extruder_lift_enforcement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_size.svg b/resources/images/param_extruder_size.svg new file mode 100644 index 0000000000..3c76a7a16b --- /dev/null +++ b/resources/images/param_extruder_size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_temp.svg b/resources/images/param_extruder_temp.svg new file mode 100644 index 0000000000..841ae1569d --- /dev/null +++ b/resources/images/param_extruder_temp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_flush.svg b/resources/images/param_flush.svg index da24dceaad..09aeb37c5c 100644 --- a/resources/images/param_flush.svg +++ b/resources/images/param_flush.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_gcode.svg b/resources/images/param_gcode.svg index 98d51dd606..8c0de86e68 100644 --- a/resources/images/param_gcode.svg +++ b/resources/images/param_gcode.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_grid.svg b/resources/images/param_grid.svg index 5ef8475734..3663347402 100644 --- a/resources/images/param_grid.svg +++ b/resources/images/param_grid.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_gyroid.svg b/resources/images/param_gyroid.svg index fa42716efc..8c21b812be 100644 --- a/resources/images/param_gyroid.svg +++ b/resources/images/param_gyroid.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_hilbertcurve.svg b/resources/images/param_hilbertcurve.svg index f76ff649ea..df8aafe115 100644 --- a/resources/images/param_hilbertcurve.svg +++ b/resources/images/param_hilbertcurve.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_hollow.svg b/resources/images/param_hollow.svg index 01ddd94f28..f6300e3471 100644 --- a/resources/images/param_hollow.svg +++ b/resources/images/param_hollow.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_honeycomb.svg b/resources/images/param_honeycomb.svg index 9d2b94182b..7040cef46d 100644 --- a/resources/images/param_honeycomb.svg +++ b/resources/images/param_honeycomb.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_infill.svg b/resources/images/param_infill.svg index 37e050a41b..a257a8e218 100644 --- a/resources/images/param_infill.svg +++ b/resources/images/param_infill.svg @@ -1,29 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_information.svg b/resources/images/param_information.svg index 414402349a..2091517204 100644 --- a/resources/images/param_information.svg +++ b/resources/images/param_information.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_ironing.svg b/resources/images/param_ironing.svg index f486c79fd6..96925df0cc 100644 --- a/resources/images/param_ironing.svg +++ b/resources/images/param_ironing.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_jerk.svg b/resources/images/param_jerk.svg new file mode 100644 index 0000000000..da572c06a5 --- /dev/null +++ b/resources/images/param_jerk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_layer_height.svg b/resources/images/param_layer_height.svg index 5d1c630c95..73eb073e3c 100644 --- a/resources/images/param_layer_height.svg +++ b/resources/images/param_layer_height.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_lightning.svg b/resources/images/param_lightning.svg index 0385be4126..8471db84db 100644 --- a/resources/images/param_lightning.svg +++ b/resources/images/param_lightning.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_line.svg b/resources/images/param_line.svg index aed3393a87..d57f3b139d 100644 --- a/resources/images/param_line.svg +++ b/resources/images/param_line.svg @@ -1,22 +1 @@ - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_line_width.svg b/resources/images/param_line_width.svg index b747e8222c..c5d8c2409f 100644 --- a/resources/images/param_line_width.svg +++ b/resources/images/param_line_width.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_monotonic.svg b/resources/images/param_monotonic.svg index b959242708..9eb2cc96a0 100644 --- a/resources/images/param_monotonic.svg +++ b/resources/images/param_monotonic.svg @@ -1,21 +1 @@ - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_monotonicline.svg b/resources/images/param_monotonicline.svg index 0c9245e28a..2692e73c30 100644 --- a/resources/images/param_monotonicline.svg +++ b/resources/images/param_monotonicline.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_multi_material.svg b/resources/images/param_multi_material.svg new file mode 100644 index 0000000000..0505f6449d --- /dev/null +++ b/resources/images/param_multi_material.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_octagramspiral.svg b/resources/images/param_octagramspiral.svg index d4848698ba..6f3767cf03 100644 --- a/resources/images/param_octagramspiral.svg +++ b/resources/images/param_octagramspiral.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_overhang.svg b/resources/images/param_overhang.svg new file mode 100644 index 0000000000..9476b370d6 --- /dev/null +++ b/resources/images/param_overhang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_overhang_speed.svg b/resources/images/param_overhang_speed.svg new file mode 100644 index 0000000000..9c4cf47ad7 --- /dev/null +++ b/resources/images/param_overhang_speed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_position.svg b/resources/images/param_position.svg new file mode 100644 index 0000000000..db243fe0b7 --- /dev/null +++ b/resources/images/param_position.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_precision.svg b/resources/images/param_precision.svg index 47f6ee8df6..ff4cdd3ccf 100644 --- a/resources/images/param_precision.svg +++ b/resources/images/param_precision.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_printable_space.svg b/resources/images/param_printable_space.svg new file mode 100644 index 0000000000..3d3f7a2a9d --- /dev/null +++ b/resources/images/param_printable_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_raft.svg b/resources/images/param_raft.svg index d58506d2ca..832fac58d7 100644 --- a/resources/images/param_raft.svg +++ b/resources/images/param_raft.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/param_rectilinear-grid.svg b/resources/images/param_rectilinear-grid.svg index c47cb2c822..0947c22248 100644 --- a/resources/images/param_rectilinear-grid.svg +++ b/resources/images/param_rectilinear-grid.svg @@ -1,20 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_rectilinear.svg b/resources/images/param_rectilinear.svg index 3e29d271a4..0c062058bc 100644 --- a/resources/images/param_rectilinear.svg +++ b/resources/images/param_rectilinear.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_rectilinear_interlaced.svg b/resources/images/param_rectilinear_interlaced.svg index 729cc3b84b..a5b95bdf28 100644 --- a/resources/images/param_rectilinear_interlaced.svg +++ b/resources/images/param_rectilinear_interlaced.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_retraction.svg b/resources/images/param_retraction.svg index e476286b02..4a56b35514 100644 --- a/resources/images/param_retraction.svg +++ b/resources/images/param_retraction.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/param_retraction_material_change.svg b/resources/images/param_retraction_material_change.svg new file mode 100644 index 0000000000..d557243282 --- /dev/null +++ b/resources/images/param_retraction_material_change.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_seam.svg b/resources/images/param_seam.svg index 6866f5b862..d1dbf04c5e 100644 --- a/resources/images/param_seam.svg +++ b/resources/images/param_seam.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/param_settings.svg b/resources/images/param_settings.svg new file mode 100644 index 0000000000..fbdc62080e --- /dev/null +++ b/resources/images/param_settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_shell.svg b/resources/images/param_shell.svg index 964c336385..96a1ed1223 100644 --- a/resources/images/param_shell.svg +++ b/resources/images/param_shell.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_skirt.svg b/resources/images/param_skirt.svg new file mode 100644 index 0000000000..1f0a1854e0 --- /dev/null +++ b/resources/images/param_skirt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_special.svg b/resources/images/param_special.svg index 03c542f8c5..9e00002b98 100644 --- a/resources/images/param_special.svg +++ b/resources/images/param_special.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_speed.svg b/resources/images/param_speed.svg index ff44a7e78b..79008e6d40 100644 --- a/resources/images/param_speed.svg +++ b/resources/images/param_speed.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_speed_first.svg b/resources/images/param_speed_first.svg index 90a1bad39f..6c50440c7e 100644 --- a/resources/images/param_speed_first.svg +++ b/resources/images/param_speed_first.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_support.svg b/resources/images/param_support.svg index 68ec97e535..6c20d647be 100644 --- a/resources/images/param_support.svg +++ b/resources/images/param_support.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_support_filament.svg b/resources/images/param_support_filament.svg index 6abc4ff22e..eca486c104 100644 --- a/resources/images/param_support_filament.svg +++ b/resources/images/param_support_filament.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/param_support_tree.svg b/resources/images/param_support_tree.svg new file mode 100644 index 0000000000..f85275def8 --- /dev/null +++ b/resources/images/param_support_tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_supportcubic.svg b/resources/images/param_supportcubic.svg index 344aeb1c89..d5c95d6b42 100644 --- a/resources/images/param_supportcubic.svg +++ b/resources/images/param_supportcubic.svg @@ -1,30 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_temperature.svg b/resources/images/param_temperature.svg index 5276f46345..99a91411bf 100644 --- a/resources/images/param_temperature.svg +++ b/resources/images/param_temperature.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_toolchange.svg b/resources/images/param_toolchange.svg new file mode 100644 index 0000000000..73a9590da1 --- /dev/null +++ b/resources/images/param_toolchange.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_tower.svg b/resources/images/param_tower.svg index 69753a3474..1147401869 100644 --- a/resources/images/param_tower.svg +++ b/resources/images/param_tower.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_travel_speed.svg b/resources/images/param_travel_speed.svg index 2ac2f79fbf..43947fbac2 100644 --- a/resources/images/param_travel_speed.svg +++ b/resources/images/param_travel_speed.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_tri-hexagon.svg b/resources/images/param_tri-hexagon.svg index 636925673d..e0a133c4ca 100644 --- a/resources/images/param_tri-hexagon.svg +++ b/resources/images/param_tri-hexagon.svg @@ -1,19 +1 @@ - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_triangles.svg b/resources/images/param_triangles.svg index 8b7fd23a02..9d11ea8010 100644 --- a/resources/images/param_triangles.svg +++ b/resources/images/param_triangles.svg @@ -1,19 +1 @@ - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_volumetric_speed.svg b/resources/images/param_volumetric_speed.svg index a190d737ec..d148e6f1c1 100644 --- a/resources/images/param_volumetric_speed.svg +++ b/resources/images/param_volumetric_speed.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_wall.svg b/resources/images/param_wall.svg index 762b67eae1..404935b39c 100644 --- a/resources/images/param_wall.svg +++ b/resources/images/param_wall.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_wall_generator.svg b/resources/images/param_wall_generator.svg new file mode 100644 index 0000000000..8ac7fb61b7 --- /dev/null +++ b/resources/images/param_wall_generator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_wall_surface.svg b/resources/images/param_wall_surface.svg new file mode 100644 index 0000000000..78ba42df15 --- /dev/null +++ b/resources/images/param_wall_surface.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_zig-zag.svg b/resources/images/param_zig-zag.svg index 58ddf0ea96..0c062058bc 100644 --- a/resources/images/param_zig-zag.svg +++ b/resources/images/param_zig-zag.svg @@ -1,20 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/placeholder_excel.svg b/resources/images/placeholder_excel.svg index 15b84b4b90..16eeb39650 100644 --- a/resources/images/placeholder_excel.svg +++ b/resources/images/placeholder_excel.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/placeholder_pdf.svg b/resources/images/placeholder_pdf.svg index 158444c430..a07e336d7e 100644 --- a/resources/images/placeholder_pdf.svg +++ b/resources/images/placeholder_pdf.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/placeholder_txt.svg b/resources/images/placeholder_txt.svg index dcad481d9d..113a746d33 100644 --- a/resources/images/placeholder_txt.svg +++ b/resources/images/placeholder_txt.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange.svg b/resources/images/plate_arrange.svg index c9c3b2501b..ea6ef51a5d 100644 --- a/resources/images/plate_arrange.svg +++ b/resources/images/plate_arrange.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange_dark.svg b/resources/images/plate_arrange_dark.svg index 04b66eaee4..6b0ade63b9 100644 --- a/resources/images/plate_arrange_dark.svg +++ b/resources/images/plate_arrange_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange_hover.svg b/resources/images/plate_arrange_hover.svg index 6dce382802..4170ddefb3 100644 --- a/resources/images/plate_arrange_hover.svg +++ b/resources/images/plate_arrange_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange_hover_dark.svg b/resources/images/plate_arrange_hover_dark.svg index 9b060b705e..7b4d451103 100644 --- a/resources/images/plate_arrange_hover_dark.svg +++ b/resources/images/plate_arrange_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_close.svg b/resources/images/plate_close.svg index 235e135d72..caa52e8d76 100644 --- a/resources/images/plate_close.svg +++ b/resources/images/plate_close.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_close_dark.svg b/resources/images/plate_close_dark.svg index 8fb4bdd6a9..60e10f32fb 100644 --- a/resources/images/plate_close_dark.svg +++ b/resources/images/plate_close_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_close_hover.svg b/resources/images/plate_close_hover.svg index 2208d45026..78154b649e 100644 --- a/resources/images/plate_close_hover.svg +++ b/resources/images/plate_close_hover.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_close_hover_dark.svg b/resources/images/plate_close_hover_dark.svg index 47525ae39e..057950934e 100644 --- a/resources/images/plate_close_hover_dark.svg +++ b/resources/images/plate_close_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked.svg b/resources/images/plate_locked.svg index 30f54f083c..ad62e0be45 100644 --- a/resources/images/plate_locked.svg +++ b/resources/images/plate_locked.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked_dark.svg b/resources/images/plate_locked_dark.svg index 50d879d7f2..954e90a96e 100644 --- a/resources/images/plate_locked_dark.svg +++ b/resources/images/plate_locked_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked_hover.svg b/resources/images/plate_locked_hover.svg index 0b35c40930..9898e71aa0 100644 --- a/resources/images/plate_locked_hover.svg +++ b/resources/images/plate_locked_hover.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked_hover_dark.svg b/resources/images/plate_locked_hover_dark.svg index e5db250044..f12e171e47 100644 --- a/resources/images/plate_locked_hover_dark.svg +++ b/resources/images/plate_locked_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit.svg b/resources/images/plate_name_edit.svg index 061c9dda77..54a607d222 100644 --- a/resources/images/plate_name_edit.svg +++ b/resources/images/plate_name_edit.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit_dark.svg b/resources/images/plate_name_edit_dark.svg index 061c9dda77..729cb18431 100644 --- a/resources/images/plate_name_edit_dark.svg +++ b/resources/images/plate_name_edit_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit_hover.svg b/resources/images/plate_name_edit_hover.svg index 1b5630c47b..66befdaebd 100644 --- a/resources/images/plate_name_edit_hover.svg +++ b/resources/images/plate_name_edit_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit_hover_dark.svg b/resources/images/plate_name_edit_hover_dark.svg index 9d2c2b1555..0382c829ff 100644 --- a/resources/images/plate_name_edit_hover_dark.svg +++ b/resources/images/plate_name_edit_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient.svg b/resources/images/plate_orient.svg index 9fee1617c9..cc7d090f8d 100644 --- a/resources/images/plate_orient.svg +++ b/resources/images/plate_orient.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient_dark.svg b/resources/images/plate_orient_dark.svg index a2e1cf7562..2112074ca5 100644 --- a/resources/images/plate_orient_dark.svg +++ b/resources/images/plate_orient_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient_hover.svg b/resources/images/plate_orient_hover.svg index e97bc42a4e..fcf1aabc38 100644 --- a/resources/images/plate_orient_hover.svg +++ b/resources/images/plate_orient_hover.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient_hover_dark.svg b/resources/images/plate_orient_hover_dark.svg index 2f141d3323..a2c60a0a79 100644 --- a/resources/images/plate_orient_hover_dark.svg +++ b/resources/images/plate_orient_hover_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings.svg b/resources/images/plate_settings.svg index c87756cf1a..7ca6f421fd 100644 --- a/resources/images/plate_settings.svg +++ b/resources/images/plate_settings.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_arrow.svg b/resources/images/plate_settings_arrow.svg index e772a9671b..8da6e0b4dd 100644 --- a/resources/images/plate_settings_arrow.svg +++ b/resources/images/plate_settings_arrow.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed.svg b/resources/images/plate_settings_changed.svg index fe2f4797d7..3c1cc319c0 100644 --- a/resources/images/plate_settings_changed.svg +++ b/resources/images/plate_settings_changed.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed_dark.svg b/resources/images/plate_settings_changed_dark.svg index 46c17a8058..0858582095 100644 --- a/resources/images/plate_settings_changed_dark.svg +++ b/resources/images/plate_settings_changed_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed_hover.svg b/resources/images/plate_settings_changed_hover.svg index 41f8d3df1e..f2350ae353 100644 --- a/resources/images/plate_settings_changed_hover.svg +++ b/resources/images/plate_settings_changed_hover.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed_hover_dark.svg b/resources/images/plate_settings_changed_hover_dark.svg index adebb4e21f..ee72de4a5e 100644 --- a/resources/images/plate_settings_changed_hover_dark.svg +++ b/resources/images/plate_settings_changed_hover_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_dark.svg b/resources/images/plate_settings_dark.svg index 94b11e77a5..ea12254f87 100644 --- a/resources/images/plate_settings_dark.svg +++ b/resources/images/plate_settings_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_hover.svg b/resources/images/plate_settings_hover.svg index c56fe47706..63c33ff2f9 100644 --- a/resources/images/plate_settings_hover.svg +++ b/resources/images/plate_settings_hover.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_hover_dark.svg b/resources/images/plate_settings_hover_dark.svg index 276b609a79..2cd16d21a9 100644 --- a/resources/images/plate_settings_hover_dark.svg +++ b/resources/images/plate_settings_hover_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked.svg b/resources/images/plate_unlocked.svg index 8b780a4f5b..6d93b9b69e 100644 --- a/resources/images/plate_unlocked.svg +++ b/resources/images/plate_unlocked.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked_dark.svg b/resources/images/plate_unlocked_dark.svg index 13c562d552..092f6a0dfb 100644 --- a/resources/images/plate_unlocked_dark.svg +++ b/resources/images/plate_unlocked_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked_hover.svg b/resources/images/plate_unlocked_hover.svg index de3b0794be..91ac0aacb6 100644 --- a/resources/images/plate_unlocked_hover.svg +++ b/resources/images/plate_unlocked_hover.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked_hover_dark.svg b/resources/images/plate_unlocked_hover_dark.svg index 140fa1d7d6..a52831047f 100644 --- a/resources/images/plate_unlocked_hover_dark.svg +++ b/resources/images/plate_unlocked_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print-time.svg b/resources/images/print-time.svg index 6734937f93..8f56842e37 100644 --- a/resources/images/print-time.svg +++ b/resources/images/print-time.svg @@ -1,12 +1 @@ - - - - background - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/print-weight.svg b/resources/images/print-weight.svg index 93bdcd8123..981689a52f 100644 --- a/resources/images/print-weight.svg +++ b/resources/images/print-weight.svg @@ -1,17 +1 @@ - - - - background - - - - Layer 1 - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/print_control_pause.svg b/resources/images/print_control_pause.svg index 6f2759b089..0cb5abaf1b 100644 --- a/resources/images/print_control_pause.svg +++ b/resources/images/print_control_pause.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_control_pause_disable.svg b/resources/images/print_control_pause_disable.svg index 2e1d511765..57b454fdeb 100644 --- a/resources/images/print_control_pause_disable.svg +++ b/resources/images/print_control_pause_disable.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_control_pause_hover.svg b/resources/images/print_control_pause_hover.svg index 0753b08c7f..12e35f3216 100644 --- a/resources/images/print_control_pause_hover.svg +++ b/resources/images/print_control_pause_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_control_resume.svg b/resources/images/print_control_resume.svg index 5151f06a1a..09694a7b5c 100644 --- a/resources/images/print_control_resume.svg +++ b/resources/images/print_control_resume.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_resume_disable.svg b/resources/images/print_control_resume_disable.svg index fb1ad8adb2..478dc3e2e4 100644 --- a/resources/images/print_control_resume_disable.svg +++ b/resources/images/print_control_resume_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_resume_hover.svg b/resources/images/print_control_resume_hover.svg index b408fb9402..bffdd4fe2d 100644 --- a/resources/images/print_control_resume_hover.svg +++ b/resources/images/print_control_resume_hover.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_stop.svg b/resources/images/print_control_stop.svg index 1201928163..b8c8d36910 100644 --- a/resources/images/print_control_stop.svg +++ b/resources/images/print_control_stop.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_stop_disable.svg b/resources/images/print_control_stop_disable.svg index 3d2a99afaf..0f05d885d0 100644 --- a/resources/images/print_control_stop_disable.svg +++ b/resources/images/print_control_stop_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_stop_hover.svg b/resources/images/print_control_stop_hover.svg index 267d913ebc..4136c759bf 100644 --- a/resources/images/print_control_stop_hover.svg +++ b/resources/images/print_control_stop_hover.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_info_time.svg b/resources/images/print_info_time.svg index 63af49a7fc..d0eb028a45 100644 --- a/resources/images/print_info_time.svg +++ b/resources/images/print_info_time.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_info_weight.svg b/resources/images/print_info_weight.svg index e4deb77c39..58048495dc 100644 --- a/resources/images/print_info_weight.svg +++ b/resources/images/print_info_weight.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/printer.svg b/resources/images/printer.svg index 2a0598823c..e67f870692 100644 --- a/resources/images/printer.svg +++ b/resources/images/printer.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/printer_host_browser.svg b/resources/images/printer_host_browser.svg index 47eccd52e7..2c087e8a85 100644 --- a/resources/images/printer_host_browser.svg +++ b/resources/images/printer_host_browser.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/printer_host_test.svg b/resources/images/printer_host_test.svg index 517c46a330..c8dc384f68 100644 --- a/resources/images/printer_host_test.svg +++ b/resources/images/printer_host_test.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/printer_in_lan.svg b/resources/images/printer_in_lan.svg index d7392ab6e8..449280bf5a 100644 --- a/resources/images/printer_in_lan.svg +++ b/resources/images/printer_in_lan.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/printer_status_busy.svg b/resources/images/printer_status_busy.svg index 590c6bdbae..a166f0b693 100644 --- a/resources/images/printer_status_busy.svg +++ b/resources/images/printer_status_busy.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/printer_status_idle.svg b/resources/images/printer_status_idle.svg index ff81158dc5..cc6326daf4 100644 --- a/resources/images/printer_status_idle.svg +++ b/resources/images/printer_status_idle.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/printer_status_lock.svg b/resources/images/printer_status_lock.svg index af840d2f7c..66e0a805ac 100644 --- a/resources/images/printer_status_lock.svg +++ b/resources/images/printer_status_lock.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/printer_status_offline.svg b/resources/images/printer_status_offline.svg index eeb09a4d11..2539c23e07 100644 --- a/resources/images/printer_status_offline.svg +++ b/resources/images/printer_status_offline.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/process.svg b/resources/images/process.svg index 5d449680f3..560e3fa2a5 100644 --- a/resources/images/process.svg +++ b/resources/images/process.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/question.svg b/resources/images/question.svg index 6fb955b628..5b4ecc50e1 100644 --- a/resources/images/question.svg +++ b/resources/images/question.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/radio_off.svg b/resources/images/radio_off.svg index ee5fa30cf9..96c0e76749 100644 --- a/resources/images/radio_off.svg +++ b/resources/images/radio_off.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/radio_on.svg b/resources/images/radio_on.svg index d9d1f88307..eb98320785 100644 --- a/resources/images/radio_on.svg +++ b/resources/images/radio_on.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/reflection_x.svg b/resources/images/reflection_x.svg index fa391e6cdf..4a94013895 100644 --- a/resources/images/reflection_x.svg +++ b/resources/images/reflection_x.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/reflection_y.svg b/resources/images/reflection_y.svg index 0de6a5971f..55d357df6f 100644 --- a/resources/images/reflection_y.svg +++ b/resources/images/reflection_y.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/refresh.svg b/resources/images/refresh.svg index af9b336858..b25d533125 100644 --- a/resources/images/refresh.svg +++ b/resources/images/refresh.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/revert_btn.svg b/resources/images/revert_btn.svg index fbc580d884..763a86ff76 100644 --- a/resources/images/revert_btn.svg +++ b/resources/images/revert_btn.svg @@ -1,12 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/save.svg b/resources/images/save.svg index 63029daf58..ba542737f9 100644 --- a/resources/images/save.svg +++ b/resources/images/save.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_abnormal.svg b/resources/images/sdcard_state_abnormal.svg index a88e8df175..45705a0703 100644 --- a/resources/images/sdcard_state_abnormal.svg +++ b/resources/images/sdcard_state_abnormal.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_abnormal_dark.svg b/resources/images/sdcard_state_abnormal_dark.svg index b2ac57f52a..45705a0703 100644 --- a/resources/images/sdcard_state_abnormal_dark.svg +++ b/resources/images/sdcard_state_abnormal_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_no.svg b/resources/images/sdcard_state_no.svg index ae45a0c3b5..5e0449ee17 100644 --- a/resources/images/sdcard_state_no.svg +++ b/resources/images/sdcard_state_no.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_no_dark.svg b/resources/images/sdcard_state_no_dark.svg index 6b17701408..5e0449ee17 100644 --- a/resources/images/sdcard_state_no_dark.svg +++ b/resources/images/sdcard_state_no_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_normal.svg b/resources/images/sdcard_state_normal.svg index fc70fe4a65..5caac95676 100644 --- a/resources/images/sdcard_state_normal.svg +++ b/resources/images/sdcard_state_normal.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_normal_dark.svg b/resources/images/sdcard_state_normal_dark.svg index 1abfa2c38b..5caac95676 100644 --- a/resources/images/sdcard_state_normal_dark.svg +++ b/resources/images/sdcard_state_normal_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/search.svg b/resources/images/search.svg index 304562750b..931ce8143a 100644 --- a/resources/images/search.svg +++ b/resources/images/search.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/seperator.svg b/resources/images/seperator.svg index c053a0aa4a..c69e4289ca 100644 --- a/resources/images/seperator.svg +++ b/resources/images/seperator.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/settings.svg b/resources/images/settings.svg index d2a2a2e8af..47241ab53f 100644 --- a/resources/images/settings.svg +++ b/resources/images/settings.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/sidebutton_dropdown.svg b/resources/images/sidebutton_dropdown.svg index 2ea84d7d17..961970f674 100644 --- a/resources/images/sidebutton_dropdown.svg +++ b/resources/images/sidebutton_dropdown.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/spin_dec.svg b/resources/images/spin_dec.svg index 4988471024..fe453e216f 100644 --- a/resources/images/spin_dec.svg +++ b/resources/images/spin_dec.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/spin_inc.svg b/resources/images/spin_inc.svg index 0a04338761..79d5c598e9 100644 --- a/resources/images/spin_inc.svg +++ b/resources/images/spin_inc.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/splash_logo.svg b/resources/images/splash_logo.svg index b2c46d628d..45a5b3be25 100644 --- a/resources/images/splash_logo.svg +++ b/resources/images/splash_logo.svg @@ -1,136 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/splash_logo_dark.svg b/resources/images/splash_logo_dark.svg new file mode 100644 index 0000000000..5ea2bebcbd --- /dev/null +++ b/resources/images/splash_logo_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/split_objects.svg b/resources/images/split_objects.svg index 091c4ad3d9..492a138985 100644 --- a/resources/images/split_objects.svg +++ b/resources/images/split_objects.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/split_objects_dark.svg b/resources/images/split_objects_dark.svg index 5965f459a0..149d724262 100644 --- a/resources/images/split_objects_dark.svg +++ b/resources/images/split_objects_dark.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/split_parts.svg b/resources/images/split_parts.svg index b1246a6a5e..eee3a868c3 100644 --- a/resources/images/split_parts.svg +++ b/resources/images/split_parts.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/split_parts_dark.svg b/resources/images/split_parts_dark.svg index 82e77af131..e9a0994548 100644 --- a/resources/images/split_parts_dark.svg +++ b/resources/images/split_parts_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/spool.svg b/resources/images/spool.svg index d0d7cb3773..1e639c7dcc 100644 --- a/resources/images/spool.svg +++ b/resources/images/spool.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/step_1.svg b/resources/images/step_1.svg index bb72d6e2ac..a34f812a6a 100644 --- a/resources/images/step_1.svg +++ b/resources/images/step_1.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/step_2.svg b/resources/images/step_2.svg index 730ef67ce1..81c76f5fa4 100644 --- a/resources/images/step_2.svg +++ b/resources/images/step_2.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/step_2_ready.svg b/resources/images/step_2_ready.svg index 8e53610c3a..b9f768b64c 100644 --- a/resources/images/step_2_ready.svg +++ b/resources/images/step_2_ready.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/step_is_ok.svg b/resources/images/step_is_ok.svg index 04ee5c02ae..3dea459a5f 100644 --- a/resources/images/step_is_ok.svg +++ b/resources/images/step_is_ok.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/support.svg b/resources/images/support.svg index f25ab8f3c4..f883607cdd 100644 --- a/resources/images/support.svg +++ b/resources/images/support.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/svg_modifier.svg b/resources/images/svg_modifier.svg index 8b1ff317b4..74548e9646 100644 --- a/resources/images/svg_modifier.svg +++ b/resources/images/svg_modifier.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/svg_negative.svg b/resources/images/svg_negative.svg index c47a8fe58d..7845267e2a 100644 --- a/resources/images/svg_negative.svg +++ b/resources/images/svg_negative.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/svg_part.svg b/resources/images/svg_part.svg index 40f907bd9f..b75b85bd87 100644 --- a/resources/images/svg_part.svg +++ b/resources/images/svg_part.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/tab_3d_active.svg b/resources/images/tab_3d_active.svg index 1b4cc48a71..36ffc87ee5 100644 --- a/resources/images/tab_3d_active.svg +++ b/resources/images/tab_3d_active.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/tab_auxiliary_active.svg b/resources/images/tab_auxiliary_active.svg new file mode 100644 index 0000000000..ae2a6783f7 --- /dev/null +++ b/resources/images/tab_auxiliary_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/tab_auxiliary_avtice.svg b/resources/images/tab_auxiliary_avtice.svg deleted file mode 100644 index 95fb702f7e..0000000000 --- a/resources/images/tab_auxiliary_avtice.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/resources/images/tab_calibration_active.svg b/resources/images/tab_calibration_active.svg new file mode 100644 index 0000000000..54ea4fe5b5 --- /dev/null +++ b/resources/images/tab_calibration_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/tab_home_active.svg b/resources/images/tab_home_active.svg index 00be6f6f04..7d8d586e91 100644 --- a/resources/images/tab_home_active.svg +++ b/resources/images/tab_home_active.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/tab_monitor_active.svg b/resources/images/tab_monitor_active.svg index 80971866e2..6270ca49e7 100644 --- a/resources/images/tab_monitor_active.svg +++ b/resources/images/tab_monitor_active.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/tab_multi_active.svg b/resources/images/tab_multi_active.svg new file mode 100644 index 0000000000..dc776469e5 --- /dev/null +++ b/resources/images/tab_multi_active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/tab_presets_active.svg b/resources/images/tab_presets_active.svg index 617b9eb6a7..4eb67fc6df 100644 --- a/resources/images/tab_presets_active.svg +++ b/resources/images/tab_presets_active.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/tab_presets_inactive.svg b/resources/images/tab_presets_inactive.svg index 6438cd9ac2..cd064caa1e 100644 --- a/resources/images/tab_presets_inactive.svg +++ b/resources/images/tab_presets_inactive.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/tab_preview_active.svg b/resources/images/tab_preview_active.svg index 5bb703d338..a65cab4820 100644 --- a/resources/images/tab_preview_active.svg +++ b/resources/images/tab_preview_active.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/table.svg b/resources/images/table.svg index d1b059b053..5f04f4e05c 100644 --- a/resources/images/table.svg +++ b/resources/images/table.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/tips_arrow.svg b/resources/images/tips_arrow.svg index cba8d02d98..eb7da06766 100644 --- a/resources/images/tips_arrow.svg +++ b/resources/images/tips_arrow.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/toggle_off.svg b/resources/images/toggle_off.svg index c479d1cf6d..f83e594cc6 100644 --- a/resources/images/toggle_off.svg +++ b/resources/images/toggle_off.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toggle_on.svg b/resources/images/toggle_on.svg index 3a4c3f0878..f83cafd3bd 100644 --- a/resources/images/toggle_on.svg +++ b/resources/images/toggle_on.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_add_plate.svg b/resources/images/toolbar_add_plate.svg index 4a13b0a029..ea2577d961 100644 --- a/resources/images/toolbar_add_plate.svg +++ b/resources/images/toolbar_add_plate.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_add_plate_dark.svg b/resources/images/toolbar_add_plate_dark.svg index 0a5dcc67b9..a361368a18 100644 --- a/resources/images/toolbar_add_plate_dark.svg +++ b/resources/images/toolbar_add_plate_dark.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_arrange.svg b/resources/images/toolbar_arrange.svg index 184030090e..6b15ec846d 100644 --- a/resources/images/toolbar_arrange.svg +++ b/resources/images/toolbar_arrange.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_arrange_dark.svg b/resources/images/toolbar_arrange_dark.svg index 69f37e8eff..7e32711f61 100644 --- a/resources/images/toolbar_arrange_dark.svg +++ b/resources/images/toolbar_arrange_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_assemble.svg b/resources/images/toolbar_assemble.svg index 8513db24f6..02c3bce781 100644 --- a/resources/images/toolbar_assemble.svg +++ b/resources/images/toolbar_assemble.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_assemble_dark.svg b/resources/images/toolbar_assemble_dark.svg index a6299e48d0..48debebc4c 100644 --- a/resources/images/toolbar_assemble_dark.svg +++ b/resources/images/toolbar_assemble_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_cut.svg b/resources/images/toolbar_cut.svg index 9f507dc9ea..a062d0c40c 100644 --- a/resources/images/toolbar_cut.svg +++ b/resources/images/toolbar_cut.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_cut_dark.svg b/resources/images/toolbar_cut_dark.svg index 3e78be7887..ab3c592c9e 100644 --- a/resources/images/toolbar_cut_dark.svg +++ b/resources/images/toolbar_cut_dark.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_double_directional_arrow.svg b/resources/images/toolbar_double_directional_arrow.svg new file mode 100644 index 0000000000..4cc9b2ecb3 --- /dev/null +++ b/resources/images/toolbar_double_directional_arrow.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/toolbar_flatten.svg b/resources/images/toolbar_flatten.svg index ffcc22e4f8..7f375998f5 100644 --- a/resources/images/toolbar_flatten.svg +++ b/resources/images/toolbar_flatten.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_flatten_dark.svg b/resources/images/toolbar_flatten_dark.svg index e6c3b472e7..2ef8d50fd5 100644 --- a/resources/images/toolbar_flatten_dark.svg +++ b/resources/images/toolbar_flatten_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_measure.svg b/resources/images/toolbar_measure.svg index 1606b5ee6f..ece2f09b92 100644 --- a/resources/images/toolbar_measure.svg +++ b/resources/images/toolbar_measure.svg @@ -1,93 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_measure_dark.svg b/resources/images/toolbar_measure_dark.svg index a273e75347..56a98b749e 100644 --- a/resources/images/toolbar_measure_dark.svg +++ b/resources/images/toolbar_measure_dark.svg @@ -1,93 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_meshboolean.svg b/resources/images/toolbar_meshboolean.svg index 6a6a68b991..0253340b53 100644 --- a/resources/images/toolbar_meshboolean.svg +++ b/resources/images/toolbar_meshboolean.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_meshboolean_dark.svg b/resources/images/toolbar_meshboolean_dark.svg index 6ebe5cbf85..8837111056 100644 --- a/resources/images/toolbar_meshboolean_dark.svg +++ b/resources/images/toolbar_meshboolean_dark.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_modifier_sphere.svg b/resources/images/toolbar_modifier_sphere.svg index dc08d011db..a794a7f99e 100644 --- a/resources/images/toolbar_modifier_sphere.svg +++ b/resources/images/toolbar_modifier_sphere.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_modifier_sphere_dark.svg b/resources/images/toolbar_modifier_sphere_dark.svg index 10f64738ae..27b56e20a9 100644 --- a/resources/images/toolbar_modifier_sphere_dark.svg +++ b/resources/images/toolbar_modifier_sphere_dark.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_move.svg b/resources/images/toolbar_move.svg index 1f94c1cba3..1c9764a52b 100644 --- a/resources/images/toolbar_move.svg +++ b/resources/images/toolbar_move.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_move_dark.svg b/resources/images/toolbar_move_dark.svg index 1e560788aa..000e9b0c2c 100644 --- a/resources/images/toolbar_move_dark.svg +++ b/resources/images/toolbar_move_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_open.svg b/resources/images/toolbar_open.svg index 78730b4282..282b67bb67 100644 --- a/resources/images/toolbar_open.svg +++ b/resources/images/toolbar_open.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_open_dark.svg b/resources/images/toolbar_open_dark.svg index e5b5fc1f9b..01700b1f30 100644 --- a/resources/images/toolbar_open_dark.svg +++ b/resources/images/toolbar_open_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_orient.svg b/resources/images/toolbar_orient.svg index b240ffa763..ed05131754 100644 --- a/resources/images/toolbar_orient.svg +++ b/resources/images/toolbar_orient.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_orient_dark.svg b/resources/images/toolbar_orient_dark.svg index 2e46dfa13e..dbd1e38d90 100644 --- a/resources/images/toolbar_orient_dark.svg +++ b/resources/images/toolbar_orient_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_reset.svg b/resources/images/toolbar_reset.svg index 134b230b3f..ad78b43e15 100644 --- a/resources/images/toolbar_reset.svg +++ b/resources/images/toolbar_reset.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_reset_hover.svg b/resources/images/toolbar_reset_hover.svg index 279b20bce2..ad78b43e15 100644 --- a/resources/images/toolbar_reset_hover.svg +++ b/resources/images/toolbar_reset_hover.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/toolbar_rotate.svg b/resources/images/toolbar_rotate.svg index 9642a6ae44..d14b35c676 100644 --- a/resources/images/toolbar_rotate.svg +++ b/resources/images/toolbar_rotate.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_rotate_dark.svg b/resources/images/toolbar_rotate_dark.svg index b8b21a1578..e611be4c5b 100644 --- a/resources/images/toolbar_rotate_dark.svg +++ b/resources/images/toolbar_rotate_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_scale.svg b/resources/images/toolbar_scale.svg index 0f8c628623..a806a00926 100644 --- a/resources/images/toolbar_scale.svg +++ b/resources/images/toolbar_scale.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_scale_dark.svg b/resources/images/toolbar_scale_dark.svg index b044591ee2..78e86cee75 100644 --- a/resources/images/toolbar_scale_dark.svg +++ b/resources/images/toolbar_scale_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_seam.svg b/resources/images/toolbar_seam.svg index 8a12cf00b1..2b9afca90f 100644 --- a/resources/images/toolbar_seam.svg +++ b/resources/images/toolbar_seam.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_seam_dark.svg b/resources/images/toolbar_seam_dark.svg index 7d686f1415..cda5ce288f 100644 --- a/resources/images/toolbar_seam_dark.svg +++ b/resources/images/toolbar_seam_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_support.svg b/resources/images/toolbar_support.svg index 9208594a0a..56e44fa1ba 100644 --- a/resources/images/toolbar_support.svg +++ b/resources/images/toolbar_support.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_support_dark.svg b/resources/images/toolbar_support_dark.svg index 2481a95b47..e749ab87b5 100644 --- a/resources/images/toolbar_support_dark.svg +++ b/resources/images/toolbar_support_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_text.svg b/resources/images/toolbar_text.svg index 08f593c119..fbd932c6d5 100644 --- a/resources/images/toolbar_text.svg +++ b/resources/images/toolbar_text.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_text_dark.svg b/resources/images/toolbar_text_dark.svg index b25888f2fa..a680b7f530 100644 --- a/resources/images/toolbar_text_dark.svg +++ b/resources/images/toolbar_text_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_tooltip.svg b/resources/images/toolbar_tooltip.svg index 6c48a72bb0..96c5684cb0 100644 --- a/resources/images/toolbar_tooltip.svg +++ b/resources/images/toolbar_tooltip.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_tooltip_hover.svg b/resources/images/toolbar_tooltip_hover.svg index f1b4fc79d6..c8d606829e 100644 --- a/resources/images/toolbar_tooltip_hover.svg +++ b/resources/images/toolbar_tooltip_hover.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_variable_layer_height.svg b/resources/images/toolbar_variable_layer_height.svg index 9c98e40a8f..08984f1fa0 100644 --- a/resources/images/toolbar_variable_layer_height.svg +++ b/resources/images/toolbar_variable_layer_height.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_variable_layer_height_dark.svg b/resources/images/toolbar_variable_layer_height_dark.svg index 66b5401f75..83fd28bc3e 100644 --- a/resources/images/toolbar_variable_layer_height_dark.svg +++ b/resources/images/toolbar_variable_layer_height_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_close.svg b/resources/images/topbar_close.svg index 43958476a5..c911eaa53d 100644 --- a/resources/images/topbar_close.svg +++ b/resources/images/topbar_close.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/topbar_dropdown.svg b/resources/images/topbar_dropdown.svg index 0a349f0eda..fce7742c29 100644 --- a/resources/images/topbar_dropdown.svg +++ b/resources/images/topbar_dropdown.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_file.svg b/resources/images/topbar_file.svg index 1a19896bb8..eb28e21045 100644 --- a/resources/images/topbar_file.svg +++ b/resources/images/topbar_file.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_max.svg b/resources/images/topbar_max.svg index 6bf4ef6839..5766784b50 100644 --- a/resources/images/topbar_max.svg +++ b/resources/images/topbar_max.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/topbar_min.svg b/resources/images/topbar_min.svg index b12dd684c2..53c2b08888 100644 --- a/resources/images/topbar_min.svg +++ b/resources/images/topbar_min.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_redo.svg b/resources/images/topbar_redo.svg index 2a45094a88..b5c5589dee 100644 --- a/resources/images/topbar_redo.svg +++ b/resources/images/topbar_redo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_redo_inactive.svg b/resources/images/topbar_redo_inactive.svg index 4fdc1bad0e..5899ce2fef 100644 --- a/resources/images/topbar_redo_inactive.svg +++ b/resources/images/topbar_redo_inactive.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_save.svg b/resources/images/topbar_save.svg index 8fb28c645d..532ad4f0fa 100644 --- a/resources/images/topbar_save.svg +++ b/resources/images/topbar_save.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_undo.svg b/resources/images/topbar_undo.svg index 267ff68999..0ad07b2624 100644 --- a/resources/images/topbar_undo.svg +++ b/resources/images/topbar_undo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_undo_inactive.svg b/resources/images/topbar_undo_inactive.svg index 94d15c147b..2a07fbc01b 100644 --- a/resources/images/topbar_undo_inactive.svg +++ b/resources/images/topbar_undo_inactive.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_win.svg b/resources/images/topbar_win.svg index e7dc4a61ed..84124aa271 100644 --- a/resources/images/topbar_win.svg +++ b/resources/images/topbar_win.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/triangle_paint.svg b/resources/images/triangle_paint.svg index c28991f2a0..c3b3c935c7 100644 --- a/resources/images/triangle_paint.svg +++ b/resources/images/triangle_paint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/triangle_paint_dark.svg b/resources/images/triangle_paint_dark.svg index 0efbc898b6..cfaedd1acd 100644 --- a/resources/images/triangle_paint_dark.svg +++ b/resources/images/triangle_paint_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/unbind.svg b/resources/images/unbind.svg index 5af4b8603f..f60e09c08f 100644 --- a/resources/images/unbind.svg +++ b/resources/images/unbind.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/unbind_machine.svg b/resources/images/unbind_machine.svg index d6d8142c4c..1754224189 100644 --- a/resources/images/unbind_machine.svg +++ b/resources/images/unbind_machine.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/unbind_selected.svg b/resources/images/unbind_selected.svg index 29b7382df2..3228394b0b 100644 --- a/resources/images/unbind_selected.svg +++ b/resources/images/unbind_selected.svg @@ -1,8 +1 @@ - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/undefined.svg b/resources/images/undefined.svg new file mode 100644 index 0000000000..7c3eedfbca --- /dev/null +++ b/resources/images/undefined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/undo.svg b/resources/images/undo.svg index fb8e0803a0..763a86ff76 100644 --- a/resources/images/undo.svg +++ b/resources/images/undo.svg @@ -1,6 +1 @@ - - - Slice 41 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/video_state_off.svg b/resources/images/video_state_off.svg index 8d1509867c..7bed3b8cec 100644 --- a/resources/images/video_state_off.svg +++ b/resources/images/video_state_off.svg @@ -1,9 +1 @@ - - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/video_state_on.svg b/resources/images/video_state_on.svg index 9201d5593d..301d972fdb 100644 --- a/resources/images/video_state_on.svg +++ b/resources/images/video_state_on.svg @@ -1,9 +1 @@ - - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/info/filament_info.json b/resources/info/filament_info.json index 673e1a89a7..8472e66462 100644 --- a/resources/info/filament_info.json +++ b/resources/info/filament_info.json @@ -1,27 +1,38 @@ { - "version": "1.0.0.1", + "version": "1.0.0.2", "high_temp_filament": [ "ABS", "ASA", "PC", "PA", "PA-CF", + "PA-GF", "PA6-CF", "PET-CF", "PPS", "PPS-CF", "PPA-CF", - "PPA-GF" + "PPA-GF", + "ABS-GF", + "ASA-Aero" ], "low_temp_filament": [ "PLA", "TPU", "PLA-CF", "PLA-AERO", - "PVA" + "PVA", + "BVOH" ], "high_low_compatible_filament":[ "HIPS", - "PETG" + "PETG", + "PE", + "PP", + "EVA", + "PE-CF", + "PP-CF", + "PP-GF", + "PHA" ] } \ No newline at end of file diff --git a/resources/printers/N1.json b/resources/printers/N1.json index 85da862315..8bcd035a5e 100644 --- a/resources/printers/N1.json +++ b/resources/printers/N1.json @@ -28,7 +28,6 @@ "support_print_all":false, "support_print_without_sd":false, "support_flow_calibration":true, - "support_build_plate_marker_detect":false, "support_lidar_calibration":false, "support_ai_monitoring":false, "support_first_layer_inspect":false, diff --git a/resources/printers/N2S.json b/resources/printers/N2S.json index e287cd1fab..2857bb17eb 100644 --- a/resources/printers/N2S.json +++ b/resources/printers/N2S.json @@ -28,7 +28,6 @@ "support_print_all":false, "support_print_without_sd":false, "support_flow_calibration":true, - "support_build_plate_marker_detect":false, "support_lidar_calibration":false, "support_ai_monitoring":false, "support_first_layer_inspect":false, diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index 74723c2173..4c6b01d1a3 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ diff --git a/resources/profiles/Anker/process/fdm_process_anker_fast_common.json b/resources/profiles/Anker/process/fdm_process_anker_fast_common.json index 82cc0d87fd..2a68dee68f 100644 --- a/resources/profiles/Anker/process/fdm_process_anker_fast_common.json +++ b/resources/profiles/Anker/process/fdm_process_anker_fast_common.json @@ -5,14 +5,14 @@ "instantiation": "false", "inherits": "fdm_process_anker_common", "reduce_crossing_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "bottom_shell_thickness": "0", "top_shell_thickness": "0", "default_acceleration": "6000", "outer_wall_acceleration": "3000", "bridge_acceleration": "1500", "sparse_infill_density": "10%", - "sparse_infill_pattern": "supportcubic", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "2500", "gap_infill_speed": "300", "sparse_infill_speed": "600", diff --git a/resources/profiles/Anker/process/fdm_process_common.json b/resources/profiles/Anker/process/fdm_process_common.json index 9c4d1b0807..9c95320674 100644 --- a/resources/profiles/Anker/process/fdm_process_common.json +++ b/resources/profiles/Anker/process/fdm_process_common.json @@ -22,7 +22,7 @@ "bottom_shell_layers": "4", "bottom_shell_thickness": "0.5", "sparse_infill_density": "15%", - "sparse_infill_pattern": "cubic", + "sparse_infill_pattern": "crosshatch", "infill_wall_overlap": "23%", "infill_direction": "45", "minimum_sparse_infill_area": "15", @@ -60,7 +60,7 @@ "travel_jerk": "20", "enable_support": "0", "support_type": "normal(auto)", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_on_build_plate_only": "0", "raft_layers": "0", "support_filament": "0", diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index 6d8818a7e0..1de427386a 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,6 +1,6 @@ { "name": "Anycubic", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Anycubic configurations", "machine_model_list": [ 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 67939352a5..0f09f22753 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 @@ -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/process/0.15mm Optimal @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json index c7b30bc5f4..da91f5ce65 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "300", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "45", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 e516880a08..fa28b718f7 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.15", "support_speed": "50", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.35", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 9c75644713..806010f718 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "zig-zag", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "2000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.15", "support_speed": "100", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "3", "top_shell_thickness": "0.6", 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 73db772a2a..83ca438f3d 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.15", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json index f236f609e0..4cd73b5972 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.15", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", 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 ca65287273..cbac387d5a 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.15", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", 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 ffa79dfcc0..e1318b88bc 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.15", "support_speed": "50", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.35", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 3eec452725..63e031a94e 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "300", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "45", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 99a1501abb..e40949afbe 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "50", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.35", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 7be6a36476..1e4d3f6ece 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "zig-zag", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "2000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "100", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "3", "top_shell_thickness": "0.6", 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 097e6ae25c..ddc684e569 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json index 249aae8b65..ce4e67dc39 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", 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 f1c5e98f04..194fca816d 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", 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 7e8f2256da..7771b6f82d 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "50", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.35", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 c6fd6c3b4f..6ac4455403 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "300", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.3", "support_speed": "45", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", 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 496528f2c0..e4b326bd96 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "45", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.35", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 59f44fea87..03918af84c 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "zig-zag", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "2000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.3", "support_speed": "100", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "3", "top_shell_thickness": "0.6", 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 605f81e5c3..683d7e4432 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.3", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json index f42c73f1d9..dcd0d778df 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.3", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", 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 f3fe2d9587..b30d57001f 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.3", "support_speed": "70", - "support_threshold_angle": "65", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "1.2", 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 1f2f55dfcb..3c68786889 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "45", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.35", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Anycubic/process/fdm_process_common.json b/resources/profiles/Anycubic/process/fdm_process_common.json index 30291bf626..489a8ca472 100644 --- a/resources/profiles/Anycubic/process/fdm_process_common.json +++ b/resources/profiles/Anycubic/process/fdm_process_common.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -81,7 +81,7 @@ "tree_support_wall_count": "0", "tree_support_with_infill": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/Artillery.json b/resources/profiles/Artillery.json index 7cfbfa06f8..c186a30071 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ diff --git a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json index 5e1b7012dc..59155ff1c2 100644 --- a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json +++ b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json index 02f19906a6..3d799e54ea 100644 --- a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json +++ b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json index 90b3717bc7..06268f64b8 100644 --- a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json +++ b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json index 23b5e6605e..1b92d76eb1 100644 --- a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json +++ b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json index a068c3c314..1563fcaa1f 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json index 03d0e59ef3..0c46ef2f30 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json index 24899e1bd9..6fe69f9ca0 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json index ed6853df93..8089fc885a 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json index 327afad6f7..6d8f5f6706 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json index d3fb6cc4fd..cf7f73c2b6 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json index 06b10e836a..95d1bc0e70 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json index 97dfe75dc1..78ea01f44a 100644 --- a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json +++ b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json index d5e0f991dd..77b9468bd7 100644 --- a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json +++ b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Artillery/process/fdm_process_common.json b/resources/profiles/Artillery/process/fdm_process_common.json index ec9d332fac..7672f7a219 100644 --- a/resources/profiles/Artillery/process/fdm_process_common.json +++ b/resources/profiles/Artillery/process/fdm_process_common.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -81,7 +81,7 @@ "tree_support_wall_count": "0", "tree_support_with_infill": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 4c70999b14..775288cbd3 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.08.00.25", + "version": "01.09.00.14", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -625,6 +625,10 @@ "name": "fdm_filament_pc", "sub_path": "filament/fdm_filament_pc.json" }, + { + "name": "fdm_filament_pctg", + "sub_path": "filament/fdm_filament_pctg.json" + }, { "name": "fdm_filament_asa", "sub_path": "filament/fdm_filament_asa.json" @@ -649,6 +653,26 @@ "name": "fdm_filament_ppa", "sub_path": "filament/fdm_filament_ppa.json" }, + { + "name": "fdm_filament_pe", + "sub_path": "filament/fdm_filament_pe.json" + }, + { + "name": "fdm_filament_pp", + "sub_path": "filament/fdm_filament_pp.json" + }, + { + "name": "fdm_filament_eva", + "sub_path": "filament/fdm_filament_eva.json" + }, + { + "name": "fdm_filament_pha", + "sub_path": "filament/fdm_filament_pha.json" + }, + { + "name": "fdm_filament_bvoh", + "sub_path": "filament/fdm_filament_bvoh.json" + }, { "name": "Bambu PLA Matte @base", "sub_path": "filament/Bambu PLA Matte @base.json" @@ -745,6 +769,10 @@ "name": "Bambu PLA Galaxy @base", "sub_path": "filament/Bambu PLA Galaxy @base.json" }, + { + "name": "Bambu Support For PLA/PETG @base", + "sub_path": "filament/Bambu Support For PLA-PETG @base.json" + }, { "name": "Bambu TPU 95A @base", "sub_path": "filament/Bambu TPU 95A @base.json" @@ -789,6 +817,10 @@ "name": "Bambu PETG Translucent @base", "sub_path": "filament/Bambu PETG Translucent @base.json" }, + { + "name": "Generic PCTG @base", + "sub_path": "filament/Generic PCTG @base.json" + }, { "name": "Bambu ABS @base", "sub_path": "filament/Bambu ABS @base.json" @@ -801,6 +833,10 @@ "name": "PolyLite ABS @base", "sub_path": "filament/PolyLite ABS @base.json" }, + { + "name": "Bambu ABS-GF @base", + "sub_path": "filament/Bambu ABS-GF @base.json" + }, { "name": "Bambu PC @base", "sub_path": "filament/Bambu PC @base.json" @@ -821,6 +857,10 @@ "name": "PolyLite ASA @base", "sub_path": "filament/PolyLite ASA @base.json" }, + { + "name": "Bambu ASA-Aero @base", + "sub_path": "filament/Bambu ASA-Aero @base.json" + }, { "name": "Generic PVA @base", "sub_path": "filament/Generic PVA @base.json" @@ -865,6 +905,10 @@ "name": "Bambu PA6-CF @base", "sub_path": "filament/Bambu PA6-CF @base.json" }, + { + "name": "Bambu PA6-GF @base", + "sub_path": "filament/Bambu PA6-GF @base.json" + }, { "name": "Generic HIPS @base", "sub_path": "filament/Generic HIPS @base.json" @@ -885,6 +929,38 @@ "name": "Generic PPA-GF @base", "sub_path": "filament/Generic PPA-GF @base.json" }, + { + "name": "Generic PE @base", + "sub_path": "filament/Generic PE @base.json" + }, + { + "name": "Generic PE-CF @base", + "sub_path": "filament/Generic PE-CF @base.json" + }, + { + "name": "Generic PP @base", + "sub_path": "filament/Generic PP @base.json" + }, + { + "name": "Generic PP-CF @base", + "sub_path": "filament/Generic PP-CF @base.json" + }, + { + "name": "Generic PP-GF @base", + "sub_path": "filament/Generic PP-GF @base.json" + }, + { + "name": "Generic EVA @base", + "sub_path": "filament/Generic EVA @base.json" + }, + { + "name": "Generic PHA @base", + "sub_path": "filament/Generic PHA @base.json" + }, + { + "name": "Generic BVOH @base", + "sub_path": "filament/Generic BVOH @base.json" + }, { "name": "Bambu PLA Matte @BBL X1C", "sub_path": "filament/Bambu PLA Matte @BBL X1C.json" @@ -1553,6 +1629,38 @@ "name": "Bambu PLA Galaxy @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Galaxy @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support For PLA/PETG @BBL X1C", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL X1C.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL X1C 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL P1P", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL P1P.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL P1P 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL P1P 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL A1M", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A1M.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL A1M 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL A1", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A1.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL A1 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A1 0.2 nozzle.json" + }, { "name": "Bambu TPU 95A @BBL X1C", "sub_path": "filament/Bambu TPU 95A @BBL X1C.json" @@ -1761,6 +1869,18 @@ "name": "Bambu PETG Translucent @BBL A1", "sub_path": "filament/Bambu PETG Translucent @BBL A1.json" }, + { + "name": "Generic PCTG @BBL X1C", + "sub_path": "filament/Generic PCTG @BBL X1C.json" + }, + { + "name": "Generic PCTG @BBL A1", + "sub_path": "filament/Generic PCTG @BBL A1.json" + }, + { + "name": "Generic PCTG @BBL A1M", + "sub_path": "filament/Generic PCTG @BBL A1M.json" + }, { "name": "Bambu ABS @BBL X1C", "sub_path": "filament/Bambu ABS @BBL X1C.json" @@ -1829,6 +1949,18 @@ "name": "PolyLite ABS @BBL A1 0.2 nozzle", "sub_path": "filament/PolyLite ABS @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu ABS-GF @BBL X1C", + "sub_path": "filament/Bambu ABS-GF @BBL X1C.json" + }, + { + "name": "Bambu ABS-GF @BBL P1P", + "sub_path": "filament/Bambu ABS-GF @BBL P1P.json" + }, + { + "name": "Bambu ABS-GF @BBL A1", + "sub_path": "filament/Bambu ABS-GF @BBL A1.json" + }, { "name": "Bambu PC @BBL X1C", "sub_path": "filament/Bambu PC @BBL X1C.json" @@ -1957,6 +2089,18 @@ "name": "PolyLite ASA @BBL A1", "sub_path": "filament/PolyLite ASA @BBL A1.json" }, + { + "name": "Bambu ASA-Aero @BBL X1C", + "sub_path": "filament/Bambu ASA-Aero @BBL X1C.json" + }, + { + "name": "Bambu ASA-Aero @BBL P1P", + "sub_path": "filament/Bambu ASA-Aero @BBL P1P.json" + }, + { + "name": "Bambu ASA-Aero @BBL A1", + "sub_path": "filament/Bambu ASA-Aero @BBL A1.json" + }, { "name": "Generic PVA @0.2 nozzle", "sub_path": "filament/Generic PVA @0.2 nozzle.json" @@ -2093,6 +2237,18 @@ "name": "Bambu PA6-CF @BBL A1", "sub_path": "filament/Bambu PA6-CF @BBL A1.json" }, + { + "name": "Bambu PA6-GF @BBL X1C", + "sub_path": "filament/Bambu PA6-GF @BBL X1C.json" + }, + { + "name": "Bambu PA6-GF @BBL P1P", + "sub_path": "filament/Bambu PA6-GF @BBL P1P.json" + }, + { + "name": "Bambu PA6-GF @BBL A1", + "sub_path": "filament/Bambu PA6-GF @BBL A1.json" + }, { "name": "Generic HIPS @BBL X1C", "sub_path": "filament/Generic HIPS @BBL X1C.json" @@ -2141,6 +2297,94 @@ "name": "Generic PPA-GF @BBL X1E", "sub_path": "filament/Generic PPA-GF @BBL X1E.json" }, + { + "name": "Generic PE @BBL X1C", + "sub_path": "filament/Generic PE @BBL X1C.json" + }, + { + "name": "Generic PE @BBL A1", + "sub_path": "filament/Generic PE @BBL A1.json" + }, + { + "name": "Generic PE @BBL A1M", + "sub_path": "filament/Generic PE @BBL A1M.json" + }, + { + "name": "Generic PE-CF @BBL X1C", + "sub_path": "filament/Generic PE-CF @BBL X1C.json" + }, + { + "name": "Generic PE-CF @BBL A1", + "sub_path": "filament/Generic PE-CF @BBL A1.json" + }, + { + "name": "Generic PE-CF @BBL A1M", + "sub_path": "filament/Generic PE-CF @BBL A1M.json" + }, + { + "name": "Generic PP @BBL X1C", + "sub_path": "filament/Generic PP @BBL X1C.json" + }, + { + "name": "Generic PP @BBL A1", + "sub_path": "filament/Generic PP @BBL A1.json" + }, + { + "name": "Generic PP @BBL A1M", + "sub_path": "filament/Generic PP @BBL A1M.json" + }, + { + "name": "Generic PP-CF @BBL X1C", + "sub_path": "filament/Generic PP-CF @BBL X1C.json" + }, + { + "name": "Generic PP-CF @BBL A1", + "sub_path": "filament/Generic PP-CF @BBL A1.json" + }, + { + "name": "Generic PP-GF @BBL X1C", + "sub_path": "filament/Generic PP-GF @BBL X1C.json" + }, + { + "name": "Generic PP-GF @BBL A1", + "sub_path": "filament/Generic PP-GF @BBL A1.json" + }, + { + "name": "Generic EVA @BBL X1C", + "sub_path": "filament/Generic EVA @BBL X1C.json" + }, + { + "name": "Generic EVA @BBL A1", + "sub_path": "filament/Generic EVA @BBL A1.json" + }, + { + "name": "Generic EVA @BBL A1M", + "sub_path": "filament/Generic EVA @BBL A1M.json" + }, + { + "name": "Generic PHA @BBL X1C", + "sub_path": "filament/Generic PHA @BBL X1C.json" + }, + { + "name": "Generic PHA @BBL A1M", + "sub_path": "filament/Generic PHA @BBL A1M.json" + }, + { + "name": "Generic PHA @BBL A1", + "sub_path": "filament/Generic PHA @BBL A1.json" + }, + { + "name": "Generic BVOH @BBL X1C", + "sub_path": "filament/Generic BVOH @BBL X1C.json" + }, + { + "name": "Generic BVOH @BBL A1M", + "sub_path": "filament/Generic BVOH @BBL A1M.json" + }, + { + "name": "Generic BVOH @BBL A1", + "sub_path": "filament/Generic BVOH @BBL A1.json" + }, { "name": "PolyTerra PLA @BBL X1C 0.2 nozzle", "sub_path": "filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json" diff --git a/resources/profiles/BBL/cli_config.json b/resources/profiles/BBL/cli_config.json index 8fd179ecc1..2bd68647c9 100644 --- a/resources/profiles/BBL/cli_config.json +++ b/resources/profiles/BBL/cli_config.json @@ -1,21 +1,156 @@ { "printer": { "Bambu Lab A1": { - "cli_safe_acceleration_e": "0,0", - "cli_safe_acceleration_extruding": "0,0", - "cli_safe_acceleration_retracting": "0,0", - "cli_safe_acceleration_travel":"6000,6000", - "cli_safe_acceleration_x": "6000,6000", - "cli_safe_acceleration_y": "6000,6000", - "cli_safe_acceleration_z": "0,0", - "cli_safe_jerk_e": "0,0", - "cli_safe_jerk_x": "0,0", - "cli_safe_jerk_y": "0,0", - "cli_safe_jerk_z": "0,0", - "cli_safe_speed_e": "0,0", - "cli_safe_speed_x": "0,0", - "cli_safe_speed_y": "0,0", - "cli_safe_speed_z": "0,0" + "machine_limits": { + "cli_safe_acceleration_e": "0,0", + "cli_safe_acceleration_extruding": "0,0", + "cli_safe_acceleration_retracting": "0,0", + "cli_safe_acceleration_travel": "6000,6000", + "cli_safe_acceleration_x": "6000,6000", + "cli_safe_acceleration_y": "6000,6000", + "cli_safe_acceleration_z": "0,0", + "cli_safe_jerk_e": "0,0", + "cli_safe_jerk_x": "0,0", + "cli_safe_jerk_y": "0,0", + "cli_safe_jerk_z": "0,0", + "cli_safe_speed_e": "0,0", + "cli_safe_speed_x": "0,0", + "cli_safe_speed_y": "0,0", + "cli_safe_speed_z": "0,0" + }, + "downward_check": { + "Bambu Lab A1 0.2 nozzle": [ + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab A1 mini 0.2 nozzle" + ], + "Bambu Lab A1 0.4 nozzle": [ + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab A1 mini 0.4 nozzle" + ], + "Bambu Lab A1 0.6 nozzle": [ + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab A1 mini 0.6 nozzle" + ], + "Bambu Lab A1 0.8 nozzle": [ + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] + } + }, + "Bambu Lab A1 mini": { + "machine_limits": { + "cli_safe_acceleration_e": "0,0", + "cli_safe_acceleration_extruding": "0,0", + "cli_safe_acceleration_retracting": "0,0", + "cli_safe_acceleration_travel": "6000,6000", + "cli_safe_acceleration_x": "6000,6000", + "cli_safe_acceleration_y": "6000,6000", + "cli_safe_acceleration_z": "0,0", + "cli_safe_jerk_e": "0,0", + "cli_safe_jerk_x": "0,0", + "cli_safe_jerk_y": "0,0", + "cli_safe_jerk_z": "0,0", + "cli_safe_speed_e": "0,0", + "cli_safe_speed_x": "0,0", + "cli_safe_speed_y": "0,0", + "cli_safe_speed_z": "0,0" + } + }, + "Bambu Lab X1": { + "downward_check": { + "Bambu Lab X1 0.2 nozzle": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "Bambu Lab X1 0.4 nozzle": [ + "Bambu Lab A1 mini 0.4 nozzle" + ], + "Bambu Lab X1 0.6 nozzle": [ + "Bambu Lab A1 mini 0.6 nozzle" + ], + "Bambu Lab X1 0.8 nozzle": [ + "Bambu Lab A1 mini 0.8 nozzle" + ] + } + }, + "Bambu Lab X1 Carbon": { + "downward_check": { + "Bambu Lab X1 Carbon 0.2 nozzle": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "Bambu Lab X1 Carbon 0.4 nozzle": [ + "Bambu Lab A1 mini 0.4 nozzle" + ], + "Bambu Lab X1 Carbon 0.6 nozzle": [ + "Bambu Lab A1 mini 0.6 nozzle" + ], + "Bambu Lab X1 Carbon 0.8 nozzle": [ + "Bambu Lab A1 mini 0.8 nozzle" + ] + } + }, + "Bambu Lab X1E": { + "downward_check": { + "Bambu Lab X1E 0.2 nozzle": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "Bambu Lab X1E 0.4 nozzle": [ + "Bambu Lab A1 mini 0.4 nozzle" + ], + "Bambu Lab X1E 0.6 nozzle": [ + "Bambu Lab A1 mini 0.6 nozzle" + ], + "Bambu Lab X1E 0.8 nozzle": [ + "Bambu Lab A1 mini 0.8 nozzle" + ] + } + }, + "Bambu Lab P1P": { + "downward_check": { + "Bambu Lab P1P 0.2 nozzle": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "Bambu Lab P1P 0.4 nozzle": [ + "Bambu Lab A1 mini 0.4 nozzle" + ], + "Bambu Lab P1P 0.6 nozzle": [ + "Bambu Lab A1 mini 0.6 nozzle" + ], + "Bambu Lab P1P 0.8 nozzle": [ + "Bambu Lab A1 mini 0.8 nozzle" + ] + } + }, + "Bambu Lab P1S": { + "downward_check": { + "Bambu Lab P1S 0.2 nozzle": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "Bambu Lab P1S 0.4 nozzle": [ + "Bambu Lab A1 mini 0.4 nozzle" + ], + "Bambu Lab P1S 0.6 nozzle": [ + "Bambu Lab A1 mini 0.6 nozzle" + ], + "Bambu Lab P1S 0.8 nozzle": [ + "Bambu Lab A1 mini 0.8 nozzle" + ] + } } } -} +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ABS @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu ABS @BBL A1 0.2 nozzle.json index 352292b1ea..413d8ce795 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu ABS @BBL A1 0.2 nozzle.json @@ -20,6 +20,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/Bambu ABS @BBL A1.json b/resources/profiles/BBL/filament/Bambu ABS @BBL A1.json index 3358a7fc74..f85009c07b 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @BBL A1.json +++ b/resources/profiles/BBL/filament/Bambu ABS @BBL A1.json @@ -20,6 +20,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.2 nozzle.json index 3949e18511..f21efe7f80 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.2 nozzle.json @@ -5,9 +5,15 @@ "from": "system", "setting_id": "GFSB00_00", "instantiation": "true", + "fan_max_speed": [ + "60" + ], "filament_max_volumetric_speed": [ "2" ], + "slow_down_layer_time": [ + "12" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab X1 0.2 nozzle", diff --git a/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.8 nozzle.json index 10bfd2565a..6145a910b6 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu ABS @BBL X1C 0.8 nozzle.json @@ -5,12 +5,18 @@ "from": "system", "setting_id": "GFSB00_01", "instantiation": "true", + "fan_max_speed": [ + "60" + ], "filament_max_volumetric_speed": [ "18" ], "nozzle_temperature": [ "260" ], + "slow_down_layer_time": [ + "12" + ], "slow_down_min_speed": [ "10" ], diff --git a/resources/profiles/BBL/filament/Bambu ABS @BBL X1C.json b/resources/profiles/BBL/filament/Bambu ABS @BBL X1C.json index 80f4f7c920..88ad1a408f 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu ABS @BBL X1C.json @@ -5,9 +5,15 @@ "from": "system", "setting_id": "GFSB00", "instantiation": "true", + "fan_max_speed": [ + "60" + ], "filament_max_volumetric_speed": [ "16" ], + "slow_down_layer_time": [ + "12" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/Bambu ABS-GF @BBL A1.json b/resources/profiles/BBL/filament/Bambu ABS-GF @BBL A1.json new file mode 100644 index 0000000000..ff5f41cae7 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ABS-GF @BBL A1.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Bambu ABS-GF @BBL A1", + "inherits": "Bambu ABS-GF @base", + "from": "system", + "setting_id": "GFSB50_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ABS-GF @BBL P1P.json b/resources/profiles/BBL/filament/Bambu ABS-GF @BBL P1P.json new file mode 100644 index 0000000000..37acd12522 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ABS-GF @BBL P1P.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Bambu ABS-GF @BBL P1P", + "inherits": "Bambu ABS-GF @base", + "from": "system", + "setting_id": "GFSB50_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ABS-GF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu ABS-GF @BBL X1C.json new file mode 100644 index 0000000000..89916b17b3 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ABS-GF @BBL X1C.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Bambu ABS-GF @BBL X1C", + "inherits": "Bambu ABS-GF @base", + "from": "system", + "setting_id": "GFSB50_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ABS-GF @base.json b/resources/profiles/BBL/filament/Bambu ABS-GF @base.json new file mode 100644 index 0000000000..777cf85080 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ABS-GF @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Bambu ABS-GF @base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "GFB50", + "instantiation": "false", + "fan_cooling_layer_time": [ + "12" + ], + "fan_max_speed": [ + "30" + ], + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.08" + ], + "filament_type": [ + "ABS-GF" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "4" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ASA @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/filament/Bambu ASA @BBL A1 0.6 nozzle.json index a934418ec1..916abbfbe3 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu ASA @BBL A1 0.6 nozzle.json @@ -5,9 +5,6 @@ "from": "system", "setting_id": "GFSB01_08", "instantiation": "true", - "fan_max_speed": [ - "90" - ], "fan_min_speed": [ "25" ], diff --git a/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.2 nozzle.json index abaa62c35e..90b80ac8dc 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.2 nozzle.json @@ -5,9 +5,6 @@ "from": "system", "setting_id": "GFSB01_03", "instantiation": "true", - "fan_max_speed": [ - "80" - ], "filament_max_volumetric_speed": [ "2" ], diff --git a/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.6 nozzle.json b/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.6 nozzle.json index e98e02789d..5e6a6788c3 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.6 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu ASA @BBL X1 0.6 nozzle.json @@ -5,9 +5,6 @@ "from": "system", "setting_id": "GFSB01_04", "instantiation": "true", - "fan_max_speed": [ - "90" - ], "fan_min_speed": [ "25" ], diff --git a/resources/profiles/BBL/filament/Bambu ASA @BBL X1C.json b/resources/profiles/BBL/filament/Bambu ASA @BBL X1C.json index 5693a2c1d0..4c9c47f1a3 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu ASA @BBL X1C.json @@ -8,9 +8,6 @@ "fan_min_speed": [ "25" ], - "fan_max_speed": [ - "90" - ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", "Bambu Lab X1 Carbon 0.8 nozzle", diff --git a/resources/profiles/BBL/filament/Bambu ASA @base.json b/resources/profiles/BBL/filament/Bambu ASA @base.json index 4eb57181d1..7ae30500d9 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA @base.json @@ -5,28 +5,31 @@ "from": "system", "filament_id": "GFB01", "instantiation": "false", - "filament_density": [ - "1.05" + "fan_max_speed": [ + "35" ], "filament_cost": [ "31.99" ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "270" + "filament_density": [ + "1.05" ], "filament_flow_ratio": [ "0.95" ], - "fan_max_speed": [ - "50" - ], "filament_max_volumetric_speed": [ "18" ], "filament_vendor": [ "Bambu Lab" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "slow_down_layer_time": [ + "12" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL A1.json b/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL A1.json new file mode 100644 index 0000000000..ceca584ce1 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL A1.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Bambu ASA-Aero @BBL A1", + "inherits": "Bambu ASA-Aero @base", + "from": "system", + "setting_id": "GFSB02_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL P1P.json b/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL P1P.json new file mode 100644 index 0000000000..03be549c97 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL P1P.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Bambu ASA-Aero @BBL P1P", + "inherits": "Bambu ASA-Aero @base", + "from": "system", + "setting_id": "GFSB02_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL X1C.json b/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL X1C.json new file mode 100644 index 0000000000..2a0eaaa792 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ASA-Aero @BBL X1C.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Bambu ASA-Aero @BBL X1C", + "inherits": "Bambu ASA-Aero @base", + "from": "system", + "setting_id": "GFSB02_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json b/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json new file mode 100644 index 0000000000..f469aeebc6 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json @@ -0,0 +1,62 @@ +{ + "type": "filament", + "name": "Bambu ASA-Aero @base", + "inherits": "fdm_filament_asa", + "from": "system", + "filament_id": "GFB02", + "instantiation": "false", + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "49.99" + ], + "filament_density": [ + "0.99" + ], + "filament_flow_ratio": [ + "0.52" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "ASA-Aero" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_wipe_distance": [ + "5" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "overhang_fan_speed": [ + "50" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PA6-GF @BBL A1.json b/resources/profiles/BBL/filament/Bambu PA6-GF @BBL A1.json new file mode 100644 index 0000000000..76b7da4332 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PA6-GF @BBL A1.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Bambu PA6-GF @BBL A1", + "inherits": "Bambu PA6-GF @base", + "from": "system", + "setting_id": "GFSN08_02", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "10.5" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PA6-GF @BBL P1P.json b/resources/profiles/BBL/filament/Bambu PA6-GF @BBL P1P.json new file mode 100644 index 0000000000..d0ff9e318a --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PA6-GF @BBL P1P.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Bambu PA6-GF @BBL P1P", + "inherits": "Bambu PA6-GF @base", + "from": "system", + "setting_id": "GFSN08_01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "10.5" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PA6-GF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PA6-GF @BBL X1C.json new file mode 100644 index 0000000000..cf166026aa --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PA6-GF @BBL X1C.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Bambu PA6-GF @BBL X1C", + "inherits": "Bambu PA6-GF @base", + "from": "system", + "setting_id": "GFSN08_00", + "instantiation": "true", + "chamber_temperatures": [ + "60" + ], + "filament_max_volumetric_speed": [ + "10.5" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PA6-GF @base.json b/resources/profiles/BBL/filament/Bambu PA6-GF @base.json new file mode 100644 index 0000000000..24a6fa15b0 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PA6-GF @base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Bambu PA6-GF @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "GFN08", + "instantiation": "false", + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "59.99" + ], + "filament_density": [ + "1.14" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_type": [ + "PA-GF" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "full_fan_speed_layer": [ + "2" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "temperature_vitrification": [ + "180" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PC @BBL A1 0.2 nozzle.json index 3a65f1d44c..790ddb7c4a 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL A1 0.2 nozzle.json @@ -29,6 +29,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL A1.json b/resources/profiles/BBL/filament/Bambu PC @BBL A1.json index 5d291b7b7c..fa10655ee8 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL A1.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL A1.json @@ -23,6 +23,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.2 nozzle.json index 31d13f48e8..fd33b77786 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.2 nozzle.json @@ -5,12 +5,18 @@ "from": "system", "setting_id": "GFSC00_02", "instantiation": "true", + "fan_max_speed": [ + "40" + ], "filament_max_volumetric_speed": [ "1" ], "nozzle_temperature": [ "260" ], + "slow_down_layer_time": [ + "12" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab X1 0.2 nozzle" diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.6 nozzle.json index 3b5399efa2..ec8d95d22f 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.6 nozzle.json @@ -5,9 +5,15 @@ "from": "system", "setting_id": "GFSC00_01", "instantiation": "true", + "fan_max_speed": [ + "40" + ], "nozzle_temperature": [ "260" ], + "slow_down_layer_time": [ + "12" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", "Bambu Lab X1 0.6 nozzle" diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json index b1cc742c2c..6cd58cc061 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL X1C 0.8 nozzle.json @@ -5,9 +5,15 @@ "from": "system", "setting_id": "GFSC00_00", "instantiation": "true", + "fan_max_speed": [ + "40" + ], "nozzle_temperature": [ "260" ], + "slow_down_layer_time": [ + "12" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", "Bambu Lab X1 0.8 nozzle" diff --git a/resources/profiles/BBL/filament/Bambu PC @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PC @BBL X1C.json index 7ee2131465..cccf6aad59 100644 --- a/resources/profiles/BBL/filament/Bambu PC @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PC @BBL X1C.json @@ -5,6 +5,12 @@ "from": "system", "setting_id": "GFSC00", "instantiation": "true", + "fan_max_speed": [ + "40" + ], + "slow_down_layer_time": [ + "12" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle" diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json index c7dd9923cd..24857fa2e0 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json @@ -8,6 +8,12 @@ "filament_max_volumetric_speed": [ "1" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab X1 0.2 nozzle", diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json index 0a24cb5a1a..73d7aab022 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json @@ -11,6 +11,12 @@ "fan_min_speed": [ "20" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "filament_max_volumetric_speed": [ "16" ], diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json index d68745bb17..18b87c5879 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json @@ -8,6 +8,12 @@ "filament_max_volumetric_speed": [ "13" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/Bambu PLA Aero @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Aero @BBL X1C.json index f3160585a6..fd83a7dfdf 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Aero @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Aero @BBL X1C.json @@ -21,5 +21,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1.json b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1.json index 3a70c808a4..6f016020a4 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1.json @@ -8,6 +8,12 @@ "filament_max_volumetric_speed": [ "21" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "slow_down_layer_time": [ "8" ], diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.2 nozzle.json index ddaeb7a616..0ef0264d43 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.2 nozzle.json @@ -5,6 +5,12 @@ "from": "system", "setting_id": "GFSA00_00", "instantiation": "true", + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "filament_max_volumetric_speed": [ "2" ], @@ -13,5 +19,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.8 nozzle.json index d8d8307fc0..671e010328 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C 0.8 nozzle.json @@ -8,9 +8,18 @@ "filament_max_volumetric_speed": [ "21" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", "Bambu Lab P1S 0.8 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C.json index 2cb005d6f5..8619d452d7 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @BBL X1C.json @@ -8,6 +8,12 @@ "filament_max_volumetric_speed": [ "21" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 Carbon 0.6 nozzle", @@ -15,5 +21,8 @@ "Bambu Lab P1S 0.6 nozzle", "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.2 nozzle.json index 68496df697..fb09d370f5 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.2 nozzle.json @@ -19,5 +19,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.8 nozzle.json index 3a18c1f6f0..029cc864be 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C 0.8 nozzle.json @@ -19,5 +19,8 @@ "Bambu Lab P1S 0.8 nozzle", "Bambu Lab X1E 0.8 nozzle", "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C.json index 608465d6d6..ff52a275ee 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Dynamic @BBL X1C.json @@ -23,5 +23,8 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.2 nozzle.json index 9251208bdf..7bb8e8f94b 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.2 nozzle.json @@ -13,5 +13,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.8 nozzle.json index b3e250b6eb..43457c192d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C 0.8 nozzle.json @@ -10,5 +10,8 @@ "Bambu Lab P1S 0.8 nozzle", "Bambu Lab X1E 0.8 nozzle", "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C.json index cf3e399b37..d95ffa6a6d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Galaxy @BBL X1C.json @@ -14,5 +14,8 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1C.json index 115adb144a..5d0c2705a7 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1C.json @@ -12,5 +12,8 @@ "Bambu Lab P1S 0.8 nozzle", "Bambu Lab P1S 0.6 nozzle", "Bambu Lab P1S 0.4 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1E.json b/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1E.json index 51137bdeec..30c339132c 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1E.json +++ b/resources/profiles/BBL/filament/Bambu PLA Glow @BBL X1E.json @@ -9,5 +9,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Impact @base.json b/resources/profiles/BBL/filament/Bambu PLA Impact @base.json index 7cdc6f3e42..029a5f66a3 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Impact @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Impact @base.json @@ -5,13 +5,16 @@ "from": "system", "filament_id": "GFA03", "instantiation": "false", - "filament_vendor": [ - "Bambu Lab" - ], "filament_cost": [ "25.4" ], "filament_flow_ratio": [ "0.95" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Marble @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Marble @BBL X1C.json index 4199fd943d..29592f9b4f 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Marble @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Marble @BBL X1C.json @@ -15,5 +15,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1.json b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1.json index 7721eacbc8..c0b3df5555 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1.json @@ -15,5 +15,8 @@ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.6 nozzle", "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.2 nozzle.json index 824e96a5e3..04b51f8104 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.2 nozzle.json @@ -13,5 +13,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.8 nozzle.json index 7e2d1f4fc9..fc0962cd0e 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C 0.8 nozzle.json @@ -12,5 +12,8 @@ "Bambu Lab X1 Carbon 0.8 nozzle", "Bambu Lab P1S 0.8 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C.json index a7e1e76634..0987393ec6 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @BBL X1C.json @@ -15,5 +15,8 @@ "Bambu Lab P1S 0.6 nozzle", "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json index 7ed6ab8f3e..8a1934d52a 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C 0.2 nozzle.json @@ -13,5 +13,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json index 91995ef069..81e5b51d60 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @BBL X1C.json @@ -18,5 +18,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json index 85c560fcdb..31478a9988 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json @@ -13,5 +13,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json index 5d75934310..33d9312ab2 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json @@ -15,5 +15,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Sparkle @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Sparkle @BBL X1C.json index fdc02d06c5..40ef931764 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Sparkle @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Sparkle @BBL X1C.json @@ -15,5 +15,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C 0.2 nozzle.json index eb6f63a2f3..ea19cfcc5e 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C 0.2 nozzle.json @@ -13,5 +13,8 @@ "Bambu Lab X1 0.2 nozzle", "Bambu Lab P1S 0.2 nozzle", "Bambu Lab X1E 0.2 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C.json index 418cc8f9ca..d2b9a46030 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA Tough @BBL X1C.json @@ -18,5 +18,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json index 3b5c25a41f..204237570b 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json @@ -23,5 +23,8 @@ "Bambu Lab P1S 0.8 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json index c917e0745a..2e4aa2e93c 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json @@ -19,5 +19,8 @@ "Bambu Lab X1 0.4 nozzle", "Bambu Lab P1S 0.4 nozzle", "Bambu Lab X1E 0.4 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\nM142 P1 R35 S40\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..52f12d83ed --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL A1 0.2 nozzle", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_07", + "instantiation": "true", + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "filament_max_volumetric_speed": [ + "0.5" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1.json new file mode 100644 index 0000000000..cc081f215f --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL A1", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_06", + "instantiation": "true", + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..e896919e4e --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1M 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL A1M 0.2 nozzle", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_05", + "instantiation": "true", + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "filament_max_volumetric_speed": [ + "0.5" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1M.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1M.json new file mode 100644 index 0000000000..ad2bc888ac --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL A1M.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL A1M", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_04", + "instantiation": "true", + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..0352dc891a --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL P1P 0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL P1P 0.2 nozzle", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_03", + "instantiation": "true", + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "filament_max_volumetric_speed": [ + "0.5" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL P1P.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL P1P.json new file mode 100644 index 0000000000..1f47df1ec9 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL P1P", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_02", + "instantiation": "true", + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..fa58a048a7 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL X1C 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL X1C 0.2 nozzle", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_01", + "instantiation": "true", + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_max_volumetric_speed": [ + "0.5" + ], + "compatible_printers": [ + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL X1C.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL X1C.json new file mode 100644 index 0000000000..8672833ea7 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @BBL X1C.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @BBL X1C", + "inherits": "Bambu Support For PLA/PETG @base", + "from": "system", + "setting_id": "GFSS05_00", + "instantiation": "true", + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "compatible_printers": [ + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json new file mode 100644 index 0000000000..4e62835862 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Bambu Support For PLA/PETG @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFS05", + "instantiation": "false", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "69.98" + ], + "filament_density": [ + "1.19" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic BVOH @BBL A1.json b/resources/profiles/BBL/filament/Generic BVOH @BBL A1.json new file mode 100644 index 0000000000..c719bc4f8d --- /dev/null +++ b/resources/profiles/BBL/filament/Generic BVOH @BBL A1.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic BVOH @BBL A1", + "inherits": "Generic BVOH @base", + "from": "system", + "setting_id": "GFSS97_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic BVOH @BBL A1M.json b/resources/profiles/BBL/filament/Generic BVOH @BBL A1M.json new file mode 100644 index 0000000000..c7c2bb1fbc --- /dev/null +++ b/resources/profiles/BBL/filament/Generic BVOH @BBL A1M.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic BVOH @BBL A1M", + "inherits": "Generic BVOH @base", + "from": "system", + "setting_id": "GFSS97_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic BVOH @BBL X1C.json b/resources/profiles/BBL/filament/Generic BVOH @BBL X1C.json new file mode 100644 index 0000000000..12205f9c9a --- /dev/null +++ b/resources/profiles/BBL/filament/Generic BVOH @BBL X1C.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic BVOH @BBL X1C", + "inherits": "Generic BVOH @base", + "from": "system", + "setting_id": "GFSS97_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic BVOH @base.json b/resources/profiles/BBL/filament/Generic BVOH @base.json new file mode 100644 index 0000000000..34b3d72d1a --- /dev/null +++ b/resources/profiles/BBL/filament/Generic BVOH @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic BVOH @base", + "inherits": "fdm_filament_bvoh", + "from": "system", + "filament_id": "GFS97", + "instantiation": "false" +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic EVA @BBL A1.json b/resources/profiles/BBL/filament/Generic EVA @BBL A1.json new file mode 100644 index 0000000000..1090e57594 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic EVA @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic EVA @BBL A1", + "inherits": "Generic EVA @base", + "from": "system", + "setting_id": "GFSR99_01", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic EVA @BBL A1M.json b/resources/profiles/BBL/filament/Generic EVA @BBL A1M.json new file mode 100644 index 0000000000..9d903da18d --- /dev/null +++ b/resources/profiles/BBL/filament/Generic EVA @BBL A1M.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic EVA @BBL A1M", + "inherits": "Generic EVA @base", + "from": "system", + "setting_id": "GFSR99_02", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.8 nozzle", + "Bambu Lab A1 mini 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic EVA @BBL X1C.json b/resources/profiles/BBL/filament/Generic EVA @BBL X1C.json new file mode 100644 index 0000000000..c10fe78b5e --- /dev/null +++ b/resources/profiles/BBL/filament/Generic EVA @BBL X1C.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic EVA @BBL X1C", + "inherits": "Generic EVA @base", + "from": "system", + "setting_id": "GFSR99_00", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic EVA @base.json b/resources/profiles/BBL/filament/Generic EVA @base.json new file mode 100644 index 0000000000..6a24cfdba5 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic EVA @base.json @@ -0,0 +1,86 @@ +{ + "type": "filament", + "name": "Generic EVA @base", + "inherits": "fdm_filament_eva", + "from": "system", + "filament_id": "GFR99", + "instantiation": "false", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "21.99" + ], + "filament_density": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "EVA" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PCTG @BBL A1.json b/resources/profiles/BBL/filament/Generic PCTG @BBL A1.json new file mode 100644 index 0000000000..0d7ddda1cb --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PCTG @BBL A1.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic PCTG @BBL A1", + "inherits": "Generic PCTG @base", + "from": "system", + "setting_id": "GFSG97_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PCTG @BBL A1M.json b/resources/profiles/BBL/filament/Generic PCTG @BBL A1M.json new file mode 100644 index 0000000000..3f02a3a3e8 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PCTG @BBL A1M.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic PCTG @BBL A1M", + "inherits": "Generic PCTG @base", + "from": "system", + "setting_id": "GFSG97_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PCTG @BBL X1C.json b/resources/profiles/BBL/filament/Generic PCTG @BBL X1C.json new file mode 100644 index 0000000000..e7802ed3d7 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PCTG @BBL X1C.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PCTG @BBL X1C", + "inherits": "Generic PCTG @base", + "from": "system", + "setting_id": "GFSG97_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PCTG @base.json b/resources/profiles/BBL/filament/Generic PCTG @base.json new file mode 100644 index 0000000000..397fcf1691 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PCTG @base.json @@ -0,0 +1,74 @@ +{ + "type": "filament", + "name": "Generic PCTG @base", + "inherits": "fdm_filament_pctg", + "from": "system", + "filament_id": "GFG97", + "instantiation": "false", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "28.99" + ], + "filament_density": [ + "1.29" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE @BBL A1.json b/resources/profiles/BBL/filament/Generic PE @BBL A1.json new file mode 100644 index 0000000000..39e2445109 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PE @BBL A1", + "inherits": "Generic PE @base", + "from": "system", + "setting_id": "GFSP99_01", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE @BBL A1M.json b/resources/profiles/BBL/filament/Generic PE @BBL A1M.json new file mode 100644 index 0000000000..c1127d4123 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE @BBL A1M.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PE @BBL A1M", + "inherits": "Generic PE @base", + "from": "system", + "setting_id": "GFSP99_02", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE @BBL X1C.json b/resources/profiles/BBL/filament/Generic PE @BBL X1C.json new file mode 100644 index 0000000000..da34e44a63 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE @BBL X1C.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic PE @BBL X1C", + "inherits": "Generic PE @base", + "from": "system", + "setting_id": "GFSP99_00", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE @base.json b/resources/profiles/BBL/filament/Generic PE @base.json new file mode 100644 index 0000000000..c93659062f --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic PE @base", + "inherits": "fdm_filament_pe", + "from": "system", + "filament_id": "GFP99", + "instantiation": "false", + "filament_cost": [ + "40.99" + ], + "filament_density": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE-CF @BBL A1.json b/resources/profiles/BBL/filament/Generic PE-CF @BBL A1.json new file mode 100644 index 0000000000..50584fff90 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE-CF @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PE-CF @BBL A1", + "inherits": "Generic PE-CF @base", + "from": "system", + "setting_id": "GFSP98_01", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE-CF @BBL A1M.json b/resources/profiles/BBL/filament/Generic PE-CF @BBL A1M.json new file mode 100644 index 0000000000..2e3b4b4bf4 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE-CF @BBL A1M.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PE-CF @BBL A1M", + "inherits": "Generic PE-CF @base", + "from": "system", + "setting_id": "GFSP98_02", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE-CF @BBL X1C.json b/resources/profiles/BBL/filament/Generic PE-CF @BBL X1C.json new file mode 100644 index 0000000000..bf95029646 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE-CF @BBL X1C.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PE-CF @BBL X1C", + "inherits": "Generic PE-CF @base", + "from": "system", + "setting_id": "GFSP98_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PE-CF @base.json b/resources/profiles/BBL/filament/Generic PE-CF @base.json new file mode 100644 index 0000000000..929d738ffc --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PE-CF @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Generic PE-CF @base", + "inherits": "fdm_filament_pe", + "from": "system", + "filament_id": "GFP98", + "instantiation": "false", + "filament_cost": [ + "65.99" + ], + "filament_density": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PE-CF" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PHA @BBL A1.json b/resources/profiles/BBL/filament/Generic PHA @BBL A1.json new file mode 100644 index 0000000000..32f3fd84a9 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PHA @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PHA @BBL A1", + "inherits": "Generic PHA @base", + "from": "system", + "setting_id": "GFSR98_02", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle", + "Bambu Lab A1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PHA @BBL A1M.json b/resources/profiles/BBL/filament/Generic PHA @BBL A1M.json new file mode 100644 index 0000000000..a3c6158000 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PHA @BBL A1M.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PHA @BBL A1M", + "inherits": "Generic PHA @base", + "from": "system", + "setting_id": "GFSR98_01", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PHA @BBL X1C.json b/resources/profiles/BBL/filament/Generic PHA @BBL X1C.json new file mode 100644 index 0000000000..0305af0ee6 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PHA @BBL X1C.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic PHA @BBL X1C", + "inherits": "Generic PHA @base", + "from": "system", + "setting_id": "GFSR98_00", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1P 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PHA @base.json b/resources/profiles/BBL/filament/Generic PHA @base.json new file mode 100644 index 0000000000..f91285ad49 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PHA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PHA @base", + "inherits": "fdm_filament_pha", + "from": "system", + "filament_id": "GFR98", + "instantiation": "false" +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PLA High Speed @BBL X1C.json b/resources/profiles/BBL/filament/Generic PLA High Speed @BBL X1C.json index f2e682804f..7263d42f85 100644 --- a/resources/profiles/BBL/filament/Generic PLA High Speed @BBL X1C.json +++ b/resources/profiles/BBL/filament/Generic PLA High Speed @BBL X1C.json @@ -21,5 +21,8 @@ "Bambu Lab P1S 0.8 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PLA Silk.json b/resources/profiles/BBL/filament/Generic PLA Silk.json index c1011d708b..40fa7b252c 100644 --- a/resources/profiles/BBL/filament/Generic PLA Silk.json +++ b/resources/profiles/BBL/filament/Generic PLA Silk.json @@ -24,5 +24,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP @BBL A1.json b/resources/profiles/BBL/filament/Generic PP @BBL A1.json new file mode 100644 index 0000000000..4c4b6c1710 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PP @BBL A1", + "inherits": "Generic PP @base", + "from": "system", + "setting_id": "GFSP97_01", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP @BBL A1M.json b/resources/profiles/BBL/filament/Generic PP @BBL A1M.json new file mode 100644 index 0000000000..3c4907f8c9 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP @BBL A1M.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PP @BBL A1M", + "inherits": "Generic PP @base", + "from": "system", + "setting_id": "GFSP97_02", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP @BBL X1C.json b/resources/profiles/BBL/filament/Generic PP @BBL X1C.json new file mode 100644 index 0000000000..664b7be27f --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP @BBL X1C.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic PP @BBL X1C", + "inherits": "Generic PP @base", + "from": "system", + "setting_id": "GFSP97_00", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP @base.json b/resources/profiles/BBL/filament/Generic PP @base.json new file mode 100644 index 0000000000..faf0a211fa --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PP @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "GFP97", + "instantiation": "false" +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP-CF @BBL A1.json b/resources/profiles/BBL/filament/Generic PP-CF @BBL A1.json new file mode 100644 index 0000000000..3c3ad6cfd1 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP-CF @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PP-CF @BBL A1", + "inherits": "Generic PP-CF @base", + "from": "system", + "setting_id": "GFSP96_01", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP-CF @BBL X1C.json b/resources/profiles/BBL/filament/Generic PP-CF @BBL X1C.json new file mode 100644 index 0000000000..2653f7acc8 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP-CF @BBL X1C.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic PP-CF @BBL X1C", + "inherits": "Generic PP-CF @base", + "from": "system", + "setting_id": "GFSP96_00", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP-CF @base.json b/resources/profiles/BBL/filament/Generic PP-CF @base.json new file mode 100644 index 0000000000..c131f95878 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP-CF @base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PP-CF @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "GFP96", + "instantiation": "false", + "filament_cost": [ + "77.99" + ], + "filament_density": [ + "1.01" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PP-CF" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP-GF @BBL A1.json b/resources/profiles/BBL/filament/Generic PP-GF @BBL A1.json new file mode 100644 index 0000000000..b8d3231f45 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP-GF @BBL A1.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PP-GF @BBL A1", + "inherits": "Generic PP-GF @base", + "from": "system", + "setting_id": "GFSP95_00", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP-GF @BBL X1C.json b/resources/profiles/BBL/filament/Generic PP-GF @BBL X1C.json new file mode 100644 index 0000000000..7a94c1ad98 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP-GF @BBL X1C.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic PP-GF @BBL X1C", + "inherits": "Generic PP-GF @base", + "from": "system", + "setting_id": "GFSP97_03", + "instantiation": "true", + "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PP-GF @base.json b/resources/profiles/BBL/filament/Generic PP-GF @base.json new file mode 100644 index 0000000000..b58eace53c --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PP-GF @base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PP-GF @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "GFP95", + "instantiation": "false", + "filament_cost": [ + "59.99" + ], + "filament_density": [ + "1.05" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PP-GF" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1.json b/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1.json index cedb6ba843..ba16728a53 100644 --- a/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1.json +++ b/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1.json @@ -12,5 +12,8 @@ "Bambu Lab X1 0.6 nozzle", "Bambu Lab X1 0.8 nozzle", "Bambu Lab X1 0.4 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C.json b/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C.json index 7d5a7ecd57..bdfcdeef90 100644 --- a/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C.json +++ b/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C.json @@ -15,5 +15,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Overture PLA @BBL X1.json b/resources/profiles/BBL/filament/Overture PLA @BBL X1.json index c36384a9e7..28b917ca5f 100644 --- a/resources/profiles/BBL/filament/Overture PLA @BBL X1.json +++ b/resources/profiles/BBL/filament/Overture PLA @BBL X1.json @@ -12,5 +12,8 @@ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.8 nozzle", "Bambu Lab X1 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Overture PLA @BBL X1C.json b/resources/profiles/BBL/filament/Overture PLA @BBL X1C.json index 15c06a2ca6..62a0d4d9e8 100644 --- a/resources/profiles/BBL/filament/Overture PLA @BBL X1C.json +++ b/resources/profiles/BBL/filament/Overture PLA @BBL X1C.json @@ -15,5 +15,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P 0.2 nozzle.json index e703e3d6a6..f99a91cfb0 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P 0.2 nozzle.json @@ -20,6 +20,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P.json index b1206b169d..63d6bb3f21 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu ABS @BBL P1P.json @@ -20,6 +20,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P 0.2 nozzle.json index b4bcf75507..bbf4b7ee51 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P 0.2 nozzle.json @@ -29,6 +29,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P.json index a34eef36af..2a5769421e 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PC @BBL P1P.json @@ -23,6 +23,9 @@ "reduce_fan_stop_start_freq": [ "0" ], + "slow_down_layer_time": [ + "12" + ], "textured_plate_temp": [ "100" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json index 815cca5839..bca893a5dc 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json @@ -11,6 +11,12 @@ "fan_min_speed": [ "50" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "filament_max_volumetric_speed": [ "2" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json index d64ab7e7d1..a54e7bea5d 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json @@ -8,6 +8,12 @@ "fan_cooling_layer_time": [ "80" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "fan_min_speed": [ "50" ], diff --git a/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P.json b/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P.json index 7504020d8f..5728ac0c5a 100644 --- a/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P.json @@ -33,5 +33,8 @@ "Bambu Lab P1P 0.4 nozzle", "Bambu Lab P1P 0.6 nozzle", "Bambu Lab P1P 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1.json b/resources/profiles/BBL/filament/PolyLite PLA @BBL X1.json index 4ed5821921..77a037efd8 100644 --- a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1.json +++ b/resources/profiles/BBL/filament/PolyLite PLA @BBL X1.json @@ -15,5 +15,8 @@ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.6 nozzle", "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C.json b/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C.json index c9c27d9143..a24021705e 100644 --- a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C.json +++ b/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C.json @@ -18,5 +18,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1.json b/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1.json index d3fd2251c3..46e2144b4e 100644 --- a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1.json +++ b/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1.json @@ -15,5 +15,8 @@ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.6 nozzle", "Bambu Lab X1 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C.json b/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C.json index c3444436a2..72378493df 100644 --- a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C.json +++ b/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C.json @@ -18,5 +18,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab X1E 0.6 nozzle", "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_abs.json b/resources/profiles/BBL/filament/fdm_filament_abs.json index 461dd5e610..74eb871518 100644 --- a/resources/profiles/BBL/filament/fdm_filament_abs.json +++ b/resources/profiles/BBL/filament/fdm_filament_abs.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "activate_air_filtration": [ - "1" + "0" ], "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/fdm_filament_asa.json b/resources/profiles/BBL/filament/fdm_filament_asa.json index ac7a9294c1..a0da767a75 100644 --- a/resources/profiles/BBL/filament/fdm_filament_asa.json +++ b/resources/profiles/BBL/filament/fdm_filament_asa.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "activate_air_filtration": [ - "1" + "0" ], "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/fdm_filament_bvoh.json b/resources/profiles/BBL/filament/fdm_filament_bvoh.json new file mode 100644 index 0000000000..2b481e35d8 --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_bvoh.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_bvoh", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "69.99" + ], + "filament_density": [ + "1.13" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "BVOH" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_common.json b/resources/profiles/BBL/filament/fdm_filament_common.json index 6f1291c6ec..6ec95db4a8 100644 --- a/resources/profiles/BBL/filament/fdm_filament_common.json +++ b/resources/profiles/BBL/filament/fdm_filament_common.json @@ -57,6 +57,9 @@ "filament_is_support": [ "0" ], + "filament_long_retractions_when_cut": [ + "nil" + ], "filament_max_volumetric_speed": [ "0" ], @@ -72,6 +75,9 @@ "filament_retract_when_changing_layer": [ "nil" ], + "filament_retraction_distances_when_cut": [ + "nil" + ], "filament_retraction_length": [ "nil" ], diff --git a/resources/profiles/BBL/filament/fdm_filament_eva.json b/resources/profiles/BBL/filament/fdm_filament_eva.json new file mode 100644 index 0000000000..1b2efe2999 --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_eva.json @@ -0,0 +1,10 @@ +{ + "type": "filament", + "name": "fdm_filament_eva", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "filament_type": [ + "EVA" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pc.json b/resources/profiles/BBL/filament/fdm_filament_pc.json index 5729114297..03bc9e5663 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pc.json +++ b/resources/profiles/BBL/filament/fdm_filament_pc.json @@ -7,76 +7,76 @@ "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": [ + "110" + ], "eng_plate_temp_initial_layer": [ "110" ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ], "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%" + "filament_cost": [ + "20" ], - "overhang_fan_speed": [ - "60" + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "PC" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" ], "nozzle_temperature": [ "280" ], - "temperature_vitrification": [ - "120" - ], - "nozzle_temperature_range_low": [ - "260" + "nozzle_temperature_initial_layer": [ + "270" ], "nozzle_temperature_range_high": [ "290" ], - "slow_down_min_speed": [ - "20" + "nozzle_temperature_range_low": [ + "260" + ], + "overhang_fan_speed": [ + "60" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" ], "slow_down_layer_time": [ "2" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "120" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pctg.json b/resources/profiles/BBL/filament/fdm_filament_pctg.json new file mode 100644 index 0000000000..1b38376293 --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_pctg.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "fdm_filament_pctg", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.27" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_type": [ + "PCTG" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S180\n{elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S255\n{endif};Prevent PLA from jamming\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pe.json b/resources/profiles/BBL/filament/fdm_filament_pe.json new file mode 100644 index 0000000000..8ce20df68a --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_pe.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_pe", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PE" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "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}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pha.json b/resources/profiles/BBL/filament/fdm_filament_pha.json new file mode 100644 index 0000000000..82519f1b2e --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_pha.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_pha", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "27.99" + ], + "filament_density": [ + "1.24" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PHA" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "120" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "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}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pp.json b/resources/profiles/BBL/filament/fdm_filament_pp.json new file mode 100644 index 0000000000..83a4278250 --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_pp.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_pp", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PP" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "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}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 0.2 nozzle.json index 700b24df85..3e0225bb70 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 0.2 nozzle.json @@ -13,6 +13,12 @@ "default_filament_profile": [ "Bambu PLA Basic @BBL A1 0.2 nozzle" ], + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.04" + ], "default_print_profile": "0.10mm Standard @BBL A1 0.2 nozzle", "upward_compatible_machine": [] } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json index 7feaa0a6a3..86fcc31826 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json @@ -52,17 +52,18 @@ "30" ], "machine_unload_filament_time": "29", + "nozzle_height": "4.76", "nozzle_type": "stainless_steel", - "nozzle_volume": "117", + "nozzle_volume": "92", "printable_height": "256", "printer_structure": "i3", "retract_lift_below": [ "255" ], "scan_first_layer": "0", - "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240104 =====================\nG392 S0\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18\n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S2 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S10 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y-0.5 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== noozle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n\n M900 C\n G90\n M83\n G1 X78.000 Y-0.500 F30000\n G1 Z0.300 F1200\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G1 E3 F300\n\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\n M900 R\n G90\n M83\n G1 X78.000 Y4.500 F30000\n G1 Z0.300 F1200\n G1 E0.5 F300\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n", + "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240606 =====================\nG392 S0\nM9833.2\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18 \n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S25 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nG1 X108.000 Y-0.5 F30000\nG1 Z0.300 F1200\nM400\nG2814 Z0.32\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y1.0 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== nozzle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n M900 C\n G90\n M83\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G0 X128 E8 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M83\n M400\n\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M900 R\n G90\n G1 X108.000 Y1.0 F30000\n G91\n G1 Z-0.700 F1200\n G90\n M83\n G0 X128 E4 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\nM623\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n", "machine_end_gcode": ";===== date: 20231229 =====================\nG392 S0 ;turn off nozzle clog detect\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X267 F15000\nT255\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 256}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z256 F600\n G1 Z256\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-48 Y180 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A44 B20 L100 C49 D20 M80 E41 F20 N80\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N80\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n;=====printer finish sound=========\n\n;M17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM400\nM18 X Y Z\n\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", - "time_lapse_gcode": ";===================== date: 20231107 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-48.2 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\n; enable nozzle clog detect at 3rd layer\n{if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X-4.2 Y240 F20000\n M400 P200\n G39 S1\n G0 Z2 F4000\n G0 X128 Y128 F30000\n{endif}\n{endif}", - "change_filament_gcode": ";===== machine: A1 =========================\n;===== date: 20231225 =======================\nM1007 S0 ; turn off mass estimation\nG392 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X267 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y128 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E6 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\n\nM1007 S1\n" + "time_lapse_gcode": ";===================== date: 20240606 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-48.2 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_3rd_layer_detect_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X261 Y250 F20000\n M400 P200\n G39 S1\n G0 Z2 F4000\n {endif}\n\n\n M622.1 S1\n M1002 judge_flag g39_detection_flag\n M622 J1\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\n M623\nM623\n{endif}\n", + "change_filament_gcode": ";===== machine: A1 =========================\n;===== date: 20231225 =======================\nM1007 S0 ; turn off mass estimation\nG392 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X267 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y128 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E6 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\n\nM9833 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\nM1002 judge_flag filament_need_cali_flag\nM622 J1\n M106 P1 S178\n M400 S4\n G1 X-38.2 F18000\n G1 X-48.2 F3000\n G1 X-38.2 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-38.2 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0 \nM623\n\nM621 S[next_extruder]A\nG392 S0\n\nM1007 S1\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json index 5673773267..91e469d8e3 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json @@ -44,8 +44,9 @@ "30" ], "machine_unload_filament_time": "34", + "nozzle_height": "4.76", "nozzle_type": "stainless_steel", - "nozzle_volume": "32", + "nozzle_volume": "92", "printable_area": [ "0x0", "180x0", @@ -66,9 +67,9 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231226 =====================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S170\nM140 S[bed_temperature_initial_layer_single]\nG392 S0 ;turn off clog detect\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B0 L100 C37 D10 M100 E37 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E43 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C49 D10 M100 E49 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C39 D10 M100 E48 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S2 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-13.5 F3000\n M400\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n M104 S{nozzle_temperature_range_high[initial_no_support_extruder]}\n G92 E0\n G1 E50 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G392 S0 ;turn off clog detect\nM621 S[initial_no_support_extruder]A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\nM1002 gcode_claim_action : 3\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n M400\nM623\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S[bed_temperature_initial_layer_single];set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{nozzle_temperature[initial_extruder]}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n \n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.2 F18000 ;Move to start position\n M400\n G0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 Y0 Z0 F20000\n M400\n \n G1 X-13.5 Y0 Z10 F10000\n M400\n \n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-13.5 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;===== extrude cali test ===============================\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.2 F18000 ;Move to start position\nG0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n", + "machine_start_gcode": ";===== machine: A1 mini =========================\n;===== date: 20240204 =====================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S170\nM140 S[bed_temperature_initial_layer_single]\nG392 S0 ;turn off clog detect\nM9833.2\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B0 L100 C37 D10 M100 E37 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E43 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C49 D10 M100 E49 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C39 D10 M100 E48 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S3 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-13.5 F3000\n M400\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n M104 S{nozzle_temperature_range_high[initial_no_support_extruder]}\n G92 E0\n G1 E50 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G392 S0 ;turn off clog detect\nM621 S[initial_no_support_extruder]A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\nM1002 gcode_claim_action : 3\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n M400\nM623\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S[bed_temperature_initial_layer_single];set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{nozzle_temperature[initial_extruder]}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n \n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.3 F18000 ;Move to start position\n M400\n G0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 Y0 Z0 F20000\n M400\n \n G1 X-13.5 Y0 Z10 F10000\n M400\n \n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-13.5 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;===== extrude cali test ===============================\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.3 F18000 ;Move to start position\nG0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n\n\n\n", "machine_end_gcode": ";===== date: 20231229 =====================\n;turn off nozzle clog detect\nG392 S0\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X181 F12000\nT255\nG1 X0 F18000\nG1 X-13.0 F3000\nG1 X0 F18000 ; wipe\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 180}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z180 F600\n G1 Z180\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-13 Y180 F3600\n\nG91\nG1 Z-1 F600\nG90\nM83\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M100 E42 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C46 D10 M100 E46 F10 N100\nM1006 A44 B20 L100 C39 D20 M100 E48 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E48 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B20 L100 C41 D20 M100 E49 F20 N100\nM1006 A0 B20 L100 C0 D20 M100 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M100 E37 F20 N100\nM1006 W\n;=====printer finish sound=========\nM400 S1\nM18 X Y Z\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change\n", - "time_lapse_gcode": ";===================== date: 202312028 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_detection_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X-6 Y170 F20000\n G39 S1 X-6 Y170\n G0 Z2 F4000\n G0 X90 Y90 F30000\n {endif}\n\n\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\nM623\n{endif}\n", - "change_filament_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231225 =======================\nG392 S0\nM1007 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X180 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y90 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E5 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\nM1007 S1\n" + "time_lapse_gcode": ";===================== date: 20240606 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_3rd_layer_detect_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X187 Y178 F20000\n G39 S1 X187 Y178\n G0 Z2 F4000\n {endif}\n\n\n M622.1 S1\n M1002 judge_flag g39_detection_flag\n M622 J1\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\n M623\nM623\n{endif}\n\n\n", + "change_filament_gcode": ";===== machine: A1 mini =========================\n;===== date: 20240618 =======================\nG392 S0\nM1007 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X180 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y90 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E5 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n\n\nM622.1 S0\n\nM9833 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\nM1002 judge_flag filament_need_cali_flag\nM622 J1\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0 \nM623\n\nG392 S0\nM1007 S1\n\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json index 62526620ef..e13f52b66d 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json @@ -30,5 +30,5 @@ "Bambu Lab X1E 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression" + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index d7e4726a40..b947c06289 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -21,11 +21,13 @@ "Bambu PLA Basic @BBL X1" ], "default_print_profile": "0.20mm Standard @BBL P1P", + "enable_long_retraction_when_cut": "2", "extruder_offset": [ "0x2" ], "machine_load_filament_time": "29", "machine_unload_filament_time": "28", + "nozzle_height": "4.2", "nozzle_type": "stainless_steel", "scan_first_layer": "0", "upward_compatible_machine": [ @@ -35,7 +37,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_end_gcode": ";===== date: 20230428 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S220\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\n{if (flush_length_2 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_3 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_4 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json index 528dcad10f..f29aeb7434 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json @@ -34,5 +34,5 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression" + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json index 1ae5c22b3a..10bafbdfa2 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json @@ -34,5 +34,5 @@ "Bambu Lab X1E 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression" + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ; turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1S 0.2 nozzle.json index 8e021245c2..8ebf4fea73 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S 0.2 nozzle.json @@ -30,5 +30,5 @@ "Bambu Lab X1E 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json index 8da15f1add..5cee189af5 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json @@ -20,11 +20,13 @@ "Bambu PLA Basic @BBL X1C" ], "default_print_profile": "0.20mm Standard @BBL X1C", + "enable_long_retraction_when_cut": "2", "extruder_offset": [ "0x2" ], "machine_load_filament_time": "29", "machine_unload_filament_time": "28", + "nozzle_height": "4.2", "nozzle_type": "stainless_steel", "scan_first_layer": "0", "upward_compatible_machine": [ @@ -34,7 +36,8 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n", + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n", + "machine_end_gcode": ";===== date: 20230428 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S220\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\n{if (flush_length_2 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_3 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_4 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1S 0.6 nozzle.json index 058eae33f2..e935d6664e 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S 0.6 nozzle.json @@ -34,5 +34,5 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1S 0.8 nozzle.json index ae628412cd..49cbe6ecdb 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S 0.8 nozzle.json @@ -34,5 +34,5 @@ "Bambu Lab X1E 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ; turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" + "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ; turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json index af54617e2d..9c1127eec4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json @@ -30,5 +30,5 @@ "Bambu Lab X1E 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 ====================\n;===== date: 20240528 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json index 22c7cf476d..9d9f5eac38 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json @@ -21,11 +21,13 @@ "Bambu PLA Basic @BBL X1" ], "default_print_profile": "0.20mm Standard @BBL X1C", + "enable_long_retraction_when_cut": "2", "extruder_offset": [ "0x2" ], "machine_load_filament_time": "29", "machine_unload_filament_time": "28", + "nozzle_height": "4.2", "nozzle_type": "stainless_steel", "scan_first_layer": "1", "upward_compatible_machine": [ @@ -35,6 +37,7 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S220\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\n{if (flush_length_2 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_3 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_4 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" + "machine_start_gcode": ";===== machine: X1 ====================\n;===== date: 20240528 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n", + "machine_end_gcode": ";===== date: 20240528 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos\nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A49 B20 L100 C44 D20 M100 E41 F20 N100\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n", + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json index 34b6e1894c..ec5a3b1ea9 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json @@ -34,5 +34,5 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20240528 =====================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json index 06b1cdc2a1..fd1aa6bf82 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json @@ -34,5 +34,5 @@ "Bambu Lab X1E 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 ====================\n;===== date: 20240528 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json index 61bdacbbdf..a0b54160a5 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json @@ -31,5 +31,5 @@ "Bambu Lab X1E 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 ====================\n;===== date: 20240528 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index 5b13c5adba..c6188a2ab8 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -20,11 +20,13 @@ "Bambu PLA Basic @BBL X1C" ], "default_print_profile": "0.20mm Standard @BBL X1C", + "enable_long_retraction_when_cut": "2", "extruder_offset": [ "0x2" ], "machine_load_filament_time": "29", "machine_unload_filament_time": "28", + "nozzle_height": "4.2", "scan_first_layer": "1", "upward_compatible_machine": [ "Bambu Lab P1S 0.4 nozzle", @@ -33,6 +35,7 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S220\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\n{if (flush_length_2 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_3 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\n{if (flush_length_4 > 1) && (filament_type[next_extruder]==\"PLA-CF\" || filament_type[next_extruder]==\"PETG\")}\nM106 P1 S255\nM400 S3\nM106 P1 S0\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y245 F21000\nG1 X65 \nG1 Y265 F3000\n{endif}\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" + "machine_start_gcode": ";===== machine: X1 ====================\n;===== date: 20240528 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_end_gcode": ";===== date: 20240528 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos\nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A49 B20 L100 C44 D20 M100 E41 F20 N100\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n", + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json index eb4bd945b0..2dffc6f94c 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20240528 =====================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json index 84fb5a17fd..4e22e6bc78 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1E 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 ====================\n;===== date: 20240528 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json index 8407b6e270..3b36361af0 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json @@ -4,7 +4,7 @@ "nozzle_diameter": "0.4;0.2;0.6;0.8", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", - "default_bed_type": "Cool Plate", + "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "BL-P001", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1.json b/resources/profiles/BBL/machine/Bambu Lab X1.json index aca4485aee..d8e4794eab 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1.json @@ -4,7 +4,7 @@ "nozzle_diameter": "0.4;0.2;0.6;0.8", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", - "default_bed_type": "Cool Plate", + "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "BL-P002", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json index a81d539114..91a482c17c 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json @@ -31,5 +31,5 @@ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z200\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json index bcbcca7a0f..3050ab385a 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json @@ -20,11 +20,13 @@ "Bambu PLA Basic @BBL X1C" ], "default_print_profile": "0.20mm Standard @BBL X1C", + "enable_long_retraction_when_cut": "1", "extruder_offset": [ "0x2" ], "machine_load_filament_time": "29", "machine_unload_filament_time": "28", + "nozzle_height": "4.2", "scan_first_layer": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -35,6 +37,7 @@ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z200\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n\n", - "machine_end_gcode": ";===== date: 20230428 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM141 S0 ; turn off chamber \nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n\n", + "machine_end_gcode": ";===== date: 20240402 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM141 S0 ; turn off chamber \nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n\n", + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E-[retraction_distance_when_cut] F200\nM400\n{endif}\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E{retraction_distance_when_cut - 2} F200\nG1 E2 F20\nM400\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json index 4ccc2d081b..4db6be64be 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1 Carbon 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z200\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json index 3d3a04e2a1..5b435c4ab4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1 Carbon 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z200\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {elsif (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/fdm_machine_common.json b/resources/profiles/BBL/machine/fdm_machine_common.json index 067e53b5d2..59c372c15f 100644 --- a/resources/profiles/BBL/machine/fdm_machine_common.json +++ b/resources/profiles/BBL/machine/fdm_machine_common.json @@ -12,6 +12,7 @@ "deretraction_speed": [ "40" ], + "enable_long_retraction_when_cut" : "0", "extruder_colour": [ "#FCE94F" ], @@ -20,6 +21,9 @@ ], "gcode_flavor": "marlin", "silent_mode": "0", + "long_retractions_when_cut": [ + "0" + ], "machine_max_acceleration_e": [ "5000" ], @@ -76,7 +80,7 @@ ], "printable_height": "250", "extruder_clearance_radius": "65", - "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_rod": "34", "extruder_clearance_height_to_lid": "140", "printer_settings_id": "", "retraction_minimum_travel": [ @@ -88,6 +92,9 @@ "retract_when_changing_layer": [ "1" ], + "retraction_distances_when_cut": [ + "18" + ], "retraction_length": [ "5" ], @@ -106,7 +113,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "1", + "single_extruder_multi_material": "0", "support_air_filtration": "0", "wipe": [ "1" diff --git a/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json index 0b5df08973..a46163008e 100644 --- a/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP084", "instantiation": "true", + "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", diff --git a/resources/profiles/BBL/process/0.06mm Fine @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Fine @BBL A1M 0.2 nozzle.json index 152b44e9ab..829e917675 100644 --- a/resources/profiles/BBL/process/0.06mm Fine @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm Fine @BBL A1M 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP050", "instantiation": "true", + "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "default_acceleration": "6000", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", diff --git a/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json index deb52983a4..d05620a789 100644 --- a/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP063", "instantiation": "true", + "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "default_acceleration": "5000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2500", diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json index 000a6d08d6..fe4a28ca20 100644 --- a/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP118", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "travel_speed": "700", "compatible_printers": [ "Bambu Lab A1 0.2 nozzle" diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json index 0ce2996347..6faf0c5994 100644 --- a/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json @@ -5,12 +5,13 @@ "from": "system", "setting_id": "GP117", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "3000", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "travel_speed": "700", "compatible_printers": [ "Bambu Lab A1 mini 0.2 nozzle" diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json index 66e56802f2..5f501034b5 100644 --- a/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json @@ -5,11 +5,12 @@ "from": "system", "setting_id": "GP116", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "compatible_printers": [ "Bambu Lab P1P 0.2 nozzle" ] diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json index 502c4cdaef..3b06a8db08 100644 --- a/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json @@ -5,11 +5,12 @@ "from": "system", "setting_id": "GP115", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab X1 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json index 06a7a9eecb..5ffde15e91 100644 --- a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", + "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json index 8e7e8cab90..a77c85e631 100644 --- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP076", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1M.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1M.json index 0a87af8bb3..b54ff1ac71 100644 --- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1M.json +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP049", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json index bc9f93e282..080e4005ec 100644 --- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP018", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", "compatible_printers": [ "Bambu Lab P1P 0.4 nozzle" ] diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json index f591722386..ddb385860c 100644 --- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP001", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json index 2cbd3c2c9d..6f6bcb9366 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP119", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "travel_speed": "700", "compatible_printers": [ "Bambu Lab A1 0.2 nozzle" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json index 15c848b8b0..0e81a4944c 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP102", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.075", "gap_infill_speed": "210", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "150", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "150", "top_surface_speed": "150", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json index 6865d2fed0..94e8922f4a 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json @@ -5,12 +5,13 @@ "from": "system", "setting_id": "GP120", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "3000", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "travel_speed": "700", "compatible_printers": [ "Bambu Lab A1 mini 0.2 nozzle" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json index 069a975b0d..5726784144 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP101", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "3000", "elefant_foot_compensation": "0", "gap_infill_speed": "210", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "150", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "150", "top_surface_speed": "150", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json index c7d6188f2e..a20f5b62b8 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json @@ -5,11 +5,12 @@ "from": "system", "setting_id": "GP121", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "compatible_printers": [ "Bambu Lab P1P 0.2 nozzle" ] diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json index 454b86baf4..09a573a2c3 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP100", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "gap_infill_speed": "210", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "150", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "150", "top_surface_speed": "150", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json index aeb1c1765e..ebdca7e8b7 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json @@ -5,11 +5,12 @@ "from": "system", "setting_id": "GP122", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab X1 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json index 777e9f4e44..6772c21195 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP099", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "gap_infill_speed": "210", "inner_wall_speed": "120", "internal_solid_infill_speed": "150", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "150", "top_surface_speed": "150", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json index ad2143b2c2..072bfd59b0 100644 --- a/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP085", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", diff --git a/resources/profiles/BBL/process/0.08mm Optimal @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Optimal @BBL A1M 0.2 nozzle.json index 15a9dc636c..19f8577822 100644 --- a/resources/profiles/BBL/process/0.08mm Optimal @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm Optimal @BBL A1M 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP051", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "default_acceleration": "6000", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", diff --git a/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json index b0ccea0029..9995057586 100644 --- a/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP064", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "default_acceleration": "5000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2500", diff --git a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json index 7c8e7bbbef..4d1c9fa00e 100644 --- a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json index c848de06cd..330d2650a7 100644 --- a/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP114", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "travel_speed": "700", "compatible_printers": [ "Bambu Lab A1 0.2 nozzle" diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json index 5eb21ef675..8d56afe4a1 100644 --- a/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP113", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time.", "default_acceleration": "3000", "elefant_foot_compensation": "0", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "travel_speed": "700", "compatible_printers": [ "Bambu Lab A1 mini 0.2 nozzle" diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json index 8167ee4df0..eff310601d 100644 --- a/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json @@ -5,11 +5,12 @@ "from": "system", "setting_id": "GP112", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "compatible_printers": [ "Bambu Lab P1P 0.2 nozzle" ] diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json index af661fd789..9e065b37e6 100644 --- a/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json @@ -5,11 +5,12 @@ "from": "system", "setting_id": "GP111", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab X1 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json index 4b2576ef0b..56a9bfaced 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP083", "instantiation": "true", + "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json index 972961766e..9841209d7e 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP039", "instantiation": "true", + "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "initial_layer_infill_speed": "28", diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json index 0b50342c13..227fb04c57 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json @@ -5,8 +5,10 @@ "from": "system", "setting_id": "GP014", "instantiation": "true", + "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ - "Bambu Lab P1P 0.2 nozzle" + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json index 9b04506d03..241c0a358f 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", + "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json index 3a711c372e..549a6d7fe5 100644 --- a/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP086", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", diff --git a/resources/profiles/BBL/process/0.12mm Draft @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Draft @BBL A1M 0.2 nozzle.json index 917812c462..66a9004da7 100644 --- a/resources/profiles/BBL/process/0.12mm Draft @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Draft @BBL A1M 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP052", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "default_acceleration": "6000", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", diff --git a/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json index faef462ee4..675c21747d 100644 --- a/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP065", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "default_acceleration": "5000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2500", diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json b/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json index 4bf79151e2..6cb7369ad2 100644 --- a/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP077", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL A1M.json b/resources/profiles/BBL/process/0.12mm Fine @BBL A1M.json index 3fb96a9078..74d30722a0 100644 --- a/resources/profiles/BBL/process/0.12mm Fine @BBL A1M.json +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP044", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json b/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json index 03afc8bee0..172d506eca 100644 --- a/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP019", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", "compatible_printers": [ "Bambu Lab P1P 0.4 nozzle" ] diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json b/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json index 16c75d85ce..d42c4dcd66 100644 --- a/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP002", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json index 131b39e8b2..6123087146 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP106", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.075", "gap_infill_speed": "230", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "180", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "180", "top_surface_speed": "150", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json index 8305849949..8996567139 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP105", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "3000", "elefant_foot_compensation": "0", "gap_infill_speed": "230", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "180", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "180", "top_surface_speed": "150", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json index da83aa8137..4585e25672 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP104", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "gap_infill_speed": "230", "inner_wall_speed": "150", "internal_solid_infill_speed": "180", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "180", "top_surface_speed": "150", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json index df9625b60b..7c8599fc9a 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP103", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "gap_infill_speed": "230", "inner_wall_speed": "150", "internal_solid_infill_speed": "180", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "180", "top_surface_speed": "150", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json index 5d3d9b8d63..e909017319 100644 --- a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json index 342f481afe..c1ff7b34a3 100644 --- a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP087", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "initial_layer_infill_speed": "28", diff --git a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1M 0.2 nozzle.json index 1c5b9def3f..c8b97600b7 100644 --- a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1M 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1M 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP053", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "default_acceleration": "6000", "initial_layer_infill_speed": "28", "initial_layer_speed": "16", diff --git a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json index 568f51d502..d19c428cd4 100644 --- a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP066", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "default_acceleration": "5000", "elefant_foot_compensation": "0.15", "outer_wall_acceleration": "2500", diff --git a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json index 227940298d..b6d8ecc230 100644 --- a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json index 1f246929f8..59cd4239de 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP110", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "elefant_foot_compensation": "0.075", "gap_infill_speed": "250", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "200", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "top_surface_speed": "150", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json index 58ac77c4c5..b81470853f 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP109", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "3000", "elefant_foot_compensation": "0", "gap_infill_speed": "250", @@ -12,7 +13,7 @@ "internal_solid_infill_speed": "200", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "top_surface_speed": "150", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json index d36e464f86..aa06dca1de 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP108", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "gap_infill_speed": "250", "inner_wall_speed": "150", "internal_solid_infill_speed": "200", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "top_surface_speed": "150", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json index 32295f8e82..316fca9956 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json @@ -5,13 +5,14 @@ "from": "system", "setting_id": "GP107", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time.", "default_acceleration": "4000", "gap_infill_speed": "250", "inner_wall_speed": "150", "internal_solid_infill_speed": "200", "outer_wall_acceleration": "2000", "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "top_surface_speed": "150", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json index 1ec6906d6d..eedbf6577d 100644 --- a/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP078", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL A1M.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL A1M.json index 88ef46e482..509404f9cd 100644 --- a/resources/profiles/BBL/process/0.16mm Optimal @BBL A1M.json +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP045", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json index 1e0462da79..6df7fae3f2 100644 --- a/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP020", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "compatible_printers": [ "Bambu Lab P1P 0.4 nozzle" ] diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json index 2465e38c1d..0d12d4ddb8 100644 --- a/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP003", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json index 447c7994aa..f19e70c25f 100644 --- a/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP088", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.18mm Fine @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Fine @BBL A1M 0.6 nozzle.json index 7bc6534c79..7b1612a79d 100644 --- a/resources/profiles/BBL/process/0.18mm Fine @BBL A1M 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Fine @BBL A1M 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP062", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json index a1635bd9d6..53d29a785f 100644 --- a/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP072", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.6 nozzle" diff --git a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json index ae327ef129..15ebedb2ac 100644 --- a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json b/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json index e1c6f5ebd7..91feaa6774 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP079", "instantiation": "true", + "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL A1M.json b/resources/profiles/BBL/process/0.20mm Standard @BBL A1M.json index 33edabab4d..78b09fc677 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL A1M.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP000", "instantiation": "true", + "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json b/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json index 1b60746efc..cea5a44b6d 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP015", "instantiation": "true", + "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", "compatible_printers": [ "Bambu Lab P1P 0.4 nozzle" ] diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json b/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json index 1d05bdfa6f..2f38b67fa7 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", + "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json b/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json index 17c882470b..30e9ca38ee 100644 --- a/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP080", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "outer_wall_speed": "60", diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL A1M.json b/resources/profiles/BBL/process/0.20mm Strength @BBL A1M.json index 2c2595cc9a..3a261d636d 100644 --- a/resources/profiles/BBL/process/0.20mm Strength @BBL A1M.json +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP046", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json b/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json index c38f5f7118..9edb0342ad 100644 --- a/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP021", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "outer_wall_speed": "60", "sparse_infill_density": "25%", "wall_loops": "6", diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json b/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json index 27b9c03128..a621376300 100644 --- a/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json @@ -5,9 +5,10 @@ "from": "system", "setting_id": "GP013", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "outer_wall_speed": "60", - "wall_loops": "6", "sparse_infill_density": "25%", + "wall_loops": "6", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json b/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json index abdd58e9b9..20e452f19b 100644 --- a/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP081", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL A1M.json b/resources/profiles/BBL/process/0.24mm Draft @BBL A1M.json index 3915f80f48..4c791c4600 100644 --- a/resources/profiles/BBL/process/0.24mm Draft @BBL A1M.json +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP047", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json b/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json index 87866d4f72..ed3bd535f9 100644 --- a/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP022", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", "compatible_printers": [ "Bambu Lab P1P 0.4 nozzle" ] diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json b/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json index 4ef6dae40e..01505bf228 100644 --- a/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP005", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json index af778978f4..629884dc7c 100644 --- a/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP092", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.24mm Fine @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Fine @BBL A1M 0.8 nozzle.json index 8a542171d2..ca2631fb71 100644 --- a/resources/profiles/BBL/process/0.24mm Fine @BBL A1M 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Fine @BBL A1M 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP057", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json index 5b02a41a12..7f7934ad5a 100644 --- a/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP068", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.8 nozzle" diff --git a/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json index f616ccd800..f8388f6262 100644 --- a/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP089", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.24mm Optimal @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Optimal @BBL A1M 0.6 nozzle.json index e5eaf7207b..28082afef5 100644 --- a/resources/profiles/BBL/process/0.24mm Optimal @BBL A1M 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Optimal @BBL A1M 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP054", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json index 54941c5327..a143d7b635 100644 --- a/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP069", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.6 nozzle" diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json index 47ee33688a..992bb0f1c5 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json index a45123964c..9be5eed988 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json index 432bb9292b..490c0026cd 100644 --- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP082", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1M.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1M.json index f2ea4704d8..f1923e0d69 100644 --- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1M.json +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1M.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP048", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json index ca64d1e316..4f9bb7b53e 100644 --- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP023", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", "compatible_printers": [ "Bambu Lab P1P 0.4 nozzle" ] diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json index 211a43a31e..8c2e794dab 100644 --- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP006", "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab X1 0.4 nozzle", diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json index b05e7cea1e..26ad6e5806 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP096", "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json index ef0567d6d1..910c119ebd 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP038", "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json index 37b7593e8d..164c03866f 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP016", "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.6 nozzle" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json index f53720838f..e501731193 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP011", "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 0.6 nozzle" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json index c09f04e219..3f0a4dacbe 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json index f4978b869f..775523f0d6 100644 --- a/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP097", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "sparse_infill_density": "25%", diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL A1M 0.6 nozzle.json index 5eac111e7e..044c7c24cb 100644 --- a/resources/profiles/BBL/process/0.30mm Strength @BBL A1M 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL A1M 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP061", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json index c5bcdf6cd6..284206f4fa 100644 --- a/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP067", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json index 08493a2232..affc545389 100644 --- a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP036", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", diff --git a/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json index fbeab32f62..b1e8658fce 100644 --- a/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP093", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.32mm Optimal @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Optimal @BBL A1M 0.8 nozzle.json index f793ab2063..e3778f3709 100644 --- a/resources/profiles/BBL/process/0.32mm Optimal @BBL A1M 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Optimal @BBL A1M 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP058", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json index 54463e5b3a..7586ed84bf 100644 --- a/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP075", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.8 nozzle" diff --git a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json index 0a61d6aaa0..a75637780f 100644 --- a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", diff --git a/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json index 3448a0f1bb..e5ebbcfe31 100644 --- a/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP090", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.36mm Draft @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Draft @BBL A1M 0.6 nozzle.json index 4a40cfb3d5..0268a0ea0f 100644 --- a/resources/profiles/BBL/process/0.36mm Draft @BBL A1M 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.36mm Draft @BBL A1M 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP055", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json index b7a618da19..51251017b3 100644 --- a/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP070", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.6 nozzle" diff --git a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json index 24acdebf3b..f259218f18 100644 --- a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json index e642efe3f4..de5ffe19c3 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP098", "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json index 39300abc52..e4a2b2aaa1 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP037", "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "default_acceleration": "6000", "elefant_foot_compensation": "0", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json index 547915d19e..a647b300b6 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP017", "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.8 nozzle" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json index 649f3e803f..f5115f43b7 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP012", "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 0.8 nozzle" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json index ed00b1679f..2c7cb9ba80 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", diff --git a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json index b0eda75687..d6b15c6eba 100644 --- a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP091", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1M 0.6 nozzle.json index b29e070b82..571ab55f0d 100644 --- a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1M 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1M 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP056", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json index 9305139f2d..69578536be 100644 --- a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP073", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.6 nozzle" diff --git a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json index 38b90393da..dbf8255105 100644 --- a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", diff --git a/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json index a03f301b78..d3e5e0c26a 100644 --- a/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP094", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.48mm Draft @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Draft @BBL A1M 0.8 nozzle.json index 29d78d74d5..dc3159fb7f 100644 --- a/resources/profiles/BBL/process/0.48mm Draft @BBL A1M 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.48mm Draft @BBL A1M 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP059", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json index 0299ac8fec..7a5062a369 100644 --- a/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP074", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.8 nozzle" diff --git a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json index 4075696088..77c2585943 100644 --- a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", diff --git a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json index 8b1312dfb9..7669c35cdc 100644 --- a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP095", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "default_acceleration": "6000", "elefant_foot_compensation": "0.075", "travel_speed": "700", diff --git a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1M 0.8 nozzle.json index 43895dd832..8090a64617 100644 --- a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1M 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1M 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP060", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "default_acceleration": "6000", "travel_speed": "700", "compatible_printers": [ diff --git a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json index ca90e061ea..fcc8b66b82 100644 --- a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP071", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab P1P 0.8 nozzle" diff --git a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json index 48cb2aac2e..64d3187b44 100644 --- a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json @@ -5,6 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", "compatible_printers": [ "Bambu Lab X1 Carbon 0.8 nozzle", diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json index c01ea54987..0857a48e0e 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.06_nozzle_0.2.json @@ -21,5 +21,7 @@ "initial_layer_speed": "40", "initial_layer_infill_speed": "70", "sparse_infill_speed": "100", - "top_surface_speed": "150" + "top_surface_speed": "150", + "support_top_z_distance": "0.06", + "support_bottom_z_distance": "0.06" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.08.json b/resources/profiles/BBL/process/fdm_process_bbl_0.08.json index 836980d3fd..61897f7a73 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.08.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.08.json @@ -20,5 +20,7 @@ "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", - "support_threshold_angle": "15" + "support_threshold_angle": "15", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json index 43a8b60f07..80670ce3b6 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.08_nozzle_0.2.json @@ -21,5 +21,7 @@ "initial_layer_speed": "40", "initial_layer_infill_speed": "70", "sparse_infill_speed": "100", - "top_surface_speed": "150" + "top_surface_speed": "150", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.10_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.10_nozzle_0.2.json index cc7d773953..9d54d14c18 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.10_nozzle_0.2.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.10_nozzle_0.2.json @@ -21,5 +21,7 @@ "initial_layer_speed": "40", "initial_layer_infill_speed": "70", "sparse_infill_speed": "100", - "top_surface_speed": "150" + "top_surface_speed": "150", + "support_top_z_distance": "0.1", + "support_bottom_z_distance": "0.1" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.12.json b/resources/profiles/BBL/process/fdm_process_bbl_0.12.json index e76673b434..e22593fb30 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.12.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.12.json @@ -20,5 +20,7 @@ "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", - "support_threshold_angle": "20" + "support_threshold_angle": "20", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json index 040df9f8a9..9d35f2501e 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.12_nozzle_0.2.json @@ -21,5 +21,7 @@ "initial_layer_speed": "40", "initial_layer_infill_speed": "70", "sparse_infill_speed": "100", - "top_surface_speed": "150" + "top_surface_speed": "150", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json b/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json index be12c21e1c..573669d4a5 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.14_nozzle_0.2.json @@ -21,5 +21,7 @@ "initial_layer_speed": "40", "initial_layer_infill_speed": "70", "sparse_infill_speed": "100", - "top_surface_speed": "150" + "top_surface_speed": "150", + "support_top_z_distance": "0.14", + "support_bottom_z_distance": "0.14" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.16.json b/resources/profiles/BBL/process/fdm_process_bbl_0.16.json index ecc31c5421..3d60b01d8b 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.16.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.16.json @@ -20,5 +20,7 @@ "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", - "support_threshold_angle": "25" + "support_threshold_angle": "25", + "support_top_z_distance": "0.16", + "support_bottom_z_distance": "0.16" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json b/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json index 3baf1fd45d..0220f43a0d 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_0.18_nozzle_0.6.json @@ -20,5 +20,7 @@ "sparse_infill_speed": "100", "top_surface_speed": "150", "bridge_speed": "30", - "overhang_3_4_speed": "15" + "overhang_3_4_speed": "15", + "support_top_z_distance": "0.18", + "support_bottom_z_distance": "0.18" } \ No newline at end of file diff --git a/resources/profiles/BBL/process/fdm_process_common.json b/resources/profiles/BBL/process/fdm_process_common.json index 921718b995..fd909fd1c7 100644 --- a/resources/profiles/BBL/process/fdm_process_common.json +++ b/resources/profiles/BBL/process/fdm_process_common.json @@ -17,7 +17,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", diff --git a/resources/profiles/BIQU.json b/resources/profiles/BIQU.json index d97e1b2eee..f76c8d6c81 100644 --- a/resources/profiles/BIQU.json +++ b/resources/profiles/BIQU.json @@ -1,6 +1,6 @@ { "name": "BIQU", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "BIQU configurations", "machine_model_list": [ diff --git a/resources/profiles/BIQU/process/fdm_process_biqu_common.json b/resources/profiles/BIQU/process/fdm_process_biqu_common.json index 0375a6ced1..11e5110006 100644 --- a/resources/profiles/BIQU/process/fdm_process_biqu_common.json +++ b/resources/profiles/BIQU/process/fdm_process_biqu_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/BIQU/process/fdm_process_common.json b/resources/profiles/BIQU/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/BIQU/process/fdm_process_common.json +++ b/resources/profiles/BIQU/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/BIQU/process/fdm_process_hurakan_common.json b/resources/profiles/BIQU/process/fdm_process_hurakan_common.json index ac3fa6d8f5..682be2dd47 100644 --- a/resources/profiles/BIQU/process/fdm_process_hurakan_common.json +++ b/resources/profiles/BIQU/process/fdm_process_hurakan_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/CONSTRUCT3D.json b/resources/profiles/CONSTRUCT3D.json index 9580e9cd06..635c888aeb 100644 --- a/resources/profiles/CONSTRUCT3D.json +++ b/resources/profiles/CONSTRUCT3D.json @@ -1,6 +1,6 @@ { "name": "CONSTRUCT3D", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Construct3D configurations", "machine_model_list": [ diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json index c8d9a9df8a..eece4b8430 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json @@ -14,8 +14,8 @@ "printer_variant": "0.4", "printable_area": [ "0x0", - "230x0", - "230x260", + "225x0", + "225x260", "0x260" ], "printable_height": "180", @@ -62,7 +62,7 @@ "40" ], "machine_end_gcode": ";Retract the filament\nG92 E1\nG1 E-5 F900\n;Move nozzle fast\nG1 X5 Y258 F15000\n;Move Bed Down\nG1 Z180 F6000\n\n;Set machine to idle\nM104 S0\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors", - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nM557 P5 X{adaptive_bed_mesh_min[0]}:{adaptive_bed_mesh_max[0]} Y{adaptive_bed_mesh_min[1]}:{adaptive_bed_mesh_max[1]} ; dynamic meshing\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", "max_layer_height": [ "0.38" ], @@ -73,11 +73,15 @@ "0.7" ], "retraction_speed": [ - "65" + "50" ], "z_hop": [ "0.2" ], + "bed_mesh_max": "200,235", + "bed_mesh_min": "10,20", + "fan_kickstart": "0.5", + "fan_speedup_time": "1", "z_hop_types": [ "Auto Lift" ] diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json index df463d1523..a61993fdd9 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json @@ -62,7 +62,7 @@ "40" ], "machine_end_gcode": ";Retract the filament\nG92 E1\nG1 E-5 F900\n;Move nozzle fast\nG1 X5 Y369 F15000\n;Move Bed Down\nG1 Z400 F6000\n\n;Set machine to idle\nT-1\nM104 S0\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors\n", - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] T0 ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nM557 P5 X{adaptive_bed_mesh_min[0]}:{adaptive_bed_mesh_max[0]} Y{adaptive_bed_mesh_min[1]}:{adaptive_bed_mesh_max[1]} ; dynamic meshing\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] T0 ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", "max_layer_height": [ "0.6" ], @@ -70,11 +70,15 @@ "0.7" ], "retraction_speed": [ - "65" + "50" ], "z_hop": [ "0.2" ], + "bed_mesh_max": "320,330", + "bed_mesh_min": "10,20", + "fan_kickstart": "0.5", + "fan_speedup_time": "1", "z_hop_types": [ "Auto Lift" ] diff --git a/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json b/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json index d43eb96b32..19f49c5a0e 100644 --- a/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json +++ b/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json @@ -5,7 +5,7 @@ "instantiation": "false", "printer_technology": "FFF", "deretraction_speed": [ - "70" + "50" ], "extruder_colour": [ "#003f87" @@ -63,7 +63,7 @@ "20" ], "machine_max_jerk_z": [ - "0.5" + "0.2" ], "machine_min_extruding_rate": [ "0" @@ -86,7 +86,7 @@ ], "printer_settings_id": "", "retraction_minimum_travel": [ - "2" + "2.6" ], "retract_before_wipe": [ "70%" @@ -110,7 +110,7 @@ "0" ], "retraction_speed": [ - "70" + "50" ], "single_extruder_multi_material": "1", "change_filament_gcode": "", @@ -119,7 +119,7 @@ ], "thumbnails_format": "QOI", "thumbnails": [ - "300x300" + "160x160" ], "z_lift_type": "Auto Lift", "default_print_profile": "", diff --git a/resources/profiles/CONSTRUCT3D/process/0.14mm Quality @Construct 1.json b/resources/profiles/CONSTRUCT3D/process/0.14mm Quality @Construct 1.json index 357d225e6c..b4ac54cf5d 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.14mm Quality @Construct 1.json +++ b/resources/profiles/CONSTRUCT3D/process/0.14mm Quality @Construct 1.json @@ -38,7 +38,7 @@ "slow_down_layers": "1", "sparse_infill_density": "12%", "sparse_infill_line_width": "0.4", - "sparse_infill_pattern": "line", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "300", "support_speed": "300", "top_shell_layers": "5", diff --git a/resources/profiles/CONSTRUCT3D/process/0.20mm Quality @Construct 1 XL.json b/resources/profiles/CONSTRUCT3D/process/0.20mm Quality @Construct 1 XL.json index 3ed09f9004..327bd6a8c0 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.20mm Quality @Construct 1 XL.json +++ b/resources/profiles/CONSTRUCT3D/process/0.20mm Quality @Construct 1 XL.json @@ -37,7 +37,7 @@ "slow_down_layers": "1", "sparse_infill_density": "18%", "sparse_infill_line_width": "0.6", - "sparse_infill_pattern": "line", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "240", "support_line_width": "0.6", "top_shell_layers": "5", diff --git a/resources/profiles/CONSTRUCT3D/process/0.22mm Standard @Construct 1.json b/resources/profiles/CONSTRUCT3D/process/0.22mm Standard @Construct 1.json index 1ef073d2c7..85645bcdae 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.22mm Standard @Construct 1.json +++ b/resources/profiles/CONSTRUCT3D/process/0.22mm Standard @Construct 1.json @@ -38,7 +38,7 @@ "slow_down_layers": "1", "sparse_infill_density": "12%", "sparse_infill_line_width": "0.4", - "sparse_infill_pattern": "line", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "300", "support_speed": "300", "top_shell_layers": "3", diff --git a/resources/profiles/CONSTRUCT3D/process/0.25mm Industrial @Construct 1.json b/resources/profiles/CONSTRUCT3D/process/0.25mm Industrial @Construct 1.json index 512dc5ce99..bc71f59430 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.25mm Industrial @Construct 1.json +++ b/resources/profiles/CONSTRUCT3D/process/0.25mm Industrial @Construct 1.json @@ -40,7 +40,7 @@ "slow_down_layers": "1", "sparse_infill_density": "30%", "sparse_infill_line_width": "0.62", - "sparse_infill_pattern": "triangles", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "300", "support_speed": "300", "top_surface_acceleration": "2000", diff --git a/resources/profiles/CONSTRUCT3D/process/0.30mm Draft @Construct 1.json b/resources/profiles/CONSTRUCT3D/process/0.30mm Draft @Construct 1.json index 596af351d1..3da948adb4 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.30mm Draft @Construct 1.json +++ b/resources/profiles/CONSTRUCT3D/process/0.30mm Draft @Construct 1.json @@ -40,7 +40,7 @@ "slow_down_layers": "1", "sparse_infill_density": "12%", "sparse_infill_line_width": "0.4", - "sparse_infill_pattern": "line", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "300", "support_speed": "300", "top_shell_layers": "2", diff --git a/resources/profiles/CONSTRUCT3D/process/0.30mm Industrial @Construct 1 XL.json b/resources/profiles/CONSTRUCT3D/process/0.30mm Industrial @Construct 1 XL.json index 4d83a99819..3249ae2e05 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.30mm Industrial @Construct 1 XL.json +++ b/resources/profiles/CONSTRUCT3D/process/0.30mm Industrial @Construct 1 XL.json @@ -38,7 +38,7 @@ "slow_down_layers": "1", "sparse_infill_density": "30%", "sparse_infill_line_width": "0.82", - "sparse_infill_pattern": "triangles", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "240", "support_line_width": "0.6", "top_shell_layers": "5", diff --git a/resources/profiles/CONSTRUCT3D/process/0.30mm Standard @Construct 1 XL.json b/resources/profiles/CONSTRUCT3D/process/0.30mm Standard @Construct 1 XL.json index df437f835f..09f121b863 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.30mm Standard @Construct 1 XL.json +++ b/resources/profiles/CONSTRUCT3D/process/0.30mm Standard @Construct 1 XL.json @@ -41,7 +41,7 @@ "slow_down_layers": "1", "sparse_infill_density": "12%", "sparse_infill_line_width": "0.64", - "sparse_infill_pattern": "line", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "300", "support_line_width": "0.6", "support_speed": "300", diff --git a/resources/profiles/CONSTRUCT3D/process/0.38mm Draft @Construct 1 XL.json b/resources/profiles/CONSTRUCT3D/process/0.38mm Draft @Construct 1 XL.json index 5fd4ab8f25..e1ee36c920 100644 --- a/resources/profiles/CONSTRUCT3D/process/0.38mm Draft @Construct 1 XL.json +++ b/resources/profiles/CONSTRUCT3D/process/0.38mm Draft @Construct 1 XL.json @@ -42,7 +42,7 @@ "slow_down_layers": "1", "sparse_infill_density": "12%", "sparse_infill_line_width": "0.64", - "sparse_infill_pattern": "line", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "300", "support_line_width": "0.6", "support_speed": "300", diff --git a/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json b/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json index b5ccd4173d..0f04fa8443 100644 --- a/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json +++ b/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json @@ -27,7 +27,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "12%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_print_height": "0.24", "infill_combination": "0", "infill_wall_overlap": "10%", @@ -83,7 +83,7 @@ "tree_support_wall_count": "0", "tree_support_with_infill": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index 6150492e6c..de18cb4f8e 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ diff --git a/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json index 75aad4846c..3a5d70c25d 100644 --- a/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json @@ -27,7 +27,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.6", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "120", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json index 17d1839a79..3de0626fe6 100644 --- a/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.4", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "140", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json b/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json index 2b364ee2a8..352e312f53 100644 --- a/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json +++ b/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json @@ -27,7 +27,7 @@ "line_width": "0.44", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.24", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json index 9d94e6c504..bf6a0a8194 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.4", "initial_layer_print_height": "0.24", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "140", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json index d11dfb24a1..ec03778993 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json @@ -27,7 +27,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.6", "initial_layer_print_height": "0.24", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "120", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 1.0.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 1.0.json index 17de958703..ce684b789b 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 1.0.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 1.0.json @@ -27,7 +27,7 @@ "line_width": "1.0", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "1.0", "initial_layer_print_height": "0.28", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "1.0", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json index 505373d1e9..3e6868e9dd 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json @@ -27,7 +27,7 @@ "line_width": "0.44", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.24", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json index 7f8c3778b1..331c445d50 100644 --- a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.4", "initial_layer_print_height": "0.28", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "140", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json index 3b9cbaa7a5..828313824f 100644 --- a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json @@ -27,7 +27,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.6", "initial_layer_print_height": "0.28", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "120", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json index a1ca8bf2cb..96434de680 100644 --- a/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json @@ -27,7 +27,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.8", "initial_layer_print_height": "0.28", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json index 9fbe8bb3f8..14ad3b03fd 100644 --- a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.4", "initial_layer_print_height": "0.32", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "140", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json index af0be46947..861580b276 100644 --- a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json @@ -27,7 +27,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.6", "initial_layer_print_height": "0.32", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "120", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json index 7fc0fb213c..3b92b46707 100644 --- a/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json @@ -27,7 +27,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.8", "initial_layer_print_height": "0.36", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json index a7385a9177..d4901937de 100644 --- a/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json @@ -27,7 +27,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.8", "initial_layer_print_height": "0.44", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json index 8bddb7adca..5c9282cd54 100644 --- a/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json @@ -27,7 +27,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.8", "initial_layer_print_height": "0.52", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json index 0b014b0791..54825d3cb6 100644 --- a/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json @@ -27,7 +27,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.8", "initial_layer_print_height": "0.60", "infill_combination": "0", @@ -73,12 +73,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "70", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "2", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json index 41009107e5..8f144ff59a 100644 --- a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json +++ b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json @@ -144,7 +144,7 @@ "sparse_infill_density": "10%", "sparse_infill_filament": "1", "sparse_infill_line_width": "0.4", - "sparse_infill_pattern": "adaptivecubic", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "spiral_mode": "0", "staggered_inner_seams": "0", @@ -169,7 +169,7 @@ "support_remove_small_overhang": "1", "support_speed": "140", "support_style": "grid", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_top_z_distance": "0.15", "support_type": "normal(auto)", "thick_bridges": "0", @@ -179,7 +179,7 @@ "top_surface_acceleration": "2000", "top_surface_jerk": "9", "top_surface_line_width": "0.4", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "40", "travel_acceleration": "3000", "travel_jerk": "12", diff --git a/resources/profiles/Comgrow/process/fdm_process_common.json b/resources/profiles/Comgrow/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Comgrow/process/fdm_process_common.json +++ b/resources/profiles/Comgrow/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index ca8810ad65..e2307e3426 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,1290 +1,1442 @@ { - "name": "Creality", - "version": "02.00.02.00", - "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" - }, - { - "name": "Creality CR-10 SE", - "sub_path": "machine/Creality CR-10 SE.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" - }, - { - "name": "Creality Ender-3 V2", - "sub_path": "machine/Creality Ender-3 V2.json" - }, - { - "name": "Creality Ender-3 V2 Neo", - "sub_path": "machine/Creality Ender-3 V2 Neo.json" - }, - { - "name": "Creality Ender-3 S1", - "sub_path": "machine/Creality Ender-3 S1.json" - }, - { - "name": "Creality Ender-3", - "sub_path": "machine/Creality Ender-3.json" - }, - { - "name":"Creality Ender-3 Pro", - "sub_path": "machine/Creality Ender-3 Pro.json" - }, - { - "name": "Creality Ender-3 S1 Pro", - "sub_path": "machine/Creality Ender-3 S1 Pro.json" - }, - { - "name": "Creality Ender-3 S1 Plus", - "sub_path": "machine/Creality Ender-3 S1 Plus.json" - }, - { - "name": "Creality Ender-3 V3 SE", - "sub_path": "machine/Creality Ender-3 V3 SE.json" - }, - { - "name": "Creality Ender-3 V3 KE", - "sub_path": "machine/Creality Ender-3 V3 KE.json" - }, - { - "name": "Creality Ender-5", - "sub_path": "machine/Creality Ender-5.json" - }, - { - "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 K1", - "sub_path": "machine/Creality K1.json" - }, - { - "name": "Creality K1C", - "sub_path": "machine/Creality K1C.json" - }, - { - "name": "Creality K1 Max", - "sub_path": "machine/Creality K1 Max.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_creality_common", - "sub_path": "process/fdm_process_creality_common.json" - }, - { - "name": "fdm_process_common_klipper", - "sub_path": "process/fdm_process_common_klipper.json" - }, - { - "name": "fdm_process_creality_common_0_2", - "sub_path": "process/fdm_process_creality_common_0_2.json" - }, - { - "name": "fdm_process_creality_common_0_25", - "sub_path": "process/fdm_process_creality_common_0_25.json" - }, - { - "name": "fdm_process_creality_common_0_3", - "sub_path": "process/fdm_process_creality_common_0_3.json" - }, - { - "name": "fdm_process_creality_common_0_5", - "sub_path": "process/fdm_process_creality_common_0_5.json" - }, - { - "name": "fdm_process_creality_common_0_6", - "sub_path": "process/fdm_process_creality_common_0_6.json" - }, - { - "name": "fdm_process_creality_common_0_8", - "sub_path": "process/fdm_process_creality_common_0_8.json" - }, - { - "name": "fdm_process_creality_common_1_0", - "sub_path": "process/fdm_process_creality_common_1_0.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.2", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.6", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.8", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.4", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.2", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.4", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.8", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.08mm SuperDetail @Creality CR-6 0.2", - "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" - }, - { - "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.10mm HighDetail @Creality CR-6 0.4.json", - "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" - }, - { - "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.2", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.2.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.4", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.4.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.6", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.6.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.8", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.8.json" - }, - { - "name": "0.12mm Fine @Creality CR10Max", - "sub_path": "process/0.12mm Fine @Creality CR10Max.json" - }, - { - "name": "0.12mm Detail @Creality CR-6 0.2", - "sub_path": "process/0.12mm Detail @Creality CR-6 0.2.json" - }, - { - "name": "0.12mm Detail @Creality CR-6 0.4", - "sub_path": "process/0.12mm Detail @Creality CR-6 0.4.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V2", - "sub_path": "process/0.12mm Fine @Creality Ender3V2.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V2Neo", - "sub_path": "process/0.12mm Fine @Creality Ender3V2Neo.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3KE", - "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.2", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.6", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.8", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.8.json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.12mm Fine @Creality Ender5Pro (2019)", - "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" - }, - { - "name": "0.12mm Fine @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.12mm Fine @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.12mm Fine @Creality K1C", - "sub_path": "process/0.12mm Fine @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.12mm Fine @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.16mm Optimal @Creality CR10V2", - "sub_path": "process/0.16mm Optimal @Creality CR10V2.json" - }, - { - "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 Ender3V2Neo", - "sub_path": "process/0.16mm Optimal @Creality Ender3V2Neo.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.8.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 Ender3S1Plus 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3KE", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.8.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.16mm Optimal @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.15mm Optimal @Creality Ender5Pro (2019)", - "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.6.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.16mm Optimal @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.16mm Optimal @Creality K1C", - "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality CR10V2", - "sub_path": "process/0.20mm Standard @Creality CR10V2.json" - }, - { - "name": "0.20mm Standard @Creality CR10Max", - "sub_path": "process/0.20mm Standard @Creality CR10Max.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.2", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.2.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.4", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.4.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.6", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.6.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.8", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.8.json" - }, - { - "name": "0.20mm Standard @Creality CR-6 0.4", - "sub_path": "process/0.20mm Standard @Creality CR-6 0.4.json" - }, - { - "name": "0.20mm Standard @Creality CR-6 0.6", - "sub_path": "process/0.20mm Standard @Creality CR-6 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3", - "sub_path": "process/0.20mm Standard @Creality Ender3.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V2", - "sub_path": "process/0.20mm Standard @Creality Ender3V2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V2Neo", - "sub_path": "process/0.20mm Standard @Creality Ender3V2Neo.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 Ender3S1Plus 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3KE", - "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.8.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) 0.25", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019)", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019).json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.8.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" - }, - { - "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality K1C", - "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.8.json" - }, - { - "name": "0.24mm Draft @Creality CR10Max", - "sub_path": "process/0.24mm Draft @Creality CR10Max.json" - }, - { - "name": "0.24mm Draft @Creality CR-6 0.4", - "sub_path": "process/0.24mm Draft @Creality CR-6 0.4.json" - }, - { - "name": "0.24mm Draft @Creality CR-6 0.6", - "sub_path": "process/0.24mm Draft @Creality CR-6 0.6.json" - }, - { - "name": "0.24mm Optimal @Creality CR-6 0.8", - "sub_path": "process/0.24mm Optimal @Creality CR-6 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V2", - "sub_path": "process/0.24mm Draft @Creality Ender3V2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V2Neo", - "sub_path": "process/0.24mm Draft @Creality Ender3V2Neo.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3KE", - "sub_path": "process/0.24mm Draft @Creality Ender3V3KE.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019)", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.2", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.2.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.4", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.4.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.6.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.8", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.8.json" - }, - { - "name": "0.28mm SuperDraft @Creality CR-6 0.4", - "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.4.json" - }, - { - "name": "0.28mm SuperDraft @Creality CR-6 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.6.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0.json" - }, - { - "name": "0.32mm Chunky @Creality CR-6 0.6", - "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" - }, - { - "name": "0.32mm Standard @Creality CR-6 0.8", - "sub_path": "process/0.32mm Standard @Creality CR-6 0.8.json" - }, - { - "name": "0.36mm SuperChunky @Creality CR-6 0.6", - "sub_path": "process/0.36mm SuperChunky @Creality CR-6 0.6.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 1.0", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 1.0.json" - }, - { - "name": "0.40mm Draft @Creality CR-6 0.8", - "sub_path": "process/0.40mm Draft @Creality CR-6 0.8.json" - }, - { - "name": "0.44mm SuperExtraChunky @Creality CR-6 0.6", - "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6 0.6.json" - }, - { - "name": "0.48mm Chunky @Creality CR-6 0.8", - "sub_path": "process/0.48mm Chunky @Creality CR-6 0.8.json" - }, - { - "name": "0.48mm Draft @Creality CR-6 0.8", - "sub_path": "process/0.48mm Draft @Creality CR-6 0.8.json" - }, - { - "name": "0.56mm SuperChunky @Creality CR-6 0.8", - "sub_path": "process/0.56mm SuperChunky @Creality CR-6 0.8.json" - }, - { - "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.24mm Optimal @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.24mm Optimal @Creality K1C", - "sub_path": "process/0.24mm Optimal @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K1C", - "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K1C", - "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.32mm Optimal @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.32mm Optimal @Creality K1C", - "sub_path": "process/0.32mm Optimal @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json" - }, - { - "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.36mm Draft @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.36mm Draft @Creality K1C", - "sub_path": "process/0.36mm Draft @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.36mm Draft @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K1C", - "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" - }, - { - "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.48mm Draft @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.48mm Draft @Creality K1C", - "sub_path": "process/0.48mm Draft @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.48mm Draft @Creality K1Max (0.8 nozzle).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_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "Creality Generic ABS", - "sub_path": "filament/Creality Generic ABS.json" - }, - { - "name": "Creality Generic ASA", - "sub_path": "filament/Creality Generic ASA.json" - }, - { - "name": "Creality Generic PA-CF", - "sub_path": "filament/Creality Generic PA-CF.json" - }, - { - "name": "Creality Generic PC", - "sub_path": "filament/Creality Generic PC.json" - }, - { - "name": "Creality Generic PETG", - "sub_path": "filament/Creality Generic PETG.json" - }, - { - "name": "Creality Generic PLA", - "sub_path": "filament/Creality Generic PLA.json" - }, - { - "name": "Creality HF Generic PLA", - "sub_path": "filament/Creality HF Generic PLA.json" - }, - { - "name": "Creality HF Generic Speed PLA", - "sub_path": "filament/Creality HF Generic Speed PLA.json" - }, - { - "name": "Creality Generic PLA-CF", - "sub_path": "filament/Creality Generic PLA-CF.json" - }, - { - "name": "Creality Generic TPU", - "sub_path": "filament/Creality Generic TPU.json" - }, - { - "name": "Creality Generic ABS @Ender-3V3-all", - "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" - }, - { - "name": "Creality Generic ASA @Ender-3V3-all", - "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PETG @Ender-3V3-all", - "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA High Speed @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA Matte @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA Silk @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" - }, - { - "name": "Creality Generic TPU @Ender-3V3-all", - "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" - }, - { - "name": "Creality Generic ABS @K1-all", - "sub_path": "filament/Creality Generic ABS @K1-all.json" - }, - { - "name": "Creality Generic ASA @K1-all", - "sub_path": "filament/Creality Generic ASA @K1-all.json" - }, - { - "name": "Creality Generic PA-CF @K1-all", - "sub_path": "filament/Creality Generic PA-CF @K1-all.json" - }, - { - "name": "Creality Generic PC @K1-all", - "sub_path": "filament/Creality Generic PC @K1-all.json" - }, - { - "name": "Creality Generic PETG @K1-all", - "sub_path": "filament/Creality Generic PETG @K1-all.json" - }, - { - "name": "Creality Generic PLA @K1-all", - "sub_path": "filament/Creality Generic PLA @K1-all.json" - }, - { - "name": "Creality Generic PLA High Speed @K1-all", - "sub_path": "filament/Creality Generic PLA High Speed @K1-all.json" - }, - { - "name": "Creality Generic PLA Matte @K1-all", - "sub_path": "filament/Creality Generic PLA Matte @K1-all.json" - }, - { - "name": "Creality Generic PLA Silk @K1-all", - "sub_path": "filament/Creality Generic PLA Silk @K1-all.json" - }, - { - "name": "Creality Generic PLA-CF @K1-all", - "sub_path": "filament/Creality Generic PLA-CF @K1-all.json" - }, - { - "name": "Creality Generic TPU @K1-all", - "sub_path": "filament/Creality Generic TPU @K1-all.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "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" - }, - { - "name": "Creality CR-10 SE 0.2 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.2 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.4 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.4 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.6 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.6 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.8 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.8 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" - }, - { - "name": "Creality Ender-3 V2 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V2 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 V2 Neo 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V2 Neo 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.8 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-3 S1 Plus 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 KE 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V3 KE 0.4 nozzle.json" - }, - { - "name": "Creality Ender-5 0.4 nozzle", - "sub_path": "machine/Creality Ender-5 0.4 nozzle.json" - }, - { - "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.2 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.25 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.3 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.3 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-5 Pro (2019) 0.5 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.6 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.8 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 1.0 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 1.0 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 K1 (0.4 nozzle)", - "sub_path": "machine/Creality K1 (0.4 nozzle).json" - }, - { - "name": "Creality K1 (0.6 nozzle)", - "sub_path": "machine/Creality K1 (0.6 nozzle).json" - }, - { - "name": "Creality K1 (0.8 nozzle)", - "sub_path": "machine/Creality K1 (0.8 nozzle).json" - }, - { - "name": "Creality K1C 0.4 nozzle", - "sub_path": "machine/Creality K1C 0.4 nozzle.json" - }, - { - "name": "Creality K1C 0.6 nozzle", - "sub_path": "machine/Creality K1C 0.6 nozzle.json" - }, - { - "name": "Creality K1C 0.8 nozzle", - "sub_path": "machine/Creality K1C 0.8 nozzle.json" - }, - { - "name": "Creality K1 Max (0.4 nozzle)", - "sub_path": "machine/Creality K1 Max (0.4 nozzle).json" - }, - { - "name": "Creality K1 Max (0.6 nozzle)", - "sub_path": "machine/Creality K1 Max (0.6 nozzle).json" - }, - { - "name": "Creality K1 Max (0.8 nozzle)", - "sub_path": "machine/Creality K1 Max (0.8 nozzle).json" - } - ] + "name": "Creality", + "version": "02.01.00.01", + "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" + }, + { + "name": "Creality CR-10 SE", + "sub_path": "machine/Creality CR-10 SE.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" + }, + { + "name": "Creality Ender-3 V2", + "sub_path": "machine/Creality Ender-3 V2.json" + }, + { + "name": "Creality Ender-3 V2 Neo", + "sub_path": "machine/Creality Ender-3 V2 Neo.json" + }, + { + "name": "Creality Ender-3 S1", + "sub_path": "machine/Creality Ender-3 S1.json" + }, + { + "name": "Creality Ender-3", + "sub_path": "machine/Creality Ender-3.json" + }, + { + "name": "Creality Ender-3 Pro", + "sub_path": "machine/Creality Ender-3 Pro.json" + }, + { + "name": "Creality Ender-3 S1 Pro", + "sub_path": "machine/Creality Ender-3 S1 Pro.json" + }, + { + "name": "Creality Ender-3 S1 Plus", + "sub_path": "machine/Creality Ender-3 S1 Plus.json" + }, + { + "name": "Creality Ender-3 V3 SE", + "sub_path": "machine/Creality Ender-3 V3 SE.json" + }, + { + "name": "Creality Ender-3 V3 KE", + "sub_path": "machine/Creality Ender-3 V3 KE.json" + }, + { + "name": "Creality Ender-3 V3", + "sub_path": "machine/Creality Ender-3 V3.json" + }, + { + "name": "Creality Ender-3 V3 Plus", + "sub_path": "machine/Creality Ender-3 V3 Plus.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 Sermoon V1", + "sub_path": "machine/Creality Sermoon V1.json" + }, + { + "name": "Creality K1", + "sub_path": "machine/Creality K1.json" + }, + { + "name": "Creality K1C", + "sub_path": "machine/Creality K1C.json" + }, + { + "name": "Creality K1 Max", + "sub_path": "machine/Creality K1 Max.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_creality_common", + "sub_path": "process/fdm_process_creality_common.json" + }, + { + "name": "fdm_process_common_klipper", + "sub_path": "process/fdm_process_common_klipper.json" + }, + { + "name": "fdm_process_creality_common_0_2", + "sub_path": "process/fdm_process_creality_common_0_2.json" + }, + { + "name": "fdm_process_creality_common_0_25", + "sub_path": "process/fdm_process_creality_common_0_25.json" + }, + { + "name": "fdm_process_creality_common_0_3", + "sub_path": "process/fdm_process_creality_common_0_3.json" + }, + { + "name": "fdm_process_creality_common_0_5", + "sub_path": "process/fdm_process_creality_common_0_5.json" + }, + { + "name": "fdm_process_creality_common_0_6", + "sub_path": "process/fdm_process_creality_common_0_6.json" + }, + { + "name": "fdm_process_creality_common_0_8", + "sub_path": "process/fdm_process_creality_common_0_8.json" + }, + { + "name": "fdm_process_creality_common_1_0", + "sub_path": "process/fdm_process_creality_common_1_0.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.2", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.6", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.8", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.2", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.4", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.8", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.08mm SuperDetail @Creality CR-6 0.2", + "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" + }, + { + "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.10mm HighDetail @Creality CR-6 0.4.json", + "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" + }, + { + "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.2", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.2.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.4.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.6", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.6.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.8", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.8.json" + }, + { + "name": "0.12mm Fine @Creality CR10Max", + "sub_path": "process/0.12mm Fine @Creality CR10Max.json" + }, + { + "name": "0.12mm Fine @Creality CR10SE 0.2", + "sub_path": "process/0.12mm Fine @Creality CR10SE 0.2.json" + }, + { + "name": "0.12mm Fine @Creality CR10SE 0.4", + "sub_path": "process/0.12mm Fine @Creality CR10SE 0.4.json" + }, + { + "name": "0.12mm Fine @Creality CR10SE 0.6", + "sub_path": "process/0.12mm Fine @Creality CR10SE 0.6.json" + }, + { + "name": "0.12mm Fine @Creality CR10SE 0.8", + "sub_path": "process/0.12mm Fine @Creality CR10SE 0.8.json" + }, + { + "name": "0.12mm Detail @Creality CR-6 0.2", + "sub_path": "process/0.12mm Detail @Creality CR-6 0.2.json" + }, + { + "name": "0.12mm Detail @Creality CR-6 0.4", + "sub_path": "process/0.12mm Detail @Creality CR-6 0.4.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V2", + "sub_path": "process/0.12mm Fine @Creality Ender3V2.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V2Neo", + "sub_path": "process/0.12mm Fine @Creality Ender3V2Neo.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3KE", + "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.2", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.6", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.8", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3", + "sub_path": "process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3Plus", + "sub_path": "process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.12mm Fine @Creality Ender5Pro (2019)", + "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" + }, + { + "name": "0.12mm Fine @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.12mm Fine @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.12mm Fine @Creality K1C", + "sub_path": "process/0.12mm Fine @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.12mm Fine @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.16mm Optimal @Creality CR10V2", + "sub_path": "process/0.16mm Optimal @Creality CR10V2.json" + }, + { + "name": "0.15mm Optimal @Creality CR10Max", + "sub_path": "process/0.15mm Optimal @Creality CR10Max.json" + }, + { + "name": "0.16mm Optimal @Creality CR10SE 0.2", + "sub_path": "process/0.16mm Optimal @Creality CR10SE 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality CR10SE 0.4", + "sub_path": "process/0.16mm Optimal @Creality CR10SE 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality CR10SE 0.6", + "sub_path": "process/0.16mm Optimal @Creality CR10SE 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality CR10SE 0.8", + "sub_path": "process/0.16mm Optimal @Creality CR10SE 0.8.json" + }, + { + "name": "0.15mm Optimal @Creality Ender3V2", + "sub_path": "process/0.15mm Optimal @Creality Ender3V2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V2Neo", + "sub_path": "process/0.16mm Optimal @Creality Ender3V2Neo.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.8.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 Ender3S1Plus 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3KE", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3Plus", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.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.16mm Optimal @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.15mm Optimal @Creality Ender5Pro (2019)", + "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.6.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.16mm Optimal @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.16mm Optimal @Creality K1C", + "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality CR10V2", + "sub_path": "process/0.20mm Standard @Creality CR10V2.json" + }, + { + "name": "0.20mm Standard @Creality CR10Max", + "sub_path": "process/0.20mm Standard @Creality CR10Max.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.2", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.2.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.4", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.4.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.6", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.6.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.8", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.8.json" + }, + { + "name": "0.20mm Standard @Creality CR-6 0.4", + "sub_path": "process/0.20mm Standard @Creality CR-6 0.4.json" + }, + { + "name": "0.20mm Standard @Creality CR-6 0.6", + "sub_path": "process/0.20mm Standard @Creality CR-6 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3", + "sub_path": "process/0.20mm Standard @Creality Ender3.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V2", + "sub_path": "process/0.20mm Standard @Creality Ender3V2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V2Neo", + "sub_path": "process/0.20mm Standard @Creality Ender3V2Neo.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 Ender3S1Plus 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3KE", + "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3", + "sub_path": "process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3Plus", + "sub_path": "process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.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) 0.25", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019)", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019).json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.8.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" + }, + { + "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality K1C", + "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.8.json" + }, + { + "name": "0.24mm Draft @Creality CR10Max", + "sub_path": "process/0.24mm Draft @Creality CR10Max.json" + }, + { + "name": "0.24mm Draft @Creality CR10SE 0.2", + "sub_path": "process/0.24mm Draft @Creality CR10SE 0.2.json" + }, + { + "name": "0.24mm Draft @Creality CR10SE 0.4", + "sub_path": "process/0.24mm Draft @Creality CR10SE 0.4.json" + }, + { + "name": "0.24mm Draft @Creality CR10SE 0.6", + "sub_path": "process/0.24mm Draft @Creality CR10SE 0.6.json" + }, + { + "name": "0.24mm Draft @Creality CR10SE 0.8", + "sub_path": "process/0.24mm Draft @Creality CR10SE 0.8.json" + }, + { + "name": "0.24mm Draft @Creality CR-6 0.4", + "sub_path": "process/0.24mm Draft @Creality CR-6 0.4.json" + }, + { + "name": "0.24mm Draft @Creality CR-6 0.6", + "sub_path": "process/0.24mm Draft @Creality CR-6 0.6.json" + }, + { + "name": "0.24mm Optimal @Creality CR-6 0.8", + "sub_path": "process/0.24mm Optimal @Creality CR-6 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V2", + "sub_path": "process/0.24mm Draft @Creality Ender3V2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V2Neo", + "sub_path": "process/0.24mm Draft @Creality Ender3V2Neo.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3KE", + "sub_path": "process/0.24mm Draft @Creality Ender3V3KE.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3", + "sub_path": "process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3", + "sub_path": "process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3Plus", + "sub_path": "process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Optimal @Creality Ender3V3Plus", + "sub_path": "process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019)", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.2", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.2.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.4", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.4.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.6.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.8", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.8.json" + }, + { + "name": "0.30mm Standard @Creality Ender3V3", + "sub_path": "process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Creality Ender3V3", + "sub_path": "process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality Ender3V3Plus", + "sub_path": "process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Creality Ender3V3Plus", + "sub_path": "process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality CR-6 0.4", + "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.4.json" + }, + { + "name": "0.28mm SuperDraft @Creality CR-6 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.6.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0.json" + }, + { + "name": "0.32mm Chunky @Creality CR-6 0.6", + "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" + }, + { + "name": "0.32mm Standard @Creality CR-6 0.8", + "sub_path": "process/0.32mm Standard @Creality CR-6 0.8.json" + }, + { + "name": "0.36mm SuperChunky @Creality CR-6 0.6", + "sub_path": "process/0.36mm SuperChunky @Creality CR-6 0.6.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 1.0", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 1.0.json" + }, + { + "name": "0.40mm Draft @Creality CR-6 0.8", + "sub_path": "process/0.40mm Draft @Creality CR-6 0.8.json" + }, + { + "name": "0.44mm SuperExtraChunky @Creality CR-6 0.6", + "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6 0.6.json" + }, + { + "name": "0.48mm Chunky @Creality CR-6 0.8", + "sub_path": "process/0.48mm Chunky @Creality CR-6 0.8.json" + }, + { + "name": "0.48mm Draft @Creality CR-6 0.8", + "sub_path": "process/0.48mm Draft @Creality CR-6 0.8.json" + }, + { + "name": "0.56mm SuperChunky @Creality CR-6 0.8", + "sub_path": "process/0.56mm SuperChunky @Creality CR-6 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Sermoon V1", + "sub_path": "process/0.16mm Optimal @Creality Sermoon V1.json" + }, + { + "name": "0.20mm Standard @Creality Sermoon V1", + "sub_path": "process/0.20mm Standard @Creality Sermoon V1.json" + }, + { + "name": "0.28mm Standard @Creality Sermoon V1", + "sub_path": "process/0.28mm Standard @Creality Sermoon V1.json" + }, + { + "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.24mm Optimal @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.24mm Optimal @Creality K1C", + "sub_path": "process/0.24mm Optimal @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1C", + "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.30mm Standard @Creality K1C", + "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" + }, + { + "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.32mm Optimal @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.32mm Optimal @Creality K1C", + "sub_path": "process/0.32mm Optimal @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json" + }, + { + "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.36mm Draft @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.36mm Draft @Creality K1C", + "sub_path": "process/0.36mm Draft @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.36mm Draft @Creality K1Max (0.6 nozzle).json" + }, + { + "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.40mm Standard @Creality K1C", + "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" + }, + { + "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.48mm Draft @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.48mm Draft @Creality K1C", + "sub_path": "process/0.48mm Draft @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.48mm Draft @Creality K1Max (0.8 nozzle).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_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Creality Generic ABS", + "sub_path": "filament/Creality Generic ABS.json" + }, + { + "name": "Creality Generic ASA", + "sub_path": "filament/Creality Generic ASA.json" + }, + { + "name": "Creality Generic PA-CF", + "sub_path": "filament/Creality Generic PA-CF.json" + }, + { + "name": "Creality Generic PC", + "sub_path": "filament/Creality Generic PC.json" + }, + { + "name": "Creality Generic PETG", + "sub_path": "filament/Creality Generic PETG.json" + }, + { + "name": "Creality Generic PLA", + "sub_path": "filament/Creality Generic PLA.json" + }, + { + "name": "Creality HF Generic PLA", + "sub_path": "filament/Creality HF Generic PLA.json" + }, + { + "name": "Creality HF Generic Speed PLA", + "sub_path": "filament/Creality HF Generic Speed PLA.json" + }, + { + "name": "Creality Generic PLA-CF", + "sub_path": "filament/Creality Generic PLA-CF.json" + }, + { + "name": "Creality Generic TPU", + "sub_path": "filament/Creality Generic TPU.json" + }, + { + "name": "Creality Generic ABS @Ender-3V3-all", + "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" + }, + { + "name": "Creality Generic ASA @Ender-3V3-all", + "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PA-CF @Ender-3V3-all", + "sub_path": "filament/Creality Generic PA-CF @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PETG @Ender-3V3-all", + "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA High Speed @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA Matte @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA Silk @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" + }, + { + "name": "Creality Generic TPU @Ender-3V3-all", + "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" + }, + { + "name": "Creality Generic ABS @K1-all", + "sub_path": "filament/Creality Generic ABS @K1-all.json" + }, + { + "name": "Creality Generic ASA @K1-all", + "sub_path": "filament/Creality Generic ASA @K1-all.json" + }, + { + "name": "Creality Generic PA-CF @K1-all", + "sub_path": "filament/Creality Generic PA-CF @K1-all.json" + }, + { + "name": "Creality Generic PC @K1-all", + "sub_path": "filament/Creality Generic PC @K1-all.json" + }, + { + "name": "Creality Generic PETG @K1-all", + "sub_path": "filament/Creality Generic PETG @K1-all.json" + }, + { + "name": "Creality Generic PLA @K1-all", + "sub_path": "filament/Creality Generic PLA @K1-all.json" + }, + { + "name": "Creality Generic PLA High Speed @K1-all", + "sub_path": "filament/Creality Generic PLA High Speed @K1-all.json" + }, + { + "name": "Creality Generic PLA Matte @K1-all", + "sub_path": "filament/Creality Generic PLA Matte @K1-all.json" + }, + { + "name": "Creality Generic PLA Silk @K1-all", + "sub_path": "filament/Creality Generic PLA Silk @K1-all.json" + }, + { + "name": "Creality Generic PLA-CF @K1-all", + "sub_path": "filament/Creality Generic PLA-CF @K1-all.json" + }, + { + "name": "Creality Generic TPU @K1-all", + "sub_path": "filament/Creality Generic TPU @K1-all.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "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" + }, + { + "name": "Creality CR-10 SE 0.2 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.2 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.4 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.4 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.6 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.6 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.8 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.8 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" + }, + { + "name": "Creality Ender-3 V2 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V2 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 V2 Neo 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V2 Neo 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.8 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-3 S1 Plus 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 V3 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 Plus 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 Plus 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 Plus 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 V3 Plus 0.6 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.2 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.25 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.3 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.3 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-5 Pro (2019) 0.5 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.6 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.8 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 1.0 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 1.0 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 Sermoon V1 0.4 nozzle", + "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" + }, + { + "name": "Creality K1 (0.4 nozzle)", + "sub_path": "machine/Creality K1 (0.4 nozzle).json" + }, + { + "name": "Creality K1 (0.6 nozzle)", + "sub_path": "machine/Creality K1 (0.6 nozzle).json" + }, + { + "name": "Creality K1 (0.8 nozzle)", + "sub_path": "machine/Creality K1 (0.8 nozzle).json" + }, + { + "name": "Creality K1C 0.4 nozzle", + "sub_path": "machine/Creality K1C 0.4 nozzle.json" + }, + { + "name": "Creality K1C 0.6 nozzle", + "sub_path": "machine/Creality K1C 0.6 nozzle.json" + }, + { + "name": "Creality K1C 0.8 nozzle", + "sub_path": "machine/Creality K1C 0.8 nozzle.json" + }, + { + "name": "Creality K1 Max (0.4 nozzle)", + "sub_path": "machine/Creality K1 Max (0.4 nozzle).json" + }, + { + "name": "Creality K1 Max (0.6 nozzle)", + "sub_path": "machine/Creality K1 Max (0.6 nozzle).json" + }, + { + "name": "Creality K1 Max (0.8 nozzle)", + "sub_path": "machine/Creality K1 Max (0.8 nozzle).json" + } + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/Creality Ender-3 V3 Plus_cover.png b/resources/profiles/Creality/Creality Ender-3 V3 Plus_cover.png new file mode 100644 index 0000000000..1c33bec2f2 Binary files /dev/null and b/resources/profiles/Creality/Creality Ender-3 V3 Plus_cover.png differ diff --git a/resources/profiles/Creality/Creality Ender-3 V3_cover.png b/resources/profiles/Creality/Creality Ender-3 V3_cover.png new file mode 100644 index 0000000000..510f02d214 Binary files /dev/null and b/resources/profiles/Creality/Creality Ender-3 V3_cover.png differ diff --git a/resources/profiles/Creality/Creality Sermoon V1_cover.png b/resources/profiles/Creality/Creality Sermoon V1_cover.png new file mode 100644 index 0000000000..4f5a07ef36 Binary files /dev/null and b/resources/profiles/Creality/Creality Sermoon V1_cover.png differ diff --git a/resources/profiles/Creality/creality_cr10se_buildplate_model.stl b/resources/profiles/Creality/creality_cr10se_buildplate_model.stl index cf612c3388..5ea81d6e08 100644 Binary files a/resources/profiles/Creality/creality_cr10se_buildplate_model.stl and b/resources/profiles/Creality/creality_cr10se_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3s1plus_buildplate_model.stl b/resources/profiles/Creality/creality_ender3s1plus_buildplate_model.stl index 24d0b4f914..f2baabf4ba 100644 Binary files a/resources/profiles/Creality/creality_ender3s1plus_buildplate_model.stl and b/resources/profiles/Creality/creality_ender3s1plus_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3s1pro_buildplate_model.stl b/resources/profiles/Creality/creality_ender3s1pro_buildplate_model.stl index a3837d2b59..b44c071e0c 100644 Binary files a/resources/profiles/Creality/creality_ender3s1pro_buildplate_model.stl and b/resources/profiles/Creality/creality_ender3s1pro_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3v3_buildplate_model.stl b/resources/profiles/Creality/creality_ender3v3_buildplate_model.stl new file mode 100644 index 0000000000..ef159f264b Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png b/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png new file mode 100644 index 0000000000..2e8d441e67 Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png differ diff --git a/resources/profiles/Creality/creality_ender3v3plus_buildplate_model.stl b/resources/profiles/Creality/creality_ender3v3plus_buildplate_model.stl new file mode 100644 index 0000000000..c742406e33 Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3plus_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3v3plus_buildplate_texture.png.png b/resources/profiles/Creality/creality_ender3v3plus_buildplate_texture.png.png new file mode 100644 index 0000000000..4dcf16e604 Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3plus_buildplate_texture.png.png differ diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json index eaad0a146f..e28e1487f2 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json @@ -12,6 +12,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic ABS.json b/resources/profiles/Creality/filament/Creality Generic ABS.json index d78b37cc4b..288cb5dbad 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS.json @@ -19,6 +19,7 @@ "Creality CR-6 Max 0.4 nozzle", "Creality CR-6 Max 0.6 nozzle", "Creality CR-6 Max 0.8 nozzle", + "Creality Sermoon V1 0.4 nozzle", "Creality Ender-3 0.2 nozzle", "Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json index 9a8f1a7731..bf2d0f3383 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json @@ -12,6 +12,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json new file mode 100644 index 0000000000..1c86dd11b9 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Creality Generic PA-CF @Ender-3V3-all", + "inherits": "Creality Generic PA-CF", + "from": "system", + "setting_id": "GFSN99_01", + "instantiation": "true", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json index 1a5bc133de..6b93b85738 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json @@ -22,6 +22,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json index 5b4f750c9a..9528472e4c 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json @@ -44,6 +44,9 @@ "nozzle_temperature": [ "250" ], + "reduce_fan_stop_start_freq": [ + "0" + ], "compatible_printers": [ "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PETG.json b/resources/profiles/Creality/filament/Creality Generic PETG.json index a1850db60a..fc48c8a104 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG.json @@ -29,6 +29,7 @@ "Creality CR-6 Max 0.4 nozzle", "Creality CR-6 Max 0.6 nozzle", "Creality CR-6 Max 0.8 nozzle", + "Creality Sermoon V1 0.4 nozzle", "Creality Ender-3 0.2 nozzle", "Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json index 8230c3b931..e2f894145f 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json @@ -20,6 +20,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json index 2d6ae3d262..50ed25372e 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json @@ -35,6 +35,9 @@ "textured_plate_temp_initial_layer": [ "55" ], + "reduce_fan_stop_start_freq": [ + "0" + ], "compatible_printers": [ "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json index 1c09f3d775..4c268755f0 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json @@ -13,6 +13,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json index 3b5d9fabb8..743bb8ce14 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json @@ -11,6 +11,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json index b735ccfad6..389abbe0bb 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json @@ -11,6 +11,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA.json b/resources/profiles/Creality/filament/Creality Generic PLA.json index 8f0fe91ad4..e0383bfc98 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA.json @@ -20,6 +20,7 @@ "Creality CR-6 Max 0.4 nozzle", "Creality CR-6 Max 0.6 nozzle", "Creality CR-6 Max 0.8 nozzle", + "Creality Sermoon V1 0.4 nozzle", "Creality Ender-3 0.2 nozzle", "Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json index 75c2d8d834..a776cc82ab 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json @@ -18,6 +18,10 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json index b3d572cc84..a19eec76ef 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json @@ -29,6 +29,9 @@ "slow_down_layer_time": [ "5" ], + "reduce_fan_stop_start_freq": [ + "0" + ], "compatible_printers": [ "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic TPU.json b/resources/profiles/Creality/filament/Creality Generic TPU.json index 1e828955bd..ac48f2d032 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU.json @@ -16,6 +16,7 @@ "Creality K1 Max (0.4 nozzle)", "Creality K1 Max (0.6 nozzle)", "Creality K1 Max (0.8 nozzle)", + "Creality Sermoon V1 0.4 nozzle", "Creality CR-10 SE 0.2 nozzle", "Creality CR-10 SE 0.4 nozzle", "Creality CR-10 SE 0.6 nozzle", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json index 4074b93881..1ecafe3f8d 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json @@ -15,11 +15,11 @@ ], "printable_area": [ "0x0", - "250x0", - "250x250", - "0x250" + "220x0", + "220x220", + "0x220" ], - "printable_height": "250", + "printable_height": "265", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "140", "extruder_clearance_radius": "65", @@ -28,8 +28,8 @@ "support_chamber_temp_control": "1", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "20000", - "20000" + "5000", + "5000" ], "machine_max_acceleration_retracting": [ "5000", @@ -40,12 +40,12 @@ "20000" ], "machine_max_acceleration_x": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_y": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_z": [ "500", @@ -56,36 +56,36 @@ "5000" ], "machine_max_speed_e": [ - "25", - "25" + "100", + "100" ], "machine_max_speed_x": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_y": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_z": [ - "12", - "12" + "30", + "30" ], "machine_max_jerk_e": [ "2.5", "2.5" ], "machine_max_jerk_x": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_y": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_z": [ - "0.2", - "0.4" + "2", + "2" ], "max_layer_height": [ "0.32" @@ -118,7 +118,7 @@ "default_filament_profile": [ "Creality Generic PLA" ], - "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \nG28 ;Home \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 S[material_print_temperature_layer_0] \nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json index cba645a1b8..6214d686b7 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json @@ -15,11 +15,11 @@ ], "printable_area": [ "0x0", - "250x0", - "250x250", - "0x250" + "220x0", + "220x220", + "0x220" ], - "printable_height": "250", + "printable_height": "265", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "140", "extruder_clearance_radius": "65", @@ -28,8 +28,8 @@ "support_chamber_temp_control": "1", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "20000", - "20000" + "5000", + "5000" ], "machine_max_acceleration_retracting": [ "5000", @@ -40,12 +40,12 @@ "20000" ], "machine_max_acceleration_x": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_y": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_z": [ "500", @@ -56,36 +56,36 @@ "5000" ], "machine_max_speed_e": [ - "25", - "25" + "100", + "100" ], "machine_max_speed_x": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_y": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_z": [ - "12", - "12" + "30", + "30" ], "machine_max_jerk_e": [ "2.5", "2.5" ], "machine_max_jerk_x": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_y": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_z": [ - "0.2", - "0.4" + "2", + "2" ], "max_layer_height": [ "0.32" @@ -118,7 +118,7 @@ "default_filament_profile": [ "Creality Generic PLA" ], - "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \nG28 ;Home \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 S[material_print_temperature_layer_0] \nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json index 7689480ce9..5f56e1ff87 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json @@ -15,11 +15,11 @@ ], "printable_area": [ "0x0", - "250x0", - "250x250", - "0x250" + "220x0", + "220x220", + "0x220" ], - "printable_height": "250", + "printable_height": "265", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "140", "extruder_clearance_radius": "65", @@ -28,8 +28,8 @@ "support_chamber_temp_control": "1", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "20000", - "20000" + "5000", + "5000" ], "machine_max_acceleration_retracting": [ "5000", @@ -40,12 +40,12 @@ "20000" ], "machine_max_acceleration_x": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_y": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_z": [ "500", @@ -56,36 +56,36 @@ "5000" ], "machine_max_speed_e": [ - "25", - "25" + "100", + "100" ], "machine_max_speed_x": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_y": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_z": [ - "12", - "12" + "30", + "30" ], "machine_max_jerk_e": [ "2.5", "2.5" ], "machine_max_jerk_x": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_y": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_z": [ - "0.2", - "0.4" + "2", + "2" ], "max_layer_height": [ "0.32" @@ -118,7 +118,7 @@ "default_filament_profile": [ "Creality Generic PLA" ], - "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \nG28 ;Home \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 S[material_print_temperature_layer_0] \nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json index 1420e1213a..00d3f3ff44 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json @@ -15,11 +15,11 @@ ], "printable_area": [ "0x0", - "250x0", - "250x250", - "0x250" + "220x0", + "220x220", + "0x220" ], - "printable_height": "250", + "printable_height": "265", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "140", "extruder_clearance_radius": "65", @@ -28,8 +28,8 @@ "support_chamber_temp_control": "1", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "20000", - "20000" + "5000", + "5000" ], "machine_max_acceleration_retracting": [ "5000", @@ -40,12 +40,12 @@ "20000" ], "machine_max_acceleration_x": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_y": [ - "20000", - "20000" + "8000", + "8000" ], "machine_max_acceleration_z": [ "500", @@ -56,36 +56,36 @@ "5000" ], "machine_max_speed_e": [ - "25", - "25" + "100", + "100" ], "machine_max_speed_x": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_y": [ - "500", - "200" + "600", + "600" ], "machine_max_speed_z": [ - "12", - "12" + "30", + "30" ], "machine_max_jerk_e": [ "2.5", "2.5" ], "machine_max_jerk_x": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_y": [ - "9", - "9" + "10", + "10" ], "machine_max_jerk_z": [ - "0.2", - "0.4" + "2", + "2" ], "max_layer_height": [ "0.32" @@ -118,7 +118,7 @@ "default_filament_profile": [ "Creality Generic PLA" ], - "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \nG28 ;Home \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 S[material_print_temperature_layer_0] \nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.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 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json index 068b22b074..158e30b6e7 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json @@ -102,9 +102,6 @@ "deretraction_speed": [ "45" ], - "z_hop": [ - "0" - ], "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json index a3eeeedbad..1743f749ce 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json @@ -102,9 +102,6 @@ "deretraction_speed": [ "45" ], - "z_hop": [ - "0" - ], "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json index d9dd67376c..445e0b0bc3 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json @@ -102,9 +102,6 @@ "deretraction_speed": [ "45" ], - "z_hop": [ - "0" - ], "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json index 0657694350..f8930b0d96 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json @@ -12,9 +12,10 @@ "nozzle_diameter": [ "0.8" ], + "bed_shape": "rectangular", "printable_area": [ "0x0", - "3000x0", + "300x0", "300x300", "0x300" ], @@ -102,9 +103,6 @@ "deretraction_speed": [ "45" ], - "z_hop": [ - "0" - ], "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json new file mode 100644 index 0000000000..4eac0521a5 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json @@ -0,0 +1,134 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Ender-3 V3 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.20mm Standard @Creality Ender3 V3", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "0", + "support_multi_bed_types": "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": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "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" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.12" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json new file mode 100644 index 0000000000..7f4795ee2a --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json @@ -0,0 +1,134 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Ender-3 V3 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.30mm Standard @Creality Ender3 V3", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "0", + "support_multi_bed_types": "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": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "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" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.12" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json index e00049c085..d2253ed382 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json @@ -47,12 +47,12 @@ "8000" ], "machine_max_acceleration_z": [ - "500", - "500" + "300", + "300" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ "500", @@ -71,12 +71,12 @@ "5" ], "machine_max_jerk_x": [ - "10", - "10" + "7", + "7" ], "machine_max_jerk_y": [ - "10", - "10" + "7", + "7" ], "machine_max_jerk_z": [ "0.4", @@ -91,8 +91,11 @@ "retraction_minimum_travel": [ "2" ], + "wipe_distance": [ + "2" + ], "retract_before_wipe": [ - "70%" + "100%" ], "retraction_length": [ "0.5" @@ -101,26 +104,26 @@ "1" ], "retraction_speed": [ - "40" + "30" ], "deretraction_speed": [ - "40" + "0" ], "z_hop": [ "0.2" ], "single_extruder_multi_material": "1", "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", + "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ "Creality Generic PLA @Ender-3V3-all" ], - "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.0 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.0 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-1.7 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-1.7 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", - "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z5 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", + "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=6,6 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", + "machine_end_gcode": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z{if max_layer_z < 50}25{else}5{endif} ;Raise Z more\nG90 ;Absolute positionning\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ "96x96", "300x300" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json new file mode 100644 index 0000000000..c3f9026db2 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json @@ -0,0 +1,134 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Ender-3 V3 Plus 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3 Plus", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.20mm Standard @Creality Ender3 V3 Plus", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "330", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "0", + "support_multi_bed_types": "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": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "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" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.12" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json new file mode 100644 index 0000000000..36e6dadd85 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json @@ -0,0 +1,134 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Ender-3 V3 Plus 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3 Plus", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.30mm Standard @Creality Ender3 V3 Plus", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "330", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "0", + "support_multi_bed_types": "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": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "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" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.12" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json new file mode 100644 index 0000000000..a00cd79988 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Creality Ender-3 V3 Plus", + "model_id": "Creality-Ender3-V3-Plus", + "nozzle_diameter": "0.4;0.6", + "machine_tech": "FFF", + "family": "Creality", + "bed_model": "creality_ender3v3plus_buildplate_model.stl", + "bed_texture": "creality_ender3v3plus_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json index 0ad4760407..5c8c2b73b6 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" - ], - "machine_max_acceleration_retracting": [ "2500", "2500" ], + "machine_max_acceleration_retracting": [ + "500", + "500" + ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -102,7 +102,7 @@ "1" ], "retraction_speed": [ - "30" + "40" ], "deretraction_speed": [ "30" @@ -114,11 +114,10 @@ "default_filament_profile": [ "Creality Generic PLA @Ender-3V3-all" ], - "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json index 4911dcc32b..15ddb3e240 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_variant": "0.4", "gcode_flavor": "marlin2", "printer_structure": "i3", - "default_print_profile": "0.20mm Standard @Creality Ender3V3SE", + "default_print_profile": "0.20mm Standard @Creality Ender3V3SE 0.4", "extruder_clearance_height_to_rod": "47", "extruder_clearance_max_radius": "90", "extruder_clearance_radius": "90", @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" - ], - "machine_max_acceleration_retracting": [ "2500", "2500" ], + "machine_max_acceleration_retracting": [ + "500", + "500" + ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -102,7 +102,7 @@ "1" ], "retraction_speed": [ - "30" + "40" ], "deretraction_speed": [ "30" @@ -114,11 +114,10 @@ "default_filament_profile": [ "Creality Generic PLA @Ender-3V3-all" ], - "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json index 75b28a18ae..ccc53b8c90 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" - ], - "machine_max_acceleration_retracting": [ "2500", "2500" ], + "machine_max_acceleration_retracting": [ + "500", + "500" + ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -102,7 +102,7 @@ "1" ], "retraction_speed": [ - "30" + "40" ], "deretraction_speed": [ "30" @@ -114,11 +114,10 @@ "default_filament_profile": [ "Creality Generic PLA @Ender-3V3-all" ], - "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json index 59e8f249dc..f5e565f0cd 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" - ], - "machine_max_acceleration_retracting": [ "2500", "2500" ], + "machine_max_acceleration_retracting": [ + "500", + "500" + ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -102,7 +102,7 @@ "1" ], "retraction_speed": [ - "30" + "40" ], "deretraction_speed": [ "30" @@ -114,11 +114,10 @@ "default_filament_profile": [ "Creality Generic PLA @Ender-3V3-all" ], - "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", + "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3.json b/resources/profiles/Creality/machine/Creality Ender-3 V3.json new file mode 100644 index 0000000000..fc5eb11265 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Creality Ender-3 V3", + "model_id": "Creality-Ender3-V3", + "nozzle_diameter": "0.4;0.6", + "machine_tech": "FFF", + "family": "Creality", + "bed_model": "creality_ender3v3_buildplate_model.stl", + "bed_texture": "creality_ender3v3_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json index 5683fdb624..707fb25040 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json @@ -1,58 +1,133 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 (0.4 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Creality K1 (0.4 nozzle)", - "nozzle_diameter": ["0.4"], - "printer_variant": "0.4", - "printable_area": ["0x0", "220x0", "220x220", "0x220"], - "printable_height": "250", - "nozzle_type": "brass", - "auxiliary_fan": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "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"], - "max_layer_height": ["0.3"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.6"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 (0.4 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Creality K1 (0.4 nozzle)", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "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" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json index c3080ab4dd..f5b4464a86 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json @@ -1,58 +1,133 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 (0.6 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1", - "gcode_flavor": "klipper", - "default_print_profile": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "nozzle_diameter": ["0.6"], - "printer_variant": "0.6", - "printable_area": ["0x0", "220x0", "220x220", "0x220"], - "printable_height": "250", - "nozzle_type": "brass", - "auxiliary_fan": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "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"], - "max_layer_height": ["0.4"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 (0.6 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1", + "gcode_flavor": "klipper", + "default_print_profile": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "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" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json index 61649c930b..2c980a66aa 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json @@ -1,58 +1,133 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 (0.8 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1", - "gcode_flavor": "klipper", - "default_print_profile": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "nozzle_diameter": ["0.8"], - "printer_variant": "0.8", - "printable_area": ["0x0", "220x0", "220x220", "0x220"], - "printable_height": "250", - "nozzle_type": "brass", - "auxiliary_fan": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "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"], - "max_layer_height": ["0.5"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 (0.8 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1", + "gcode_flavor": "klipper", + "default_print_profile": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "nozzle_diameter": [ + "0.8" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "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" + ], + "max_layer_height": [ + "0.5" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json index 524131fb0b..bb772a0bd3 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json @@ -1,59 +1,134 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 Max (0.4 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1 Max", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "nozzle_diameter": ["0.4"], - "printer_variant": "0.4", - "printable_area": ["0x0", "300x0", "300x300", "0x300"], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "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"], - "max_layer_height": ["0.3"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.6"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 Max (0.4 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1 Max", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "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" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json index 21abf7ec8f..d19a20ace3 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json @@ -1,59 +1,134 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 Max (0.6 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1 Max", - "gcode_flavor": "klipper", - "default_print_profile": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "nozzle_diameter": ["0.6"], - "printer_variant": "0.6", - "printable_area": ["0x0", "300x0", "300x300", "0x300"], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "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"], - "max_layer_height": ["0.4"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 Max (0.6 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1 Max", + "gcode_flavor": "klipper", + "default_print_profile": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "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" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json index 8a65bf9154..e31c188086 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json @@ -1,59 +1,134 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 Max (0.8 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1 Max", - "gcode_flavor": "klipper", - "default_print_profile": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "nozzle_diameter": ["0.8"], - "printer_variant": "0.8", - "printable_area": ["0x0", "300x0", "300x300", "0x300"], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "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": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "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"], - "max_layer_height": ["0.5"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 Max (0.8 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1 Max", + "gcode_flavor": "klipper", + "default_print_profile": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "nozzle_diameter": [ + "0.8" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "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": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "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" + ], + "max_layer_height": [ + "0.5" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max.json b/resources/profiles/Creality/machine/Creality K1 Max.json index b74f86b5f4..10df2e7b5c 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max.json +++ b/resources/profiles/Creality/machine/Creality K1 Max.json @@ -9,4 +9,4 @@ "bed_texture": "creality_k1max_buildplate_texture.png", "hotend_model": "", "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1.json b/resources/profiles/Creality/machine/Creality K1.json index dedfc16031..73e10d77a6 100644 --- a/resources/profiles/Creality/machine/Creality K1.json +++ b/resources/profiles/Creality/machine/Creality K1.json @@ -9,4 +9,4 @@ "bed_texture": "creality_k1_buildplate_texture.png", "hotend_model": "", "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PC @K1-all;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PETG;Creality Generic TPU" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json index ff0a887772..d4deca8aab 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json @@ -21,8 +21,8 @@ "printable_height": "250", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -94,7 +94,7 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.6" @@ -114,6 +114,9 @@ "z_hop": [ "0.2" ], + "wipe_distance": [ + "2" + ], "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "PAUSE", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json index 1cb4effc69..46b2ae9464 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json @@ -21,8 +21,8 @@ "printable_height": "250", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -94,7 +94,7 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.5" @@ -114,6 +114,9 @@ "z_hop": [ "0.2" ], + "wipe_distance": [ + "2" + ], "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "PAUSE", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json index 3b41fbd72c..6788e0c5ec 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json @@ -21,8 +21,8 @@ "printable_height": "250", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -94,7 +94,7 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.5" @@ -114,6 +114,9 @@ "z_hop": [ "0.2" ], + "wipe_distance": [ + "2" + ], "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "PAUSE", diff --git a/resources/profiles/Creality/machine/Creality K1C.json b/resources/profiles/Creality/machine/Creality K1C.json index 673856d383..610866a1ce 100644 --- a/resources/profiles/Creality/machine/Creality K1C.json +++ b/resources/profiles/Creality/machine/Creality K1C.json @@ -9,4 +9,4 @@ "bed_texture": "creality_k1c_buildplate_texture.png", "hotend_model": "", "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json new file mode 100644 index 0000000000..c819c9847f --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json @@ -0,0 +1,73 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Sermoon V1 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Sermoon V1", + "default_filament_profile": [ + "Creality Generic PLA" + ], + "default_print_profile": "0.20mm Standard @Creality Sermoon V1", + "nozzle_diameter": [ + "0.4" + ], + "retract_when_changing_layer": [ + "0" + ], + "retraction_length": [ + "0.8" + ], + "z_hop": [ + "0" + ], + "machine_max_acceleration_extruding": [ + "7000", + "500" + ], + "machine_max_acceleration_retracting": [ + "7000", + "1000" + ], + "machine_max_acceleration_x": [ + "7000", + "500" + ], + "machine_max_acceleration_y": [ + "7000", + "500" + ], + "machine_max_speed_x": [ + "7000", + "500" + ], + "machine_max_speed_y": [ + "7000", + "500" + ], + "layer_change_gcode": "SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}\n;AFTER_LAYER_CHANGE\n;Z>[layer_z]", + "machine_start_gcode": ";generated by SuperSlicer 1.5.0 on 2023-06-07 at 17:32:332\nG90 ; use absolute coordinates\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM140 S[bed_temperature_initial_layer] ; Set bed temp\nM104 S170 ; set temporary nozzle temp to prevent oozing during homing\nG28 ; Home\nM105 ; Report Temps\nM190 S[bed_temperature_initial_layer] ; Wait for bed to reach target\nM104 S[nozzle_temperature_initial_layer] ; Set hot end temp\nM105 ; Report Temps\nM109 S[nozzle_temperature_initial_layer] ; Wait for hot end to reach target\nM105 ; Report Temps\nM82 ; Absolute extrusion mode\n#G28 ; Home\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up\nG1 X173.0 Y10 Z0.28 F5000.0 ; Move to start position\nG1 X173.0 Y170.0 Z0.28 F1500.0 E15 ; Draw the first line\nG1 X173.4 Y170.0 Z0.28 F5000.0 ; Move to side a little\nG1 X173.4 Y40 Z0.28 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up\nG92 E0\nSTART_PRINT", + "machine_end_gcode": "M140 S0 ; Turn-off bed\nM107 ; Turn off cooling fan\nG91 ; Relative positioning\nG1 E-1 F2700 ; Retract\nG1 E-2 Z0.2 F2400 ; Retract and raise Z\nG1 X5 Y5 F3000 ; Wipe\nG1 Z0.95 ; Raise Z more\nG90 ; Absolute positioning\nG1 X10 Y160 ; Eject print\nM106 S0 ; Turn off fan\nM104 S0 ; Turn-off hot end\nM140 S0 ; Turn-off bed\n{ if max_layer_z < printable_height-10 }G1 Z{min(max_layer_z+70,printable_height-10)}; move print up {endif}; Eject print z (conditional)\nM84 X Y E ; Disable steppers except Z\nG92 E0 ; Reset Extruder\nM82;abs extrusion\nEND_PRINT", + "machine_pause_gcode": "M25 ;pause print\n; Sermoon V1 Marlin buffers commands, so flush with these G4 P10 commands\nG4 P10\nG4 P10\nG4 P10\nG4 P10\nG4 P10\nG4 P10\nG4 P10\nG4 P10\nG4 P10\nG4 P10\n", + "printable_area": [ + "0x0", + "175x0", + "175x175", + "0x175" + ], + "print_host": "10.0.0.51", + "print_host_webui": "10.0.0.51", + "gcode_flavor": "marlin", + "thumbnails": [ + "64x64", + "400x400" + ], + "extruder_clearance_height_to_lid": "125", + "extruder_clearance_height_to_rod": "40", + "extruder_clearance_radius": "50", + "printable_height": "165", + "change_filament_gcode": "; S1 Pause For Filament change\nM125", + "nozzle_type": "brass", + "auxiliary_fan": "1" +} diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1.json b/resources/profiles/Creality/machine/Creality Sermoon V1.json new file mode 100644 index 0000000000..b09dff72c2 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Sermoon V1.json @@ -0,0 +1,15 @@ +{ + "type": "machine_model", + "name": "Creality Sermoon V1", + "model_id": "Creality_Sermoon_V1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Creality", + "bed_model": "", + "bed_texture": "", + "z_hop_types": [ + "Spiral Lift" + ], + "hotend_model": "", + "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS;Creality Generic TPU" +} 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 86937ca76f..1b4cb0f7c7 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json new file mode 100644 index 0000000000..be3df15a7b --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality CR10SE 0.2", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.12", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.25", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.25", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.25", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.25", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.25", + "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.25", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "4", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.25", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10SE 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json new file mode 100644 index 0000000000..6bd0765982 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality CR10SE 0.4", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.12", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.42", + "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": "4", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json new file mode 100644 index 0000000000..2eeca51a19 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality CR10SE 0.6", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.12", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.65", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.65", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.65", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.65", + "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.65", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "4", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.65", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json new file mode 100644 index 0000000000..5e0d570102 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality CR10SE 0.8", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.12", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.85", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.85", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.85", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.85", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.85", + "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.85", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "4", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.85", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json index 2e4347739b..4d13a37020 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json index 68cb76aeef..1ad9ee0c20 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json index 9e03ec13dd..388dc35428 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json index 0ceadf8e36..5f415e02f4 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json index 7fdec59c18..149b0606ba 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json index 8db8cbe7bf..21b1ea90ae 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json index 53a9e37792..51d36a3ab0 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json index 29c2821863..b930085032 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 eac84c4088..482510d436 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json index eb9a1a3523..91766d0edb 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..57d4c8aca7 --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.12", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.12", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json index b67f41ee2a..8e3b8b6b27 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json @@ -12,8 +12,8 @@ "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "5", "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_flow": "1", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,21 +23,20 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.05", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "4000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", - "infill_combination": "0", + "infill_combination": "1", "sparse_infill_line_width": "0.45", "infill_wall_overlap": "25%", "interface_shells": "0", @@ -49,10 +48,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +60,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.45", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,9 +68,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "4", @@ -82,36 +81,39 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "200", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", "top_shell_layers": "5", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "250", + "outer_wall_speed": "200", "inner_wall_speed": "300", "internal_solid_infill_speed": "300", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", + "role_based_wipe_speed" : "0", + "wipe_speed": "200", "prime_tower_width": "60", - "xy_hole_compensation": "0", + "xy_hole_compensation": "0.025", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", + "accel_to_decel_enable": "0", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json new file mode 100644 index 0000000000..9265f5ba6b --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.12", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "300", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.12", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json index 49c2731f11..110c3ed2ae 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.22", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.26", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.26", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.22", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "4", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.22", "top_shell_layers": "5", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.2 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json similarity index 90% rename from resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json index b9b5e749ff..0f61222cfb 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.12mm Fine @Creality Ender3V3SE", + "name": "0.12mm Fine @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -30,7 +30,7 @@ "line_width": "0.46", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", @@ -82,12 +82,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", "top_shell_layers": "5", "top_shell_thickness": "0.8", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json index 155366410f..a5e16d4c15 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.62", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.66", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.62", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "4", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", "top_shell_layers": "5", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.6 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json index e5ac797e01..9cd2830067 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.82", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.86", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.86", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.82", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "4", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.82", "top_shell_layers": "5", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.8 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json index 95e24872c8..96e4873ba5 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json index a37823ac30..ffb4b246d7 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -54,9 +53,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json index f6c4961739..4201d9da3f 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -54,9 +53,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json index 1d6328ddac..7716091f72 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "5", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -22,7 +22,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -31,7 +30,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -51,9 +50,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -62,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", 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 eb649fb1f1..b1eefe77cf 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 997f6face1..efbbca9e1a 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json index 9404f9d2f8..021375e6fb 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 index d265bb237a..3bfa0d4b3d 100644 --- 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 @@ -39,7 +39,7 @@ "support_object_xy_distance": "60%", "support_speed": "40", "support_style": "grid", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_top_z_distance": "0.15", "top_surface_acceleration": "0", "travel_acceleration": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json new file mode 100644 index 0000000000..f4d62a584c --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality CR10SE 0.2", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.25", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.25", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.25", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.25", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.25", + "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.25", + "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_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.25", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json new file mode 100644 index 0000000000..2e4809f23e --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality CR10SE 0.4", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.42", + "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_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json new file mode 100644 index 0000000000..b2f286aca8 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality CR10SE 0.6", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.63", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.65", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.65", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.63", + "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.63", + "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_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.63", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json new file mode 100644 index 0000000000..534f569e77 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality CR10SE 0.8", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.85", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.85", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.85", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.85", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.85", + "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.85", + "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_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.85", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.8 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 0ded3d9508..e897ed19d0 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json index 26de209709..30f0b275c4 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json index c57f64c041..138ee4b358 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json index 8cce719d05..d3e5e40057 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json index 493e91839d..eddc5313b1 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json index 15ea186a05..2a06bb5fdd 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json index c673f050fd..646101af31 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json index 3d99e46056..a65f9b592c 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json index 368893012f..7d4496bd6a 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 2d7a02e45e..b13a3bc96b 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json index 02c6ca2b97..3598264ebe 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.25", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.25", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", "initial_layer_speed": "35%", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json index 99e42c2e21..dc3d53d424 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.45", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json index 7ced645cdf..40ecebc380 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.65", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.65", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.65", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", "initial_layer_speed": "35%", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json index 8df4a85ac1..9af147c161 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.85", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.85", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.8", "top_shell_layers": "7", "top_shell_thickness": "0.8", "initial_layer_speed": "35%", 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 6897175b64..00c879a3d3 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json index 6dc83dadbd..7569e603c9 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..2c72981206 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.16", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.16", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json index 77463015b9..d0357c0246 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json @@ -12,8 +12,8 @@ "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "4", "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_flow": "1", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,21 +23,20 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.05", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "4000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", - "infill_combination": "0", + "infill_combination": "1", "sparse_infill_line_width": "0.45", "infill_wall_overlap": "25%", "interface_shells": "0", @@ -49,10 +48,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +60,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.45", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,9 +68,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -82,36 +81,39 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "200", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "250", + "outer_wall_speed": "200", "inner_wall_speed": "300", "internal_solid_infill_speed": "300", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", + "role_based_wipe_speed" : "0", + "wipe_speed": "200", "prime_tower_width": "60", - "xy_hole_compensation": "0", + "xy_hole_compensation": "0.025", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", + "accel_to_decel_enable": "0", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json new file mode 100644 index 0000000000..8101302b1a --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.16", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "300", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.16", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json index d2f8ed8eef..0ad999cb73 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.22", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.26", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.26", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.22", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.22", "top_shell_layers": "6", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.2 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json similarity index 90% rename from resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json index 9f784cdb15..99a7c2010c 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender3V3SE", + "name": "0.16mm Optimal @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -30,7 +30,7 @@ "line_width": "0.46", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", @@ -82,12 +82,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", "top_shell_layers": "6", "top_shell_thickness": "0.8", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json index f6dab37b93..f7d17cbea3 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.62", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.66", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.62", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", "top_shell_layers": "6", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.6 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json index f0989462d4..284101f540 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.82", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.86", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.86", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.82", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.82", "top_shell_layers": "6", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.8 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 5600ad9174..47e76af641 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 78c523f829..8cd7007cf4 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 86044fd774..3a49495490 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 64fdc16a1f..04a512845a 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 6586f39240..2426364205 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json index 63ea8d7a56..42d05db649 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -54,9 +53,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -113,4 +115,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json index e9c190d94c..c1a798d74d 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -54,9 +53,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json index d3a62ef798..f55aa62c1b 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json @@ -1,19 +1,19 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -22,7 +22,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -31,7 +30,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -51,9 +50,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -62,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -85,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -110,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.4 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.4 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json new file mode 100644 index 0000000000..60f390d1c1 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json @@ -0,0 +1,111 @@ +{ + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "65%", + "bottom_shell_thickness": "0.6", + "bridge_acceleration": "50%", + "bridge_speed": "120", + "brim_type": "no_brim", + "brim_width": "4", + "default_acceleration": "4000", + "default_jerk": "5", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "limited", + "elefant_foot_compensation": "0.3", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_support": "1", + "exclude_object": "1", + "from": "User", + "gap_infill_speed": "195", + "gcode_comments": "1", + "infill_combination": "0", + "infill_wall_overlap": "30%", + "inherits": "fdm_process_creality_common", + "initial_layer_acceleration": "3000", + "initial_layer_infill_speed": "75", + "initial_layer_jerk": "5", + "initial_layer_line_width": "0.61", + "initial_layer_speed": "58", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "6000", + "inner_wall_line_width": "0.61", + "inner_wall_speed": "195", + "internal_bridge_support_thickness": "0.8", + "internal_solid_infill_line_width": "0.32", + "internal_solid_infill_speed": "195", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "45", + "is_custom_defined": "0", + "layer_height": "0.16", + "line_width": "0.61", + "max_bridge_length": "20", + "max_travel_detour_distance": "200", + "min_bead_width": "80%", + "min_feature_size": "20%", + "minimum_sparse_infill_area": "8", + "name": "0.16mm Optimal @Creality Sermoon V1", + "only_one_wall_first_layer": "1", + "only_one_wall_top": "1", + "outer_wall_acceleration": "4000", + "outer_wall_jerk": "5", + "outer_wall_line_width": "0.61", + "outer_wall_speed": "195", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "precise_outer_wall": "1", + "reduce_crossing_wall": "1", + "reduce_infill_retraction": "1", + "print_settings_id": "", + "scarf_joint_flow_ratio": "0.95", + "seam_gap": "6%", + "seam_slope_min_length": "12", + "seam_slope_steps": "6", + "seam_slope_type": "external", + "skirt_loops": "0", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_density": "4%", + "sparse_infill_line_width": "0.4", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_speed": "195", + "support_base_pattern": "hollow", + "support_base_pattern_spacing": "7", + "support_bottom_z_distance": "0.7", + "support_critical_regions_only": "0", + "support_interface_pattern": "rectilinear_interlaced", + "support_interface_spacing": "2", + "support_interface_speed": "175", + "support_line_width": "0.56", + "support_object_xy_distance": "1.2", + "support_on_build_plate_only": "1", + "support_speed": "195", + "support_style": "tree_slim", + "support_threshold_angle": "30", + "support_top_z_distance": "0.28", + "support_type": "tree(auto)", + "top_shell_layers": "3", + "top_shell_thickness": "0.84", + "top_solid_infill_flow_ratio": "0.95", + "top_surface_acceleration": "5000", + "top_surface_jerk": "5", + "top_surface_line_width": "0.32", + "top_surface_speed": "195", + "travel_acceleration": "4000", + "travel_speed": "195", + "tree_support_branch_angle": "50", + "tree_support_branch_diameter": "2", + "tree_support_branch_distance": "10", + "tree_support_wall_count": "1", + "wall_loops": "2", + "tree_support_adaptive_layer_height": "0", + "version": "2.0.0.0", + "wall_infill_order": "infill/inner wall/outer wall", + "xy_hole_compensation": "0.05", + "xy_contour_compensation": "-0.05", + "independent_support_layer_height": "0", + "compatible_printers": [ + "Creality Sermoon V1 0.4 nozzle" + ] +} 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 9913f7f5b7..eaae996e07 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json index 6a5c085259..85b2bf379d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json @@ -1,44 +1,118 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality CR10SE 0.2", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "bottom_shell_layers": "4", - "infill_combination": "1", - "infill_wall_overlap": "20%", - "initial_layer_acceleration": "3000", - "initial_layer_infill_speed": "150", - "initial_layer_travel_speed": "120", - "inner_wall_speed": "300", - "internal_solid_infill_line_width": "0.45", - "internal_solid_infill_speed": "300", - "outer_wall_acceleration": "2300", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_3_4_speed": "35", - "reduce_crossing_wall": "1", - "seam_gap": "15%", - "skirt_distance": "8", - "skirt_loops": "1", - "slow_down_layers": "2", - "sparse_infill_density": "10%", - "sparse_infill_speed": "300", - "support_base_pattern_spacing": "4", - "support_bottom_z_distance": "0.4", - "support_interface_bottom_layers": "1", - "support_interface_pattern": "rectilinear", - "support_interface_top_layers": "1", - "support_line_width": "0.42", - "support_object_xy_distance": "0.8", - "support_style": "snug", - "support_threshold_angle": "60", - "top_surface_line_width": "0.42", - "top_surface_speed": "120", - "travel_acceleration": "5000", - "wall_loops": "2", - "compatible_printers": [ - "Creality CR-10 SE 0.2 nozzle" - ] + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality CR10SE 0.2", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.25", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.25", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.25", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.25", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.25", + "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.25", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.25", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.2 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json index 9a3aa71cd7..dad7492bb4 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json @@ -1,44 +1,118 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality CR10SE 0.4", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "bottom_shell_layers": "4", - "infill_combination": "1", - "infill_wall_overlap": "20%", - "initial_layer_acceleration": "3000", - "initial_layer_infill_speed": "150", - "initial_layer_travel_speed": "120", - "inner_wall_speed": "300", - "internal_solid_infill_line_width": "0.45", - "internal_solid_infill_speed": "300", - "outer_wall_acceleration": "2300", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_3_4_speed": "35", - "reduce_crossing_wall": "1", - "seam_gap": "15%", - "skirt_distance": "8", - "skirt_loops": "1", - "slow_down_layers": "2", - "sparse_infill_density": "10%", - "sparse_infill_speed": "300", - "support_base_pattern_spacing": "4", - "support_bottom_z_distance": "0.4", - "support_interface_bottom_layers": "1", - "support_interface_pattern": "rectilinear", - "support_interface_top_layers": "1", - "support_line_width": "0.42", - "support_object_xy_distance": "0.8", - "support_style": "snug", - "support_threshold_angle": "60", - "top_surface_line_width": "0.42", - "top_surface_speed": "120", - "travel_acceleration": "5000", - "wall_loops": "2", - "compatible_printers": [ - "Creality CR-10 SE 0.4 nozzle" - ] + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality CR10SE 0.4", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.42", + "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": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json index ba652dd607..5f07b63d2a 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json @@ -1,44 +1,118 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality CR10SE 0.6", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "bottom_shell_layers": "4", - "infill_combination": "1", - "infill_wall_overlap": "20%", - "initial_layer_acceleration": "3000", - "initial_layer_infill_speed": "150", - "initial_layer_travel_speed": "120", - "inner_wall_speed": "300", - "internal_solid_infill_line_width": "0.45", - "internal_solid_infill_speed": "300", - "outer_wall_acceleration": "2300", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_3_4_speed": "35", - "reduce_crossing_wall": "1", - "seam_gap": "15%", - "skirt_distance": "8", - "skirt_loops": "1", - "slow_down_layers": "2", - "sparse_infill_density": "10%", - "sparse_infill_speed": "300", - "support_base_pattern_spacing": "4", - "support_bottom_z_distance": "0.4", - "support_interface_bottom_layers": "1", - "support_interface_pattern": "rectilinear", - "support_interface_top_layers": "1", - "support_line_width": "0.42", - "support_object_xy_distance": "0.8", - "support_style": "snug", - "support_threshold_angle": "60", - "top_surface_line_width": "0.42", - "top_surface_speed": "120", - "travel_acceleration": "5000", - "wall_loops": "2", - "compatible_printers": [ - "Creality CR-10 SE 0.6 nozzle" - ] + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality CR10SE 0.6", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.65", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.65", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.65", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.65", + "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.65", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.65", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.6 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json index 3e95bf04c1..8667571c7b 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json @@ -1,44 +1,118 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality CR10SE 0.8", - "from": "system", - "inherits": "fdm_process_creality_common", - "instantiation": "true", - "bottom_shell_layers": "4", - "infill_combination": "1", - "infill_wall_overlap": "20%", - "initial_layer_acceleration": "3000", - "initial_layer_infill_speed": "150", - "initial_layer_travel_speed": "120", - "inner_wall_speed": "300", - "internal_solid_infill_line_width": "0.45", - "internal_solid_infill_speed": "300", - "outer_wall_acceleration": "2300", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_3_4_speed": "35", - "reduce_crossing_wall": "1", - "seam_gap": "15%", - "skirt_distance": "8", - "skirt_loops": "1", - "slow_down_layers": "2", - "sparse_infill_density": "10%", - "sparse_infill_speed": "300", - "support_base_pattern_spacing": "4", - "support_bottom_z_distance": "0.4", - "support_interface_bottom_layers": "1", - "support_interface_pattern": "rectilinear", - "support_interface_top_layers": "1", - "support_line_width": "0.42", - "support_object_xy_distance": "0.8", - "support_style": "snug", - "support_threshold_angle": "60", - "top_surface_line_width": "0.42", - "top_surface_speed": "120", - "travel_acceleration": "5000", - "wall_loops": "2", - "compatible_printers": [ - "Creality CR-10 SE 0.8 nozzle" - ] + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality CR10SE 0.8", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.85", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.85", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.85", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.85", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.85", + "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.85", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.85", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.8 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 a6cbe7ac1a..cabab4e06a 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json index 01620cfa09..d563ac729c 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json index 786de08cdb..16c51aa872 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json index 8d1ee9ba06..84e7cfa536 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json index ad84a4e627..806cd6c90d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json index 76fe4f2103..7f04b6ddc2 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json index ca3ae01e2f..44d614a7ac 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json index 96f81bb121..9c99cbd0dc 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json index c5dc8ec7a2..e26c79265f 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json index 94574083f0..eebce8f9cc 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 a3d25a670c..11bc9061f2 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json index c91ce87e47..e2daf578f0 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.25", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.2", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", "initial_layer_speed": "35%", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json index 02f6f27b91..a430f4b195 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json index 6fa24ba5d5..a0dab4638f 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.65", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.65", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.6", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", "initial_layer_speed": "35%", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json index 12aa910763..e26b27d605 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.85", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "2", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.8", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.8", "top_shell_layers": "7", "top_shell_thickness": "0.8", "initial_layer_speed": "35%", 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 4743cb6256..325bc275fa 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 d6984b116e..6b416eed8d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json index ef601ed163..b0fe6db470 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..95d923b1ac --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.2", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json index e1dd35fd3d..6321b57e8b 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json @@ -1,3 +1,4 @@ + { "type": "process", "setting_id": "GP004", @@ -12,8 +13,8 @@ "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "4", "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_flow": "1", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,18 +24,17 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.05", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "4000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -49,10 +49,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.45", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,9 +69,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,36 +82,39 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "200", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "250", + "outer_wall_speed": "200", "inner_wall_speed": "300", "internal_solid_infill_speed": "300", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", + "role_based_wipe_speed": "0", + "wipe_speed": "200", "prime_tower_width": "60", - "xy_hole_compensation": "0", + "xy_hole_compensation": "0.025", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", + "accel_to_decel_enable": "0", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json new file mode 100644 index 0000000000..e6219dcacf --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "300", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.2", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json index b289cfe41a..fc612d80dc 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.22", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.26", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.26", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.22", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.22", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.2 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json similarity index 90% rename from resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json index 1978a6e65b..bda107b52e 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender3V3SE", + "name": "0.20mm Standard @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -30,7 +30,7 @@ "line_width": "0.46", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", @@ -82,12 +82,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json index d55e0c5059..443b814aa2 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.62", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.66", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.62", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.6 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json index 84e860b5d9..ee7d3eb2ac 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.82", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.86", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.86", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.82", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.82", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.8 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 b8ab9727f6..5757e91f9a 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 c9518d4655..358ef73c47 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json index 04b6b36d34..b5a0207dc5 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 63815b0e6e..9ef334c183 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 608e67142b..3bbf57979e 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 ae98760d8a..a0e1a0e900 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json index eeb0412b1e..347f834360 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -88,7 +90,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -113,4 +115,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json index 1f6accc5cf..51b286a0d9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json index 1a78a16472..b5e1a9ee70 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json @@ -1,19 +1,19 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -22,7 +22,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -31,7 +30,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -62,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -85,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -110,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.4 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.4 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json new file mode 100644 index 0000000000..6fe51aab77 --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json @@ -0,0 +1,111 @@ +{ + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "65%", + "bottom_shell_thickness": "0.6", + "bridge_acceleration": "50%", + "bridge_speed": "120", + "brim_type": "no_brim", + "brim_width": "4", + "default_acceleration": "6000", + "default_jerk": "5", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "limited", + "elefant_foot_compensation": "0.3", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_support": "1", + "exclude_object": "1", + "from": "User", + "gap_infill_speed": "195", + "gcode_comments": "1", + "infill_combination": "0", + "infill_wall_overlap": "30%", + "inherits": "fdm_process_creality_common", + "initial_layer_acceleration": "3000", + "initial_layer_infill_speed": "75", + "initial_layer_jerk": "5", + "initial_layer_line_width": "0.61", + "initial_layer_speed": "58", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "6000", + "inner_wall_line_width": "0.61", + "inner_wall_speed": "195", + "internal_bridge_support_thickness": "0.8", + "internal_solid_infill_line_width": "0.32", + "internal_solid_infill_speed": "195", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "45", + "is_custom_defined": "0", + "layer_height": "0.20", + "line_width": "0.61", + "max_bridge_length": "20", + "max_travel_detour_distance": "200", + "min_bead_width": "80%", + "min_feature_size": "20%", + "minimum_sparse_infill_area": "8", + "name": "0.20mm Standard @Creality Sermoon V1", + "only_one_wall_first_layer": "1", + "only_one_wall_top": "1", + "outer_wall_acceleration": "4000", + "outer_wall_jerk": "5", + "outer_wall_line_width": "0.61", + "outer_wall_speed": "150", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "precise_outer_wall": "1", + "reduce_crossing_wall": "1", + "reduce_infill_retraction": "1", + "print_settings_id": "", + "scarf_joint_flow_ratio": "0.95", + "seam_gap": "6%", + "seam_slope_min_length": "12", + "seam_slope_steps": "6", + "seam_slope_type": "external", + "skirt_loops": "0", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_density": "4%", + "sparse_infill_line_width": "0.4", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_speed": "195", + "support_base_pattern": "hollow", + "support_base_pattern_spacing": "7", + "support_bottom_z_distance": "0.7", + "support_critical_regions_only": "0", + "support_interface_pattern": "rectilinear_interlaced", + "support_interface_spacing": "2", + "support_interface_speed": "175", + "support_line_width": "0.56", + "support_object_xy_distance": "1.2", + "support_on_build_plate_only": "1", + "support_speed": "195", + "support_style": "tree_slim", + "support_threshold_angle": "30", + "support_top_z_distance": "0.28", + "support_type": "tree(auto)", + "top_shell_layers": "3", + "top_shell_thickness": "0.80", + "top_solid_infill_flow_ratio": "0.95", + "top_surface_acceleration": "6000", + "top_surface_jerk": "5", + "top_surface_line_width": "0.32", + "top_surface_speed": "195", + "travel_acceleration": "6000", + "travel_speed": "195", + "tree_support_branch_angle": "50", + "tree_support_branch_diameter": "2", + "tree_support_branch_distance": "10", + "tree_support_wall_count": "1", + "wall_loops": "2", + "tree_support_adaptive_layer_height": "0", + "version": "2.0.0.0", + "wall_infill_order": "infill/inner wall/outer wall", + "xy_hole_compensation": "0.05", + "xy_contour_compensation": "-0.05", + "independent_support_layer_height": "0", + "compatible_printers": [ + "Creality Sermoon V1 0.4 nozzle" + ] +} 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 59fe41c01d..97d962c8a0 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json new file mode 100644 index 0000000000..0a17a8ce1f --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality CR10SE 0.2", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.25", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.25", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.25", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.25", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.25", + "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.25", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.25", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json new file mode 100644 index 0000000000..8819084fad --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality CR10SE 0.4", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.42", + "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": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json new file mode 100644 index 0000000000..0949770fc4 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality CR10SE 0.6", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.65", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.65", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.65", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.65", + "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.65", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.65", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json new file mode 100644 index 0000000000..0a40eb1d5f --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality CR10SE 0.8", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "65", + "brim_type": "no_brim", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "5000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.85", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.85", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "5000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "1", + "sparse_infill_line_width": "0.85", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "44%", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.85", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "2", + "skirt_loops": "0", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.85", + "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.85", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "200", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.85", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "top_surface_speed": "250", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "400", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "default_jerk": "7", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "infill_jerk": "7", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "travel_jerk": "7", + "compatible_printers": [ + "Creality CR-10 SE 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json index 492b2675bb..efe6bfd6b4 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json index ccf0dd7258..a2bd32e85c 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json index 020c8e13a7..3f5c0f3f56 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json index 97df4f70ba..6d61dd9e86 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json index 2b495cad25..cf88482a88 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json index 805dc42a38..78bdc71c8a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json index bd4c6e5f2b..952dbc06d3 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json index fdebf4946b..09ef09feeb 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json index 9e5f90cf88..8744becb8b 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.25", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "1", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.2", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "20", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json index 3a523cd522..6b44412798 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json index 29493e1541..484ecef2bd 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.65", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.65", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "1", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.6", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.6", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "20", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json index be87b75246..e66e047320 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json @@ -24,19 +24,19 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.1", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", + "outer_wall_line_width": "0.85", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", + "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "10%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", - "initial_layer_line_width": "0.42", + "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "1", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", @@ -50,7 +50,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -59,7 +59,7 @@ "skirt_height": "2", "skirt_loops": "1", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.8", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,7 +69,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -79,13 +79,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "20", 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 f9727bbf9c..137370fda3 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json index a461943f93..0b2ca128e9 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..4f211c629b --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.24", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json index 01ab4fa9ca..12a55c48b3 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json @@ -12,8 +12,8 @@ "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "4", "bottom_shell_thickness": "0", - "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_flow": "1", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,18 +23,17 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.05", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "4000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -49,10 +48,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +60,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.45", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -69,9 +68,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,36 +81,39 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "200", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "250", + "outer_wall_speed": "200", "inner_wall_speed": "300", "internal_solid_infill_speed": "300", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", + "role_based_wipe_speed" : "0", + "wipe_speed": "200", "prime_tower_width": "60", - "xy_hole_compensation": "0", + "xy_hole_compensation": "0.025", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", + "accel_to_decel_enable": "0", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json new file mode 100644 index 0000000000..ebb0bca909 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.24", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_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": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json index ad47ef425f..9ee7a0c002 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.22", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.26", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.26", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.25", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.25", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.22", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.18", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.22", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.2 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json similarity index 90% rename from resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json index 43f9be0988..fd1adb8643 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.24mm Draft @Creality Ender3V3SE", + "name": "0.24mm Draft @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -30,7 +30,7 @@ "line_width": "0.46", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", @@ -82,12 +82,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json index 5a8332d664..62dc21f077 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.62", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.66", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.65", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.65", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.62", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.58", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.6 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json index 597b70e6f1..a7db0d2b24 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json @@ -25,20 +25,20 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "outer_wall_line_width": "0.42", + "outer_wall_line_width": "0.82", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.46", + "line_width": "0.86", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "2500", "inner_wall_acceleration": "2000", "outer_wall_acceleration": "1000", - "initial_layer_line_width": "0.46", + "initial_layer_line_width": "0.86", "initial_layer_print_height": "0.2", "infill_combination": "0", - "sparse_infill_line_width": "0.45", + "sparse_infill_line_width": "0.85", "infill_wall_overlap": "15%", "interface_shells": "0", "ironing_flow": "15%", @@ -52,7 +52,7 @@ "overhang_2_4_speed": "20", "overhang_3_4_speed": "15", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", + "inner_wall_line_width": "0.85", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -61,7 +61,7 @@ "skirt_height": "2", "skirt_loops": "0", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_line_width": "0.82", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.78", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -82,13 +82,13 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "50", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "40", "tree_support_wall_count": "2", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.82", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "30", @@ -105,14 +105,7 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "default_jerk": "8", - "outer_wall_jerk": "20", - "inner_wall_jerk": "20", - "infill_jerk": "20", - "top_surface_jerk": "20", - "initial_layer_jerk": "8", - "travel_jerk": "8", "compatible_printers": [ "Creality Ender-3 V3 SE 0.8 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json index d6df736aba..1c4cfa0bcd 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json @@ -28,7 +28,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json index b72764cbab..9084109a7c 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -88,7 +90,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -113,4 +115,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json index cd29aeac4c..621f32c207 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -25,7 +25,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -34,7 +33,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -65,6 +64,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json index c285e9abdd..4a6e91c192 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json @@ -1,19 +1,19 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -22,7 +22,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "outer_wall_acceleration": "5000", @@ -31,7 +30,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -62,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -85,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -110,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.4 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.4 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json new file mode 100644 index 0000000000..326fe32370 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.24", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.24", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "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_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json new file mode 100644 index 0000000000..f7c4313f70 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.24", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.24", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "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_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json index 021ffef875..e0568e01a4 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json index b9a5cfbb6a..310153318d 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json index 659e4b9783..9d359a67bf 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json new file mode 100644 index 0000000000..fc2608a5ff --- /dev/null +++ b/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json @@ -0,0 +1,111 @@ +{ + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "65%", + "bottom_shell_thickness": "0.6", + "bridge_acceleration": "50%", + "bridge_speed": "120", + "brim_type": "no_brim", + "brim_width": "4", + "default_acceleration": "6000", + "default_jerk": "5", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "limited", + "elefant_foot_compensation": "0.3", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_support": "1", + "exclude_object": "1", + "from": "User", + "gap_infill_speed": "195", + "gcode_comments": "1", + "infill_combination": "0", + "infill_wall_overlap": "30%", + "inherits": "fdm_process_creality_common", + "initial_layer_acceleration": "3000", + "initial_layer_infill_speed": "75", + "initial_layer_jerk": "5", + "initial_layer_line_width": "0.61", + "initial_layer_speed": "58", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "6000", + "inner_wall_line_width": "0.61", + "inner_wall_speed": "195", + "internal_bridge_support_thickness": "0.8", + "internal_solid_infill_line_width": "0.32", + "internal_solid_infill_speed": "195", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "45", + "is_custom_defined": "0", + "layer_height": "0.28", + "line_width": "0.61", + "max_bridge_length": "20", + "max_travel_detour_distance": "200", + "min_bead_width": "80%", + "min_feature_size": "20%", + "minimum_sparse_infill_area": "8", + "name": "0.28mm Standard @Creality Sermoon V1", + "only_one_wall_first_layer": "1", + "only_one_wall_top": "1", + "outer_wall_acceleration": "4000", + "outer_wall_jerk": "5", + "outer_wall_line_width": "0.61", + "outer_wall_speed": "195", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "precise_outer_wall": "1", + "reduce_crossing_wall": "1", + "reduce_infill_retraction": "1", + "print_settings_id": "", + "scarf_joint_flow_ratio": "0.95", + "seam_gap": "6%", + "seam_slope_min_length": "12", + "seam_slope_steps": "6", + "seam_slope_type": "external", + "skirt_loops": "0", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_density": "4%", + "sparse_infill_line_width": "0.4", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_speed": "195", + "support_base_pattern": "hollow", + "support_base_pattern_spacing": "7", + "support_bottom_z_distance": "0.7", + "support_critical_regions_only": "0", + "support_interface_pattern": "rectilinear_interlaced", + "support_interface_spacing": "2", + "support_interface_speed": "175", + "support_line_width": "0.56", + "support_object_xy_distance": "1.2", + "support_on_build_plate_only": "1", + "support_speed": "195", + "support_style": "tree_slim", + "support_threshold_angle": "30", + "support_top_z_distance": "0.28", + "support_type": "tree(auto)", + "top_shell_layers": "3", + "top_shell_thickness": "0.84", + "top_solid_infill_flow_ratio": "0.95", + "top_surface_acceleration": "6000", + "top_surface_jerk": "5", + "top_surface_line_width": "0.32", + "top_surface_speed": "195", + "travel_acceleration": "6000", + "travel_speed": "195", + "tree_support_branch_angle": "50", + "tree_support_branch_diameter": "2", + "tree_support_branch_distance": "10", + "tree_support_wall_count": "1", + "wall_loops": "2", + "tree_support_adaptive_layer_height": "0", + "version": "2.0.0.0", + "wall_infill_order": "infill/inner wall/outer wall", + "xy_hole_compensation": "0.05", + "xy_contour_compensation": "-0.05", + "independent_support_layer_height": "0", + "compatible_printers": [ + "Creality Sermoon V1 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json index 7d9f3fe5ff..b44dc55797 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json index 2ba5989636..654299171d 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json index acf78ef95a..86f7bbfb48 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json index 502148a517..897e180aa8 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json index 3d17eea026..5046ffab67 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json @@ -29,7 +29,7 @@ "line_width": "0.25", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json index 1484a5a12a..91250c7d19 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json index 6b4185940b..7868df4e1d 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json @@ -29,7 +29,7 @@ "line_width": "0.66", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.6", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json index f884f5dc63..5ff1f6d1a1 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json @@ -29,7 +29,7 @@ "line_width": "0.85", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.8", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json new file mode 100644 index 0000000000..3486fa9fa4 --- /dev/null +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.3", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "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_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json new file mode 100644 index 0000000000..5321a631fe --- /dev/null +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.3", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "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_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json index 904ff17ebd..e004c3a132 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json index 4bd1b24007..28f1e62962 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json index 8cd8ff9a2e..0065c973fb 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json index c9bc775be1..5a7ee8ceaa 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json index b5ecf953ce..2306b1b034 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json index 548aac9fab..89b73e43f1 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json new file mode 100644 index 0000000000..3b5645d739 --- /dev/null +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.36", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.36", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "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_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "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", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json new file mode 100644 index 0000000000..84a6cc44c1 --- /dev/null +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality Ender-3 V3 Plus", + "from": "system", + "inherits": "fdm_process_common_klipper", + "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": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.36", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.36", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "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_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "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_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "8000", + "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", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json index 826e8349c4..eab36cf916 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json index c312c12ca7..cf47b09d4c 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json index 261b31086e..84ff5023d6 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.62", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json index f246ca94b7..990930db6f 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json index e956dadee1..aa394ac3ce 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json index 3d526219a3..f26b5535f8 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json index cf3145d3a5..e1ae636d2c 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json index 4e275a2129..196eeba707 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json index ba460aef68..44047d1acc 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -21,7 +21,6 @@ "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", "outer_wall_line_width": "0.82", "outer_wall_speed": "120", "outer_wall_acceleration": "5000", @@ -30,7 +29,7 @@ "line_width": "0.82", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", @@ -61,6 +60,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +86,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +111,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 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 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Creality/process/fdm_process_common.json +++ b/resources/profiles/Creality/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Creality/process/fdm_process_creality_common.json b/resources/profiles/Creality/process/fdm_process_creality_common.json index 83c8322a28..6709f4c8b6 100644 --- a/resources/profiles/Creality/process/fdm_process_creality_common.json +++ b/resources/profiles/Creality/process/fdm_process_creality_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 118607cf52..8a0f2a5c86 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "My configurations", "machine_model_list": [ @@ -46,6 +46,10 @@ "name": "0.15mm Optimal @MyKlipper", "sub_path": "process/0.15mm Optimal @MyKlipper.json" }, + { + "name": "0.16mm Optimal @MyKlipper", + "sub_path": "process/0.16mm Optimal @MyKlipper.json" + }, { "name": "0.20mm Standard @MyKlipper", "sub_path": "process/0.20mm Standard @MyKlipper.json" @@ -58,6 +62,18 @@ "name": "0.28mm Extra Draft @MyKlipper", "sub_path": "process/0.28mm Extra Draft @MyKlipper.json" }, + { + "name": "0.32mm Extra Draft @MyKlipper", + "sub_path": "process/0.32mm Extra Draft @MyKlipper.json" + }, + { + "name": "0.40mm Extra Draft @MyKlipper", + "sub_path": "process/0.40mm Extra Draft @MyKlipper.json" + }, + { + "name": "0.56mm Extra Draft @MyKlipper", + "sub_path": "process/0.56mm Extra Draft @MyKlipper.json" + }, { "name": "0.08mm Extra Fine @MyRRF", "sub_path": "process/0.08mm Extra Fine @MyRRF.json" @@ -202,6 +218,18 @@ "name": "MyKlipper 0.4 nozzle", "sub_path": "machine/MyKlipper 0.4 nozzle.json" }, + { + "name": "MyKlipper 0.2 nozzle", + "sub_path": "machine/MyKlipper 0.2 nozzle.json" + }, + { + "name": "MyKlipper 0.6 nozzle", + "sub_path": "machine/MyKlipper 0.6 nozzle.json" + }, + { + "name": "MyKlipper 0.8 nozzle", + "sub_path": "machine/MyKlipper 0.8 nozzle.json" + }, { "name": "MyMarlin 0.4 nozzle", "sub_path": "machine/MyMarlin 0.4 nozzle.json" diff --git a/resources/profiles/Custom/filament/My Generic ABS.json b/resources/profiles/Custom/filament/My Generic ABS.json index b7b879dc05..14fe0490e5 100644 --- a/resources/profiles/Custom/filament/My Generic ABS.json +++ b/resources/profiles/Custom/filament/My Generic ABS.json @@ -13,8 +13,11 @@ "12" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic ASA.json b/resources/profiles/Custom/filament/My Generic ASA.json index cbed120fc3..ca6539c115 100644 --- a/resources/profiles/Custom/filament/My Generic ASA.json +++ b/resources/profiles/Custom/filament/My Generic ASA.json @@ -13,8 +13,11 @@ "12" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PA-CF.json b/resources/profiles/Custom/filament/My Generic PA-CF.json index d850d084ec..60efac620c 100644 --- a/resources/profiles/Custom/filament/My Generic PA-CF.json +++ b/resources/profiles/Custom/filament/My Generic PA-CF.json @@ -19,8 +19,11 @@ "8" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PA.json b/resources/profiles/Custom/filament/My Generic PA.json index 8124b0d546..2e284b6d37 100644 --- a/resources/profiles/Custom/filament/My Generic PA.json +++ b/resources/profiles/Custom/filament/My Generic PA.json @@ -16,8 +16,11 @@ "12" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PC.json b/resources/profiles/Custom/filament/My Generic PC.json index 019b5e5ab6..4738b42e18 100644 --- a/resources/profiles/Custom/filament/My Generic PC.json +++ b/resources/profiles/Custom/filament/My Generic PC.json @@ -12,9 +12,12 @@ "filament_flow_ratio": [ "0.94" ], -"compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ 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 cfbd41b29e..f640aea59e 100644 --- a/resources/profiles/Custom/filament/My Generic PETG.json +++ b/resources/profiles/Custom/filament/My Generic PETG.json @@ -43,8 +43,11 @@ "; filament start gcode\n" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PLA-CF.json b/resources/profiles/Custom/filament/My Generic PLA-CF.json index fc45a9903e..b0ed43b93c 100644 --- a/resources/profiles/Custom/filament/My Generic PLA-CF.json +++ b/resources/profiles/Custom/filament/My Generic PLA-CF.json @@ -18,9 +18,12 @@ "slow_down_layer_time": [ "7" ], -"compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 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 b3dab02002..54dc3dc779 100644 --- a/resources/profiles/Custom/filament/My Generic PLA.json +++ b/resources/profiles/Custom/filament/My Generic PLA.json @@ -16,8 +16,11 @@ "8" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PVA.json b/resources/profiles/Custom/filament/My Generic PVA.json index 7631b30844..ba874665cb 100644 --- a/resources/profiles/Custom/filament/My Generic PVA.json +++ b/resources/profiles/Custom/filament/My Generic PVA.json @@ -19,8 +19,11 @@ "10" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic TPU.json b/resources/profiles/Custom/filament/My Generic TPU.json index cfa4bd617d..359d3da7a7 100644 --- a/resources/profiles/Custom/filament/My Generic TPU.json +++ b/resources/profiles/Custom/filament/My Generic TPU.json @@ -10,8 +10,11 @@ "3.2" ], "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle", + "MyMarlin 0.4 nozzle", + "MyRRF 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyKlipper 0.2 nozzle.json b/resources/profiles/Custom/machine/MyKlipper 0.2 nozzle.json new file mode 100644 index 0000000000..1ec29c6465 --- /dev/null +++ b/resources/profiles/Custom/machine/MyKlipper 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "MyKlipper 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "Generic Klipper Printer", + "nozzle_diameter": [ + "0.2" + ], + "max_layer_height": [ + "0.16" + ], + "min_layer_height": [ + "0.04" + ], + "printer_variant": "0.2", + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "250" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyKlipper 0.4 nozzle.json b/resources/profiles/Custom/machine/MyKlipper 0.4 nozzle.json index 0bf7f728c7..c2de0ec76e 100644 --- a/resources/profiles/Custom/machine/MyKlipper 0.4 nozzle.json +++ b/resources/profiles/Custom/machine/MyKlipper 0.4 nozzle.json @@ -1,19 +1,20 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "MyKlipper 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_klipper_common", - "printer_model": "Generic Klipper Printer", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "250x0", - "250x250", - "0x250" - ], - "printable_height": "250" -} + "type": "machine", + "setting_id": "GM001", + "name": "MyKlipper 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "Generic Klipper Printer", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "250" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyKlipper 0.6 nozzle.json b/resources/profiles/Custom/machine/MyKlipper 0.6 nozzle.json new file mode 100644 index 0000000000..9240467b89 --- /dev/null +++ b/resources/profiles/Custom/machine/MyKlipper 0.6 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "MyKlipper 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "Generic Klipper Printer", + "nozzle_diameter": [ + "0.6" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.12" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "250" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyKlipper 0.8 nozzle.json b/resources/profiles/Custom/machine/MyKlipper 0.8 nozzle.json new file mode 100644 index 0000000000..be658b0bf9 --- /dev/null +++ b/resources/profiles/Custom/machine/MyKlipper 0.8 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM004", + "name": "MyKlipper 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "Generic Klipper Printer", + "nozzle_diameter": [ + "0.8" + ], + "max_layer_height": [ + "0.6" + ], + "min_layer_height": [ + "0.2" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "250" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyKlipper.json b/resources/profiles/Custom/machine/MyKlipper.json index 9375a376a0..8c4b9f56e9 100644 --- a/resources/profiles/Custom/machine/MyKlipper.json +++ b/resources/profiles/Custom/machine/MyKlipper.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Generic Klipper Printer", "model_id": "my_klipper_01", - "nozzle_diameter": "0.4", + "nozzle_diameter": "0.4;0.2;0.6;0.8", "machine_tech": "FFF", "family": "MyPrinter", "bed_model": "", diff --git a/resources/profiles/Custom/machine/MyMarlin 0.4 nozzle.json b/resources/profiles/Custom/machine/MyMarlin 0.4 nozzle.json index 422bc8854e..25581836f2 100644 --- a/resources/profiles/Custom/machine/MyMarlin 0.4 nozzle.json +++ b/resources/profiles/Custom/machine/MyMarlin 0.4 nozzle.json @@ -1,44 +1,44 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "MyMarlin 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Generic Marlin Printer", - "gcode_flavor": "marlin", - "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", - "max_layer_height": [ - "0.32" - ], - "retraction_length": [ - "0.9" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "45" - ], - "deretraction_speed": [ - "35" - ], - "version": "1.5.1.2", - "wipe": [ - "0" - ], - "z_hop": [ - "0.4" - ], - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "250x0", - "250x250", - "0x250" - ], - "printable_height": "250" + "type": "machine", + "setting_id": "GM001", + "name": "MyMarlin 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Generic Marlin Printer", + "gcode_flavor": "marlin", + "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", + "max_layer_height": [ + "0.32" + ], + "retraction_length": [ + "0.9" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "45" + ], + "deretraction_speed": [ + "35" + ], + "version": "1.5.1.2", + "wipe": [ + "0" + ], + "z_hop": [ + "0.4" + ], + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "250" } \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.08mm Extra Fine @MyKlipper.json b/resources/profiles/Custom/process/0.08mm Extra Fine @MyKlipper.json index 88b1f4bba1..b9f1557263 100644 --- a/resources/profiles/Custom/process/0.08mm Extra Fine @MyKlipper.json +++ b/resources/profiles/Custom/process/0.08mm Extra Fine @MyKlipper.json @@ -7,5 +7,13 @@ "inherits": "fdm_process_klipper_common", "layer_height": "0.08", "bottom_shell_layers": "7", - "top_shell_layers": "9" -} + "top_shell_layers": "9", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.12mm Fine @MyKlipper.json b/resources/profiles/Custom/process/0.12mm Fine @MyKlipper.json index 6d58049123..575bd40d4f 100644 --- a/resources/profiles/Custom/process/0.12mm Fine @MyKlipper.json +++ b/resources/profiles/Custom/process/0.12mm Fine @MyKlipper.json @@ -7,5 +7,13 @@ "inherits": "fdm_process_klipper_common", "layer_height": "0.12", "bottom_shell_layers": "5", - "top_shell_layers": "6" -} + "top_shell_layers": "6", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.15mm Optimal @MyKlipper.json b/resources/profiles/Custom/process/0.15mm Optimal @MyKlipper.json index c74ce50b12..518ed7cba2 100644 --- a/resources/profiles/Custom/process/0.15mm Optimal @MyKlipper.json +++ b/resources/profiles/Custom/process/0.15mm Optimal @MyKlipper.json @@ -7,5 +7,14 @@ "inherits": "fdm_process_klipper_common", "bottom_shell_layers": "4", "top_shell_layers": "5", - "layer_height": "0.15" -} + "layer_height": "0.15", + "support_top_z_distance": "0.15", + "support_bottom_z_distance": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.16mm Optimal @MyKlipper.json b/resources/profiles/Custom/process/0.16mm Optimal @MyKlipper.json new file mode 100644 index 0000000000..45df9dad70 --- /dev/null +++ b/resources/profiles/Custom/process/0.16mm Optimal @MyKlipper.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @MyKlipper", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_klipper_common", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "support_top_z_distance": "0.16", + "support_bottom_z_distance": "0.16", + "layer_height": "0.16", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.2 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.20mm Standard @MyKlipper.json b/resources/profiles/Custom/process/0.20mm Standard @MyKlipper.json index 271b64a1f2..d38acd8fa0 100644 --- a/resources/profiles/Custom/process/0.20mm Standard @MyKlipper.json +++ b/resources/profiles/Custom/process/0.20mm Standard @MyKlipper.json @@ -6,6 +6,9 @@ "inherits": "fdm_process_klipper_common", "instantiation": "true", "layer_height": "0.2", - "bottom_shell_layers": "3", - "top_shell_layers": "4" + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] } diff --git a/resources/profiles/Custom/process/0.24mm Draft @MyKlipper.json b/resources/profiles/Custom/process/0.24mm Draft @MyKlipper.json index 510221a0f5..30a520ba46 100644 --- a/resources/profiles/Custom/process/0.24mm Draft @MyKlipper.json +++ b/resources/profiles/Custom/process/0.24mm Draft @MyKlipper.json @@ -5,8 +5,13 @@ "from": "system", "instantiation": "true", "inherits": "fdm_process_klipper_common", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", "layer_height": "0.24", - "top_surface_line_width": "0.45", - "bottom_shell_layers": "3", - "top_shell_layers": "4" -} + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.28mm Extra Draft @MyKlipper.json b/resources/profiles/Custom/process/0.28mm Extra Draft @MyKlipper.json index 7a1b4faff1..a2ff46c4d1 100644 --- a/resources/profiles/Custom/process/0.28mm Extra Draft @MyKlipper.json +++ b/resources/profiles/Custom/process/0.28mm Extra Draft @MyKlipper.json @@ -6,7 +6,10 @@ "instantiation": "true", "inherits": "fdm_process_klipper_common", "layer_height": "0.28", - "top_surface_line_width": "0.45", - "bottom_shell_layers": "3", - "top_shell_layers": "4" -} + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.32mm Extra Draft @MyKlipper.json b/resources/profiles/Custom/process/0.32mm Extra Draft @MyKlipper.json new file mode 100644 index 0000000000..a3da4a7fbd --- /dev/null +++ b/resources/profiles/Custom/process/0.32mm Extra Draft @MyKlipper.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Standard @MyKlipper", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_klipper_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.32", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.4 nozzle", + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.40mm Extra Draft @MyKlipper.json b/resources/profiles/Custom/process/0.40mm Extra Draft @MyKlipper.json new file mode 100644 index 0000000000..e5f2093074 --- /dev/null +++ b/resources/profiles/Custom/process/0.40mm Extra Draft @MyKlipper.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @MyKlipper", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_klipper_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.40", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.6 nozzle", + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.56mm Extra Draft @MyKlipper.json b/resources/profiles/Custom/process/0.56mm Extra Draft @MyKlipper.json new file mode 100644 index 0000000000..d8e6e21cf1 --- /dev/null +++ b/resources/profiles/Custom/process/0.56mm Extra Draft @MyKlipper.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.56mm Standard @MyKlipper", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_klipper_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.56", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyKlipper 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/fdm_process_common.json b/resources/profiles/Custom/process/fdm_process_common.json index 7398bcd481..cfb78ab95a 100644 --- a/resources/profiles/Custom/process/fdm_process_common.json +++ b/resources/profiles/Custom/process/fdm_process_common.json @@ -5,66 +5,104 @@ "instantiation": "false", "adaptive_layer_height": "0", "reduce_crossing_wall": "0", - "bridge_flow": "0.95", - "bridge_speed": "25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_speed": "50", "brim_width": "5", + "brim_object_gap": "0.1", "compatible_printers": [], + "compatible_printers_condition": "", "print_sequence": "by layer", - "default_acceleration": "10000", + "default_acceleration": "1000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "1000", + "inner_wall_acceleration": "1000", + "outer_wall_acceleration": "700", "bridge_no_support": "0", - "elefant_foot_compensation": "0.1", - "outer_wall_line_width": "0.4", - "outer_wall_speed": "120", - "line_width": "0.45", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", - "initial_layer_line_width": "0.42", + "sparse_infill_pattern": "crosshatch", "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", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", + "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "line_width": "110%", + "inner_wall_line_width": "110%", + "outer_wall_line_width": "100%", + "top_surface_line_width": "93.75%", + "sparse_infill_line_width": "110%", + "initial_layer_line_width": "120%", + "internal_solid_infill_line_width": "120%", + "support_line_width": "96%", "wall_loops": "3", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "40", "print_settings_id": "", "raft_layers": "0", - "seam_position": "nearest", + "seam_position": "aligned", "skirt_distance": "2", - "skirt_height": "2", - "minimum_sparse_infill_area": "0", - "internal_solid_infill_line_width": "0.45", - "internal_solid_infill_speed": "40", + "skirt_height": "3", + "min_skirt_length": "4", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", - "support_filament": "0", - "support_line_width": "0.42", - "support_interface_filament": "0", + "resolution": "0.012", + "support_type": "normal(auto)", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", "support_interface_loop_pattern": "0", + "support_interface_filament": "0", "support_interface_top_layers": "2", - "support_interface_spacing": "0", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", "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", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "30", + "tree_support_wall_count": "0", + "tree_support_with_infill": "0", "detect_thin_wall": "0", - "top_surface_line_width": "0.4", - "top_surface_speed": "30", - "travel_speed": "400", + "top_surface_pattern": "monotonicline", + "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" + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "3", + "top_shell_layers": "4", + "bridge_flow": "1", + "initial_layer_speed": "45", + "initial_layer_infill_speed": "45", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "200" } diff --git a/resources/profiles/Custom/process/fdm_process_klipper_common.json b/resources/profiles/Custom/process/fdm_process_klipper_common.json index 4c2320391c..cf4a288f17 100644 --- a/resources/profiles/Custom/process/fdm_process_klipper_common.json +++ b/resources/profiles/Custom/process/fdm_process_klipper_common.json @@ -4,89 +4,12 @@ "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": "50", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "print_sequence": "by layer", "default_acceleration": "5000", "top_surface_acceleration": "3000", "travel_acceleration": "7000", "inner_wall_acceleration": "5000", "outer_wall_acceleration": "3000", - "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", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", "initial_layer_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": "25%", - "interface_shells": "0", - "ironing_flow": "10%", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "layer_height": "0.2", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "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": "0", - "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": "50", "initial_layer_infill_speed": "105", "outer_wall_speed": "120", @@ -96,14 +19,5 @@ "gap_infill_speed": "100", "sparse_infill_speed": "200", "travel_speed": "350", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "enable_arc_fitting": "0", - "compatible_printers": [ - "MyKlipper 0.4 nozzle" - ], "exclude_object": "1" -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/fdm_process_marlin_common.json b/resources/profiles/Custom/process/fdm_process_marlin_common.json index ad5002ab20..7b5bca9682 100644 --- a/resources/profiles/Custom/process/fdm_process_marlin_common.json +++ b/resources/profiles/Custom/process/fdm_process_marlin_common.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Custom/process/fdm_process_rrf_common.json b/resources/profiles/Custom/process/fdm_process_rrf_common.json index 86061eb72a..88cb3d40b4 100644 --- a/resources/profiles/Custom/process/fdm_process_rrf_common.json +++ b/resources/profiles/Custom/process/fdm_process_rrf_common.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json new file mode 100644 index 0000000000..76157f72cb --- /dev/null +++ b/resources/profiles/Dremel.json @@ -0,0 +1,130 @@ +{ + "name": "Dremel", + "version": "02.01.00.01", + "force_update": "0", + "description": "Dremel configurations", + "machine_model_list": [ + { + "name": "Dremel 3D20", + "sub_path": "machine/Dremel 3D20.json" + }, + { + "name": "Dremel 3D40", + "sub_path": "machine/Dremel 3D40.json" + }, + { + "name": "Dremel 3D45", + "sub_path": "machine/Dremel 3D45.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_dremel_common", + "sub_path": "process/fdm_process_dremel_common.json" + }, + { + "name": ".05mm Super Detail @Dremel 3D40 0.4", + "sub_path": "process/.05mm Super Detail @Dremel 3D40 0.4.json" + }, + { + "name": ".05mm Super Detail @Dremel 3D45 0.4", + "sub_path": "process/.05mm Super Detail @Dremel 3D45 0.4.json" + }, + { + "name": ".10mm Detail @Dremel 3D20 0.4", + "sub_path": "process/.10mm Detail @Dremel 3D20 0.4.json" + }, + { + "name": ".10mm Detail @Dremel 3D40 0.4", + "sub_path": "process/.10mm Detail @Dremel 3D40 0.4.json" + }, + { + "name": ".10mm Detail @Dremel 3D45 0.4", + "sub_path": "process/.10mm Detail @Dremel 3D45 0.4.json" + }, + { + "name": ".20mm Standard @Dremel 3D20 0.4", + "sub_path": "process/.20mm Standard @Dremel 3D20 0.4.json" + }, + { + "name": ".20mm Standard @Dremel 3D40 0.4", + "sub_path": "process/.20mm Standard @Dremel 3D40 0.4.json" + }, + { + "name": ".20mm Standard @Dremel 3D45 0.4", + "sub_path": "process/.20mm Standard @Dremel 3D45 0.4.json" + }, + { + "name": ".30mm Draft @Dremel 3D20 0.4", + "sub_path": "process/.30mm Draft @Dremel 3D20 0.4.json" + }, + { + "name": ".30mm Draft @Dremel 3D40 0.4", + "sub_path": "process/.30mm Draft @Dremel 3D40 0.4.json" + }, + { + "name": ".30mm Draft @Dremel 3D45 0.4", + "sub_path": "process/.30mm Draft @Dremel 3D45 0.4.json" + }, + { + "name": ".34mm SuperDraft @Dremel 3D40 0.4", + "sub_path": "process/.34mm SuperDraft @Dremel 3D40 0.4.json" + }, + { + "name": ".34mm SuperDraft @Dremel 3D45 0.4", + "sub_path": "process/.34mm SuperDraft @Dremel 3D45 0.4.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "Dremel Generic PLA", + "sub_path": "filament/Dremel Generic PLA.json" + }, + { + "name": "Dremel Generic PLA @3D20 all", + "sub_path": "filament/Dremel Generic PLA @3D20 all.json" + }, + { + "name": "Dremel Generic PLA @3D40 all", + "sub_path": "filament/Dremel Generic PLA @3D40 all.json" + }, + { + "name": "Dremel Generic PLA @3D45 all", + "sub_path": "filament/Dremel Generic PLA @3D45 all.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_dremel_common", + "sub_path": "machine/fdm_dremel_common.json" + }, + { + "name": "Dremel 3D20 0.4 nozzle", + "sub_path": "machine/Dremel 3D20 0.4 nozzle.json" + }, + { + "name": "Dremel 3D40 0.4 nozzle", + "sub_path": "machine/Dremel 3D40 0.4 nozzle.json" + }, + { + "name": "Dremel 3D45 0.4 nozzle", + "sub_path": "machine/Dremel 3D45 0.4 nozzle.json" + } + ] +} diff --git a/resources/profiles/Dremel/Dremel 3D20_cover.png b/resources/profiles/Dremel/Dremel 3D20_cover.png new file mode 100644 index 0000000000..df22f0012e Binary files /dev/null and b/resources/profiles/Dremel/Dremel 3D20_cover.png differ diff --git a/resources/profiles/Dremel/Dremel 3D40_cover.png b/resources/profiles/Dremel/Dremel 3D40_cover.png new file mode 100644 index 0000000000..b78297919f Binary files /dev/null and b/resources/profiles/Dremel/Dremel 3D40_cover.png differ diff --git a/resources/profiles/Dremel/Dremel 3D45_cover.png b/resources/profiles/Dremel/Dremel 3D45_cover.png new file mode 100644 index 0000000000..f2761aa013 Binary files /dev/null and b/resources/profiles/Dremel/Dremel 3D45_cover.png differ diff --git a/resources/profiles/Dremel/dremel_3d20_buildplate_model.stl b/resources/profiles/Dremel/dremel_3d20_buildplate_model.stl new file mode 100644 index 0000000000..4ee3b5b44c Binary files /dev/null and b/resources/profiles/Dremel/dremel_3d20_buildplate_model.stl differ diff --git a/resources/profiles/Dremel/dremel_3d40_3d45_buildplate_model.stl b/resources/profiles/Dremel/dremel_3d40_3d45_buildplate_model.stl new file mode 100644 index 0000000000..1ef2b0cc42 Binary files /dev/null and b/resources/profiles/Dremel/dremel_3d40_3d45_buildplate_model.stl differ diff --git a/resources/profiles/Dremel/dremel_3d45.stl b/resources/profiles/Dremel/dremel_3d45.stl new file mode 100644 index 0000000000..00f04d40c1 Binary files /dev/null and b/resources/profiles/Dremel/dremel_3d45.stl differ diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json new file mode 100644 index 0000000000..addde4858f --- /dev/null +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "setting_id": "GFSL99_00", + "name": "Dremel Generic PLA @3D20 all", + "from": "system", + "instantiation": "true", + "inherits": "Dremel Generic PLA", + "filament_max_volumetric_speed": ["9"], + "slow_down_layer_time": ["10"], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "60" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "compatible_printers": [ + "Dremel 3D20 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json new file mode 100644 index 0000000000..17db278d51 --- /dev/null +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "setting_id": "GFSL99_00", + "name": "Dremel Generic PLA @3D40 all", + "from": "system", + "instantiation": "true", + "inherits": "Dremel Generic PLA", + "filament_max_volumetric_speed": ["9"], + "slow_down_layer_time": ["10"], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json new file mode 100644 index 0000000000..483ccb09c4 --- /dev/null +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "setting_id": "GFSL99_00", + "name": "Dremel Generic PLA @3D45 all", + "from": "system", + "instantiation": "true", + "inherits": "Dremel Generic PLA", + "slow_down_min_speed": "10", + "close_fan_the_first_x_layers": "3", + "filament_loading_speed_start": "3", + "filament_loading_speed": "28", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "90", + "filament_cooling_moves": "4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_final_speed": "3.4", + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "60" + ], + "nozzle_temperature": [ + "200" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA.json b/resources/profiles/Dremel/filament/Dremel Generic PLA.json new file mode 100644 index 0000000000..ca1ce300f5 --- /dev/null +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Dremel 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": "" +} diff --git a/resources/profiles/Dremel/filament/fdm_filament_common.json b/resources/profiles/Dremel/filament/fdm_filament_common.json new file mode 100644 index 0000000000..6c87f1d428 --- /dev/null +++ b/resources/profiles/Dremel/filament/fdm_filament_common.json @@ -0,0 +1,120 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ], + "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 gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/Dremel/filament/fdm_filament_pla.json b/resources/profiles/Dremel/filament/fdm_filament_pla.json new file mode 100644 index 0000000000..cbede63c72 --- /dev/null +++ b/resources/profiles/Dremel/filament/fdm_filament_pla.json @@ -0,0 +1,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" + ], + "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/Dremel/machine/Dremel 3D20 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json new file mode 100644 index 0000000000..b52a2b13fe --- /dev/null +++ b/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json @@ -0,0 +1,154 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Dremel 3D20 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_dremel_common", + "printer_model": "Dremel 3D20", + "printer_variant": "0.4", + "printer_structure": "Hbot", + "gcode_flavor": "marlin", + "default_filament_profile": [ + "Dremel Generic PLA @3D20 all" + ], + "default_print_profile": ".20mm Standard @Dremel 3D20 0.4", + "nozzle_diameter": [ + "0.4" + ], + "printer_settings_id": "Dremel", + "printable_area": [ + "0x0", + "230x0", + "230x150", + "0x150" + ], + "printable_height": "140", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "deretraction_speed": [ + "40" + ], + "emit_machine_limits_to_gcode": "1", + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_length_toolchange": [ + "1" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "Top Surfaces" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.5" + ], + "retraction_minimum_travel": [ + "2" + ], + "retraction_speed": [ + "40" + ], + "wipe": [ + "1" + ], + "wipe_distance": [ + "1" + ], + "z_hop": [ + "0.2" + ], + "z_hop_types": [ + "Normal Lift" + ], + "machine_max_acceleration_e": [ + "6200", + "5000" + ], + "machine_max_acceleration_extruding": [ + "6200", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "6200", + "20000" + ], + "machine_max_acceleration_y": [ + "6200", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "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" + ], + "machine_max_speed_e": [ + "3000", + "100" + ], + "machine_max_speed_x": [ + "1000", + "1000" + ], + "machine_max_speed_y": [ + "1000", + "1000" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "machine_start_gcode": "G90\nG28\nM132 X Y Z A\nG1 Z100 F3300\nG1 X-110.5 Y-74 F6000\nM6 T0\nM907 X100 Y100 Z60 A100\nG1 Z0.6 F3300\nG4 P2000\nM108 T0", + "machine_end_gcode": "M104 S0 T0\nG1 Z140 F3300\nG28 X0 Y0\nM132 X Y Z A\nG91\nM18", + "thumbnails_format": "PNG", + "thumbnails": [ + "96x96", + "300x300" + ] +} \ No newline at end of file diff --git a/resources/profiles/Dremel/machine/Dremel 3D20.json b/resources/profiles/Dremel/machine/Dremel 3D20.json new file mode 100644 index 0000000000..58e7aa04c7 --- /dev/null +++ b/resources/profiles/Dremel/machine/Dremel 3D20.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Dremel 3D20", + "nozzle_diameter": "0.4", + "family": "Dremel", + "bed_model": "dremel_3d20_buildplate_model.stl", + "bed_texture": "", + "hotend_model": "", + "machine_tech": "FFF", + "model_id": "Dremel_3D20", + "default_materials": "Dremel Generic PLA @3D20 all" +} \ No newline at end of file diff --git a/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json new file mode 100644 index 0000000000..12a761c782 --- /dev/null +++ b/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json @@ -0,0 +1,153 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Dremel 3D40 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_dremel_common", + "printer_model": "Dremel 3D40", + "printer_variant": "0.4", + "printer_structure": "Hbot", + "gcode_flavor": "marlin", + "default_filament_profile": [ + "Dremel Generic PLA @3D40 all" + ], + "default_print_profile": ".20mm Standard @Dremel 3D40 0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "255x0", + "255x155", + "0x155" + ], + "printable_height": "170", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "max_layer_height": [ + "0.34" + ], + "min_layer_height": [ + "0.05" + ], + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "1", + "extra_loading_move": "-2", + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "fan_speedup_overhangs": "1", + "deretraction_speed": [ + "40" + ], + "printer_settings_id": "Dremel", + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "3" + ], + "retraction_minimum_travel": [ + "5" + ], + "retraction_speed": [ + "60" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_length_toolchange": [ + "1" + ], + "retract_lift_enforce": [ + "Top Surfaces" + ], + "wipe": [ + "1" + ], + "wipe_distance": [ + "1" + ], + "z_hop": [ + "0.5" + ], + "z_hop_types": [ + "Normal Lift" + ], + "machine_max_acceleration_e": [ + "6200", + "5000" + ], + "machine_max_acceleration_extruding": [ + "6200", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "6200", + "20000" + ], + "machine_max_acceleration_y": [ + "6200", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "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" + ], + "machine_max_speed_e": [ + "3000", + "100" + ], + "machine_max_speed_x": [ + "1000", + "1000" + ], + "machine_max_speed_y": [ + "1000", + "1000" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_start_gcode": "G90\nG28\nM132 X Y Z A\nG1 Z100 F3300\nG1 X-110.5 Y-74 F6000\nM6 T0\nM907 X100 Y100 Z60 A100\nG1 Z0.6 F3300\nG4 P2000\nM108 T0", + "machine_end_gcode": "M104 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG162 Z F600\nG162 X Y F2000\nM84", + "thumbnails_format": "PNG", + "thumbnails": [ + "96x96", + "300x300" + ] +} diff --git a/resources/profiles/Dremel/machine/Dremel 3D40.json b/resources/profiles/Dremel/machine/Dremel 3D40.json new file mode 100644 index 0000000000..dcbde9d0c2 --- /dev/null +++ b/resources/profiles/Dremel/machine/Dremel 3D40.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Dremel 3D40", + "nozzle_diameter": "0.4", + "family": "Dremel", + "bed_model": "dremel_3d40_3d45_buildplate_model.stl", + "bed_texture": "", + "hotend_model": "", + "machine_tech": "FFF", + "model_id": "Dremel_3D40", + "default_materials": "Dremel Generic PLA @3D40 all" +} \ No newline at end of file diff --git a/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json new file mode 100644 index 0000000000..d02bd15274 --- /dev/null +++ b/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Dremel 3D45 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_dremel_common", + "printer_model": "Dremel 3D45", + "printer_variant": "0.4", + "printer_settings_id": "Dremel", + "gcode_flavor": "marlin", + "default_filament_profile": [ + "Dremel Generic PLA @3D45 all" + ], + "default_print_profile": ".20mm Standard @Dremel 3D45 0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "-127.5x-77.5", + "97.5x-77.5", + "97.5x77.5", + "-127.5x77.5" + ], + "printable_height": "170", + "deretraction_speed": [ + "40" + ], + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "1", + "extra_loading_move": "-2", + "wipe": [ + "1" + ], + "wipe_distance": [ + "1" + ], + "z_hop": [ + "0.5" + ], + "machine_max_acceleration_e": [ + "10000", + "10000" + ], + "machine_max_acceleration_extruding": [ + "1500", + "1500" + ], + "machine_max_acceleration_retracting": [ + "1500", + "1500" + ], + "machine_max_acceleration_x": [ + "9000", + "9000" + ], + "machine_max_acceleration_y": [ + "9000", + "9000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "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.2" + ], + "machine_max_speed_e": [ + "120", + "120" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "max_layer_height": [ + "0.34" + ], + "min_layer_height": [ + "0.07" + ], + "retraction_length": [ + "1" + ], + "retraction_minimum_travel": [ + "2" + ], + "retraction_speed": [ + "40" + ], + "use_relative_e_distances": "0", + "machine_start_gcode": "G28; home printer\nG1 Z50.00 F400; pruge line\nG1 F200 E3\nM132 X Y Z A; prepare printer\nM907 X100 Y100 Z50 A100", + "machine_end_gcode": "M104 S0; turn off nozzle\nM140 S0; turn off bed\nG92 E1; return print head to home\nG1 E-1 F300\nG162 Z F600\nG162 X Y F2000\nM84; disable stepper motors", + "machine_pause_gcode": "G5", + "change_filament_gcode": "G5" +} diff --git a/resources/profiles/Dremel/machine/Dremel 3D45.json b/resources/profiles/Dremel/machine/Dremel 3D45.json new file mode 100644 index 0000000000..3ae1226c6b --- /dev/null +++ b/resources/profiles/Dremel/machine/Dremel 3D45.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Dremel 3D45", + "nozzle_diameter": "0.4", + "family": "Dremel", + "bed_model": "dremel_3d45.stl", + "bed_texture": "", + "hotend_model": "", + "machine_tech": "FFF", + "model_id": "Dremel_3D45", + "default_materials": "Dremel Generic PLA @3D45 all" +} \ No newline at end of file diff --git a/resources/profiles/Dremel/machine/fdm_dremel_common.json b/resources/profiles/Dremel/machine/fdm_dremel_common.json new file mode 100644 index 0000000000..566099e54e --- /dev/null +++ b/resources/profiles/Dremel/machine/fdm_dremel_common.json @@ -0,0 +1,138 @@ +{ + "type": "machine", + "name": "fdm_dremel_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": [ + "500", + "500" + ], + "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": [ + "Dremel Generic PLA" + ], + "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" +} diff --git a/resources/profiles/Dremel/machine/fdm_machine_common.json b/resources/profiles/Dremel/machine/fdm_machine_common.json new file mode 100644 index 0000000000..6bf00c7418 --- /dev/null +++ b/resources/profiles/Dremel/machine/fdm_machine_common.json @@ -0,0 +1,120 @@ +{ + "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", + "support_chamber_temp_control": "0", + "support_air_filtration": "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": [ + "500" + ], + "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": "1", + "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" +} diff --git a/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json new file mode 100644 index 0000000000..c6b7c90bfc --- /dev/null +++ b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".05mm Super Detail @Dremel 3D40 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "30", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.05", + "initial_layer_speed": "22", + "infill_combination": "1", + "infill_wall_overlap": "15%", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "40", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "40", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "15", + "line_width": "0.42", + "layer_height": "0.05", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "30", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "45", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.42", + "support_top_z_distance": "0.1", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "40", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "45", + "support_threshold_angle": "30", + "support_object_xy_distance": "1.4", + "skirt_loops": "7", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.1", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.42", + "top_surface_speed": "15", + "travel_speed": "100", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "10", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json new file mode 100644 index 0000000000..e98c9282cd --- /dev/null +++ b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".05mm Super Detail @Dremel 3D45 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "20", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "35", + "infill_direction": "45", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.05", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "50", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "40", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.4", + "layer_height": "0.05", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "35", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.4", + "sparse_infill_speed": "50", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.4", + "support_top_z_distance": "0.4", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "50", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "35", + "travel_speed": "100", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "20", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json new file mode 100644 index 0000000000..35d2912238 --- /dev/null +++ b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json @@ -0,0 +1,94 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".10mm Detail @Dremel 3D20 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "5000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "45", + "infill_direction": "45", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.1", + "initial_layer_speed": "20", + "infill_combination": "1", + "infill_wall_overlap": "18%", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "50", + "inner_wall_acceleration": "5000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "45", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "20", + "line_width": "0.4", + "layer_height": "0.1", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "30", + "outer_wall_acceleration": "2500", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "10%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "30%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.4", + "sparse_infill_speed": "45", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.4", + "support_top_z_distance": "0.4", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "3.5", + "support_speed": "45", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "3", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "45", + "travel_speed": "90", + "travel_acceleration": "5000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "1000", + "top_shell_layers": "6", + "top_shell_thickness": "1", + "wall_distribution_count": "2", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D20 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json new file mode 100644 index 0000000000..7d3ae3cb4b --- /dev/null +++ b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".10mm Detail @Dremel 3D40 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "55", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.1", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "60", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "60", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.42", + "layer_height": "0.1", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "35", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "55", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.42", + "support_top_z_distance": "0.1", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.68", + "support_interface_speed": "55", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.1", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.42", + "top_surface_speed": "35", + "travel_speed": "120", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "10", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json new file mode 100644 index 0000000000..cc2ff51122 --- /dev/null +++ b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".10mm Detail @Dremel 3D45 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "35", + "infill_direction": "45", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.1", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "50", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "40", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.4", + "layer_height": "0.1", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "35", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.4", + "sparse_infill_speed": "50", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.4", + "support_top_z_distance": "0.4", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "50", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "35", + "travel_speed": "100", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "10", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json new file mode 100644 index 0000000000..57dfb2c77d --- /dev/null +++ b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json @@ -0,0 +1,94 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".20mm Standard @Dremel 3D20 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "brim_object_gap": "0.1", + "default_acceleration": "5000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "50", + "infill_direction": "45", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "infill_combination": "1", + "infill_wall_overlap": "25%", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "60", + "inner_wall_acceleration": "5000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "60", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "initial_layer_infill_speed": "35%", + "line_width": "0.45", + "layer_height": "0.2", + "minimum_sparse_infill_area": "10", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.45", + "outer_wall_speed": "60", + "outer_wall_acceleration": "2500", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "10%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "18%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "60", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.38", + "support_top_z_distance": "0.3", + "support_interface_top_layers": "3", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "3.5", + "support_speed": "50", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "skirt_loops": "3", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "1", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "50", + "travel_speed": "100", + "travel_acceleration": "5000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "1000", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "wall_distribution_count": "2", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D20 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json new file mode 100644 index 0000000000..b79abd9fc6 --- /dev/null +++ b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".20mm Standard @Dremel 3D40 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "55", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.1", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "60", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "60", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.42", + "layer_height": "0.1", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "30", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "55", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.42", + "support_top_z_distance": "0.4", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.68", + "support_interface_speed": "55", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.42", + "top_surface_speed": "35", + "travel_speed": "120", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json new file mode 100644 index 0000000000..910f171d3b --- /dev/null +++ b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".20mm Standard @Dremel 3D45 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "35", + "infill_direction": "45", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.1", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "60", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "50", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.4", + "layer_height": "0.2", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "30", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.4", + "sparse_infill_speed": "55", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.4", + "support_top_z_distance": "0.4", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "55", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "35", + "travel_speed": "100", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json new file mode 100644 index 0000000000..ee41cab287 --- /dev/null +++ b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json @@ -0,0 +1,94 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".30mm Draft @Dremel 3D20 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "5000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "50", + "infill_direction": "45", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "20", + "infill_combination": "1", + "infill_wall_overlap": "18%", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "60", + "inner_wall_acceleration": "5000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "60", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "50", + "line_width": "0.4", + "layer_height": "0.3", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "60", + "outer_wall_acceleration": "2500", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "10%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "18%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.4", + "sparse_infill_speed": "60", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.4", + "support_top_z_distance": "0.3", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "3.5", + "support_speed": "50", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "3", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.4", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "50", + "travel_speed": "100", + "travel_acceleration": "5000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "1000", + "top_shell_layers": "3", + "top_shell_thickness": "1", + "wall_distribution_count": "2", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D20 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json new file mode 100644 index 0000000000..31b74d1726 --- /dev/null +++ b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".30mm Draft @Dremel 3D40 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "55", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "60", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "60", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.42", + "layer_height": "0.3", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "60", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "55", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.42", + "support_top_z_distance": "0.3", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.68", + "support_interface_speed": "55", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.3", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.42", + "top_surface_speed": "55", + "travel_speed": "120", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "3", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json new file mode 100644 index 0000000000..2c24299b4f --- /dev/null +++ b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".30mm Draft @Dremel 3D45 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "35", + "infill_direction": "45", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "25", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "60", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "50", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "25", + "line_width": "0.4", + "layer_height": "0.3", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "30", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.4", + "sparse_infill_speed": "55", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.4", + "support_top_z_distance": "0.6", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "55", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.6", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.4", + "top_surface_speed": "35", + "travel_speed": "100", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "3", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json new file mode 100644 index 0000000000..a9368f4f40 --- /dev/null +++ b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".34mm SuperDraft @Dremel 3D40 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "55", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.34", + "initial_layer_speed": "30", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "70", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "60", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "30", + "line_width": "0.42", + "layer_height": "0.34", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "70", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "65", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.42", + "support_top_z_distance": "0.34", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.68", + "support_interface_speed": "55", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.34", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.34", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.42", + "top_surface_speed": "55", + "travel_speed": "120", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "3", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json new file mode 100644 index 0000000000..e30d580bb6 --- /dev/null +++ b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json @@ -0,0 +1,93 @@ +{ + "type": "process", + "from": "system", + "inherits": "fdm_process_dremel_common", + "name": ".34mm SuperDraft @Dremel 3D45 0.4", + "instantiation": "true", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "1", + "brim_object_gap": "0.1", + "default_acceleration": "2000", + "detect_overhang_wall": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "35", + "infill_direction": "45", + "initial_layer_line_width": "0.48", + "initial_layer_print_height": "0.34", + "initial_layer_speed": "35", + "infill_combination": "1", + "infill_wall_overlap": "12%", + "inner_wall_line_width": "0.48", + "inner_wall_speed": "70", + "inner_wall_acceleration": "2000", + "internal_solid_infill_line_width": "0.56", + "internal_solid_infill_speed": "50", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "2000", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "top", + "initial_layer_infill_speed": "35", + "line_width": "0.48", + "layer_height": "0.34", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.48", + "outer_wall_speed": "35", + "outer_wall_acceleration": "2000", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_infill_retraction": "1", + "raft_first_layer_density": "100%", + "raft_first_layer_expansion": "1.5", + "resolution": "0.012", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.56", + "sparse_infill_speed": "70", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "support_line_width": "0.48", + "support_top_z_distance": "0.68", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "55", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "1", + "skirt_loops": "5", + "slow_down_layers": "2", + "support_bottom_z_distance": "0.68", + "support_interface_bottom_layers": "2", + "support_expansion": "1.5", + "top_surface_line_width": "0.48", + "top_surface_speed": "35", + "travel_speed": "100", + "travel_acceleration": "2000", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "2000", + "top_shell_layers": "3", + "top_shell_thickness": "1", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "arachne", + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/process/fdm_process_common.json b/resources/profiles/Dremel/process/fdm_process_common.json new file mode 100644 index 0000000000..1da14b4d91 --- /dev/null +++ b/resources/profiles/Dremel/process/fdm_process_common.json @@ -0,0 +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": "crosshatch", + "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": "30", + "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/Dremel/process/fdm_process_dremel_common.json b/resources/profiles/Dremel/process/fdm_process_dremel_common.json new file mode 100644 index 0000000000..14e81528b6 --- /dev/null +++ b/resources/profiles/Dremel/process/fdm_process_dremel_common.json @@ -0,0 +1,104 @@ +{ + "type": "process", + "name": "fdm_process_dremel_common", + "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": "crosshatch", + "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[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "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": "monotonicline", + "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": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0" +} diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index f361afaaed..0df7594e00 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,6 +1,6 @@ { "name": "Elegoo", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Elegoo configurations", "machine_model_list": [ diff --git a/resources/profiles/Elegoo/machine/fdm_neptune_4_common.json b/resources/profiles/Elegoo/machine/fdm_neptune_4_common.json index 659cc3c5d1..337d90dd49 100644 --- a/resources/profiles/Elegoo/machine/fdm_neptune_4_common.json +++ b/resources/profiles/Elegoo/machine/fdm_neptune_4_common.json @@ -137,8 +137,9 @@ "nozzle_type": "undefine", "auxiliary_fan": "0", "thumbnails": [ - "320x320", - "160x160" + "320x320/PNG", + "32x32/COLPIC", + "160x160/COLPIC" ], - "thumbnails_format": "ColPic" + "thumbnails_format": "PNG" } 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 539343e9fe..df20c5e7dd 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 d1a3bb0599..496dce9b1c 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 63200f7671..5ba36d5921 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 dfef27e158..5dd2adfd33 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 739cef8085..95aa096735 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 aaade1da53..2e596d8674 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 10550956df..84169fb3a6 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 4d1d16f32d..e0ed07c96c 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.2 nozzle).json index 8c0d224646..7be265b66a 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.4 nozzle).json index 10a5912c2c..11b72a978b 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.6 nozzle).json index ef65fe8243..efbf6621f4 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.8 nozzle).json index 4706ab2596..8cf76272e6 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4 (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.2 nozzle).json index e06676560c..f3df34281b 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.4 nozzle).json index cb38d8f590..6fac3a4542 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.6 nozzle).json index 21174abd99..bb04ae83cf 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.8 nozzle).json index 98b1e7aa41..d9fab8ff1b 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Max (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.2 nozzle).json index 9f0a4e1fc3..93a78d2d9f 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.4 nozzle).json index 41fe9cbc3b..c05bdf4db8 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.6 nozzle).json index 0803d18037..cda4428811 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.8 nozzle).json index bcf08edbcc..e9f43c6b98 100644 --- a/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.08mm Extra Fine @Elegoo Neptune4Pro (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 e92801bf1d..47f284fb3e 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "11", "top_shell_thickness": "0.8", 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 6af8821327..0aa4c3b26e 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 8d281ef78e..0ca45a6c97 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 6edc7d035a..8972960957 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2D.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 f43bfe5a10..e36abc544a 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune2S.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 bf32664861..56100f7815 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 18d409bb33..3f130706ec 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Max.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 1995dce6d1..215bfcd511 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 bd61f8bc83..78b520f2e2 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune3Pro.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.2 nozzle).json index ef1414f069..2a217d42cb 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.4 nozzle).json index 3f585caab2..052df341a6 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.6 nozzle).json index a009da29eb..903b4bd839 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.8 nozzle).json index aaf50deefd..ac8eece541 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4 (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.2 nozzle).json index 41f12f0f02..5f972bd1e1 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.4 nozzle).json index 401e4fc217..c0026a1b24 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.6 nozzle).json index 3da84ebf49..e4cacddae6 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.8 nozzle).json index 4f5ffceb57..0b5b55f3fd 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Max (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.2 nozzle).json index a3f24129ab..2b1bd140f3 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.4 nozzle).json index 37c42c6663..15b179345c 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.6 nozzle).json index 7addbe460f..510f281623 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.8 nozzle).json index e713c1dce6..66c3ef0660 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo Neptune4Pro (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 eac0b78091..3252942314 100644 --- a/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.12mm Fine @Elegoo NeptuneX.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "7", "top_shell_thickness": "0.8", 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 3794fd2e8b..923203bbb1 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 cf79ff16ac..e1f5919190 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 3ab4f03850..5f99f19c88 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2D.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 fb2a9fea72..0f26195346 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune2S.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 90e2e6e9e7..b7b7a65676 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 1da848e6f1..dd95e3fe3e 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Max.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 cbfaca0474..8129b242e0 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 4695d5fa0a..b2ac5f07cd 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune3Pro.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.2 nozzle).json index 2741157aa3..f4607e6213 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.4 nozzle).json index 05b1c10d53..5c978aad87 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.6 nozzle).json index 69b4cccac1..cd39e4ea54 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.8 nozzle).json index 4a8a6a10f6..79a74f5a3d 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4 (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.2 nozzle).json index 79fb839db3..7764b0fe9e 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.4 nozzle).json index 1587ad552b..af9bf36852 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.6 nozzle).json index 8f2d254baa..afe8e7edf8 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.8 nozzle).json index 6f37cb8756..c25d034d46 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Max (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.2 nozzle).json index 510a17fda2..a6c46154bc 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.4 nozzle).json index 644e78490b..0cc83272d9 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.6 nozzle).json index bc8d7ecb57..aabfa68539 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.8 nozzle).json index a94a77f35b..76b08ed3f7 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo Neptune4Pro (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 d13dfe8f32..c324d28bf2 100644 --- a/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.16mm Optimal @Elegoo NeptuneX.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 c0ca9ac7e3..6d7b968834 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 37fde48d04..bd10900b56 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 fe84b11aa6..754963f0f7 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2D.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 af3f7ad675..55b89ff83f 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune2S.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 7af032bde2..aa54f594b5 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 419aab1794..b1c372d0d3 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Max.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 c1aed883be..247c546e1c 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 add697439b..b9e22dc130 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune3Pro.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.2 nozzle).json index 7dbac42615..7411607ed1 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.4 nozzle).json index 6f50f7149b..de0d017499 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.6 nozzle).json index 080770c151..448052eec5 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.8 nozzle).json index 5093910fda..449e32c39c 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4 (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.2 nozzle).json index 3fe7c398a5..c3ae39d971 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.4 nozzle).json index 89eb5ba878..37436ef205 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.6 nozzle).json index 318b6a396b..10c8bffafd 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.8 nozzle).json index 68615fbc10..bc5a2aadf8 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Max (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.2 nozzle).json index bbf6de592c..df1363123b 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.4 nozzle).json index b949da8ea4..04ff0b5d3b 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.6 nozzle).json index 0f8653e791..e8b2f606ea 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.56", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.8 nozzle).json index d05dfae48d..7f2897c23e 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo Neptune4Pro (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.78", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 6c959477f7..f948b0291b 100644 --- a/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.20mm Standard @Elegoo NeptuneX.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 b3278427ac..99e3366b00 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 692951a97c..ac6ef14f4a 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 92035a3fc7..d1e194f5c8 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2D.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2D.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 53ea928c64..9c51dac1f1 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2S.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune2S.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 df072e3506..9fe796eab2 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 d465779d5c..a678af5b2c 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Max.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Max.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 b3a1023b99..72e389d36c 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Plus.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 b270e5b302..b2f93981ec 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Pro.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune3Pro.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.2 nozzle).json index fd60e63a23..f9c3e88398 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.25", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.4 nozzle).json index a71372ae75..96001d1418 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.6 nozzle).json index e86310a6eb..1bf8986441 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.8 nozzle).json index d058cd9026..3be4c96b22 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4 (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.85", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.2 nozzle).json index fefb7b6b81..35bbe4522a 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.25", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.4 nozzle).json index cd0d5ab883..6da51aa8d2 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.6 nozzle).json index 9061cff097..c31b4b31f5 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.8 nozzle).json index 4e35b2b9fc..a693934d59 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Max (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.85", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.2 nozzle).json index 0b2b3bc9c1..10d7fe79d0 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.25", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.4 nozzle).json index cb2080be4b..f9c3026c0c 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.6 nozzle).json index a37af48be2..cdd367eb53 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.8 nozzle).json index ebda19568f..556c879193 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo Neptune4Pro (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.85", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 b9a14acade..ffe5aa792a 100644 --- a/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo NeptuneX.json +++ b/resources/profiles/Elegoo/process/0.24mm Draft @Elegoo NeptuneX.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 a5c5dd2c91..74dbb78aff 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 2a67da73c7..b4f1c2ee5e 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 7e7a9062a6..c98eeb49c2 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 4342f9aec1..aa78e26272 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 9bb848aeea..74eb019723 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 d8d19449fe..251d67bc0d 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 ac002f95d3..a120863aab 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 4c6529a260..97993fd477 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.2 nozzle).json index 21a1a10741..505756c720 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.25", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.4 nozzle).json index 1ce0a7317e..9eb18328c8 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.6 nozzle).json index 987d8f78bb..745488bd9c 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.8 nozzle).json index 2ad24c0a03..75b0d97bbd 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4 (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.85", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.2 nozzle).json index 29a57e8bb6..7ed352f1ce 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.25", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.4 nozzle).json index feb9ca7ad0..f45894c734 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.6 nozzle).json index 93b683e79d..c9d9af49ab 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.8 nozzle).json index 590c53b55c..ca4a50f0ab 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Max (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.85", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.2 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.2 nozzle).json index d1474f68b7..f2c15eced7 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.2 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.2 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.25", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.4 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.4 nozzle).json index a727fd9831..e628c28785 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.4 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.4 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.6 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.6 nozzle).json index aec1d00c39..b7cd5a180d 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.6 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.6 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -67,12 +67,12 @@ "support_interface_spacing": "0.2", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.8 nozzle).json b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.8 nozzle).json index 585a66496c..5dac42bfd7 100644 --- a/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.8 nozzle).json +++ b/resources/profiles/Elegoo/process/0.28mm Extra Draft @Elegoo Neptune4Pro (0.8 nozzle).json @@ -26,7 +26,7 @@ "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -69,12 +69,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "60", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.85", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 292d88f247..4f61aafcee 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 @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/fdm_process_common.json b/resources/profiles/Elegoo/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Elegoo/process/fdm_process_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json b/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json index 79830b41b9..d20c857aa5 100644 --- a/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "20", "travel_acceleration": "200", "inner_wall_acceleration": "200", @@ -77,12 +77,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json b/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json index c3d1c3fecd..36b0d0ca4e 100644 --- a/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_neptune4_common.json @@ -27,7 +27,7 @@ "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.22", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -70,12 +70,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "150", - "support_threshold_angle": "45", + "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_pattern": "monotonicline", "top_surface_line_width": "0.2", "top_shell_layers": "11", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 2c512a86ce..447478dae8 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,17 +1,21 @@ { "name": "FLSun", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ - { + { "name": "FLSun Q5", "sub_path": "machine/FLSun Q5.json" }, - { + { "name": "FLSun QQ-S Pro", "sub_path": "machine/FLSun QQ-S Pro.json" }, + { + "name": "FLSun Super Racer (SR)", + "sub_path": "machine/FLSun SR.json" + }, { "name": "FLSun V400", "sub_path": "machine/FLSun V400.json" @@ -22,49 +26,69 @@ "name": "fdm_process_common", "sub_path": "process/fdm_process_common.json" }, - { + { "name": "0.08mm Fine @FLSun Q5", "sub_path": "process/0.08mm Fine @FLSun Q5.json" }, - { + { "name": "0.08mm Fine @FLSun QQSPro", "sub_path": "process/0.08mm Fine @FLSun QQSPro.json" }, - { + { + "name": "0.08mm Fine @FLSun SR", + "sub_path": "process/0.08mm Fine @FLSun SR.json" + }, + { "name": "0.16mm Optimal @FLSun Q5", "sub_path": "process/0.16mm Optimal @FLSun Q5.json" }, - { + { "name": "0.16mm Optimal @FLSun QQSPro", "sub_path": "process/0.16mm Optimal @FLSun QQSPro.json" }, - { + { + "name": "0.16mm Optimal @FLSun SR", + "sub_path": "process/0.16mm Optimal @FLSun SR.json" + }, + { "name": "0.20mm Standard @FLSun Q5", "sub_path": "process/0.20mm Standard @FLSun Q5.json" }, - { + { "name": "0.20mm Standard @FLSun QQSPro", "sub_path": "process/0.20mm Standard @FLSun QQSPro.json" }, + { + "name": "0.20mm Standard @FLSun SR", + "sub_path": "process/0.20mm Standard @FLSun SR.json" + }, { "name": "0.20mm Standard @FLSun V400", "sub_path": "process/0.20mm Standard @FLSun V400.json" }, - { + { "name": "0.24mm Draft @FLSun Q5", "sub_path": "process/0.24mm Draft @FLSun Q5.json" }, - { + { "name": "0.24mm Draft @FLSun QQSPro", "sub_path": "process/0.24mm Draft @FLSun QQSPro.json" }, - { + { + "name": "0.24mm Draft @FLSun SR", + "sub_path": "process/0.24mm Draft @FLSun SR.json" + }, + { "name": "0.30mm Extra Draft @FLSun Q5", "sub_path": "process/0.30mm Extra Draft @FLSun Q5.json" }, - { + { "name": "0.30mm Extra Draft @FLSun QQSPro", "sub_path": "process/0.30mm Extra Draft @FLSun QQSPro.json" + }, + { + "name": "0.30mm Extra Draft @FLSun SR", + "sub_path": "process/0.30mm Extra Draft @FLSun SR.json" } ], "filament_list": [ @@ -150,17 +174,21 @@ "name": "fdm_machine_common", "sub_path": "machine/fdm_machine_common.json" }, - { + { "name": "FLSun Q5 0.4 nozzle", "sub_path": "machine/FLSun Q5 0.4 nozzle.json" }, - { + { "name": "FLSun QQ-S Pro 0.4 nozzle", "sub_path": "machine/FLSun QQ-S Pro 0.4 nozzle.json" }, + { + "name": "FLSun Super Racer 0.4 nozzle", + "sub_path": "machine/FLSun SR 0.4 nozzle.json" + }, { "name": "FLSun V400 0.4 nozzle", "sub_path": "machine/FLSun V400 0.4 nozzle.json" } ] -} +} \ No newline at end of file diff --git a/resources/profiles/FLSun/FLSun Super Racer (SR)_cover.png b/resources/profiles/FLSun/FLSun Super Racer (SR)_cover.png new file mode 100644 index 0000000000..090ce3f4c0 Binary files /dev/null and b/resources/profiles/FLSun/FLSun Super Racer (SR)_cover.png differ diff --git a/resources/profiles/FLSun/FLSun V400_cover.png b/resources/profiles/FLSun/FLSun V400_cover.png index 59de7b37ec..3c9c3ea484 100644 Binary files a/resources/profiles/FLSun/FLSun V400_cover.png and b/resources/profiles/FLSun/FLSun V400_cover.png differ diff --git a/resources/profiles/FLSun/filament/FLSun Generic ABS.json b/resources/profiles/FLSun/filament/FLSun Generic ABS.json index 8902996c8f..dbaba98b86 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ABS.json +++ b/resources/profiles/FLSun/filament/FLSun Generic ABS.json @@ -15,6 +15,7 @@ "compatible_printers": [ "FLSun Q5 0.4 nozzle", "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", "FLSun V400 0.4 nozzle" ] } diff --git a/resources/profiles/FLSun/filament/FLSun Generic ASA.json b/resources/profiles/FLSun/filament/FLSun Generic ASA.json index c590edf947..716a279943 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ASA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic ASA.json @@ -13,8 +13,9 @@ "12" ], "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun V400 0.4 nozzle" + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json index 954b5613b6..de4cdb119a 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json @@ -21,6 +21,7 @@ "compatible_printers": [ "FLSun Q5 0.4 nozzle", "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", "FLSun V400 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA.json b/resources/profiles/FLSun/filament/FLSun Generic PA.json index daf4847d70..06da861a23 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PA.json @@ -18,6 +18,7 @@ "compatible_printers": [ "FLSun Q5 0.4 nozzle", "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", "FLSun V400 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PC.json b/resources/profiles/FLSun/filament/FLSun Generic PC.json index 858545b5c6..42c95926ef 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PC.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PC.json @@ -15,6 +15,7 @@ "compatible_printers": [ "FLSun Q5 0.4 nozzle", "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", "FLSun V400 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PETG.json b/resources/profiles/FLSun/filament/FLSun Generic PETG.json index 9b5bd640d3..9f65ef5be2 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PETG.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PETG.json @@ -43,8 +43,9 @@ "; filament start gcode\n" ], "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun V400 0.4 nozzle" + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json index a41b370ca4..5cd0835ce0 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json @@ -19,8 +19,9 @@ "7" ], "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun V400 0.4 nozzle" + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA.json b/resources/profiles/FLSun/filament/FLSun Generic PLA.json index 981135e346..0945715758 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA.json @@ -16,8 +16,9 @@ "8" ], "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun V400 0.4 nozzle" + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PVA.json b/resources/profiles/FLSun/filament/FLSun Generic PVA.json index cd6fcb4fd4..8ad4ecdb61 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PVA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PVA.json @@ -19,8 +19,9 @@ "10" ], "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun V400 0.4 nozzle" + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic TPU.json b/resources/profiles/FLSun/filament/FLSun Generic TPU.json index b57fd3a117..357cd8d45a 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic TPU.json +++ b/resources/profiles/FLSun/filament/FLSun Generic TPU.json @@ -10,8 +10,9 @@ "3.2" ], "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun V400 0.4 nozzle" + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" ] -} +} \ No newline at end of file diff --git a/resources/profiles/FLSun/flsun_SR_buildplate_model.stl b/resources/profiles/FLSun/flsun_SR_buildplate_model.stl new file mode 100644 index 0000000000..55650a8ee9 Binary files /dev/null and b/resources/profiles/FLSun/flsun_SR_buildplate_model.stl differ diff --git a/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg b/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg new file mode 100644 index 0000000000..846833b686 --- /dev/null +++ b/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg @@ -0,0 +1,54 @@ + + + + + + + image/svg+xml + + + + + + + diff --git a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json new file mode 100644 index 0000000000..2bae873ef6 --- /dev/null +++ b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json @@ -0,0 +1,238 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun Super Racer 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun Super Racer (SR)", + "default_print_profile": "0.20mm Standard @FLSun SR", + "gcode_flavor": "marlin", + "nozzle_diameter": [ + "0.4" + ], + "nozzle_type": "brass", + "default_filament_profile": [ + "FLSun Generic PLA" + ], + "bed_exclude_area": [ + "0x0" + ], + "auxiliary_fan": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": ";FILAMENT_CHANGE\nM600", + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "140", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_radius": "65", + "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "5000", + "2000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_x": [ + "5000", + "2000" + ], + "machine_max_acceleration_y": [ + "5000", + "2000" + ], + "machine_max_acceleration_z": [ + "1500", + "200" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_x": [ + "300", + "200" + ], + "machine_max_speed_y": [ + "300", + "200" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "M600", + "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[first_layer_temperature] ; set extruder final temp\nM109 S[first_layer_temperature] ; wait for extruder final temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S440 P200 ; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250 ; wait between dual beep\nM300 S440 P200 ; 2nd beep for printer ready\nG4 S10 ; wait to clean the nozzle\nM300 S440 P200 ; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 F3000 Z1\nG1 X-150 Y0 Z0.4\nG92 E0\nG3 X0 Y-130 I150 Z0.3 E30 F2000\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename_base]; Display: Printing started...", + "machine_unload_filament_time": "0", + "max_layer_height": [ + "0.2" + ], + "min_layer_height": [ + "0.08" + ], + "printable_area": [ + "134.486x11.766", + "132.949x23.4425", + "130.4x34.9406", + "126.859x46.1727", + "122.352x57.0535", + "116.913x67.5", + "110.586x77.4328", + "103.416x86.7763", + "95.4594x95.4594", + "86.7763x103.416", + "77.4328x110.586", + "67.5x116.913", + "57.0535x122.352", + "46.1727x126.859", + "34.9406x130.4", + "23.4425x132.949", + "11.766x134.486", + "8.26637e-15x135", + "-11.766x134.486", + "-23.4425x132.949", + "-34.9406x130.4", + "-46.1727x126.859", + "-57.0535x122.352", + "-67.5x116.913", + "-77.4328x110.586", + "-86.7763x103.416", + "-95.4594x95.4594", + "-103.416x86.7763", + "-110.586x77.4328", + "-116.913x67.5", + "-122.352x57.0535", + "-126.859x46.1727", + "-130.4x34.9406", + "-132.949x23.4425", + "-134.486x11.766", + "-135x1.65327e-14", + "-134.486x-11.766", + "-132.949x-23.4425", + "-130.4x-34.9406", + "-126.859x-46.1727", + "-122.352x-57.0535", + "-116.913x-67.5", + "-110.586x-77.4328", + "-103.416x-86.7763", + "-95.4594x-95.4594", + "-86.7763x-103.416", + "-77.4328x-110.586", + "-67.5x-116.913", + "-57.0535x-122.352", + "-46.1727x-126.859", + "-34.9406x-130.4", + "-23.4425x-132.949", + "-11.766x-134.486", + "-2.47991e-14x-135", + "11.766x-134.486", + "23.4425x-132.949", + "34.9406x-130.4", + "46.1727x-126.859", + "57.0535x-122.352", + "67.5x-116.913", + "77.4328x-110.586", + "86.7763x-103.416", + "95.4594x-95.4594", + "103.416x-86.7763", + "110.586x-77.4328", + "116.913x-67.5", + "122.352x-57.0535", + "126.859x-46.1727", + "130.4x-34.9406", + "132.949x-23.4425", + "134.486x-11.766", + "135x-3.30655e-14" + ], + "printable_height": "330", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_apikey": "", + "printhost_authorization_type": "key", + "printhost_cafile": "", + "printhost_password": "", + "printhost_port": "", + "printhost_ssl_ignore_revoke": "0", + "printhost_user": "", + "retract_before_wipe": [ + "70%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "6.5" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "template_custom_gcode": ";FILAMENT_CHANGE\nM600", + "thumbnails": [ + "260x260" + ], + "wipe": [ + "1" + ], + "wipe_distance": [ + "1" + ], + "z_hop": [ + "0.3" + ], + "z_hop_types": [ + "Normal Lift" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun SR.json b/resources/profiles/FLSun/machine/FLSun SR.json new file mode 100644 index 0000000000..6e85731d28 --- /dev/null +++ b/resources/profiles/FLSun/machine/FLSun SR.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "FLSun Super Racer (SR)", + "model_id": "FLSun_Super_Racer", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_SR_buildplate_model.stl", + "bed_texture": "flsun_SR_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json index 1ac0837ea2..98c26efe89 100644 --- a/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json @@ -92,8 +92,9 @@ "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F300\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning", "machine_start_gcode": "G21\nG90\nM82\nM107 T0\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer] T0\nM190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer] T0\nG28\nG1 F3000 Z1\nG1 X-150 Y0 Z0.4\nG92 E0\nG3 X0 Y-130 I150 Z0.3 E30 F2000\nG92 E0", "layer_change_gcode": "", + "machine_pause_gcode": "PAUSE", "scan_first_layer": "0", "nozzle_type": "hardened_steel", "auxiliary_fan": "0" } - \ No newline at end of file + diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json index b2f8c0a6ef..0fc5f7c580 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.06", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "12", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json index 21d435028c..8478fbab7a 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.06", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "12", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json new file mode 100644 index 0000000000..28fd70266d --- /dev/null +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json @@ -0,0 +1,109 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm Fine @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.08", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.7", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "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": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "0", + "inner_wall_acceleration": "3000", + "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[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "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.06", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "1.5", + "support_interface_speed": "70%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.06", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "12", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50%", + "initial_layer_infill_speed": "50%", + "outer_wall_speed": "40", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "40", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "100", + "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": [ + "FLSun Super Racer 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json index d9aac91088..6bebc0249f 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.16", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json index 093584d733..47c6467fab 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.16", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "6", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json new file mode 100644 index 0000000000..22871b63a0 --- /dev/null +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json @@ -0,0 +1,109 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @FLSun SR", + "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.5", + "bridge_flow": "0.9", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "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": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "0", + "inner_wall_acceleration": "3000", + "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[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "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.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "70%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.16", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "6", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50%", + "initial_layer_infill_speed": "50%", + "outer_wall_speed": "40", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "40", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "100", + "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": [ + "FLSun Super Racer 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json index b3e33c1928..4836352921 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json index f4b46ac571..9a98c2f09a 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json new file mode 100644 index 0000000000..c0aff8ff02 --- /dev/null +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json @@ -0,0 +1,109 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @FLSun SR", + "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": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "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": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "0", + "inner_wall_acceleration": "3000", + "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[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "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.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "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": "75", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "75", + "gap_infill_speed": "75", + "sparse_infill_speed": "150", + "travel_speed": "180", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json index ca8b4bf23c..8ab5ea8fd0 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.18", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json index f06ed8b702..c5b733ee4a 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.18", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json new file mode 100644 index 0000000000..1d11c2b26e --- /dev/null +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json @@ -0,0 +1,109 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "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": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "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[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "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.18", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.18", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "75", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "75", + "gap_infill_speed": "75", + "sparse_infill_speed": "150", + "travel_speed": "180", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json index f6a8572ee2..534c02f77b 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "800", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.22", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json index 5b0c670c41..851a3a25c2 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json @@ -29,7 +29,7 @@ "line_width": "0.5", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "1000", "travel_acceleration": "0", "inner_wall_acceleration": "800", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.22", "support_speed": "60", - "support_threshold_angle": "45", + "support_threshold_angle": "30", "support_object_xy_distance": "60%", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json new file mode 100644 index 0000000000..079f74388c --- /dev/null +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json @@ -0,0 +1,109 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Extra Draft @FLSun SR", + "from": "system", + "inherits": "fdm_process_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.6", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.5", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.5", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "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[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "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.22", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.22", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "75", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "75", + "gap_infill_speed": "75", + "sparse_infill_speed": "150", + "travel_speed": "180", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/fdm_process_common.json b/resources/profiles/FLSun/process/fdm_process_common.json index dbcc552bbd..ef2f117abf 100644 --- a/resources/profiles/FLSun/process/fdm_process_common.json +++ b/resources/profiles/FLSun/process/fdm_process_common.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -81,7 +81,7 @@ "tree_support_wall_count": "0", "tree_support_with_infill": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 852015703a..9a168dddad 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -13,13 +13,17 @@ "name": "Flashforge Adventurer 5M Pro", "sub_path": "machine/Flashforge Adventurer 5M Pro.json" }, - { + { "name": "Flashforge Adventurer 3 Series", "sub_path": "machine/Flashforge Adventurer 3 Series.json" }, { "name": "Flashforge Guider 3 Ultra", "sub_path": "machine/Flashforge Guider 3 Ultra.json" + }, + { + "name": "Flashforge Guider 2s", + "sub_path": "machine/Flashforge Guider 2s.json" } ], "process_list": [ @@ -55,11 +59,27 @@ "name": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", "sub_path": "process/0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle.json" }, - { + { + "name": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "sub_path": "process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json" + }, + { + "name": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "sub_path": "process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json" + }, + { + "name": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "sub_path": "process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json" + }, + { + "name": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "sub_path": "process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json" + }, + { "name": "0.20mm Standard @Flashforge AD3 0.4 Nozzle", "sub_path": "process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json" }, - { + { "name": "0.30mm Fast @Flashforge AD3 0.4 Nozzle", "sub_path": "process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json" }, @@ -70,6 +90,22 @@ { "name": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "sub_path": "process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json" + }, + { + "name": "0.30mm Draft @Flashforge Guider 2s 0.4 nozzle", + "sub_path": "process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Flashforge Guider 2s 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Flashforge Guider 2s 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json" } ], "filament_list": [ @@ -101,14 +137,26 @@ "name": "Flashforge Generic ABS", "sub_path": "filament/Flashforge Generic ABS.json" }, + { + "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json" + }, { "name": "Flashforge Generic PETG", "sub_path": "filament/Flashforge Generic PETG.json" }, + { + "name": "Flashforge PETG @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json" + }, { "name": "Flashforge Generic PLA", "sub_path": "filament/Flashforge Generic PLA.json" }, + { + "name": "Flashforge PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Flashforge Generic PLA-CF10", "sub_path": "filament/Flashforge Generic PLA-CF10.json" @@ -117,14 +165,26 @@ "name": "Flashforge Generic PLA-Silk", "sub_path": "filament/Flashforge Generic PLA-Silk.json" }, + { + "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json" + }, { "name": "Flashforge Generic HS PLA", "sub_path": "filament/Flashforge Generic HS PLA.json" }, + { + "name": "Flashforge HS PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Flashforge Generic ASA", "sub_path": "filament/Flashforge Generic ASA.json" }, + { + "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Flashforge Generic PETG-CF10", "sub_path": "filament/Flashforge Generic PETG-CF10.json" @@ -214,6 +274,14 @@ { "name": "fdm_flashforge_common", "sub_path": "machine/fdm_flashforge_common.json" + }, + { + "name": "fdm_adventurer5m_common", + "sub_path": "machine/fdm_adventurer5m_common.json" + }, + { + "name": "Flashforge Adventurer 5M 0.25 Nozzle", + "sub_path": "machine/Flashforge Adventurer 5M 0.25 Nozzle.json" }, { "name": "Flashforge Adventurer 5M 0.4 Nozzle", @@ -222,6 +290,14 @@ { "name": "Flashforge Adventurer 5M 0.6 Nozzle", "sub_path": "machine/Flashforge Adventurer 5M 0.6 Nozzle.json" + }, + { + "name": "Flashforge Adventurer 5M 0.8 Nozzle", + "sub_path": "machine/Flashforge Adventurer 5M 0.8 Nozzle.json" + }, + { + "name": "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "sub_path": "machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json" }, { "name": "Flashforge Adventurer 5M Pro 0.4 Nozzle", @@ -231,11 +307,15 @@ "name": "Flashforge Adventurer 5M Pro 0.6 Nozzle", "sub_path": "machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json" }, - { + { + "name": "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "sub_path": "machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json" + }, + { "name": "fdm_flashforge_common", "sub_path": "machine/fdm_adventurer3_common.json" }, - { + { "name": "Flashforge Adventurer 3 Series 0.4 Nozzle", "sub_path": "machine/Flashforge Adventurer 3 Series 0.4 nozzle.json" }, @@ -250,6 +330,10 @@ { "name": "Flashforge Guider 3 Ultra 0.4 Nozzle", "sub_path": "machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json" + }, + { + "name": "Flashforge Guider 2s 0.4 nozzle", + "sub_path": "machine/Flashforge Guider 2s 0.4 nozzle.json" } ] } diff --git a/resources/profiles/Flashforge/Flashforge Guider 2s_cover.png b/resources/profiles/Flashforge/Flashforge Guider 2s_cover.png new file mode 100644 index 0000000000..900231dedd Binary files /dev/null and b/resources/profiles/Flashforge/Flashforge Guider 2s_cover.png differ diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..44387098ed --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic ABS", + "from": "system", + "setting_id": "GFSA04_02", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFB99", + "filament_settings_id": [ + "Flashforge ABS @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.1" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..1faf1a055a --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic ASA", + "from": "system", + "setting_id": "GFSA04_05", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFL99", + "filament_settings_id": [ + "Flashforge ASA @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: ASA\n" + ], + "pressure_advance": [ + "0.1" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json index 1055037bb8..acb764bee0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json @@ -20,8 +20,6 @@ "2" ], "compatible_printers": [ - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json index f038a21486..1ff9c7ee02 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json @@ -50,6 +50,8 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json index 21c8408a8e..457a13c2fb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json @@ -20,8 +20,6 @@ "2" ], "compatible_printers": [ - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json index 2b5abb54a0..4f4ef4a368 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json @@ -17,7 +17,10 @@ "2" ], "compatible_printers": [ - "Flashforge Adventurer 5M Pro 0.4 Nozzle" + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json index 8dd83f0a4e..aa5c61337d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json @@ -20,8 +20,12 @@ "2" ], "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json index 07658bcd9a..e9c3659a6b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json @@ -17,9 +17,11 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json index 808fe59833..38bacfca77 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json index 74f50d8bd9..29774632d5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json index 257c6edadd..0ae33101be 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json @@ -18,9 +18,11 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json index 3c68f52cbc..bf7833deb0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json @@ -84,7 +84,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json index 40ab738acd..a205152864 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json index 074f4671e0..bb851c86f0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json index d48b9bbe9e..9889e78ce3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json @@ -20,9 +20,11 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json index 340a685a19..2536d54daf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json @@ -60,7 +60,9 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json index 1f91f12947..1eb9c62f5f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json @@ -60,7 +60,9 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json index bc2961109d..6e74e7bc9f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json index 268e9c66bf..0639e20d0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json @@ -19,8 +19,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..553b5f4bea --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge HS PLA @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic HS PLA", + "from": "system", + "setting_id": "GFSA04_09", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFL99", + "filament_settings_id": [ + "Flashforge HS PLA @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: HS PLA\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..0ebd69f100 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Flashforge PETG @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic PETG", + "from": "system", + "setting_id": "GFSA04_12", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFG99", + "filament_settings_id": [ + "Flashforge PETG @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "1.5" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..e3e8d5e3ab --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Flashforge PLA @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic PLA", + "from": "system", + "setting_id": "GFSA04_19", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_settings_id": [ + "Flashforge PLA @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..41122b34af --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic PLA-Silk", + "from": "system", + "setting_id": "GFSA04_25", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFL99", + "filament_settings_id": [ + "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA-Silk\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "217" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA.json b/resources/profiles/Flashforge/filament/Flashforge PLA.json index e733abb4a9..155eb9c84c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA.json @@ -59,6 +59,7 @@ ], "compatible_printers": [ "Flashforge Adventurer 3 Series 0.4 Nozzle", - "Flashforge Adventurer 3 Series 0.6 Nozzle" + "Flashforge Adventurer 3 Series 0.6 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json index 88259d7a3d..3b5a961265 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.json index a58a757e6c..dc675132db 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.json @@ -20,11 +20,8 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.4 Nozzle" + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.json index f7d520689f..f79beb5ff1 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.json @@ -20,11 +20,8 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.4 Nozzle" + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json index afedac0990..2fd995d4be 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", @@ -168,7 +164,7 @@ "0" ], "filament_type": [ - "PET-CF" + "S-Multi" ], "filament_unload_time": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json index b897d2ed44..d2825f27fc 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", @@ -168,7 +164,7 @@ "0" ], "filament_type": [ - "PA-CF" + "S-PAHT" ], "filament_unload_time": [ "0" diff --git a/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json index 4c9993997c..a7d2d2b949 100644 --- a/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker Generic S1.json index d41b46f781..11de35b1af 100644 --- a/resources/profiles/Flashforge/filament/Polymaker Generic S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker Generic S1.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/flashfoge_adventurer5m_series_buildplate_model.STL b/resources/profiles/Flashforge/flashfoge_adventurer5m_series_buildplate_model.STL deleted file mode 100644 index 810b7f9007..0000000000 Binary files a/resources/profiles/Flashforge/flashfoge_adventurer5m_series_buildplate_model.STL and /dev/null differ diff --git a/resources/profiles/Flashforge/flashforge_adventurer5m_series_buildplate_model.STL b/resources/profiles/Flashforge/flashforge_adventurer5m_series_buildplate_model.STL new file mode 100644 index 0000000000..ba3120726a Binary files /dev/null and b/resources/profiles/Flashforge/flashforge_adventurer5m_series_buildplate_model.STL differ diff --git a/resources/profiles/Flashforge/flashfoge_adventurer_5m_series_hotend.stl b/resources/profiles/Flashforge/flashforge_adventurer_5m_series_hotend.stl similarity index 100% rename from resources/profiles/Flashforge/flashfoge_adventurer_5m_series_hotend.stl rename to resources/profiles/Flashforge/flashforge_adventurer_5m_series_hotend.stl diff --git a/resources/profiles/Flashforge/flashforge_g2s_buildplate_model.stl b/resources/profiles/Flashforge/flashforge_g2s_buildplate_model.stl new file mode 100644 index 0000000000..dfbb4ece8d Binary files /dev/null and b/resources/profiles/Flashforge/flashforge_g2s_buildplate_model.stl differ diff --git a/resources/profiles/Flashforge/flashforge_g2s_buildplate_texture.png b/resources/profiles/Flashforge/flashforge_g2s_buildplate_texture.png new file mode 100644 index 0000000000..f65e5d9746 Binary files /dev/null and b/resources/profiles/Flashforge/flashforge_g2s_buildplate_texture.png differ diff --git a/resources/profiles/Flashforge/flashfoge_g3u_buildplate_model.STL b/resources/profiles/Flashforge/flashforge_g3u_buildplate_model.stl similarity index 100% rename from resources/profiles/Flashforge/flashfoge_g3u_buildplate_model.STL rename to resources/profiles/Flashforge/flashforge_g3u_buildplate_model.stl diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.25 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.25 Nozzle.json new file mode 100644 index 0000000000..02d4534ca7 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.25 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM006", + "name": "Flashforge Adventurer 5M 0.25 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M", + "default_print_profile": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "nozzle_diameter": [ "0.25" ], + "printer_variant": "0.25", + "max_layer_height": [ "0.14" ], + "min_layer_height": [ "0.08" ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG90 E0\nM83\nG1 E-1 F600\nG1 E8 F300\nG1 X85 Y110 Z0.2 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0", + "retraction_length": [ "1" ], + "z_hop": [ "0.3" ], + "nozzle_type": "stainless_steel" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json index d8504dde9e..5d8d6652d6 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json @@ -4,62 +4,13 @@ "name": "Flashforge Adventurer 5M 0.4 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", + "default_print_profile": "0.20mm Standard @Flashforge AD5M 0.4 Nozzle", "nozzle_diameter": [ "0.4" ], "printer_variant": "0.4", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "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": [ "9", "9" ], - "machine_max_jerk_y": [ "9", "9" ], - "machine_max_jerk_z": [ "3", "3" ], "max_layer_height": [ "0.28" ], "min_layer_height": [ "0.08" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "0.8" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], "nozzle_type": "stainless_steel" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json index 5d12cff14a..34694b32b6 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json @@ -4,64 +4,15 @@ "name": "Flashforge Adventurer 5M 0.6 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Flashforge AD5M 0.6 Nozzle", + "default_print_profile": "0.30mm Standard @Flashforge AD5M 0.6 Nozzle", "nozzle_diameter": [ "0.6" ], "printer_variant": "0.6", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "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": [ "9", "9" ], - "machine_max_jerk_y": [ "9", "9" ], - "machine_max_jerk_z": [ "3", "3" ], "max_layer_height": [ "0.4" ], "min_layer_height": [ "0.15" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "1.2" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], - "nozzle_type": "stainless_steel" + "nozzle_type": "hardened_steel" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.8 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.8 Nozzle.json new file mode 100644 index 0000000000..2eef780d8b --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.8 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM005", + "name": "Flashforge Adventurer 5M 0.8 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M", + "default_print_profile": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "nozzle_diameter": [ "0.8" ], + "printer_variant": "0.8", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.3 F1200\nG1 X-110 E30 F2400\nG1 Y0 E8 F2400\nG1 X-109.6 F2400\nG1 Y110 E10 F2400\nG92 E0", + "max_layer_height": [ "0.56" ], + "min_layer_height": [ "0.15" ], + "retraction_length": [ "1.5" ], + "nozzle_type": "hardened_steel", + "z_hop": ["0"] +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json new file mode 100644 index 0000000000..021520222c --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM010", + "name": "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M Pro", + "default_print_profile": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "nozzle_diameter": [ "0.25" ], + "printer_variant": "0.25", + "max_layer_height": [ "0.14" ], + "min_layer_height": [ "0.08" ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG90 E0\nM83\nG1 E-1 F600\nG1 E8 F300\nG1 X85 Y110 Z0.2 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0", + "retraction_length": [ "1" ], + "z_hop": [ "0.3" ], + "nozzle_type": "stainless_steel" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json index 4d8d58dcdf..eaad7c2df1 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json @@ -4,63 +4,13 @@ "name": "Flashforge Adventurer 5M Pro 0.4 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M Pro", - "gcode_flavor": "klipper", "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "nozzle_diameter": [ "0.4" ], "printer_variant": "0.4", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "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": [ "9", "9" ], - "machine_max_jerk_y": [ "9", "9" ], - "machine_max_jerk_z": [ "3", "3" ], "max_layer_height": [ "0.28" ], "min_layer_height": [ "0.08" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "0.8" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], "nozzle_type": "stainless_steel" - } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json index 16a9e3011a..7ee9c093ab 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json @@ -4,63 +4,15 @@ "name": "Flashforge Adventurer 5M Pro 0.6 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M Pro", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.6 Nozzle", + "default_print_profile": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", "nozzle_diameter": [ "0.6" ], "printer_variant": "0.6", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "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": [ "9", "9" ], - "machine_max_jerk_y": [ "9", "9" ], - "machine_max_jerk_z": [ "3", "3" ], "max_layer_height": [ "0.4" ], "min_layer_height": [ "0.15" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "1.2" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], - "nozzle_type": "stainless_steel" + "nozzle_type": "hardened_steel" + } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json new file mode 100644 index 0000000000..b638a18246 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM009", + "name": "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M Pro", + "default_print_profile": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "nozzle_diameter": [ "0.8" ], + "printer_variant": "0.8", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.3 F1200\nG1 X-110 E30 F2400\nG1 Y0 E8 F2400\nG1 X-109.6 F2400\nG1 Y110 E10 F2400\nG92 E0", + "max_layer_height": [ "0.56" ], + "min_layer_height": [ "0.15" ], + "retraction_length": [ "1.5" ], + "nozzle_type": "hardened_steel", + "z_hop": ["0"] +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json index 6420bf5383..a9e9fc036a 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json @@ -2,11 +2,11 @@ "type": "machine_model", "name": "Flashforge Adventurer 5M Pro", "model_id": "Flashforge Adventurer 5M Pro", - "nozzle_diameter": "0.4;0.6", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", - "bed_model": "flashfoge_adventurer5m_series_buildplate_model.STL", + "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", "bed_texture": "flashforge_adventurer5m_buildplate_texture.png", - "hotend_model": "", + "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json index dc9023abb2..2211a634bb 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json @@ -2,11 +2,11 @@ "type": "machine_model", "name": "Flashforge Adventurer 5M", "model_id": "Flashforge-Adventurer-5M", - "nozzle_diameter": "0.4;0.6", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", - "bed_model": "flashfoge_adventurer5m_series_buildplate_model.STL", + "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", "bed_texture": "flashforge_adventurer5m_buildplate_texture.png", - "hotend_model": "", + "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json new file mode 100644 index 0000000000..6066e7891f --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json @@ -0,0 +1,60 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Flashforge Guider 2s 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_flashforge_common", + "printer_model": "Flashforge Guider 2s", + "gcode_flavor": "marlin", + "default_print_profile": "0.20mm Standard @Flashforge Guider 2s 0.4 nozzle", + "nozzle_diameter": [ "0.4" ], + "printer_variant": "0.4", + "printable_area": [ + "-140x-125", + "140x-125", + "140x125", + "-140x125" + ], + "printable_height": "300", + "extruder_offset": [ "-20", "10" ], + "extruder_clearance_height_to_lid": "70", + "extruder_clearance_height_to_rod": "23", + "extruder_clearance_radius": "40", + "use_relative_e_distances": "0", + "auxiliary_fan": "1", + "machine_max_acceleration_e": [ "200", "200" ], + "machine_max_acceleration_extruding": [ "200", "200" ], + "machine_max_acceleration_retracting": [ "200", "200" ], + "machine_max_acceleration_travel": [ "200", "200" ], + "machine_max_acceleration_x": [ "200", "200" ], + "machine_max_acceleration_y": [ "200", "200" ], + "machine_max_acceleration_z": [ "200", "200" ], + "machine_max_speed_e": [ "100", "100" ], + "machine_max_speed_x": [ "200", "200" ], + "machine_max_speed_y": [ "200", "200" ], + "machine_max_speed_z": [ "20", "20" ], + "machine_max_jerk_e": [ "2.5", "2.5" ], + "machine_max_jerk_x": [ "9", "9" ], + "machine_max_jerk_y": [ "9", "9" ], + "machine_max_jerk_z": [ "3", "3" ], + "max_layer_height": [ "0.8" ], + "min_layer_height": [ "0.02" ], + "printer_settings_id": "Flashforge", + "retraction_minimum_travel": [ "1" ], + "retract_before_wipe": [ "100%" ], + "retraction_length": [ "1" ], + "retract_length_toolchange": [ "2" ], + "retraction_speed": [ "100" ], + "z_hop": [ "0" ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M25", + "default_filament_profile": [ "Flashforge Generic PLA" ], + "machine_start_gcode": "M118 X10 Y10 Z10\nM140 S[bed_temperature_initial_layer_single]; set initial bed temp\nM104 S[nozzle_temperature_initial_layer] T0; set initial extruder temp\nM107; disable cooling fan\nG90; set to absolute positioning\nG28; home axes\nM132 X Y A B; recall home offsets from EPROM\nG1 Z50.0 F420; adjust Z\nG161 X Y F3300\nM7; wait for bed to stabilize\nM6 T0; wait for extruder to stabilize\nM651 S255; start case fan\nG1 Z0.3 F3600; move down to purge\nG92 E0; zero extruders\nG1 X120 Y-125 E20 F2000; extrude a line of filament across the front edge of the bed\nG1 X130 Y-125 F180; wait for ooze\nG1 X140 Y-125 F5000; fast wipe\nG1 Z1 F100; lift\nG92 E0; zero extruders again\nG1 E-1.0000 F1800", + "machine_end_gcode": "M104 S0 T0; cool down extruder\nM140 S0 T0; cool down bed\nG162 Z F1800\nG28 X Y; home axes\nM132 X Y A B; recall home offsets from EPROM\nM652; turn off rear fan\nG91; set to relative positioning\nM18; disable stepper motors", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "wipe_distance": "2", + "nozzle_type": "undefined" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json new file mode 100644 index 0000000000..87a5c8e009 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Flashforge Guider 2s", + "model_id": "Flashforge-Guider-2s", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Flashforge", + "bed_model": "flashforge_g2s_buildplate_model.stl", + "bed_texture": "flashforge_g2s_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json index faf7e62223..6f30c8ede5 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json @@ -9,7 +9,7 @@ "bed_exclude_area": [ "0x0" ], - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n{if (\nfilament_type[0] ==\"PLA\" \nor filament_type[0] ==\"PETG\" \nor filament_type[0] ==\"TPU\" \nor filament_type[0] ==\"PVA\" \nor filament_type[0] ==\"PLA-CF\"\n\n)}\n{if layer_z >= initial_layer_print_height + layer_height * 2}\nM106 P101 S216\nM106 P0 S255 T0\nM106 P1 S255 T1\n{elsif layer_z >= initial_layer_print_height + layer_height * 1}\nM106 P0 S178 T0\nM106 P1 S178 T1\nM106 P101 S153\n{else}\nM106 P101 S0\n{endif}\n{endif}", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", "best_object_pos": "0.5,0.5", "change_extrusion_role_gcode": "", "change_filament_gcode": "; change filament start\n{if total_toolchanges == 0 and current_extruder == 1}\nM104 S0 T0\n{elsif total_toolchanges > 0 and current_extruder == 0}\nM104 S{nozzle_temperature[0]}\n{if layer_z == initial_layer_print_height}\nT1\nM109 S{nozzle_temperature_initial_layer[1]} T1\n{else}\nT1\nM109 S{nozzle_temperature[1]} T1\n{endif}\n{elsif total_toolchanges > 0 and current_extruder == 1}\nM104 S{nozzle_temperature[1]}\n{if layer_z == initial_layer_print_height}\nT0\nM109 S{nozzle_temperature_initial_layer[0]} T0\n{else}\nT0\nM109 S{nozzle_temperature[0]} T0\n{endif}\n{endif}\n", @@ -110,7 +110,7 @@ "0" ], "machine_pause_gcode": "M25", - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\n{if total_toolchanges < 1}\nM109 S[nozzle_temperature_initial_layer] T[initial_extruder]\nT[initial_extruder]\nG21\nG90\nM83\nG1 Z0.3 F400\nG1 X-145 Y{random(-160,-152)} F4800\nG1 X-95 Y{random(-160,-152)} E30 F400\nG1 E-15 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X-80 F4800 ; move away from purge line\n{else}\nM109 S{nozzle_temperature_initial_layer[0] - 30} T0\nM109 S{nozzle_temperature_initial_layer[1] - 30} T1\n{if initial_extruder==0}\nM109 S{nozzle_temperature_initial_layer[1]} T1\nT1\nG21\nG90\nM83\nG1 Z0.3 F400\nG1 X-145 Y{random(-160,-152)} F4800\nG1 X-95 Y{random(-160,-152)} E30 F400\nG1 E-15 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X-80 F4800 ; move away from purge line\nM104 S{nozzle_temperature_initial_layer[1]-30} T1\nM109 S{nozzle_temperature_initial_layer[0]} T0\nT0\nG1 Z0.3 F400\nG1 X145 Y{random(-160,-152)} F4800\nG1 X95 Y{random(-160,-152)} E30 F400\nG1 E-0.8 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X80 F4800 ; move away from purge line\nG92 E0\n{elsif current_extruder == 1}\nM109 S{nozzle_temperature_initial_layer[0]} T0\nT0\nG21\nG90\nM83\nG1 Z0.3 F400\nG1 X-145 Y{random(-160,-152)} F4800\nG1 X-95 Y{random(-160,-152)} E30 F400\nG1 E-15 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X-80 F4800 ; move away from purge line\nM104 S{nozzle_temperature_initial_layer[0]-30} T0\nM109 S{nozzle_temperature_initial_layer[1]} T1\nT1\nG1 Z0.3 F400\nG1 X145 Y{random(-160,-152)} F4800\nG1 X95 Y{random(-160,-152)} E30 F400\nG1 E-0.8 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X80 F4800 ; move away from purge line\nG92 E0\n{endif}\n{endif}\n\n", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\n{if total_toolchanges < 1}\nM109 S[nozzle_temperature_initial_layer] T[initial_extruder]\nT[initial_extruder]\nG21\nG90\nM83\nG1 Z0.3 F400\nG1 X-145 Y{random(-160,-152)} F4800\nG1 X-95 Y{random(-160,-152)} E30 F400\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X-80 F4800 ; move away from purge line\n{else}\nM109 S{nozzle_temperature_initial_layer[0] - 30} T0\nM109 S{nozzle_temperature_initial_layer[1] - 30} T1\n{if initial_extruder==0}\nM109 S{nozzle_temperature_initial_layer[1]} T1\nT1\nG21\nG90\nM83\nG1 Z0.3 F400\nG1 X-145 Y{random(-160,-152)} F4800\nG1 X-95 Y{random(-160,-152)} E30 F400\nG1 E-15 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X-80 F4800 ; move away from purge line\nM104 S{nozzle_temperature_initial_layer[1]-30} T1\nM109 S{nozzle_temperature_initial_layer[0]} T0\nT0\nG1 Z0.3 F400\nG1 X145 Y{random(-160,-152)} F4800\nG1 X95 Y{random(-160,-152)} E30 F400\nG1 E-0.8 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X80 F4800 ; move away from purge line\nG92 E0\n{elsif current_extruder == 1}\nM109 S{nozzle_temperature_initial_layer[0]} T0\nT0\nG21\nG90\nM83\nG1 Z0.3 F400\nG1 X-145 Y{random(-160,-152)} F4800\nG1 X-95 Y{random(-160,-152)} E30 F400\nG1 E-15 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X-80 F4800 ; move away from purge line\nM104 S{nozzle_temperature_initial_layer[0]-30} T0\nM109 S{nozzle_temperature_initial_layer[1]} T1\nT1\nG1 Z0.3 F400\nG1 X145 Y{random(-160,-152)} F4800\nG1 X95 Y{random(-160,-152)} E30 F400\nG1 E-0.8 F1800\nG92 E0\nG1 Z10 F2000 ; move up from purge line\nG1 X80 F4800 ; move away from purge line\nG92 E0\n{endif}\n{endif}\n\n", "machine_unload_filament_time": "0", "manual_filament_change": "0", "max_layer_height": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json index e3601b0448..26060e43d0 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json @@ -5,7 +5,7 @@ "nozzle_diameter": "0.4", "machine_tech": "FFF", "family": "Flashforge", - "bed_model": "flashfoge_g3u_buildplate_model.STL", + "bed_model": "flashforge_g3u_buildplate_model.stl", "bed_texture": "flashforge_g3u_buildplate_texture.png", "hotend_model": "", "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" diff --git a/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json index 5777b8ff91..537a691ccb 100644 --- a/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json +++ b/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json @@ -19,10 +19,10 @@ "machine_max_acceleration_x": [ "500" ], "machine_max_acceleration_y": [ "500" ], "machine_max_acceleration_z": [ "100" ], - "machine_max_speed_e": [ "60" ], + "machine_max_speed_e": [ "30" ], "machine_max_speed_x": [ "150" ], "machine_max_speed_y": [ "150" ], - "machine_max_speed_z": [ "10" ], + "machine_max_speed_z": [ "20" ], "machine_max_jerk_e": [ "2.5" ], "machine_max_jerk_x": [ "8" ], "machine_max_jerk_y": [ "8" ], @@ -36,11 +36,13 @@ "deretraction_speed": [ "25" ], "z_hop": [ "0.4" ], "single_extruder_multi_material": "1", + "enable_filament_ramming": "0", + "purge_in_prime_tower": "0", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ "Flashforge PLA" ], - "machine_start_gcode": "M140 S[bed_temperature_initial_layer] T0\nM104 S[nozzle_temperature_initial_layer] T0\nM104 S0 T1\nM107\nM900 K[pressure_advance] T0\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255", - "machine_end_gcode": "M104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer] T0\nM104 S[nozzle_temperature_initial_layer] T0\nM104 S0 T1\nM107\nM900 K[pressure_advance] T0\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255\n;pre-extrude\nM108 T0\nG1 X-37.50 Y-75.00 F6000\nM106\nG1 Z0.200 F420\nG1 X-37.50 Y-75.00 F6000\nG1 X37.50 Y-75.00 E9.5 F1200\n", + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F9000\nM104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "scan_first_layer": "0", @@ -53,5 +55,10 @@ "extruder_clearance_height_to_lid": "150", "manual_filament_change": "1", "nozzle_type": "stainless_steel", - "auxiliary_fan": "0" + "auxiliary_fan": "1", + "parking_pos_retraction": "0", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "extra_loading_move": "0", + "version": "2.0.2.0" } diff --git a/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json new file mode 100644 index 0000000000..a37d2586fa --- /dev/null +++ b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json @@ -0,0 +1,57 @@ +{ + "type": "machine", + "name": "fdm_adventurer5m_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_flashforge_common", + "gcode_flavor": "klipper", + "printable_area": [ + "-110x-110", + "110x-110", + "110x110", + "-110x110" + ], + "printable_height": "220", + "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": [ "9", "9" ], + "machine_max_jerk_y": [ "9", "9" ], + "machine_max_jerk_z": [ "3", "3" ], + "printer_settings_id": "Flashforge", + "retraction_minimum_travel": [ "1" ], + "retract_before_wipe": [ "100%" ], + "retract_length_toolchange": [ "2" ], + "deretraction_speed": [ "35" ], + "z_hop": [ "0.4" ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M25", + "default_filament_profile": [ "Flashforge Generic PLA" ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0", + "thumbnails": [ + "140x110" + ], + "use_relative_e_distances": "1", + "z_hop_types": "Auto Lift", + "retraction_speed": [ "35" ], + "wipe_distance": "2", + "extruder_clearance_radius": [ "76" ], + "extruder_clearance_height_to_rod": [ "27" ], + "extruder_clearance_height_to_lid": [ "150" ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json new file mode 100644 index 0000000000..cd1cfa8ca1 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json @@ -0,0 +1,107 @@ +{ + "type": "process", + "name": "0.12mm Detail @Flashforge Guider 2s 0.4 nozzle", + "instantiation": "false", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "80%", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.8", + "brim_object_gap": "0.1", + "default_acceleration": "200", + "detect_overhang_wall": "1", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "100", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.20", + "initial_layer_speed": "10", + "initial_layer_travel_speed": "70", + "infill_combination": "1", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "200", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "200", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "200", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "initial_layer_infill_speed": "10", + "line_width": "0.42", + "layer_height": "0.12", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "40", + "outer_wall_acceleration": "200", + "inner_wall_acceleration": "200", + "bridge_acceleration": "50%", + "sparse_infill_acceleration": "100%", + "internal_solid_infill_acceleration": "100%", + "travel_acceleration": "200", + "skirt_speed": "10", + "overhang_1_4_speed": "100", + "overhang_2_4_speed": "100", + "overhang_3_4_speed": "80", + "overhang_4_4_speed": "50", + "slow_down_layers": "2", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "100%", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "standby_temperature_delta": "-5", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.23", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "100%", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "skirt_loops": "2", + "support_type": "normal(auto)", + "support_style": "default", + "support_bottom_z_distance": "0.2", + "support_interface_bottom_layers": "2", + "top_surface_line_width": "0.42", + "top_surface_speed": "100", + "travel_speed": "70", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "200", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "wall_loops": "3", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "archane", + "compatible_printers": [ + "Flashforge Guider 2s 0.4 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..efc3b98d34 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json @@ -0,0 +1,45 @@ +{ + "type": "process", + "name": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "inherits": "0.20mm Standard @Flashforge AD5M 0.4 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle" + ], + "setting_id": "GP012", + "print_settings_id": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "bottom_shell_layers": "4", + "brim_width": "3", + "elefant_foot_compensation": "0", + "gap_infill_speed": "150", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "70", + "initial_layer_line_width": "0.3", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "150", + "internal_solid_infill_line_width": "0.3", + "internal_solid_infill_speed": "150", + "layer_height": "0.12", + "line_width": "0.25", + "outer_wall_line_width": "0.25", + "outer_wall_speed": "60", + "skirt_loops": "0", + "sparse_infill_line_width": "0.3", + "sparse_infill_speed": "100", + "support_bottom_z_distance": "0.12", + "support_interface_spacing": "0.25", + "support_line_width": "0.25", + "support_object_xy_distance": "0.2", + "support_speed": "80", + "support_top_z_distance": "0.12", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.3", + "top_surface_speed": "150", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "80%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json new file mode 100644 index 0000000000..2ea5c5c4e4 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json @@ -0,0 +1,45 @@ +{ + "type": "process", + "name": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "inherits": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "setting_id": "GP011", + "print_settings_id": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "bottom_shell_layers": "4", + "brim_width": "3", + "elefant_foot_compensation": "0", + "gap_infill_speed": "150", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "70", + "initial_layer_line_width": "0.3", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "150", + "internal_solid_infill_line_width": "0.3", + "internal_solid_infill_speed": "150", + "layer_height": "0.12", + "line_width": "0.25", + "outer_wall_line_width": "0.25", + "outer_wall_speed": "60", + "skirt_loops": "0", + "sparse_infill_line_width": "0.3", + "sparse_infill_speed": "100", + "support_bottom_z_distance": "0.12", + "support_interface_spacing": "0.25", + "support_line_width": "0.25", + "support_object_xy_distance": "0.2", + "support_speed": "80", + "support_top_z_distance": "0.12", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.3", + "top_surface_speed": "150", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "80%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json new file mode 100644 index 0000000000..2d6539e8b5 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json @@ -0,0 +1,107 @@ +{ + "type": "process", + "name": "0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle", + "instantiation": "false", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "25", + "internal_bridge_speed": "150%", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0.8", + "brim_object_gap": "0.1", + "default_acceleration": "200", + "detect_overhang_wall": "1", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "30", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.27", + "initial_layer_speed": "10", + "initial_layer_travel_speed": "70", + "infill_combination": "1", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "60", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "200", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "200", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "initial_layer_infill_speed": "10", + "line_width": "0.42", + "layer_height": "0.16", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "25", + "outer_wall_acceleration": "200", + "inner_wall_acceleration": "200", + "bridge_acceleration": "50%", + "sparse_infill_acceleration": "100%", + "internal_solid_infill_acceleration": "100%", + "travel_acceleration": "200", + "skirt_speed": "10", + "overhang_1_4_speed": "100", + "overhang_2_4_speed": "100", + "overhang_3_4_speed": "80", + "overhang_4_4_speed": "50", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "200", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "standby_temperature_delta": "-5", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.23", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "skirt_loops": "2", + "support_type": "normal(auto)", + "support_style": "default", + "support_bottom_z_distance": "0.2", + "support_interface_bottom_layers": "2", + "top_surface_line_width": "0.42", + "top_surface_speed": "100", + "travel_speed": "80", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "wall_loops": "2", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "archane", + "compatible_printers": [ + "Flashforge Guider 2s 0.4 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json index 1f070a7519..a60d3b2227 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json @@ -43,8 +43,7 @@ "enable_arc_fitting": "0", "initial_layer_min_bead_width": "100", "min_bead_width": "100", - "detect_thin_wall": "1", - "elefant_foot_compensation": "0", + "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", "overhang_speed_classic": "0", "internal_bridge_speed": "48", @@ -54,6 +53,7 @@ "slow_down_layers": "1", "wipe_speed": "200", "reduce_crossing_wall": "1", + "max_travel_detour_distance": "50", "compatible_printers": [ "Flashforge Adventurer 3 Series 0.4 Nozzle" ], diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json index 662b265425..12a4806553 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json @@ -7,5 +7,7 @@ "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle" - ] + ], + "only_one_wall_top": "0", + "infill_wall_overlap": "50%" } \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle.json index 305ccce399..65baa249cf 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle.json @@ -7,5 +7,7 @@ "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M Pro 0.4 Nozzle" - ] + ], + "only_one_wall_top": "0", + "infill_wall_overlap": "50%" } \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json index 3c9b409e26..6995772a4d 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json @@ -152,7 +152,7 @@ "sparse_infill_density": "15%", "sparse_infill_filament": "1", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "270", "spiral_mode": "0", "staggered_inner_seams": "0", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json new file mode 100644 index 0000000000..b143ab3458 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json @@ -0,0 +1,108 @@ +{ + "type": "process", + "name": "0.20mm Standard @Flashforge Guider 2s 0.4 nozzle", + "instantiation": "false", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50%", + "internal_bridge_speed": "70%", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0.8", + "brim_object_gap": "0.1", + "default_acceleration": "200", + "detect_overhang_wall": "1", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "100", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.27", + "initial_layer_speed": "10", + "initial_layer_travel_speed": "70", + "infill_combination": "1", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "200", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "200", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "200", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "initial_layer_infill_speed": "10", + "line_width": "0.42", + "layer_height": "0.2", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "40", + "outer_wall_acceleration": "200", + "inner_wall_acceleration": "200", + "bridge_acceleration": "50%", + "sparse_infill_acceleration": "100%", + "internal_solid_infill_acceleration": "100%", + "travel_acceleration": "200", + "skirt_speed": "10", + "overhang_1_4_speed": "100", + "overhang_2_4_speed": "100", + "overhang_3_4_speed": "80", + "overhang_4_4_speed": "50", + "slow_down_layers": "2", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "100%", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "standby_temperature_delta": "-5", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.23", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "100%", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "skirt_loops": "2", + "support_type": "normal(auto)", + "support_style": "default", + "support_bottom_z_distance": "0.2", + "support_interface_bottom_layers": "2", + "top_surface_line_width": "0.42", + "top_surface_speed": "100", + "travel_speed": "80", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "wall_loops": "2", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "archane", + "compatible_printers": [ + "Flashforge Guider 2s 0.4 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json new file mode 100644 index 0000000000..f9cbcbc610 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json @@ -0,0 +1,108 @@ +{ + "type": "process", + "name": "0.30mm Draft @Flashforge Guider 2s 0.4 nozzle", + "instantiation": "false", + "adaptive_layer_height": "0", + "bridge_flow": "1", + "bridge_speed": "50%", + "internal_bridge_speed": "70%", + "brim_width": "5", + "bridge_no_support": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0.8", + "brim_object_gap": "0.1", + "default_acceleration": "200", + "detect_overhang_wall": "1", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "gap_infill_speed": "100", + "infill_direction": "45", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.30", + "initial_layer_speed": "10", + "initial_layer_travel_speed": "70", + "infill_combination": "1", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "200", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "200", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "200", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "initial_layer_infill_speed": "10", + "line_width": "0.42", + "layer_height": "0.30", + "minimum_sparse_infill_area": "15", + "max_travel_detour_distance": "0", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "40", + "outer_wall_acceleration": "200", + "inner_wall_acceleration": "200", + "bridge_acceleration": "50%", + "sparse_infill_acceleration": "100%", + "internal_solid_infill_acceleration": "100%", + "travel_acceleration": "200", + "skirt_speed": "10", + "overhang_1_4_speed": "100", + "overhang_2_4_speed": "100", + "overhang_3_4_speed": "80", + "overhang_4_4_speed": "50", + "slow_down_layers": "2", + "only_one_wall_top": "1", + "print_sequence": "by layer", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_line_width": "0.45", + "sparse_infill_speed": "100%", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "standby_temperature_delta": "-5", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.23", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_pattern": "auto", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "100%", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "skirt_loops": "2", + "support_type": "normal(auto)", + "support_style": "default", + "support_bottom_z_distance": "0.2", + "support_interface_bottom_layers": "2", + "top_surface_line_width": "0.42", + "top_surface_speed": "100", + "travel_speed": "100", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "top_surface_pattern": "monotonicline", + "top_surface_acceleration": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "wall_loops": "2", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_generator": "archane", + "compatible_printers": [ + "Flashforge Guider 2s 0.4 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json index f254113bc6..9fb5571ceb 100644 --- a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json @@ -43,8 +43,7 @@ "enable_arc_fitting": "0", "initial_layer_min_bead_width": "100", "min_bead_width": "100", - "detect_thin_wall": "1", - "elefant_foot_compensation": "0", + "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", "overhang_speed_classic": "0", "internal_bridge_speed": "64", @@ -54,6 +53,7 @@ "slow_down_layers": "1", "wipe_speed": "200", "reduce_crossing_wall": "1", + "max_travel_detour_distance": "50", "compatible_printers": [ "Flashforge Adventurer 3 Series 0.4 Nozzle" ], diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json index 92dcb51b0f..972ad604de 100644 --- a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json @@ -43,8 +43,7 @@ "enable_arc_fitting": "0", "initial_layer_min_bead_width": "100", "min_bead_width": "100", - "detect_thin_wall": "1", - "elefant_foot_compensation": "0", + "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", "overhang_speed_classic": "0", "internal_bridge_speed": "50", @@ -54,6 +53,7 @@ "slow_down_layers": "1", "wipe_speed": "200", "reduce_crossing_wall": "1", + "max_travel_detour_distance": "50", "compatible_printers": [ "Flashforge Adventurer 3 Series 0.6 Nozzle" ], diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json index 76f0ab91e1..23deef5f13 100644 --- a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json @@ -7,5 +7,7 @@ "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.6 Nozzle" - ] + ], + "only_one_wall_top": "0", + "infill_wall_overlap": "50%" } \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle.json index 74d314d740..8e1b3f5ecc 100644 --- a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle.json @@ -7,5 +7,7 @@ "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M Pro 0.6 Nozzle" - ] + ], + "only_one_wall_top": "0", + "infill_wall_overlap": "50%" } \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json new file mode 100644 index 0000000000..4c50751066 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "process", + "name": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "inherits": "0.30mm Standard @Flashforge AD5M 0.6 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.8 Nozzle" + ], + "setting_id": "GP002", + "print_settings_id": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "elefant_foot_compensation": "0", + "initial_layer_infill_speed": "55", + "initial_layer_line_width": "0.85", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.85", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "layer_height": "0.4", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "skirt_loops": "0", + "sparse_infill_line_width": "0.85", + "support_bottom_interface_spacing": "0.4", + "support_bottom_z_distance": "0.22", + "support_interface_spacing": "0.4", + "support_line_width": "0.82", + "support_object_xy_distance": "0.4", + "support_top_z_distance": "0.22", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.82", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "60%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json new file mode 100644 index 0000000000..28323aba75 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "process", + "name": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "inherits": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M Pro 0.8 Nozzle" + ], + "setting_id": "GP001", + "print_settings_id": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "elefant_foot_compensation": "0", + "initial_layer_infill_speed": "55", + "initial_layer_line_width": "0.85", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.85", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "layer_height": "0.4", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "skirt_loops": "0", + "sparse_infill_line_width": "0.85", + "support_bottom_interface_spacing": "0.4", + "support_bottom_z_distance": "0.22", + "support_interface_spacing": "0.4", + "support_line_width": "0.82", + "support_object_xy_distance": "0.4", + "support_top_z_distance": "0.22", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.82", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "60%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/fdm_process_common.json b/resources/profiles/Flashforge/process/fdm_process_common.json index 921718b995..a9a08f371a 100644 --- a/resources/profiles/Flashforge/process/fdm_process_common.json +++ b/resources/profiles/Flashforge/process/fdm_process_common.json @@ -17,7 +17,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "default", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.42", diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index c03595bce2..e85dff576e 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ diff --git a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json index 6618353130..7ac0390672 100644 --- a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json +++ b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json @@ -115,7 +115,7 @@ "0" ], "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9-20240311;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", + "machine_start_gcode": ";v2.9.1-20240620;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", "machine_unload_filament_time": "0", "max_layer_height": [ "0.28" diff --git a/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json index 29cb2ec76b..e8d734ca1f 100644 --- a/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_process_common", - + "bottom_shell_layers": "7", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", diff --git a/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json b/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json index 3f0d859e0d..43964daced 100644 --- a/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json +++ b/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json @@ -61,7 +61,7 @@ "initial_layer_print_height": "0.2", "initial_layer_speed": "50", "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "10000", + "inner_wall_acceleration": "5000", "inner_wall_jerk": "9", "inner_wall_line_width": "0.45", "interface_shells": "0", @@ -84,7 +84,7 @@ "max_travel_detour_distance": "0", "min_bead_width": "85%", "min_feature_size": "25%", - "min_width_top_surface": "300%", + "min_width_top_surface": "100%", "minimum_sparse_infill_area": "15", "notes": "", "only_one_wall_first_layer": "0", @@ -130,7 +130,7 @@ "sparse_infill_density": "15%", "sparse_infill_filament": "1", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "spiral_mode": "0", "staggered_inner_seams": "0", @@ -219,4 +219,4 @@ "xy_contour_compensation": "0", "xy_hole_compensation": "0", "exclude_object": "1" -} \ No newline at end of file +} diff --git a/resources/profiles/FlyingBear/process/fdm_process_common.json b/resources/profiles/FlyingBear/process/fdm_process_common.json index af52cad7bc..6f9e1e1fcb 100644 --- a/resources/profiles/FlyingBear/process/fdm_process_common.json +++ b/resources/profiles/FlyingBear/process/fdm_process_common.json @@ -84,7 +84,7 @@ "max_travel_detour_distance": "0", "min_bead_width": "85%", "min_feature_size": "25%", - "min_width_top_surface": "300%", + "min_width_top_surface": "100%", "minimum_sparse_infill_area": "15", "notes": "", "only_one_wall_first_layer": "0", @@ -130,7 +130,7 @@ "sparse_infill_density": "15%", "sparse_infill_filament": "1", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "spiral_mode": "0", "staggered_inner_seams": "0", diff --git a/resources/profiles/Folgertech.json b/resources/profiles/Folgertech.json index 3753a8892f..b51223401a 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ diff --git a/resources/profiles/Folgertech/process/0.08mm Extra Fine @FT.json b/resources/profiles/Folgertech/process/0.08mm Extra Fine @FT.json index abc59b524e..c804355a8b 100644 --- a/resources/profiles/Folgertech/process/0.08mm Extra Fine @FT.json +++ b/resources/profiles/Folgertech/process/0.08mm Extra Fine @FT.json @@ -23,7 +23,7 @@ "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", - "support_threshold_angle": "15", + "support_threshold_angle": "30", "compatible_printers": [ "Folgertech i3 0.4 nozzle", "Folgertech FT-5 0.4 nozzle", diff --git a/resources/profiles/Folgertech/process/0.12mm Fine @FT.json b/resources/profiles/Folgertech/process/0.12mm Fine @FT.json index 09d449a330..278d5ad615 100644 --- a/resources/profiles/Folgertech/process/0.12mm Fine @FT.json +++ b/resources/profiles/Folgertech/process/0.12mm Fine @FT.json @@ -23,7 +23,7 @@ "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", - "support_threshold_angle": "20", + "support_threshold_angle": "30", "compatible_printers": [ "Folgertech i3 0.4 nozzle", "Folgertech FT-5 0.4 nozzle", diff --git a/resources/profiles/Folgertech/process/0.16mm Optimal @FT.json b/resources/profiles/Folgertech/process/0.16mm Optimal @FT.json index 3cc598eb1a..e69d4304c7 100644 --- a/resources/profiles/Folgertech/process/0.16mm Optimal @FT.json +++ b/resources/profiles/Folgertech/process/0.16mm Optimal @FT.json @@ -23,7 +23,7 @@ "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", - "support_threshold_angle": "25", + "support_threshold_angle": "30", "compatible_printers": [ "Folgertech i3 0.4 nozzle", "Folgertech FT-5 0.4 nozzle", diff --git a/resources/profiles/Folgertech/process/0.24mm Draft @FT.json b/resources/profiles/Folgertech/process/0.24mm Draft @FT.json index bbf722eb2b..50cab51e8f 100644 --- a/resources/profiles/Folgertech/process/0.24mm Draft @FT.json +++ b/resources/profiles/Folgertech/process/0.24mm Draft @FT.json @@ -20,7 +20,7 @@ "internal_solid_infill_speed": "80", "top_surface_speed": "70", "gap_infill_speed": "80", - "support_threshold_angle": "35", + "support_threshold_angle": "30", "compatible_printers": [ "Folgertech i3 0.4 nozzle", "Folgertech FT-5 0.4 nozzle", diff --git a/resources/profiles/Folgertech/process/0.28mm Extra Draft @FT.json b/resources/profiles/Folgertech/process/0.28mm Extra Draft @FT.json index 15df910f6d..fc1cf53de0 100644 --- a/resources/profiles/Folgertech/process/0.28mm Extra Draft @FT.json +++ b/resources/profiles/Folgertech/process/0.28mm Extra Draft @FT.json @@ -20,7 +20,7 @@ "internal_solid_infill_speed": "70", "top_surface_speed": "70", "gap_infill_speed": "70", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "compatible_printers": [ "Folgertech i3 0.4 nozzle", "Folgertech FT-5 0.4 nozzle", diff --git a/resources/profiles/Folgertech/process/fdm_process_common.json b/resources/profiles/Folgertech/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Folgertech/process/fdm_process_common.json +++ b/resources/profiles/Folgertech/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json b/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json index ead894d6f0..4d972f8deb 100644 --- a/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json +++ b/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 38c380e380..b6d5dd250e 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ diff --git a/resources/profiles/InfiMech/machine/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/fdm_klipper_common.json index 804af1a4c8..abbdab157f 100644 --- a/resources/profiles/InfiMech/machine/fdm_klipper_common.json +++ b/resources/profiles/InfiMech/machine/fdm_klipper_common.json @@ -112,7 +112,7 @@ "0" ], "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9-20240311;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", + "machine_start_gcode": ";v2.9.1-20240620;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", "machine_unload_filament_time": "0", "max_layer_height": [ "0.28" diff --git a/resources/profiles/InfiMech/machine/fdm_machine_common.json b/resources/profiles/InfiMech/machine/fdm_machine_common.json index e4841e4747..9a8caa0aa9 100644 --- a/resources/profiles/InfiMech/machine/fdm_machine_common.json +++ b/resources/profiles/InfiMech/machine/fdm_machine_common.json @@ -112,7 +112,7 @@ "0" ], "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9-20240311;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", + "machine_start_gcode": ";v2.9.1-20240620;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", "machine_unload_filament_time": "0", "max_layer_height": [ "0.28" diff --git a/resources/profiles/InfiMech/process/fdm_process_common.json b/resources/profiles/InfiMech/process/fdm_process_common.json index b8e90dd46a..cb944ca97d 100644 --- a/resources/profiles/InfiMech/process/fdm_process_common.json +++ b/resources/profiles/InfiMech/process/fdm_process_common.json @@ -60,7 +60,7 @@ "initial_layer_print_height": "0.2", "initial_layer_speed": "50", "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "10000", + "inner_wall_acceleration": "5000", "inner_wall_jerk": "9", "inner_wall_line_width": "0.45", "interface_shells": "0", @@ -83,7 +83,7 @@ "max_travel_detour_distance": "0", "min_bead_width": "85%", "min_feature_size": "25%", - "min_width_top_surface": "300%", + "min_width_top_surface": "100%", "minimum_sparse_infill_area": "15", "notes": "", "only_one_wall_first_layer": "0", @@ -129,7 +129,7 @@ "sparse_infill_density": "15%", "sparse_infill_filament": "1", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "spiral_mode": "0", "staggered_inner_seams": "0", diff --git a/resources/profiles/Kingroon.json b/resources/profiles/Kingroon.json index 01a9377ea7..17cfdcc0dc 100644 --- a/resources/profiles/Kingroon.json +++ b/resources/profiles/Kingroon.json @@ -1,7 +1,7 @@ { "name": "Kingroon", "url": "https://kingroon.com/", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Kingroon configuration files", "machine_model_list": [ @@ -12,6 +12,10 @@ { "name": "Kingroon KP3S PRO V2", "sub_path": "machine/Kingroon KP3S PRO V2.json" + }, + { + "name": "Kingroon KP3S 3.0", + "sub_path": "machine/Kingroon KP3S 3.0.json" } ], "process_list": [ @@ -34,6 +38,10 @@ { "name": "0.20mm Standard @Kingroon KP3S PRO V2", "sub_path": "process/0.20mm Standard @Kingroon KP3S PRO V2.json" + }, + { + "name": "0.30mm Standard @Kingroon KP3S 3.0", + "sub_path": "process/0.30mm Standard @Kingroon KP3S 3.0.json" } ], "filament_list": [ @@ -130,6 +138,10 @@ { "name": "Kingroon KP3S PRO V2 0.4 nozzle", "sub_path": "machine/Kingroon KP3S PRO V2 0.4 nozzle.json" + }, + { + "name": "Kingroon KP3S 0.4 nozzle", + "sub_path": "machine/Kingroon KP3S 3.0 0.4 nozzle.json" } ] } diff --git a/resources/profiles/Kingroon/Kingroon KP3S 3.0_cover.png b/resources/profiles/Kingroon/Kingroon KP3S 3.0_cover.png new file mode 100644 index 0000000000..1862987bbf Binary files /dev/null and b/resources/profiles/Kingroon/Kingroon KP3S 3.0_cover.png differ diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json b/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json index b455ced60e..5e11d9665f 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json @@ -14,6 +14,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json b/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json index d79ce2e17f..2231d6a9f3 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json @@ -14,6 +14,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json b/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json index f1dd009cd4..eac58e6a01 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json @@ -20,6 +20,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PA.json b/resources/profiles/Kingroon/filament/Kingroon Generic PA.json index eeeeda9ebf..00e4ee4680 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PA.json @@ -17,6 +17,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PC.json b/resources/profiles/Kingroon/filament/Kingroon Generic PC.json index 1508159289..14378164dc 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PC.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PC.json @@ -14,6 +14,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json b/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json index a89100b1ec..d63d8fac21 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json @@ -44,6 +44,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json b/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json index 6a6c8d92ff..d96b58a6c8 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json @@ -20,6 +20,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json b/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json index 2ae13dd846..e4b457bce7 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json @@ -8,6 +8,7 @@ "inherits": "fdm_filament_pla", "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json b/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json index ea4ac2a1c1..63e253dcf9 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json @@ -20,6 +20,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json b/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json index 95fd43addb..8c07c5871f 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json @@ -11,6 +11,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0 0.4 nozzle.json b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0 0.4 nozzle.json new file mode 100644 index 0000000000..1af9a09ef2 --- /dev/null +++ b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0 0.4 nozzle.json @@ -0,0 +1,96 @@ +{ + "setting_id": "GM003", + "name": "Kingroon KP3S 3.0 0.4 nozzle", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Kingroon KP3S 3.0", + "default_print_profile": "0.30mm Standard @Kingroon KP3S 3.0", + "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\n M117 Purge extruder\n G1 X2 Y20 Z0.3 F5000.0 ; move to start-line position\n G1 X2 Y175.0 Z0.3 F1500.0 E15 ; draw 1st line\n G1 X2 Y175.0 Z0.4 F5000.0 ; move to side a little\n G1 X2 Y20 Z0.4 F1500.0 E30 ; draw 2nd line\n G92 E0 ; reset extruder\n G1 Z1.0 F3000 ; move z up little to prevent scratching of surface", + "type": "machine", + "nozzle_diameter": ["0.4"], + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "enable_filament_ramming": "0", + "extra_loading_move": "0", + "fan_speedup_overhangs": "0", + "fan_speedup_time": "1", + "from": "system", + "machine_max_acceleration_e": [ + "10000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "10000", + "9000" + ], + "machine_max_acceleration_retracting": [ + "10000", + "9000" + ], + "machine_max_acceleration_x": [ + "4000", + "9000" + ], + "machine_max_acceleration_y": [ + "4000", + "9000" + ], + "machine_max_acceleration_z": [ + "1100", + "100" + ], + "machine_max_speed_e": [ + "50", + "60" + ], + "machine_max_speed_x": [ + "300", + "200" + ], + "machine_max_speed_y": [ + "300", + "200" + ], + "machine_max_speed_z": [ + "30", + "12" + ], + "manual_filament_change": "1", + "min_layer_height": [ + "0.1" + ], + "nozzle_type": "brass", + "parking_pos_retraction": "0", + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "180", + "purge_in_prime_tower": "0", + "retract_length_toolchange": [ + "0.5" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.3" + ], + "retraction_minimum_travel": [ + "3" + ], + "retraction_speed": [ + "30" + ], + "support_air_filtration": "0", + "support_chamber_temp_control": "0", + "wipe": [ + "1" + ], + "z_hop": [ + "0.2" + ] +} diff --git a/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0.json b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0.json new file mode 100644 index 0000000000..8b5b020dac --- /dev/null +++ b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Kingroon KP3S 3.0", + "model_id": "Kingroon KP3S 3.0", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Kingroon", + "bed_model": "kp3s_bed.stl", + "bed_texture": "Kingroon_buildplate.png", + "hotend_model": "", + "default_materials": "Kingroon Generic ABS;Kingroon Generic PLA;Kingroon Generic PLA-CF;Kingroon Generic PETG;Kingroon Generic TPU;Kingroon Generic ASA;Kingroon Generic PC;Kingroon Generic PVA;Kingroon Generic PA;Kingroon Generic PA-CF" +} diff --git a/resources/profiles/Kingroon/process/0.30mm Standard @Kingroon KP3S 3.0.json b/resources/profiles/Kingroon/process/0.30mm Standard @Kingroon KP3S 3.0.json new file mode 100644 index 0000000000..fa301a7d11 --- /dev/null +++ b/resources/profiles/Kingroon/process/0.30mm Standard @Kingroon KP3S 3.0.json @@ -0,0 +1,87 @@ +{ + "type": "process", + "compatible_printers": [ + "Kingroon KP3S 3.0 0.4 nozzle" + ], + "name": "0.30mm Standard @Kingroon KP3S 3.0", + "inherits": "fdm_process_common", + "print_settings_id": "0.30mm Standard @Kingroon KP3S 3.0", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "500", + "bridge_speed": "30", + "brim_type": "no_brim", + "default_acceleration": "500", + "detect_narrow_internal_solid_infill": "0", + "dont_filter_internal_bridges": "limited", + "elefant_foot_compensation": "0.2", + "enable_prime_tower": "1", + "enable_support": "0", + "filter_out_gap_fill": "0.9", + "flush_into_support": "0", + "from": "User", + "gap_fill_target": "topbottom", + "gap_infill_speed": "40", + "infill_combination": "1", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "20", + "initial_layer_travel_speed": "250", + "inner_wall_acceleration": "700", + "inner_wall_line_width": "0.44", + "inner_wall_speed": "70", + "internal_bridge_speed": "50", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.5", + "internal_solid_infill_pattern": "monotonicline", + "internal_solid_infill_speed": "70", + "is_custom_defined": "0", + "layer_height": "0.3", + "line_width": "0.44", + "max_travel_detour_distance": "70", + "max_volumetric_extrusion_rate_slope": "20", + "outer_wall_acceleration": "500", + "outer_wall_line_width": "0.44", + "outer_wall_speed": "50", + "overhang_1_4_speed": "70%", + "overhang_2_4_speed": "50%", + "overhang_3_4_speed": "30%", + "overhang_4_4_speed": "20%", + "prime_tower_brim_width": "1", + "prime_tower_width": "20", + "prime_volume": "30", + "raft_first_layer_density": "100%", + "reduce_crossing_wall": "1", + "reduce_infill_retraction": "0", + "scarf_joint_speed": "70", + "seam_gap": "0", + "seam_slope_entire_loop": "1", + "seam_slope_start_height": "0.1", + "skirt_loops": "1", + "sparse_infill_acceleration": "1500", + "sparse_infill_line_width": "0.5", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_speed": "70", + "support_base_pattern": "default", + "support_interface_pattern": "auto", + "support_interface_speed": "40", + "support_line_width": "0.44", + "support_speed": "70", + "support_threshold_angle": "30", + "support_type": "normal(auto)", + "top_surface_acceleration": "500", + "top_surface_line_width": "0.44", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "40", + "travel_acceleration": "4000", + "travel_speed": "250", + "tree_support_angle_slow": "35", + "tree_support_branch_angle_organic": "45", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "1", + "tree_support_top_rate": "50%", + "version": "2.0.0.0", + "wall_transition_angle": "59", + "wipe_before_external_loop": "1", + "wipe_tower_bridging": "2" +} diff --git a/resources/profiles/Kingroon/process/fdm_process_common.json b/resources/profiles/Kingroon/process/fdm_process_common.json index cfe9b4199d..27f3ccf0cc 100644 --- a/resources/profiles/Kingroon/process/fdm_process_common.json +++ b/resources/profiles/Kingroon/process/fdm_process_common.json @@ -122,7 +122,7 @@ "sparse_infill_density": "15%", "sparse_infill_filament": "1", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "100", "spiral_mode": "0", "standby_temperature_delta": "-5", @@ -157,7 +157,7 @@ "top_surface_acceleration": "3000", "top_surface_jerk": "9", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "60", "travel_acceleration": "3000", "travel_jerk": "12", diff --git a/resources/profiles/MagicMaker.json b/resources/profiles/MagicMaker.json index 1da3457e31..581ed8488a 100644 --- a/resources/profiles/MagicMaker.json +++ b/resources/profiles/MagicMaker.json @@ -1,6 +1,6 @@ { "name": "MagicMaker", - "version": "02.00.00.00", + "version": "02.01.00.01", "force_update": "0", "description": "MagicMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json index 96031f4534..228f1c93b4 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_acceleration": "500", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json index 9e65e3c0f1..25c628c324 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_acceleration": "500", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json index aac3d619ec..14cd339b25 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_acceleration": "500", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json index 1cf2bb15bd..143ee3c973 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json index 0d84145903..7922d3a0fa 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json index edcec6770e..6cfefe6e0d 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json index 12fbabfa16..7c993d1f8a 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json index 95d35c5974..147e1a0842 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json index a852f468cb..0261ebec79 100644 --- a/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json index 9993d37aa7..16224a0a10 100644 --- a/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json index 309d1d3ab4..064d3a4f47 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "initial_layer_travel_speed": "60", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json index 89506213f6..2e69a64d9f 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "initial_layer_travel_speed": "60", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json index c04bf60770..87baf1ce80 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "initial_layer_travel_speed": "60", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json index 4f0224481f..b908ddd8f4 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -69,7 +69,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "initial_layer_travel_speed": "60", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json index 3a2ce22e6e..be485611e6 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -68,7 +68,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "initial_layer_travel_speed": "60", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json index c496a8b2b4..84495dff3f 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -68,7 +68,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json index ed09680bbd..adbfc1e90c 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -68,7 +68,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json index 0c7e0bab23..688fb364c5 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.45", "infill_combination": "0", "sparse_infill_line_width": "0.5", @@ -68,7 +68,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json index bdce77e824..2f5aa2aa0b 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json index bf9b4bf478..0dd9c43b78 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json index 0929e9dd48..5a4800ba74 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json @@ -25,7 +25,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json index 2dae174d7f..f69fc32295 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "travel_speed": "150", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json index 7314b4cfaa..e010a87f40 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -68,7 +68,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json index f1feb9d4d7..3b5e522146 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json index 4935a4a224..8140f034bc 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json index 90aaa46fb9..24cc443e8b 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json @@ -24,7 +24,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -70,7 +70,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", "enable_prime_tower": "0", diff --git a/resources/profiles/MagicMaker/process/fdm_process_common.json b/resources/profiles/MagicMaker/process/fdm_process_common.json index a3623f2199..94c93039e7 100644 --- a/resources/profiles/MagicMaker/process/fdm_process_common.json +++ b/resources/profiles/MagicMaker/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index a5ee2329af..6dd707c6b2 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.08.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.08.json index 0348c33427..6a3bd6f05d 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.08.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.08.json @@ -22,5 +22,5 @@ "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", - "support_threshold_angle": "15" + "support_threshold_angle": "30" } diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.12.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.12.json index dcbb2f9a4b..3890b18a5c 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.12.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.12.json @@ -22,5 +22,5 @@ "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", - "support_threshold_angle": "20" + "support_threshold_angle": "30" } diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.16.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.16.json index 14186f7170..98523a0fa6 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.16.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.16.json @@ -22,5 +22,5 @@ "overhang_2_4_speed": "30", "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", - "support_threshold_angle": "25" + "support_threshold_angle": "30" } diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24.json index 3b83ea159c..bb43494a56 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24.json @@ -19,5 +19,5 @@ "internal_solid_infill_speed": "230", "top_surface_speed": "200", "gap_infill_speed": "230", - "support_threshold_angle": "35" + "support_threshold_angle": "30" } diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24_nozzle_0.8.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24_nozzle_0.8.json index 9c1cbf2028..55d9be4407 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24_nozzle_0.8.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.24_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.28.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.28.json index 08f80a2ef0..aeb45ebe56 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.28.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.28.json @@ -19,5 +19,5 @@ "internal_solid_infill_speed": "200", "top_surface_speed": "200", "gap_infill_speed": "200", - "support_threshold_angle": "40" + "support_threshold_angle": "30" } diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.32_nozzle_0.8.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.32_nozzle_0.8.json index d64d4b6f24..6172f32e94 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.32_nozzle_0.8.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.32_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.40_nozzle_0.8.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.40_nozzle_0.8.json index ce35f532e5..aa514e6f04 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.40_nozzle_0.8.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.40_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.48_nozzle_0.8.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.48_nozzle_0.8.json index 87c7d6b04c..d026bdc746 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.48_nozzle_0.8.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.48_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.56_nozzle_0.8.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.56_nozzle_0.8.json index 311925326a..f43ab7e2e5 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_0.56_nozzle_0.8.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_0.56_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json index 67237cea48..0f484cdbed 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json @@ -30,7 +30,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", diff --git a/resources/profiles/OrcaArena/process/fdm_process_common.json b/resources/profiles/OrcaArena/process/fdm_process_common.json index 3280c0ff27..795efb29ac 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_common.json +++ b/resources/profiles/OrcaArena/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -58,7 +58,7 @@ "support_base_pattern": "default", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.42", diff --git a/resources/profiles/Peopoly.json b/resources/profiles/Peopoly.json index 894485f3fc..6d620b6c22 100644 --- a/resources/profiles/Peopoly.json +++ b/resources/profiles/Peopoly.json @@ -1,6 +1,6 @@ { "name": "Peopoly", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Peopoly configurations", "machine_model_list": [ @@ -42,6 +42,10 @@ "name": "fdm_process_pply_0.28", "sub_path": "process/fdm_process_pply_0.28.json" }, + { + "name": "fdm_process_pply_0.30_nozzle_0.6", + "sub_path": "process/fdm_process_pply_0.30_nozzle_0.6.json" + }, { "name": "fdm_process_pply_0.40_nozzle_0.8", "sub_path": "process/fdm_process_pply_0.40_nozzle_0.8.json" @@ -54,6 +58,14 @@ "name": "0.20mm Standard @MagnetoX", "sub_path": "process/0.20mm Standard @MagnetoX.json" }, + { + "name": "0.20mm ABS-GF 0.4 Nozzle Standard @MagnetoX", + "sub_path": "process/0.20mm ABS-GF 0.4 Nozzle Standard @MagnetoX.json" + }, + { + "name": "0.20mm PET-CF 0.4 Nozzle Standard @MagnetoX", + "sub_path": "process/0.20mm PET-CF 0.4 Nozzle Standard @MagnetoX.json" + }, { "name": "0.20mm Strength @MagnetoX", "sub_path": "process/0.20mm Strength @MagnetoX.json" @@ -66,6 +78,10 @@ "name": "0.28mm Extra Draft @MagnetoX", "sub_path": "process/0.28mm Extra Draft @MagnetoX.json" }, + { + "name": "0.30mm Standard @Magneto X 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Magneto X 0.6 nozzle.json" + }, { "name": "0.40mm Standard @Magneto X 0.8 nozzle", "sub_path": "process/0.40mm Standard @Magneto X 0.8 nozzle.json" @@ -93,10 +109,6 @@ "name": "Peopoly Generic PLA", "sub_path": "filament/Peopoly Generic PLA.json" }, - { - "name": "Peopoly Generic PLA 0.8 nozzle", - "sub_path": "filament/Peopoly Generic PLA 0.8 nozzle.json" - }, { "name": "Peopoly Lancer PLA-C", "sub_path": "filament/Peopoly Lancer PLA-C.json" @@ -112,7 +124,16 @@ { "name": "Peopoly Generic ABS", "sub_path": "filament/Peopoly Generic ABS.json" + }, + { + "name": "Peopoly Lancer ABS-GF", + "sub_path": "filament/Peopoly Lancer ABS-GF.json" + }, + { + "name": "Peopoly Lancer PET-CF", + "sub_path": "filament/Peopoly Lancer PET-CF.json" } + ], "machine_list": [ @@ -128,6 +149,10 @@ "name": "Peopoly Magneto X 0.4 nozzle", "sub_path": "machine/Peopoly Magneto X 0.4 nozzle.json" }, + { + "name": "Peopoly Magneto X 0.6 nozzle", + "sub_path": "machine/Peopoly Magneto X 0.6 nozzle.json" + }, { "name": "Peopoly Magneto X 0.8 nozzle", "sub_path": "machine/Peopoly Magneto X 0.8 nozzle.json" diff --git a/resources/profiles/Peopoly/Peopoly Magneto X_cover.png b/resources/profiles/Peopoly/Peopoly Magneto X_cover.png index 789dc83ecd..d00781604a 100644 Binary files a/resources/profiles/Peopoly/Peopoly Magneto X_cover.png and b/resources/profiles/Peopoly/Peopoly Magneto X_cover.png differ diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json b/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json index f3f7822789..7aa8c32971 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json +++ b/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json @@ -6,12 +6,20 @@ "instantiation": "true", "inherits": "fdm_filament_abs", "filament_flow_ratio": [ - "0.95" + "0.93" ], "filament_type": [ "ABS" ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle" + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" ] } diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json b/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json index 0b639f083d..141a1d09b4 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json +++ b/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json @@ -1,24 +1,24 @@ { "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSL99", + "filament_id": "GFPETG-1", + "setting_id": "GSPETG-1", "name": "Peopoly Generic PETG", "from": "system", "instantiation": "true", "inherits": "fdm_filament_petg", "filament_flow_ratio": [ - "0.98" + "0.92" ], "nozzle_temperature_initial_layer":[ - "255" + "245" ], "nozzle_temperature":[ - "240" + "235" ], "hot_plate_temp_initial_layer":["70"], "hot_plate_temp":["70"], "filament_max_volumetric_speed": [ - "30" + "20" ], "fan_max_speed":[ "40" @@ -31,6 +31,8 @@ ], "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle" + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" ] } diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PLA 0.8 nozzle.json b/resources/profiles/Peopoly/filament/Peopoly Generic PLA 0.8 nozzle.json deleted file mode 100644 index 0c705abb76..0000000000 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PLA 0.8 nozzle.json +++ /dev/null @@ -1,37 +0,0 @@ - -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSL99", - "name": "Peopoly Generic PLA 0.8 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_max_volumetric_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.98" - ], - "nozzle_temperature_initial_layer":[ - "215" - ], - "nozzle_temperature":[ - "210" - ], - "hot_plate_temp_initial_layer":["50"], - "hot_plate_temp":["50"], - "fan_max_speed":[ - "70" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle", - "Peopoly Magneto X 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json b/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json index 5fd03ae140..be0a4a8740 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json +++ b/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json @@ -7,18 +7,24 @@ "instantiation": "true", "inherits": "fdm_filament_pla", "filament_flow_ratio": [ - "0.98" + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" ], "nozzle_temperature_initial_layer":[ - "210" + "225" ], "nozzle_temperature":[ - "205" + "220" ], - "hot_plate_temp_initial_layer":["50"], - "hot_plate_temp":["50"], + "hot_plate_temp_initial_layer":["60"], + "hot_plate_temp":["60"], "filament_max_volumetric_speed": [ - "30" + "18" ], "fan_max_speed":[ "60" @@ -31,6 +37,7 @@ ], "compatible_printers": [ "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", "Peopoly Magneto X 0.8 nozzle" ] } diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json new file mode 100644 index 0000000000..49640500ae --- /dev/null +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Peopoly Lancer ABS-GF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.91" + ], + "nozzle_temperature_initial_layer":[ + "260" + ], + "nozzle_temperature":[ + "270" + ], + "hot_plate_temp_initial_layer":["90"], + "hot_plate_temp":["100"], + "filament_max_volumetric_speed": [ + "35" + ], + "fan_max_speed":[ + "40" + ], + "slow_down_layer_time": [ + "6" + ], + "overhang_fan_speed":["30"], + "reduce_fan_stop_start_freq":["0"], + "filament_type": [ + "ABS" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_retraction_length":["0.8"], + "filament_retraction_speed":["60"], + "filament_deretraction_speed":["60"], + "filament_wipe":["1"], + "filament_wipe_distance":["1"], + "pressure_advance": [ + "0.016" + ], + "filament_vendor": [ + "Peopoly" + ], + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json new file mode 100644 index 0000000000..e16a87e01f --- /dev/null +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Peopoly Lancer PET-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.90" + ], + "filament_density":["1.3"], + "nozzle_temperature_initial_layer":[ + "280" + ], + "nozzle_temperature":[ + "300" + ], + "hot_plate_temp_initial_layer":["70"], + "hot_plate_temp":["80"], + "filament_max_volumetric_speed": [ + "35" + ], + "fan_max_speed":[ + "40" + ], + "slow_down_layer_time": [ + "8" + ], + "overhang_fan_speed":["30"], + "reduce_fan_stop_start_freq":["0"], + "filament_type": [ + "PET-CF" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_retraction_length":["0.8"], + "filament_retraction_speed":["60"], + "filament_deretraction_speed":["60"], + "filament_wipe":["1"], + "filament_wipe_distance":["1"], + "pressure_advance": [ + "0.005" + ], + "filament_vendor": [ + "Peopoly" + ], + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json index 9ef2d8f527..40962dbbf3 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json @@ -16,7 +16,22 @@ "5" ], "filament_max_volumetric_speed": [ - "28" + "32" + ], + "nozzle_temperature_initial_layer":[ + "235" + ], + "nozzle_temperature":[ + "225" + ], + "filament_flow_ratio": [ + "0.90" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" ], "overhang_fan_speed": [ "100" @@ -25,6 +40,8 @@ "Peopoly" ], "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle" + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json index 38bda1e27b..3bab85bef5 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json @@ -7,18 +7,18 @@ "instantiation": "true", "inherits": "fdm_filament_pla", "filament_flow_ratio": [ - "1.02" + "0.92" ], "nozzle_temperature_initial_layer":[ - "210" + "215" ], "nozzle_temperature":[ - "190" + "210" ], - "hot_plate_temp_initial_layer":["50"], - "hot_plate_temp":["50"], + "hot_plate_temp_initial_layer":["70"], + "hot_plate_temp":["70"], "filament_max_volumetric_speed": [ - "40" + "35" ], "fan_max_speed":[ "50" @@ -29,10 +29,18 @@ "filament_type": [ "PLA" ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], "filament_vendor": [ "Peopoly" ], "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle" + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" ] } diff --git a/resources/profiles/Peopoly/filament/fdm_filament_abs.json b/resources/profiles/Peopoly/filament/fdm_filament_abs.json index 407809bec0..0329ffdc7e 100644 --- a/resources/profiles/Peopoly/filament/fdm_filament_abs.json +++ b/resources/profiles/Peopoly/filament/fdm_filament_abs.json @@ -35,7 +35,7 @@ "1.04" ], "filament_max_volumetric_speed": [ - "35" + "22" ], "filament_type": [ "ABS" @@ -50,7 +50,7 @@ "270" ], "nozzle_temperature_initial_layer": [ - "260" + "275" ], "nozzle_temperature_range_high": [ "280" diff --git a/resources/profiles/Peopoly/filament/fdm_filament_petg.json b/resources/profiles/Peopoly/filament/fdm_filament_petg.json index 6c9188b987..382d9a5c02 100644 --- a/resources/profiles/Peopoly/filament/fdm_filament_petg.json +++ b/resources/profiles/Peopoly/filament/fdm_filament_petg.json @@ -23,7 +23,7 @@ "1.27" ], "filament_max_volumetric_speed": [ - "30" + "18" ], "filament_type": [ "PETG" @@ -35,13 +35,13 @@ "70" ], "nozzle_temperature": [ - "245" + "260" ], "nozzle_temperature_initial_layer": [ - "255" + "270" ], "nozzle_temperature_range_high": [ - "260" + "280" ], "nozzle_temperature_range_low": [ "220" diff --git a/resources/profiles/Peopoly/filament/fdm_filament_pla.json b/resources/profiles/Peopoly/filament/fdm_filament_pla.json index 6142f26127..33fb3d0803 100644 --- a/resources/profiles/Peopoly/filament/fdm_filament_pla.json +++ b/resources/profiles/Peopoly/filament/fdm_filament_pla.json @@ -38,7 +38,7 @@ "45" ], "nozzle_temperature_initial_layer": [ - "210" + "225" ], "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.4 nozzle.json b/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.4 nozzle.json index 7fac3be3eb..a8662dd892 100644 --- a/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.4 nozzle.json +++ b/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.4 nozzle.json @@ -1,19 +1,20 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Peopoly Magneto X 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_klipper_common", - "printer_model": "Peopoly Magneto X", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "300x0", - "300x400", - "0x400" - ], - "printable_height": "300" -} + "type": "machine", + "setting_id": "GM001", + "name": "Peopoly Magneto X 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "Peopoly Magneto X", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "300x0", + "300x400", + "0x400" + ], + "printable_height": "300" +} \ No newline at end of file diff --git a/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.6 nozzle.json b/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.6 nozzle.json new file mode 100644 index 0000000000..24fa3670dc --- /dev/null +++ b/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.6 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "Peopoly Magneto X 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "Peopoly Magneto X", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "300x0", + "300x400", + "0x400" + ], + "printable_height": "300", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.12" + ], + "retract_length_toolchange": [ + "3" + ], + "retraction_length": [ + "1" + ] +} \ No newline at end of file diff --git a/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.8 nozzle.json b/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.8 nozzle.json index d2bebbe483..40c830b734 100644 --- a/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.8 nozzle.json +++ b/resources/profiles/Peopoly/machine/Peopoly Magneto X 0.8 nozzle.json @@ -1,19 +1,20 @@ { "type": "machine", - "setting_id": "GM002", + "setting_id": "GM003", "name": "Peopoly Magneto X 0.8 nozzle", "from": "system", "instantiation": "true", "inherits": "fdm_klipper_common", "printer_model": "Peopoly Magneto X", "nozzle_diameter": [ - "0.8" + "0.8" ], + "printer_variant": "0.8", "printable_area": [ - "0x0", - "300x0", - "300x400", - "0x400" + "0x0", + "300x0", + "300x400", + "0x400" ], "printable_height": "300", "max_layer_height": [ @@ -28,6 +29,4 @@ "retraction_length": [ "3" ] - - } \ No newline at end of file diff --git a/resources/profiles/Peopoly/machine/Peopoly Magneto X.json b/resources/profiles/Peopoly/machine/Peopoly Magneto X.json index 5f3c37f586..924c286263 100644 --- a/resources/profiles/Peopoly/machine/Peopoly Magneto X.json +++ b/resources/profiles/Peopoly/machine/Peopoly Magneto X.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Peopoly Magneto X", "model_id": "Peopoly-Magneto-X", - "nozzle_diameter": "0.4", + "nozzle_diameter": "0.4;0.6;0.8", "machine_tech": "FFF", "family": "Peopoly", "bed_model": "magnetox_model.stl", diff --git a/resources/profiles/Peopoly/machine/fdm_klipper_common.json b/resources/profiles/Peopoly/machine/fdm_klipper_common.json index 1fa7b14403..1296caca0c 100644 --- a/resources/profiles/Peopoly/machine/fdm_klipper_common.json +++ b/resources/profiles/Peopoly/machine/fdm_klipper_common.json @@ -133,7 +133,7 @@ "bed_exclude_area": [ "0x0" ], - "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]}\nG90\nG1 X10 Y10 Z10\nG1 E10.0 F1200\nG4 P3000\nG1 E-3.0 F1200\nG1 Z0.2 F240\nG92 E0\nG1 Y300 E25 F1500\nG1 X12.3 F5000\nG92 E0\nG1 Y10 E25 F1200\nG92 E0", + "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]}\n", "machine_end_gcode": "PRINT_END", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", diff --git a/resources/profiles/Peopoly/machine/fdm_machine_common.json b/resources/profiles/Peopoly/machine/fdm_machine_common.json index 9ae8ee96f6..3dad5dc2b5 100644 --- a/resources/profiles/Peopoly/machine/fdm_machine_common.json +++ b/resources/profiles/Peopoly/machine/fdm_machine_common.json @@ -88,7 +88,7 @@ "1" ], "retraction_length": [ - "5" + "1" ], "retract_length_toolchange": [ "1" @@ -103,7 +103,7 @@ "0" ], "retraction_speed": [ - "60" + "30" ], "single_extruder_multi_material": "1", "change_filament_gcode": "", @@ -113,7 +113,7 @@ "z_hop_types": [ "Auto Lift" ], - "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", + "default_print_profile": "0.20mm Standard @MagnetoX", "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" diff --git a/resources/profiles/Peopoly/magnetox_model_texture-400x300.png b/resources/profiles/Peopoly/magnetox_model_texture-400x300.png index 52af4d4d89..b33eebdd43 100644 Binary files a/resources/profiles/Peopoly/magnetox_model_texture-400x300.png and b/resources/profiles/Peopoly/magnetox_model_texture-400x300.png differ diff --git a/resources/profiles/Peopoly/magnetox_model_texture.png b/resources/profiles/Peopoly/magnetox_model_texture.png index b332a03ab9..41963628bc 100644 Binary files a/resources/profiles/Peopoly/magnetox_model_texture.png and b/resources/profiles/Peopoly/magnetox_model_texture.png differ diff --git a/resources/profiles/Peopoly/process/0.20mm ABS-GF 0.4 Nozzle Standard @MagnetoX.json b/resources/profiles/Peopoly/process/0.20mm ABS-GF 0.4 Nozzle Standard @MagnetoX.json new file mode 100644 index 0000000000..6308b25dc3 --- /dev/null +++ b/resources/profiles/Peopoly/process/0.20mm ABS-GF 0.4 Nozzle Standard @MagnetoX.json @@ -0,0 +1,31 @@ +{ + "type": "process", + "name": "0.20mm ABS-GF 0.4 Nozzle Standard @MagnetoX", + "inherits": "fdm_process_pply_0.20", + "from": "system", + "setting_id": "GP015", + "instantiation": "true", + "top_shell_thickness": "0.6", + "bridge_flow": "1", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "140", + "outer_wall_speed": "160", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed":"140", + "gap_infill_speed": "200", + "wall_loops":"3", + "brim_type": "no_brim", + "skirt_distance": "2", + "skirt_loops": "2", + "top_shell_layers":"5", + "bottom_shell_layers":"5", + "sparse_infill_density":"20", + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle" + ] +} + + + \ No newline at end of file diff --git a/resources/profiles/Peopoly/process/0.20mm PET-CF 0.4 Nozzle Standard @MagnetoX.json b/resources/profiles/Peopoly/process/0.20mm PET-CF 0.4 Nozzle Standard @MagnetoX.json new file mode 100644 index 0000000000..0b0b61b35c --- /dev/null +++ b/resources/profiles/Peopoly/process/0.20mm PET-CF 0.4 Nozzle Standard @MagnetoX.json @@ -0,0 +1,31 @@ +{ + "type": "process", + "name": "0.20mm PET-CF 0.4 Nozzle Standard @MagnetoX", + "inherits": "fdm_process_pply_0.20", + "from": "system", + "setting_id": "GP016", + "instantiation": "true", + "top_shell_thickness": "0.6", + "bridge_flow": "1", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "140", + "outer_wall_speed": "160", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed":"140", + "gap_infill_speed": "200", + "wall_loops":"3", + "brim_type": "no_brim", + "skirt_distance": "2", + "skirt_loops": "2", + "top_shell_layers":"5", + "bottom_shell_layers":"5", + "sparse_infill_density":"20", + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle" + ] +} + + + \ No newline at end of file diff --git a/resources/profiles/Peopoly/process/0.30mm Standard @Magneto X 0.6 nozzle.json b/resources/profiles/Peopoly/process/0.30mm Standard @Magneto X 0.6 nozzle.json new file mode 100644 index 0000000000..e40f47a948 --- /dev/null +++ b/resources/profiles/Peopoly/process/0.30mm Standard @Magneto X 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.30mm Standard @Magneto X 0.6 nozzle", + "inherits": "fdm_process_pply_0.30_nozzle_0.6", + "from": "system", + "setting_id": "GP008", + "instantiation": "true", + "outer_wall_speed": "120", + "compatible_printers": [ + "Peopoly Magneto X 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Peopoly/process/fdm_process_common.json b/resources/profiles/Peopoly/process/fdm_process_common.json index 9fcbefdf98..7adffd8fbd 100644 --- a/resources/profiles/Peopoly/process/fdm_process_common.json +++ b/resources/profiles/Peopoly/process/fdm_process_common.json @@ -11,20 +11,21 @@ "print_sequence": "by layer", "default_acceleration": "10000", "bridge_no_support": "0", + "only_one_wall_top":"0", "elefant_foot_compensation": "0.1", "outer_wall_line_width": "0.42", "outer_wall_speed": "120", "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", "gap_infill_speed": "30", "infill_combination": "0", "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "15%", + "infill_wall_overlap": "5%", "sparse_infill_speed": "50", "interface_shells": "0", "detect_overhang_wall": "0", diff --git a/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json b/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json index 35138b2e2d..bf26d90f2c 100644 --- a/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json +++ b/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json @@ -30,7 +30,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", @@ -113,6 +113,8 @@ "inner_wall_jerk": "7", "top_surface_jerk": "9", "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle" + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" ] } diff --git a/resources/profiles/Peopoly/process/fdm_process_peopoly_common_0_2.json b/resources/profiles/Peopoly/process/fdm_process_peopoly_common_0_2.json index 773fe2f9a3..7faf49ace5 100644 --- a/resources/profiles/Peopoly/process/fdm_process_peopoly_common_0_2.json +++ b/resources/profiles/Peopoly/process/fdm_process_peopoly_common_0_2.json @@ -14,6 +14,8 @@ "support_line_width": "0.22", "top_surface_line_width": "0.22", "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle" + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" ] } diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_0.16.json b/resources/profiles/Peopoly/process/fdm_process_pply_0.16.json index 174ebaeed7..31a588a8a3 100644 --- a/resources/profiles/Peopoly/process/fdm_process_pply_0.16.json +++ b/resources/profiles/Peopoly/process/fdm_process_pply_0.16.json @@ -12,8 +12,8 @@ "bridge_flow": "1", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "300", - "inner_wall_speed": "400", + "outer_wall_speed": "200", + "inner_wall_speed": "300", "sparse_infill_speed": "330", "internal_solid_infill_speed": "350", "gap_infill_speed": "320", diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_0.20.json b/resources/profiles/Peopoly/process/fdm_process_pply_0.20.json index 2941c8cc5e..0e2c0b9d42 100644 --- a/resources/profiles/Peopoly/process/fdm_process_pply_0.20.json +++ b/resources/profiles/Peopoly/process/fdm_process_pply_0.20.json @@ -7,11 +7,11 @@ "elefant_foot_compensation": "0.15", "top_shell_thickness": "0.6", "bridge_flow": "1", - "initial_layer_speed": "50", + "initial_layer_speed": "100", "initial_layer_infill_speed": "105", - "outer_wall_speed": "250", - "inner_wall_speed": "350", + "outer_wall_speed": "200", + "inner_wall_speed": "300", "sparse_infill_speed": "300", - "internal_solid_infill_speed": "350", - "gap_infill_speed": "350" + "internal_solid_infill_speed": "300", + "gap_infill_speed": "300" } \ No newline at end of file diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_0.24.json b/resources/profiles/Peopoly/process/fdm_process_pply_0.24.json index 9aa3df30eb..17a1035dd8 100644 --- a/resources/profiles/Peopoly/process/fdm_process_pply_0.24.json +++ b/resources/profiles/Peopoly/process/fdm_process_pply_0.24.json @@ -11,8 +11,8 @@ "bridge_flow": "1", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "200", - "inner_wall_speed": "230", + "outer_wall_speed": "180", + "inner_wall_speed": "200", "sparse_infill_speed": "230", "internal_solid_infill_speed": "230", "gap_infill_speed": "230", diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_0.28.json b/resources/profiles/Peopoly/process/fdm_process_pply_0.28.json index dadc9d4788..98bd48b8c7 100644 --- a/resources/profiles/Peopoly/process/fdm_process_pply_0.28.json +++ b/resources/profiles/Peopoly/process/fdm_process_pply_0.28.json @@ -11,8 +11,8 @@ "bridge_flow": "1", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", - "outer_wall_speed": "200", - "inner_wall_speed": "200", + "outer_wall_speed": "150", + "inner_wall_speed": "180", "sparse_infill_speed": "200", "internal_solid_infill_speed": "200", "gap_infill_speed": "200", diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_0.30_nozzle_0.6.json b/resources/profiles/Peopoly/process/fdm_process_pply_0.30_nozzle_0.6.json new file mode 100644 index 0000000000..3ed916037b --- /dev/null +++ b/resources/profiles/Peopoly/process/fdm_process_pply_0.30_nozzle_0.6.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_pply_0.30_nozzle_0.6", + "inherits": "fdm_process_pply_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.30", + "elefant_foot_compensation": "0.15", + "top_surface_line_width": "0.45", + "top_shell_thickness": "0.6", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "initial_layer_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "support_line_width": "0.6", + "bridge_flow": "1", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "120", + "inner_wall_speed": "180", + "sparse_infill_speed": "180", + "internal_solid_infill_speed": "200", + "gap_infill_speed": "200" +} \ No newline at end of file diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_common.json b/resources/profiles/Peopoly/process/fdm_process_pply_common.json index 6649db3406..176b401d7d 100644 --- a/resources/profiles/Peopoly/process/fdm_process_pply_common.json +++ b/resources/profiles/Peopoly/process/fdm_process_pply_common.json @@ -20,8 +20,8 @@ "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", - "initial_layer_speed": "30", - "gap_infill_speed": "50", + "initial_layer_speed": "80", + "gap_infill_speed": "150", "sparse_infill_speed": "250", "ironing_flow": "10%", "ironing_spacing": "0.15", @@ -35,7 +35,7 @@ "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", - "only_one_wall_top": "1", + "only_one_wall_top": "0", "inner_wall_speed": "150", "seam_position": "aligned", "skirt_height": "1", @@ -71,6 +71,7 @@ "wall_generator": "classic", "compatible_printers": [ "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", "Peopoly Magneto X 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Positron3D.json b/resources/profiles/Positron3D.json new file mode 100644 index 0000000000..76d4451394 --- /dev/null +++ b/resources/profiles/Positron3D.json @@ -0,0 +1,162 @@ +{ + "name": "Positron 3D", + "version": "02.01.00.01", + "force_update": "0", + "description": "Positron 3D Printer Profile", + "machine_model_list": [ + { + "name": "The Positron", + "sub_path": "machine/The Positron.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_the_positron_common", + "sub_path": "process/fdm_process_the_positron_common.json" + }, + { + "name": "0.08mm Extra Fine @The Positron", + "sub_path": "process/0.08mm Extra Fine @The Positron.json" + }, + { + "name": "0.12mm Fine @The Positron", + "sub_path": "process/0.12mm Fine @The Positron.json" + }, + { + "name": "0.16mm Optimal @The Positron", + "sub_path": "process/0.16mm Optimal @The Positron.json" + }, + { + "name": "0.20mm Standard @The Positron", + "sub_path": "process/0.20mm Standard @The Positron.json" + }, + { + "name": "0.24mm Draft @The Positron", + "sub_path": "process/0.24mm Draft @The Positron.json" + }, + { + "name": "0.28mm Extra Draft @The Positron", + "sub_path": "process/0.28mm Extra Draft @The Positron.json" + }, + { + "name": "0.32mm Extra Draft @The Positron", + "sub_path": "process/0.32mm Extra Draft @The Positron.json" + }, + { + "name": "0.40mm Extra Draft @The Positron", + "sub_path": "process/0.40mm Extra Draft @The Positron.json" + }, + { + "name": "0.56mm Extra Draft @The Positron", + "sub_path": "process/0.56mm Extra Draft @The Positron.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "Positron Generic PLA", + "sub_path": "filament/Positron Generic PLA.json" + }, + { + "name": "Positron Generic PLA-CF", + "sub_path": "filament/Positron Generic PLA-CF.json" + }, + { + "name": "Positron Generic PETG", + "sub_path": "filament/Positron Generic PETG.json" + }, + { + "name": "Positron Generic ABS", + "sub_path": "filament/Positron Generic ABS.json" + }, + { + "name": "Positron Generic TPU", + "sub_path": "filament/Positron Generic TPU.json" + }, + { + "name": "Positron Generic ASA", + "sub_path": "filament/Positron Generic ASA.json" + }, + { + "name": "Positron Generic PC", + "sub_path": "filament/Positron Generic PC.json" + }, + { + "name": "Positron Generic PVA", + "sub_path": "filament/Positron Generic PVA.json" + }, + { + "name": "Positron Generic PA", + "sub_path": "filament/Positron Generic PA.json" + }, + { + "name": "Positron Generic PA-CF", + "sub_path": "filament/Positron Generic PA-CF.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_common_the_positron", + "sub_path": "machine/fdm_common_the_positron.json" + }, + { + "name": "The Positron 0.4 nozzle", + "sub_path": "machine/The Positron 0.4 nozzle.json" + }, + { + "name": "The Positron 0.2 nozzle", + "sub_path": "machine/The Positron 0.2 nozzle.json" + }, + { + "name": "The Positron 0.6 nozzle", + "sub_path": "machine/The Positron 0.6 nozzle.json" + }, + { + "name": "The Positron 0.8 nozzle", + "sub_path": "machine/The Positron 0.8 nozzle.json" + } + ] +} diff --git a/resources/profiles/Positron3D/The Positron_cover.png b/resources/profiles/Positron3D/The Positron_cover.png new file mode 100644 index 0000000000..3adaa531c4 Binary files /dev/null and b/resources/profiles/Positron3D/The Positron_cover.png differ diff --git a/resources/profiles/Positron3D/ThePositron_bed_model.stl b/resources/profiles/Positron3D/ThePositron_bed_model.stl new file mode 100644 index 0000000000..2d20377271 Binary files /dev/null and b/resources/profiles/Positron3D/ThePositron_bed_model.stl differ diff --git a/resources/profiles/Positron3D/ThePositron_bed_texture.svg b/resources/profiles/Positron3D/ThePositron_bed_texture.svg new file mode 100644 index 0000000000..d9ade25459 --- /dev/null +++ b/resources/profiles/Positron3D/ThePositron_bed_texture.svg @@ -0,0 +1,86 @@ + + + + + + + + + diff --git a/resources/profiles/Positron3D/filament/Positron Generic ABS.json b/resources/profiles/Positron3D/filament/Positron Generic ABS.json new file mode 100644 index 0000000000..2ec763c05a --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic ABS.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "Positron Generic ABS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic ASA.json b/resources/profiles/Positron3D/filament/Positron Generic ASA.json new file mode 100644 index 0000000000..e14571afcf --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic ASA.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSA04", + "name": "Positron Generic ASA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PA-CF.json b/resources/profiles/Positron3D/filament/Positron Generic PA-CF.json new file mode 100644 index 0000000000..11d0865e67 --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PA-CF.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSA04", + "name": "Positron 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": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PA.json b/resources/profiles/Positron3D/filament/Positron Generic PA.json new file mode 100644 index 0000000000..ebc35a463b --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PA.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSA04", + "name": "Positron 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": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PC.json b/resources/profiles/Positron3D/filament/Positron Generic PC.json new file mode 100644 index 0000000000..0b7ec94316 --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PC.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSA04", + "name": "Positron Generic PC", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PETG.json b/resources/profiles/Positron3D/filament/Positron Generic PETG.json new file mode 100644 index 0000000000..cddfe7cd90 --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PETG.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "Positron 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": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PLA-CF.json b/resources/profiles/Positron3D/filament/Positron Generic PLA-CF.json new file mode 100644 index 0000000000..24f9e37305 --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PLA-CF.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSA04", + "name": "Positron 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": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PLA.json b/resources/profiles/Positron3D/filament/Positron Generic PLA.json new file mode 100644 index 0000000000..b03c04976a --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PLA.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Positron 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": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic PVA.json b/resources/profiles/Positron3D/filament/Positron Generic PVA.json new file mode 100644 index 0000000000..c0b9ae4647 --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic PVA.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSA04", + "name": "Positron Generic PVA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/Positron Generic TPU.json b/resources/profiles/Positron3D/filament/Positron Generic TPU.json new file mode 100644 index 0000000000..d186eb9348 --- /dev/null +++ b/resources/profiles/Positron3D/filament/Positron Generic TPU.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSA04", + "name": "Positron Generic TPU", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/filament/fdm_filament_abs.json b/resources/profiles/Positron3D/filament/fdm_filament_abs.json new file mode 100644 index 0000000000..b9d4eeda31 --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_abs.json @@ -0,0 +1,88 @@ +{ + "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": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "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/Positron3D/filament/fdm_filament_asa.json b/resources/profiles/Positron3D/filament/fdm_filament_asa.json new file mode 100644 index 0000000000..262c561bda --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_asa.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_asa", + "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": [ + "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": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "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/Positron3D/filament/fdm_filament_common.json b/resources/profiles/Positron3D/filament/fdm_filament_common.json new file mode 100644 index 0000000000..9f77975119 --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_common.json @@ -0,0 +1,144 @@ +{ + "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" + ], + "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 gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/Positron3D/filament/fdm_filament_pa.json b/resources/profiles/Positron3D/filament/fdm_filament_pa.json new file mode 100644 index 0000000000..58f53cd451 --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_pa.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_pa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "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": [ + "270" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/Positron3D/filament/fdm_filament_pc.json b/resources/profiles/Positron3D/filament/fdm_filament_pc.json new file mode 100644 index 0000000000..cec8b89a38 --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_pc.json @@ -0,0 +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": [ + "140" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/Positron3D/filament/fdm_filament_pet.json b/resources/profiles/Positron3D/filament/fdm_filament_pet.json new file mode 100644 index 0000000000..bb2323e9c1 --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_pet.json @@ -0,0 +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" : [ + "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/Positron3D/filament/fdm_filament_pla.json b/resources/profiles/Positron3D/filament/fdm_filament_pla.json new file mode 100644 index 0000000000..82c6772f35 --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_pla.json @@ -0,0 +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" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Positron3D/filament/fdm_filament_pva.json b/resources/profiles/Positron3D/filament/fdm_filament_pva.json new file mode 100644 index 0000000000..ebf25aa3ae --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_pva.json @@ -0,0 +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" : [ + "45" + ], + "textured_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "35" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "45" + ], + "textured_plate_temp_initial_layer" : [ + "45" + ], + "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": [ + "50" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "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/Positron3D/filament/fdm_filament_tpu.json b/resources/profiles/Positron3D/filament/fdm_filament_tpu.json new file mode 100644 index 0000000000..d00b7dbcab --- /dev/null +++ b/resources/profiles/Positron3D/filament/fdm_filament_tpu.json @@ -0,0 +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": [ + "60" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Positron3D/machine/The Positron 0.2 nozzle.json b/resources/profiles/Positron3D/machine/The Positron 0.2 nozzle.json new file mode 100644 index 0000000000..dee218f350 --- /dev/null +++ b/resources/profiles/Positron3D/machine/The Positron 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "The Positron 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_common_the_positron", + "printer_model": "The Positron", + "nozzle_diameter": [ + "0.2" + ], + "max_layer_height": [ + "0.16" + ], + "min_layer_height": [ + "0.04" + ], + "printer_variant": "0.2", + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "165" +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/machine/The Positron 0.4 nozzle.json b/resources/profiles/Positron3D/machine/The Positron 0.4 nozzle.json new file mode 100644 index 0000000000..33098367b5 --- /dev/null +++ b/resources/profiles/Positron3D/machine/The Positron 0.4 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "The Positron 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_common_the_positron", + "printer_model": "The Positron", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "165" +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/machine/The Positron 0.6 nozzle.json b/resources/profiles/Positron3D/machine/The Positron 0.6 nozzle.json new file mode 100644 index 0000000000..000acf73da --- /dev/null +++ b/resources/profiles/Positron3D/machine/The Positron 0.6 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "The Positron 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_common_the_positron", + "printer_model": "The Positron", + "nozzle_diameter": [ + "0.6" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.12" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "165" +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/machine/The Positron 0.8 nozzle.json b/resources/profiles/Positron3D/machine/The Positron 0.8 nozzle.json new file mode 100644 index 0000000000..97d6cbd975 --- /dev/null +++ b/resources/profiles/Positron3D/machine/The Positron 0.8 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM004", + "name": "The Positron 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_common_the_positron", + "printer_model": "The Positron", + "nozzle_diameter": [ + "0.8" + ], + "max_layer_height": [ + "0.6" + ], + "min_layer_height": [ + "0.2" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "165" +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/machine/The Positron.json b/resources/profiles/Positron3D/machine/The Positron.json new file mode 100644 index 0000000000..9902c9b948 --- /dev/null +++ b/resources/profiles/Positron3D/machine/The Positron.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "The Positron", + "model_id": "thepositron_1", + "nozzle_diameter": "0.4;0.2;0.6;0.8", + "machine_tech": "FFF", + "family": "ThePositron", + "bed_model": "ThePositron_bed_model.stl", + "bed_texture": "ThePositron_bed_texture.svg", + "hotend_model": "", + "default_materials": "Positron Generic ABS;Positron Generic PLA;Positron Generic PLA-CF;Positron Generic PETG;Positron Generic TPU;Positron Generic ASA;Positron Generic PC;Positron Generic PVA;Positron Generic PA;Positron Generic PA-CF" +} diff --git a/resources/profiles/Positron3D/machine/fdm_common_the_positron.json b/resources/profiles/Positron3D/machine/fdm_common_the_positron.json new file mode 100644 index 0000000000..23effbd1e0 --- /dev/null +++ b/resources/profiles/Positron3D/machine/fdm_common_the_positron.json @@ -0,0 +1,60 @@ +{ + "type": "machine", + "name": "fdm_common_the_positron", + "from": "system", + "instantiation": "false", + "inherits": "fdm_machine_common", + "gcode_flavor": "klipper", + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["8000", "8000"], + "machine_max_acceleration_retracting": ["5000", "5000"], + "machine_max_acceleration_travel": ["8000", "8000"], + "machine_max_acceleration_x": ["8000", "8000"], + "machine_max_acceleration_y": ["8000", "8000"], + "machine_max_acceleration_z": ["500", "500"], + "machine_max_speed_e": ["25", "25"], + "machine_max_speed_x": ["420", "420"], + "machine_max_speed_y": ["420", "420"], + "machine_max_speed_z": ["12", "12"], + "machine_max_jerk_e": ["2.5", "2.5"], + "machine_max_jerk_x": ["12", "12"], + "machine_max_jerk_y": ["12", "12"], + "machine_max_jerk_z": ["0.2", "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": "165", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "printer_settings_id": "", + "printer_technology": "FFF", + "printer_variant": "0.4", + "retraction_minimum_travel": ["1"], + "retract_before_wipe": ["70%"], + "retract_when_changing_layer": ["1"], + "retraction_length": ["2.9"], + "retract_length_toolchange": ["2"], + "z_hop": ["0.4"], + "retract_restart_extra": ["0"], + "retract_restart_extra_toolchange": ["0"], + "retraction_speed": ["50"], + "deretraction_speed": ["40"], + "z_hop_types": "Normal Lift", + "silent_mode": "0", + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": ["1"], + "default_filament_profile": ["Positron Generic ABS"], + "default_print_profile": "0.20mm Standard @The Positron", + "bed_exclude_area": ["0x0"], + "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", + "machine_end_gcode": "PRINT_END", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_pause_gcode": "PAUSE", + "scan_first_layer": "0", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Positron3D/machine/fdm_machine_common.json b/resources/profiles/Positron3D/machine/fdm_machine_common.json new file mode 100644 index 0000000000..bfb6b23e1a --- /dev/null +++ b/resources/profiles/Positron3D/machine/fdm_machine_common.json @@ -0,0 +1,119 @@ +{ + "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": [ + "500" + ], + "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": "165", + "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": "1", + "change_filament_gcode": "", + "wipe": [ + "1" + ], + "default_print_profile": "", + "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", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_pause_gcode": "M601" +} diff --git a/resources/profiles/Positron3D/process/0.08mm Extra Fine @The Positron.json b/resources/profiles/Positron3D/process/0.08mm Extra Fine @The Positron.json new file mode 100644 index 0000000000..e6880b84a5 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.08mm Extra Fine @The Positron.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm Extra Fine @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "layer_height": "0.08", + "bottom_shell_layers": "7", + "top_shell_layers": "9", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.12mm Fine @The Positron.json b/resources/profiles/Positron3D/process/0.12mm Fine @The Positron.json new file mode 100644 index 0000000000..4985081211 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.12mm Fine @The Positron.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "layer_height": "0.12", + "bottom_shell_layers": "5", + "top_shell_layers": "6", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.16mm Optimal @The Positron.json b/resources/profiles/Positron3D/process/0.16mm Optimal @The Positron.json new file mode 100644 index 0000000000..b1373b2656 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.16mm Optimal @The Positron.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "support_top_z_distance": "0.16", + "support_bottom_z_distance": "0.16", + "layer_height": "0.16", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.2 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.20mm Standard @The Positron.json b/resources/profiles/Positron3D/process/0.20mm Standard @The Positron.json new file mode 100644 index 0000000000..14612c6f98 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.20mm Standard @The Positron.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @The Positron", + "from": "system", + "inherits": "fdm_process_the_positron_common", + "instantiation": "true", + "layer_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} diff --git a/resources/profiles/Positron3D/process/0.24mm Draft @The Positron.json b/resources/profiles/Positron3D/process/0.24mm Draft @The Positron.json new file mode 100644 index 0000000000..917b608ded --- /dev/null +++ b/resources/profiles/Positron3D/process/0.24mm Draft @The Positron.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "layer_height": "0.24", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.28mm Extra Draft @The Positron.json b/resources/profiles/Positron3D/process/0.28mm Extra Draft @The Positron.json new file mode 100644 index 0000000000..6b68db3305 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.28mm Extra Draft @The Positron.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.28mm Extra Draft @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "layer_height": "0.28", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.32mm Extra Draft @The Positron.json b/resources/profiles/Positron3D/process/0.32mm Extra Draft @The Positron.json new file mode 100644 index 0000000000..e8a316ef72 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.32mm Extra Draft @The Positron.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Standard @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.32", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.4 nozzle", + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.40mm Extra Draft @The Positron.json b/resources/profiles/Positron3D/process/0.40mm Extra Draft @The Positron.json new file mode 100644 index 0000000000..07aac7b020 --- /dev/null +++ b/resources/profiles/Positron3D/process/0.40mm Extra Draft @The Positron.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.40", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.6 nozzle", + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/0.56mm Extra Draft @The Positron.json b/resources/profiles/Positron3D/process/0.56mm Extra Draft @The Positron.json new file mode 100644 index 0000000000..8c659c650a --- /dev/null +++ b/resources/profiles/Positron3D/process/0.56mm Extra Draft @The Positron.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.56mm Standard @The Positron", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_the_positron_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.56", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "The Positron 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Positron3D/process/fdm_process_common.json b/resources/profiles/Positron3D/process/fdm_process_common.json new file mode 100644 index 0000000000..cfb78ab95a --- /dev/null +++ b/resources/profiles/Positron3D/process/fdm_process_common.json @@ -0,0 +1,108 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_speed": "50", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "1000", + "inner_wall_acceleration": "1000", + "outer_wall_acceleration": "700", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", + "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "line_width": "110%", + "inner_wall_line_width": "110%", + "outer_wall_line_width": "100%", + "top_surface_line_width": "93.75%", + "sparse_infill_line_width": "110%", + "initial_layer_line_width": "120%", + "internal_solid_infill_line_width": "120%", + "support_line_width": "96%", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "3", + "min_skirt_length": "4", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "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": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "30", + "tree_support_wall_count": "0", + "tree_support_with_infill": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "3", + "top_shell_layers": "4", + "bridge_flow": "1", + "initial_layer_speed": "45", + "initial_layer_infill_speed": "45", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "200" +} diff --git a/resources/profiles/Positron3D/process/fdm_process_the_positron_common.json b/resources/profiles/Positron3D/process/fdm_process_the_positron_common.json new file mode 100644 index 0000000000..76e677a7e9 --- /dev/null +++ b/resources/profiles/Positron3D/process/fdm_process_the_positron_common.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "name": "fdm_process_the_positron_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "default_acceleration": "5000", + "top_surface_acceleration": "3000", + "travel_acceleration": "7000", + "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "1500", + "initial_layer_acceleration": "500", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "60", + "inner_wall_speed": "100", + "internal_solid_infill_speed": "180", + "top_surface_speed": "90", + "gap_infill_speed": "90", + "sparse_infill_speed": "180", + "travel_speed": "420", + "travel_jerk": "12", + "outer_wall_jerk": "7", + "inner_wall_jerk": "7", + "default_jerk": "9", + "infill_jerk": "12", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 983e35e558..5284a93b95 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -8,6 +8,10 @@ "name": "MK4IS", "sub_path": "machine/Prusa MK4.json" }, + { + "name": "MINIIS", + "sub_path": "machine/Prusa MINIIS.json" + }, { "name": "MK3S", "sub_path": "machine/Prusa MK3S.json" @@ -15,6 +19,10 @@ { "name": "MINI", "sub_path": "machine/Prusa MINI.json" + }, + { + "name": "Prusa XL", + "sub_path": "machine/Prusa XL.json" } ], "process_list": [ @@ -26,10 +34,26 @@ "name": "process_common_mk4", "sub_path": "process/process_common_mk4.json" }, + { + "name": "process_common_miniis", + "sub_path": "process/process_common_miniis.json" + }, + { + "name": "process_speed_miniis", + "sub_path": "process/process_speed_miniis.json" + }, + { + "name": "process_detail_miniis", + "sub_path": "process/process_detail_miniis.json" + }, { "name": "process_common_mk3", "sub_path": "process/process_common_mk3.json" }, + { + "name": "process_common_xl", + "sub_path": "process/process_common_xl.json" + }, { "name": "0.20mm Standard @MINI 0.25", "sub_path": "process/0.20mm Standard @MINI 0.25.json" @@ -135,39 +159,236 @@ "sub_path": "process/0.12mm Standard @MK4.json" }, { - "name": "0.16mm Standard @MK4", "sub_path": "process/0.16mm Standard @MK4.json" }, { - "name": "0.20mm Standard @MK4", "sub_path": "process/0.20mm Standard @MK4.json" }, { - + "name": "0.05mm Detail @MINIIS", + "sub_path": "process/0.05mm Detail @MINIIS.json" + }, + { + "name": "0.07mm Detail @MINIIS", + "sub_path": "process/0.07mm Detail @MINIIS.json" + }, + { + "name": "0.10mm Speed @MINIIS", + "sub_path": "process/0.10mm Speed @MINIIS.json" + }, + { + "name": "0.12mm Speed @MINIIS", + "sub_path": "process/0.12mm Speed @MINIIS.json" + }, + { + "name": "0.12mm Standard @MINIIS", + "sub_path": "process/0.12mm Standard @MINIIS.json" + }, + { + "name": "0.15mm Standard @MINIIS", + "sub_path": "process/0.15mm Standard @MINIIS.json" + }, + { + "name": "0.15mm Standard @MINIIS 0.6", + "sub_path": "process/0.15mm Standard @MINIIS 0.6.json" + }, + { + "name": "0.15mm Standard @MINIIS 0.25", + "sub_path": "process/0.15mm Standard @MINIIS 0.25.json" + }, + { + "name": "0.15mm Speed @MINIIS", + "sub_path": "process/0.15mm Speed @MINIIS.json" + }, + { + "name": "0.15mm Speed @MINIIS 0.25", + "sub_path": "process/0.15mm Speed @MINIIS 0.25.json" + }, + { + "name": "0.20mm Standard @MINIIS", + "sub_path": "process/0.20mm Standard @MINIIS.json" + }, + { + "name": "0.20mm Standard @MINIIS 0.6", + "sub_path": "process/0.20mm Standard @MINIIS 0.6.json" + }, + { + "name": "0.20mm Speed @MINIIS", + "sub_path": "process/0.20mm Speed @MINIIS.json" + }, + { + "name": "0.20mm Speed @MINIIS 0.6", + "sub_path": "process/0.20mm Speed @MINIIS 0.6.json" + }, + { + "name": "0.25mm Standard @MINIIS", + "sub_path": "process/0.25mm Standard @MINIIS.json" + }, + { + "name": "0.25mm Speed @MINIIS", + "sub_path": "process/0.25mm Speed @MINIIS.json" + }, + { + "name": "0.30mm Detail @MINIIS", + "sub_path": "process/0.30mm Detail @MINIIS.json" + }, + { + "name": "0.35mm Standard @MINIIS", + "sub_path": "process/0.35mm Standard @MINIIS.json" + }, + { + "name": "0.40mm Standard @MINIIS", + "sub_path": "process/0.40mm Standard @MINIIS.json" + }, + { "name": "0.24mm Standard @MK4", "sub_path": "process/0.24mm Standard @MK4.json" }, { - "name": "0.28mm Standard @MK4", "sub_path": "process/0.28mm Standard @MK4.json" }, { - "name": "0.32mm Standard @MK4", "sub_path": "process/0.32mm Standard @MK4.json" }, { - "name": "0.40mm Standard @MK4", "sub_path": "process/0.40mm Standard @MK4.json" }, { - "name": "0.56mm Standard @MK4", "sub_path": "process/0.56mm Standard @MK4.json" + }, + { + "name": "0.15mm Structural @Prusa XL 0.25", + "sub_path": "process/0.15mm Structural @Prusa XL 0.25.json" + }, + { + "name": "0.15mm Speed @Prusa XL 0.25", + "sub_path": "process/0.15mm Speed @Prusa XL 0.25.json" + }, + { + "name": "0.12mm Structural @Prusa XL 0.25", + "sub_path": "process/0.12mm Structural @Prusa XL 0.25.json" + }, + { + "name": "0.12mm Speed @Prusa XL 0.25", + "sub_path": "process/0.12mm Speed @Prusa XL 0.25.json" + }, + { + "name": "0.07mm Detail @Prusa XL 0.25", + "sub_path": "process/0.07mm Detail @Prusa XL 0.25.json" + }, + { + "name": "0.05mm Detail @Prusa XL 0.25", + "sub_path": "process/0.05mm Detail @Prusa XL 0.25.json" + }, + { + "name": "0.20mm Speed @Prusa XL 0.3", + "sub_path": "process/0.20mm Speed @Prusa XL 0.3.json" + }, + { + "name": "0.16mm Structural @Prusa XL 0.3", + "sub_path": "process/0.16mm Structural @Prusa XL 0.3.json" + }, + { + "name": "0.16mm Speed @Prusa XL 0.3", + "sub_path": "process/0.16mm Speed @Prusa XL 0.3.json" + }, + { + "name": "0.12mm Structural @Prusa XL 0.3", + "sub_path": "process/0.12mm Structural @Prusa XL 0.3.json" + }, + { + "name": "0.25mm Structural @Prusa XL 0.4", + "sub_path": "process/0.25mm Structural @Prusa XL 0.4.json" + }, + { + "name": "0.20mm Structural @Prusa XL 0.4", + "sub_path": "process/0.20mm Structural @Prusa XL 0.4.json" + }, + { + "name": "0.20mm Speed @Prusa XL 0.4", + "sub_path": "process/0.20mm Speed @Prusa XL 0.4.json" + }, + { + "name": "0.15mm Structural @Prusa XL 0.4", + "sub_path": "process/0.15mm Structural @Prusa XL 0.4.json" + }, + { + "name": "0.15mm Speed @Prusa XL 0.4", + "sub_path": "process/0.15mm Speed @Prusa XL 0.4.json" + }, + { + "name": "0.10mm FastDetail @Prusa XL 0.4", + "sub_path": "process/0.10mm FastDetail @Prusa XL 0.4.json" + }, + { + "name": "0.25mm Structural @Prusa XL 0.5", + "sub_path": "process/0.25mm Structural @Prusa XL 0.5.json" + }, + { + "name": "0.25mm Speed @Prusa XL 0.5", + "sub_path": "process/0.25mm Speed @Prusa XL 0.5.json" + }, + { + "name": "0.20mm Structural @Prusa XL 0.5", + "sub_path": "process/0.20mm Structural @Prusa XL 0.5.json" + }, + { + "name": "0.20mm Speed @Prusa XL 0.5", + "sub_path": "process/0.20mm Speed @Prusa XL 0.5.json" + }, + { + "name": "0.15mm Structural @Prusa XL 0.5", + "sub_path": "process/0.15mm Structural @Prusa XL 0.5.json" + }, + { + "name": "0.10mm Structural @Prusa XL 0.5", + "sub_path": "process/0.10mm Structural @Prusa XL 0.5.json" + }, + { + "name": "0.32mm Structural @Prusa XL 0.6", + "sub_path": "process/0.32mm Structural @Prusa XL 0.6.json" + }, + { + "name": "0.32mm Speed @Prusa XL 0.6", + "sub_path": "process/0.32mm Speed @Prusa XL 0.6.json" + }, + { + "name": "0.25mm Structural @Prusa XL 0.6", + "sub_path": "process/0.25mm Structural @Prusa XL 0.6.json" + }, + { + "name": "0.25mm Speed @Prusa XL 0.6", + "sub_path": "process/0.25mm Speed @Prusa XL 0.6.json" + }, + { + "name": "0.20mm Structural @Prusa XL 0.6", + "sub_path": "process/0.20mm Structural @Prusa XL 0.6.json" + }, + { + "name": "0.20mm Speed @Prusa XL 0.6", + "sub_path": "process/0.20mm Speed @Prusa XL 0.6.json" + }, + { + "name": "0.15mm Structural @Prusa XL 0.6", + "sub_path": "process/0.15mm Structural @Prusa XL 0.6.json" + }, + { + "name": "0.55mm Draft @Prusa XL 0.8", + "sub_path": "process/0.55mm Draft @Prusa XL 0.8.json" + }, + { + "name": "0.40mm Quality @Prusa XL 0.8", + "sub_path": "process/0.40mm Quality @Prusa XL 0.8.json" + }, + { + "name": "0.30mm Detail @Prusa XL 0.8", + "sub_path": "process/0.30mm Detail @Prusa XL 0.8.json" } ], "filament_list": [ @@ -195,6 +416,10 @@ "name": "fdm_filament_pc", "sub_path": "filament/fdm_filament_pc.json" }, + { + "name": "fdm_filament_pccf", + "sub_path": "filament/fdm_filament_pccf.json" + }, { "name": "fdm_filament_asa", "sub_path": "filament/fdm_filament_asa.json" @@ -203,10 +428,18 @@ "name": "fdm_filament_pva", "sub_path": "filament/fdm_filament_pva.json" }, + { + "name": "fdm_filament_pvb", + "sub_path": "filament/fdm_filament_pvb.json" + }, { "name": "fdm_filament_pa", "sub_path": "filament/fdm_filament_pa.json" }, + { + "name": "fdm_filament_pa11cf", + "sub_path": "filament/fdm_filament_pa11cf.json" + }, { "name": "Prusa Generic PLA", "sub_path": "filament/Prusa Generic PLA.json" @@ -215,10 +448,54 @@ "name": "Prusa Generic PLA @MK4", "sub_path": "filament/Prusa Generic PLA @MK4.json" }, + { + "name": "Prusa Generic PLA @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PLA @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PLA @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PLA @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PLA @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PLA @MINIIS 0.8.json" + }, + { + "name": "Prusa Generic PLA @MINIIS", + "sub_path": "filament/Prusa Generic PLA @MINIIS.json" + }, + { + "name": "Prusa Generic PLA @XL", + "sub_path": "filament/Prusa Generic PLA @XL.json" + }, + { + "name": "Prusament PLA @XL", + "sub_path": "filament/Prusament PLA @XL.json" + }, + { + "name": "Prusament rPLA @XL", + "sub_path": "filament/Prusament rPLA @XL.json" + }, { "name": "Prusa Generic PLA-CF", "sub_path": "filament/Prusa Generic PLA-CF.json" }, + { + "name": "Prusa Generic PLA-CF @MINIIS", + "sub_path": "filament/Prusa Generic PLA-CF @MINIIS.json" + }, + { + "name": "Prusa Generic PLA-CF @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PLA-CF @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PLA-CF @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.8.json" + }, { "name": "Prusa Generic PETG", "sub_path": "filament/Prusa Generic PETG.json" @@ -227,6 +504,30 @@ "name": "Prusa Generic PETG @MK4", "sub_path": "filament/Prusa Generic PETG @MK4.json" }, + { + "name": "Prusa Generic PETG @MINIIS", + "sub_path": "filament/Prusa Generic PETG @MINIIS.json" + }, + { + "name": "Prusa Generic PETG @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PETG @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PETG @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PETG @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PETG @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PETG @MINIIS 0.8.json" + }, + { + "name": "Prusa Generic PETG @XL", + "sub_path": "filament/Prusa Generic PETG @XL.json" + }, + { + "name": "Prusament PETG @XL", + "sub_path": "filament/Prusament PETG @XL.json" + }, { "name": "Prusa Generic ABS", "sub_path": "filament/Prusa Generic ABS.json" @@ -235,6 +536,26 @@ "name": "Prusa Generic ABS @MK4", "sub_path": "filament/Prusa Generic ABS @MK4.json" }, + { + "name": "Prusa Generic ABS @MINIIS", + "sub_path": "filament/Prusa Generic ABS @MINIIS.json" + }, + { + "name": "Prusa Generic ABS @MINIIS 0.25", + "sub_path": "filament/Prusa Generic ABS @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic ABS @MINIIS 0.6", + "sub_path": "filament/Prusa Generic ABS @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic ABS @MINIIS 0.8", + "sub_path": "filament/Prusa Generic ABS @MINIIS 0.8.json" + }, + { + "name": "Prusa Generic ABS @XL", + "sub_path": "filament/Prusa Generic ABS @XL.json" + }, { "name": "Prusa Generic TPU", "sub_path": "filament/Prusa Generic TPU.json" @@ -243,6 +564,10 @@ "name": "Prusa Generic TPU @MK4", "sub_path": "filament/Prusa Generic TPU @MK4.json" }, + { + "name": "Prusa Generic TPU @MINIIS", + "sub_path": "filament/Prusa Generic TPU @MINIIS.json" + }, { "name": "Prusa Generic ASA", "sub_path": "filament/Prusa Generic ASA.json" @@ -251,21 +576,121 @@ "name": "Prusa Generic ASA @MK4", "sub_path": "filament/Prusa Generic ASA @MK4.json" }, + { + "name": "Prusa Generic ASA @MINIIS", + "sub_path": "filament/Prusa Generic ASA @MINIIS.json" + }, + { + "name": "Prusa Generic ASA @MINIIS 0.25", + "sub_path": "filament/Prusa Generic ASA @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic ASA @MINIIS 0.6", + "sub_path": "filament/Prusa Generic ASA @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic ASA @MINIIS 0.8", + "sub_path": "filament/Prusa Generic ASA @MINIIS 0.8.json" + }, + { + "name": "Prusament ASA @XL", + "sub_path": "filament/Prusament ASA @XL.json" + }, { "name": "Prusa Generic PC", "sub_path": "filament/Prusa Generic PC.json" }, + { + "name": "Prusa Generic PC @MINIIS", + "sub_path": "filament/Prusa Generic PC @MINIIS.json" + }, + { + "name": "Prusa Generic PC @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PC @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PC @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PC @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PC @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PC @MINIIS 0.8.json" + }, + { + "name": "Prusament PC Blend @XL", + "sub_path": "filament/Prusament PC Blend @XL.json" + }, + { + "name": "Prusament PC-CF @XL", + "sub_path": "filament/Prusament PC-CF @XL.json" + }, { "name": "Prusa Generic PVA", "sub_path": "filament/Prusa Generic PVA.json" }, + { + "name": "Prusa Generic PVA @MINIIS", + "sub_path": "filament/Prusa Generic PVA @MINIIS.json" + }, + { + "name": "Prusa Generic PVA @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PVA @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PVA @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PVA @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PVA @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PVA @MINIIS 0.8.json" + }, + { + "name": "Prusament PVB @XL", + "sub_path": "filament/Prusament PVB @XL.json" + }, { "name": "Prusa Generic PA", "sub_path": "filament/Prusa Generic PA.json" }, + { + "name": "Prusa Generic PA @MINIIS", + "sub_path": "filament/Prusa Generic PA @MINIIS.json" + }, + { + "name": "Prusa Generic PA @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PA @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PA @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PA @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PA @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PA @MINIIS 0.8.json" + }, { "name": "Prusa Generic PA-CF", "sub_path": "filament/Prusa Generic PA-CF.json" + }, + { + "name": "Prusa Generic PA-CF @MINIIS", + "sub_path": "filament/Prusa Generic PA-CF @MINIIS.json" + }, + { + "name": "Prusa Generic PA-CF @MINIIS 0.25", + "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.25.json" + }, + { + "name": "Prusa Generic PA-CF @MINIIS 0.6", + "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.6.json" + }, + { + "name": "Prusa Generic PA-CF @MINIIS 0.8", + "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.8.json" + }, + { + "name": "Prusament PA-CF @XL", + "sub_path": "filament/Prusament PA-CF @XL.json" } ], "machine_list": [ @@ -297,6 +722,22 @@ "name": "Prusa MK4 0.4 nozzle", "sub_path": "machine/Prusa MK4 0.4 nozzle.json" }, + { + "name": "Prusa MINIIS 0.4 nozzle", + "sub_path": "machine/Prusa MINIIS 0.4 nozzle.json" + }, + { + "name": "Prusa MINIIS 0.25 nozzle", + "sub_path": "machine/Prusa MINIIS 0.25 nozzle.json" + }, + { + "name": "Prusa MINIIS 0.6 nozzle", + "sub_path": "machine/Prusa MINIIS 0.6 nozzle.json" + }, + { + "name": "Prusa MINIIS 0.8 nozzle", + "sub_path": "machine/Prusa MINIIS 0.8 nozzle.json" + }, { "name": "Prusa MK4 0.6 nozzle", "sub_path": "machine/Prusa MK4 0.6 nozzle.json" @@ -320,6 +761,30 @@ { "name": "Prusa MINI 0.8 nozzle", "sub_path": "machine/Prusa MINI 0.8 nozzle.json" + }, + { + "name": "Prusa XL 0.25 nozzle", + "sub_path": "machine/Prusa XL 0.25 nozzle.json" + }, + { + "name": "Prusa XL 0.3 nozzle", + "sub_path": "machine/Prusa XL 0.3 nozzle.json" + }, + { + "name": "Prusa XL 0.4 nozzle", + "sub_path": "machine/Prusa XL 0.4 nozzle.json" + }, + { + "name": "Prusa XL 0.5 nozzle", + "sub_path": "machine/Prusa XL 0.5 nozzle.json" + }, + { + "name": "Prusa XL 0.6 nozzle", + "sub_path": "machine/Prusa XL 0.6 nozzle.json" + }, + { + "name": "Prusa XL 0.8 nozzle", + "sub_path": "machine/Prusa XL 0.8 nozzle.json" } ] } diff --git a/resources/profiles/Prusa/MINIIS_cover.png b/resources/profiles/Prusa/MINIIS_cover.png new file mode 100644 index 0000000000..c321e4c545 Binary files /dev/null and b/resources/profiles/Prusa/MINIIS_cover.png differ diff --git a/resources/profiles/Prusa/Prusa XL.svg b/resources/profiles/Prusa/Prusa XL.svg new file mode 100644 index 0000000000..4ebe0c97ed --- /dev/null +++ b/resources/profiles/Prusa/Prusa XL.svg @@ -0,0 +1,17 @@ + + + + + diff --git a/resources/profiles/Prusa/Prusa XL_bed.stl b/resources/profiles/Prusa/Prusa XL_bed.stl new file mode 100644 index 0000000000..2ddf418317 Binary files /dev/null and b/resources/profiles/Prusa/Prusa XL_bed.stl differ diff --git a/resources/profiles/Prusa/Prusa XL_cover.png b/resources/profiles/Prusa/Prusa XL_cover.png new file mode 100644 index 0000000000..751e17261e Binary files /dev/null and b/resources/profiles/Prusa/Prusa XL_cover.png differ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json new file mode 100644 index 0000000000..f1f91d3f78 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB99_5", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json new file mode 100644 index 0000000000..3ef1005948 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB99_3", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json new file mode 100644 index 0000000000..8a3fefe1b4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB99_4", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json new file mode 100644 index 0000000000..08495b61ac --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json index 1e40459111..0de674b7fe 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json @@ -16,9 +16,9 @@ "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" ], "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json new file mode 100644 index 0000000000..544d644b27 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "GFB99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "nozzle_temperature_intial_layer": "255", + "nozzle_temperature": "255", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "20" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "overhang_fan_speed": [ + "25" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json new file mode 100644 index 0000000000..577d06c5ea --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB98_5", + "setting_id": "GFSA04", + "name": "Prusa Generic ASA @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json new file mode 100644 index 0000000000..8d9c6edd6a --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB98_3", + "setting_id": "GFSA04", + "name": "Prusa Generic ASA @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json new file mode 100644 index 0000000000..6eff61395e --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB98_4", + "setting_id": "GFSA04", + "name": "Prusa Generic ASA @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json new file mode 100644 index 0000000000..5fd2131170 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFB98_2", + "setting_id": "GFSA04", + "name": "Prusa Generic ASA @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp" : [ + "100" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "100" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json index e92dc0795d..de823b2306 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json @@ -16,9 +16,9 @@ "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" ], "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json new file mode 100644 index 0000000000..b6576cc0d1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFN99_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PA @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json new file mode 100644 index 0000000000..bdb64a4a8b --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFN99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PA @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json new file mode 100644 index 0000000000..2075ae25ed --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFN99_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PA @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "pressure_advance": [ + "0.07" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json new file mode 100644 index 0000000000..ff8c622dec --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFN99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PA @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json new file mode 100644 index 0000000000..68b628210d --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFN98_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PA-CF @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "1.02" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json new file mode 100644 index 0000000000..f19a1545d6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFN98_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PA-CF @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.22" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json new file mode 100644 index 0000000000..c4dbec0528 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFN98_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PA-CF @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.15" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json new file mode 100644 index 0000000000..a0a6b78914 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFN98_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PA-CF @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.36" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json index 47926d81df..8b389957c7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json @@ -30,6 +30,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA.json b/resources/profiles/Prusa/filament/Prusa Generic PA.json index f1507270b5..c92b0a981e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA.json @@ -27,6 +27,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json new file mode 100644 index 0000000000..e1ca18d3ae --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "filament_id": "GFC99_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PC @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json new file mode 100644 index 0000000000..2636f59ea3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "filament_id": "GFC99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PC @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json new file mode 100644 index 0000000000..e7bac7b4eb --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "filament_id": "GFC99_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PC @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json new file mode 100644 index 0000000000..3dadd23764 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "filament_id": "GFC99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PC @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC.json b/resources/profiles/Prusa/filament/Prusa Generic PC.json index e33173caed..b1821e1d4d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC.json @@ -12,18 +12,33 @@ "filament_flow_ratio": [ "0.94" ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], "compatible_printers": [ "Prusa MK3S 0.25 nozzle", "Prusa MK3S 0.4 nozzle", "Prusa MK3S 0.6 nozzle", "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle", "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json new file mode 100644 index 0000000000..8090554d09 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "filament_id": "GFG99_5", + "setting_id": "GFSA04", + "name": "Prusa Generic PETG @MINIIS 0.25", + "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": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "1.02" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json new file mode 100644 index 0000000000..8dad5b26e8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "filament_id": "GFG99_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PETG @MINIIS 0.6", + "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": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "17" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.22" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json new file mode 100644 index 0000000000..8829ea6f8f --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "filament_id": "GFG99_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PETG @MINIIS 0.8", + "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": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.15" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json new file mode 100644 index 0000000000..e9b57ebada --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "filament_id": "GFG99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PETG @MINIIS", + "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": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.4" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json index 383c86b63f..9caa793e9f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json @@ -43,9 +43,9 @@ "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.035{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.055{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" ], "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json new file mode 100644 index 0000000000..c2c535cd91 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PETG @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "nozzle_temperature_intial_layer": "230", + "nozzle_temperature": "240", + "hot_plate_temp_initial_layer": "80", + "hot_plate_temp": "80", + "full_fan_speed_layer": "5", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "9" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "3", + "filament_cooling_initial_speed": "5", + "filament_cooling_final_speed": "2.5", + "filament_retract_lift_below": "1.5", + "filament_wipe": "1", + "filament_retract_before_wipe": "20%", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json new file mode 100644 index 0000000000..9df6c863c0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "filament_id": "GFL99_5", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.85" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json new file mode 100644 index 0000000000..667c98c801 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "filament_id": "GFL99_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.17" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json new file mode 100644 index 0000000000..711b271b1c --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "filament_id": "GFL99_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.12" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json new file mode 100644 index 0000000000..2ac1386e71 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "filament_id": "GFL99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.27" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json new file mode 100644 index 0000000000..06acddef20 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "210", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json new file mode 100644 index 0000000000..929fe26671 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFL98_5", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA-CF @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.85" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json new file mode 100644 index 0000000000..cee0363300 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFL98_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA-CF @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.17" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json new file mode 100644 index 0000000000..1bfce10352 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFL98_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA-CF @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.12" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json new file mode 100644 index 0000000000..24559261d9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFL98_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA-CF @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.27" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json index a167d5683f..4461005ad3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json @@ -30,6 +30,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json new file mode 100644 index 0000000000..bbbc4a6aa9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFS99_4", + "setting_id": "GFSA04", + "name": "Prusa Generic PVA @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json new file mode 100644 index 0000000000..d9f64abbed --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFS99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PVA @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json new file mode 100644 index 0000000000..5e0055a5fb --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "filament_id": "GFS99_3", + "setting_id": "GFSA04", + "name": "Prusa Generic PVA @MINIIS 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json new file mode 100644 index 0000000000..164b717964 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "filament_id": "GFS99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PVA @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json new file mode 100644 index 0000000000..b9214b3031 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "filament_id": "GFU99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic TPU @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "1.35" + ], + "filament_flow_ratio": [ + "1.15" + ], + "hot_plate_temp" : [ + "50" + ], + "hot_plate_temp_initial_layer" : [ + "50" + ], + "filament_type": [ + "FLEX" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "210" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "6" + ], + "filament_wipe": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "50" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "pressure_advance": [ + "0" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL.json b/resources/profiles/Prusa/filament/Prusament ASA @XL.json new file mode 100644 index 0000000000..36e1f6c601 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSA04", + "name": "Prusament ASA @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "nozzle_temperature_intial_layer": "260", + "nozzle_temperature": "260", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1" + ], + "fan_max_speed": [ + "10" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "15" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json new file mode 100644 index 0000000000..28d4862819 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSA04", + "name": "Prusament PA-CF @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa11cf", + "nozzle_temperature_intial_layer": "275", + "nozzle_temperature": "285", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1.05" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json new file mode 100644 index 0000000000..a2bfaada98 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusament PC Blend @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "nozzle_temperature_intial_layer": "275", + "nozzle_temperature": "275", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1" + ], + "fan_max_speed": [ + "10" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json new file mode 100644 index 0000000000..79c707f999 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusament PC-CF @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pccf", + "nozzle_temperature_intial_layer": "285", + "nozzle_temperature": "285", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1.04" + ], + "fan_max_speed": [ + "10" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL.json b/resources/profiles/Prusa/filament/Prusament PETG @XL.json new file mode 100644 index 0000000000..c4505feda5 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusament PETG @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "nozzle_temperature_intial_layer": "240", + "nozzle_temperature": "250", + "hot_plate_temp_initial_layer": "80", + "hot_plate_temp": "80", + "full_fan_speed_layer": "5", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "9.5" + ], + "slow_down_layer_time": [ + "9" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "3", + "filament_cooling_initial_speed": "5", + "filament_cooling_final_speed": "2.5", + "filament_retract_lift_below": "1.5", + "filament_wipe": "1", + "filament_retract_before_wipe": "20%", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL.json b/resources/profiles/Prusa/filament/Prusament PLA @XL.json new file mode 100644 index 0000000000..949dfb23b3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusament PLA @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "215", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL.json b/resources/profiles/Prusa/filament/Prusament PVB @XL.json new file mode 100644 index 0000000000..c7e1e5fe0e --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSA04", + "name": "Prusament PVB @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pvb", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "215", + "hot_plate_temp_initial_layer": "75", + "hot_plate_temp": "75", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json new file mode 100644 index 0000000000..6fa3b54c17 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "filament_id": "GFL99_1", + "setting_id": "GFSA04", + "name": "Prusament rPLA @XL", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "nozzle_temperature_intial_layer": "205", + "nozzle_temperature": "205", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json new file mode 100644 index 0000000000..3be757e798 --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json @@ -0,0 +1,79 @@ +{ + "type": "filament", + "name": "fdm_filament_pa11cf", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_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": [ + "PA11-CF" + ], + "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": [ + "270" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_pccf.json b/resources/profiles/Prusa/filament/fdm_filament_pccf.json new file mode 100644 index 0000000000..483e28036a --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_pccf.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "fdm_filament_pccf", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "110" + ], + "hot_plate_temp" : [ + "110" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "110" + ], + "hot_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-CF" + ], + "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": [ + "140" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_pvb.json b/resources/profiles/Prusa/filament/fdm_filament_pvb.json new file mode 100644 index 0000000000..db5fa7823b --- /dev/null +++ b/resources/profiles/Prusa/filament/fdm_filament_pvb.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "fdm_filament_pvb", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "35" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "35" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_soluble": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_type": [ + "PVB" + ], + "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": [ + "50" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "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/Prusa/machine/Prusa MINI 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json index d047f158bc..6f0c2797ce 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json @@ -1,89 +1,100 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa MINI 0.25 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MINI", - "printer_variant": "0.25", - "default_filament_profile": [ - "Prusa Generic PLA" - ], - "default_print_profile": "0.20mm Standard @MINI 0.25", - "nozzle_diameter": [ - "0.25" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "180x0", - "180x180", - "0x180" - ], - "machine_max_acceleration_extruding": [ - "1250", - "2000" - ], - "machine_max_acceleration_x": [ - "2500", - "2000" - ], - "machine_max_acceleration_y": [ - "2500", - "2000" - ], - "machine_max_acceleration_z": [ - "400", - "200" - ], - "machine_max_jerk_e": [ - "10", - "2.5" - ], - "machine_max_jerk_x": [ - "8", - "9" - ], - "machine_max_jerk_y": [ - "8", - "9" - ], - "machine_max_speed_e": [ - "80", - "25" - ], - "machine_max_speed_x": [ - "180", - "200" - ], - "machine_max_speed_y": [ - "180", - "200" - ], - "retraction_length": [ - "3.2" - ], - "retraction_minimum_travel": [ - "1.5" - ], - "retraction_speed": [ - "70" - ], - "printable_height": "180", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", - - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0" -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MINI 0.25 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MINI", + "printer_variant": "0.25", + "default_filament_profile": [ + "Prusa Generic PLA" + ], + "default_print_profile": "0.20mm Standard @MINI 0.25", + "nozzle_diameter": [ + "0.25" + ], + "max_layer_height": [ + "0.15" + ], + "min_layer_height": [ + "0.05" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "machine_max_acceleration_extruding": [ + "1250", + "2000" + ], + "machine_max_acceleration_x": [ + "2500", + "2000" + ], + "machine_max_acceleration_y": [ + "2500", + "2000" + ], + "machine_max_acceleration_z": [ + "400", + "200" + ], + "machine_max_jerk_e": [ + "10", + "2.5" + ], + "machine_max_jerk_x": [ + "8", + "9" + ], + "machine_max_jerk_y": [ + "8", + "9" + ], + "machine_max_speed_e": [ + "80", + "25" + ], + "machine_max_speed_x": [ + "180", + "200" + ], + "machine_max_speed_y": [ + "180", + "200" + ], + "retraction_length": [ + "3.2" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "retraction_speed": [ + "70" + ], + "printable_height": "180", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file 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 27b9beac8a..edee392acb 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json @@ -1,89 +1,94 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa MINI 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MINI", - "printer_variant": "0.4", - "default_filament_profile": [ - "Prusa Generic PLA" - ], - "default_print_profile": "0.20mm Standard @MINI", - "nozzle_diameter": [ - "0.4" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "180x0", - "180x180", - "0x180" - ], - "machine_max_acceleration_extruding": [ - "1250", - "2000" - ], - "machine_max_acceleration_x": [ - "2500", - "2000" - ], - "machine_max_acceleration_y": [ - "2500", - "2000" - ], - "machine_max_acceleration_z": [ - "400", - "200" - ], - "machine_max_jerk_e": [ - "10", - "2.5" - ], - "machine_max_jerk_x": [ - "8", - "9" - ], - "machine_max_jerk_y": [ - "8", - "9" - ], - "machine_max_speed_e": [ - "80", - "25" - ], - "machine_max_speed_x": [ - "180", - "200" - ], - "machine_max_speed_y": [ - "180", - "200" - ], - "retraction_length": [ - "3.2" - ], - "retraction_minimum_travel": [ - "1.5" - ], - "retraction_speed": [ - "70" - ], - "printable_height": "180", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", - - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0" -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MINI 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MINI", + "printer_variant": "0.4", + "default_filament_profile": [ + "Prusa Generic PLA" + ], + "default_print_profile": "0.20mm Standard @MINI", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "machine_max_acceleration_extruding": [ + "1250", + "2000" + ], + "machine_max_acceleration_x": [ + "2500", + "2000" + ], + "machine_max_acceleration_y": [ + "2500", + "2000" + ], + "machine_max_acceleration_z": [ + "400", + "200" + ], + "machine_max_jerk_e": [ + "10", + "2.5" + ], + "machine_max_jerk_x": [ + "8", + "9" + ], + "machine_max_jerk_y": [ + "8", + "9" + ], + "machine_max_speed_e": [ + "80", + "25" + ], + "machine_max_speed_x": [ + "180", + "200" + ], + "machine_max_speed_y": [ + "180", + "200" + ], + "retraction_length": [ + "3.2" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "retraction_speed": [ + "70" + ], + "printable_height": "180", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json index b9f916b380..e0eecf124f 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json @@ -1,89 +1,94 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa MINI 0.6 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MINI", - "printer_variant": "0.6", - "default_filament_profile": [ - "Prusa Generic PLA" - ], - "default_print_profile": "0.20mm Standard @MINI 0.6", - "nozzle_diameter": [ - "0.6" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "180x0", - "180x180", - "0x180" - ], - "machine_max_acceleration_extruding": [ - "1250", - "2000" - ], - "machine_max_acceleration_x": [ - "2500", - "2000" - ], - "machine_max_acceleration_y": [ - "2500", - "2000" - ], - "machine_max_acceleration_z": [ - "400", - "200" - ], - "machine_max_jerk_e": [ - "10", - "2.5" - ], - "machine_max_jerk_x": [ - "8", - "9" - ], - "machine_max_jerk_y": [ - "8", - "9" - ], - "machine_max_speed_e": [ - "80", - "25" - ], - "machine_max_speed_x": [ - "180", - "200" - ], - "machine_max_speed_y": [ - "180", - "200" - ], - "retraction_length": [ - "3.2" - ], - "retraction_minimum_travel": [ - "1.5" - ], - "retraction_speed": [ - "70" - ], - "printable_height": "180", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", - - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0" -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MINI 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MINI", + "printer_variant": "0.6", + "default_filament_profile": [ + "Prusa Generic PLA" + ], + "default_print_profile": "0.20mm Standard @MINI 0.6", + "nozzle_diameter": [ + "0.6" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "machine_max_acceleration_extruding": [ + "1250", + "2000" + ], + "machine_max_acceleration_x": [ + "2500", + "2000" + ], + "machine_max_acceleration_y": [ + "2500", + "2000" + ], + "machine_max_acceleration_z": [ + "400", + "200" + ], + "machine_max_jerk_e": [ + "10", + "2.5" + ], + "machine_max_jerk_x": [ + "8", + "9" + ], + "machine_max_jerk_y": [ + "8", + "9" + ], + "machine_max_speed_e": [ + "80", + "25" + ], + "machine_max_speed_x": [ + "180", + "200" + ], + "machine_max_speed_y": [ + "180", + "200" + ], + "retraction_length": [ + "3.2" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "retraction_speed": [ + "70" + ], + "printable_height": "180", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json index 4a052e215e..aa0173249a 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json @@ -1,89 +1,94 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa MINI 0.8 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MINI", - "printer_variant": "0.8", - "default_filament_profile": [ - "Prusa Generic PLA" - ], - "default_print_profile": "0.20mm Standard @MINI 0.8", - "nozzle_diameter": [ - "0.8" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "180x0", - "180x180", - "0x180" - ], - "machine_max_acceleration_extruding": [ - "1250", - "2000" - ], - "machine_max_acceleration_x": [ - "2500", - "2000" - ], - "machine_max_acceleration_y": [ - "2500", - "2000" - ], - "machine_max_acceleration_z": [ - "400", - "200" - ], - "machine_max_jerk_e": [ - "10", - "2.5" - ], - "machine_max_jerk_x": [ - "8", - "9" - ], - "machine_max_jerk_y": [ - "8", - "9" - ], - "machine_max_speed_e": [ - "80", - "25" - ], - "machine_max_speed_x": [ - "180", - "200" - ], - "machine_max_speed_y": [ - "180", - "200" - ], - "retraction_length": [ - "3.2" - ], - "retraction_minimum_travel": [ - "1.5" - ], - "retraction_speed": [ - "70" - ], - "printable_height": "180", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", - - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0" -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MINI 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MINI", + "printer_variant": "0.8", + "default_filament_profile": [ + "Prusa Generic PLA" + ], + "default_print_profile": "0.20mm Standard @MINI 0.8", + "nozzle_diameter": [ + "0.8" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "machine_max_acceleration_extruding": [ + "1250", + "2000" + ], + "machine_max_acceleration_x": [ + "2500", + "2000" + ], + "machine_max_acceleration_y": [ + "2500", + "2000" + ], + "machine_max_acceleration_z": [ + "400", + "200" + ], + "machine_max_jerk_e": [ + "10", + "2.5" + ], + "machine_max_jerk_x": [ + "8", + "9" + ], + "machine_max_jerk_y": [ + "8", + "9" + ], + "machine_max_speed_e": [ + "80", + "25" + ], + "machine_max_speed_x": [ + "180", + "200" + ], + "machine_max_speed_y": [ + "180", + "200" + ], + "retraction_length": [ + "3.2" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "retraction_speed": [ + "70" + ], + "printable_height": "180", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_end_gcode": "G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json new file mode 100644 index 0000000000..c65af761f8 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "machine", + "setting_id": "GM004", + "name": "Prusa MINIIS 0.25 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Prusa MINIIS 0.4 nozzle", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.25", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS 0.25" + ], + "default_print_profile": "0.12mm Standard @MINIIS", + "nozzle_diameter": [ + "0.25" + ], + "max_layer_height": [ + "0.15" + ], + "min_layer_height": [ + "0.05" + ], + "retraction_length": [ + "2.5" + ], + "retraction_minimum_travel": [ + "1.0" + ], + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json new file mode 100644 index 0000000000..38ea5980f2 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MINIIS 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.4", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS" + ], + "default_print_profile": "0.20mm Standard @MINIIS", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1250", + "1250" + ], + "machine_max_acceleration_x": [ + "4000", + "4000" + ], + "machine_max_acceleration_y": [ + "4000", + "4000" + ], + "machine_max_acceleration_z": [ + "400", + "400" + ], + "machine_max_acceleration_travel": [ + "4000", + "4000" + ], + "machine_max_jerk_e": [ + "10", + "2.5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "machine_max_speed_e": [ + "80", + "25" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "retraction_length": [ + "2.5" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "retraction_speed": [ + "70" + ], + "deretraction_speed": [ + "40" + ], + "z_hop": [ + "0.2" + ], + "host_type": "prusalink", + "printable_height": "180", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X170 Y170 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+50, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM572 S0 ; reset PA\nM569 S1 X Y ; reset to stealthchop for X Y\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M862.3 P \"MINI\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))} Y{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))}\n{if ! spiral_mode}M74 W[extruded_weight_total]{endif}\n", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINIIS\nNO_TEMPLATES", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "brass", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json new file mode 100644 index 0000000000..fc25320c97 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "Prusa MINIIS 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Prusa MINIIS 0.4 nozzle", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.6", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS 0.6" + ], + "default_print_profile": "0.25mm Standard @MINIIS", + "nozzle_diameter": [ + "0.6" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.15" + ], + "retraction_length": [ + "2.8" + ], + "retraction_speed": [ + "70" + ], + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" +] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json new file mode 100644 index 0000000000..f6bba228ca --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Prusa MINIIS 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Prusa MINIIS 0.4 nozzle", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.8", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS 0.8" + ], + "default_print_profile": "0.40mm Standard @MINIIS", + "nozzle_diameter": [ + "0.8" + ], + "max_layer_height": [ + "0.55" + ], + "min_layer_height": [ + "0.2" + ] , + "retraction_length": [ + "2.8" + ], + "retraction_speed": [ + "45" + ], + "deretraction_speed": [ + "20" +], + "thumbnails": [ + "16x16/QOI", + "220x124/QOI", + "200x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS.json b/resources/profiles/Prusa/machine/Prusa MINIIS.json new file mode 100644 index 0000000000..5735ad018c --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Prusa MINI", + "model_id": "MINI", + "nozzle_diameter": "0.25;0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Prusa", + "bed_model": "miniis_bed.stl", + "bed_texture": "miniis.svg", + "hotend_model": "", + "default_materials": "Prusa Generic PLA-CF @MINIIS;Prusa Generic PC @MINIIS;Prusa Generic PVA @MINIIS;Prusa Generic PA @MINIIS;Prusa Generic PA-CF @MINIIS;Prusa Generic ABS @MINIIS;Prusa Generic PLA @MINIIS;Prusa Generic PLA @MINIIS 0.6;Prusa Generic PLA @MINIIS 0.8;Prusa Generic PETG @MINIIS;Prusa Generic PETG @MINIIS 0.6;Prusa Generic PETG @MINIIS 0.8;Prusa Generic TPU @MINIIS;Prusa Generic ASA @MINIIS;" +} diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json index dfeb0d299c..bdf5a19c8d 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json @@ -1,80 +1,82 @@ { - "type": "machine", - "setting_id": "GM004", - "name": "Prusa MK4 0.25 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MK4IS", - "default_filament_profile": [ - "Prusa Generic PLA @MK4" - ], - "default_print_profile": "0.08mm Standard @MK4", - "nozzle_diameter": [ - "0.25" - ], - "printer_variant": "0.25", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "250x0", - "250x210", - "0x210" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "4000", - "4000" - ], - "machine_max_acceleration_y": [ - "4000", - "4000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "4000", - "4000" - ], - "max_layer_height": [ - "0.16" - ], - "min_layer_height": [ - "0.04" - ], - "host_type": "prusalink", - "printable_height": "220", - "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\nM74 W[extruded_weight_total]", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16", - "313x173", - "440x240" - ] -} + "type": "machine", + "setting_id": "GM004", + "name": "Prusa MK4 0.25 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MK4IS", + "default_filament_profile": [ + "Prusa Generic PLA @MK4" + ], + "default_print_profile": "0.08mm Standard @MK4", + "nozzle_diameter": [ + "0.25" + ], + "printer_variant": "0.25", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "250x0", + "250x210", + "0x210" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "4000", + "4000" + ], + "machine_max_acceleration_y": [ + "4000", + "4000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "4000", + "4000" + ], + "max_layer_height": [ + "0.16" + ], + "min_layer_height": [ + "0.04" + ], + "host_type": "prusalink", + "printable_height": "220", + "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if !spiral_mode}M74 W[extruded_weight_total]{endif}", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json index 879f9d98b4..ad6d6eb860 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json @@ -1,73 +1,75 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa MK4 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MK4IS", - "default_filament_profile": [ - "Prusa Generic PLA @MK4" - ], - "default_print_profile": "0.20mm Standard @MK4", - "nozzle_diameter": [ - "0.4" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "250x0", - "250x210", - "0x210" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "4000", - "4000" - ], - "machine_max_acceleration_y": [ - "4000", - "4000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "4000", - "4000" - ], - "host_type": "prusalink", - "printable_height": "220", - "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\nM74 W[extruded_weight_total]", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16", - "313x173", - "440x240" - ] -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MK4 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MK4IS", + "default_filament_profile": [ + "Prusa Generic PLA @MK4" + ], + "default_print_profile": "0.20mm Standard @MK4", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "250x0", + "250x210", + "0x210" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "4000", + "4000" + ], + "machine_max_acceleration_y": [ + "4000", + "4000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "4000", + "4000" + ], + "host_type": "prusalink", + "printable_height": "220", + "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if !spiral_mode}M74 W[extruded_weight_total]{endif}", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json index 8846cb5665..c55b17db55 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json @@ -1,80 +1,82 @@ { - "type": "machine", - "setting_id": "GM002", - "name": "Prusa MK4 0.6 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MK4IS", - "default_filament_profile": [ - "Prusa Generic PLA @MK4" - ], - "default_print_profile": "0.32mm Standard @MK4", - "nozzle_diameter": [ - "0.6" - ], - "printer_variant": "0.6", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "250x0", - "250x210", - "0x210" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "4000", - "4000" - ], - "machine_max_acceleration_y": [ - "4000", - "4000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "4000", - "4000" - ], - "max_layer_height": [ - "0.4" - ], - "min_layer_height": [ - "0.12" - ], - "host_type": "prusalink", - "printable_height": "220", - "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\nM74 W[extruded_weight_total]", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16", - "313x173", - "440x240" - ] -} + "type": "machine", + "setting_id": "GM002", + "name": "Prusa MK4 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MK4IS", + "default_filament_profile": [ + "Prusa Generic PLA @MK4" + ], + "default_print_profile": "0.32mm Standard @MK4", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "250x0", + "250x210", + "0x210" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "4000", + "4000" + ], + "machine_max_acceleration_y": [ + "4000", + "4000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "4000", + "4000" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.12" + ], + "host_type": "prusalink", + "printable_height": "220", + "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if !spiral_mode}M74 W[extruded_weight_total]{endif}", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json index 06008c154a..42cfe3a807 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json @@ -1,80 +1,82 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Prusa MK4 0.8 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "MK4IS", - "default_filament_profile": [ - "Prusa Generic PLA @MK4" - ], - "default_print_profile": "0.40mm Standard @MK4", - "nozzle_diameter": [ - "0.8" - ], - "printer_variant": "0.8", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "250x0", - "250x210", - "0x210" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "4000", - "4000" - ], - "machine_max_acceleration_y": [ - "4000", - "4000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "4000", - "4000" - ], - "max_layer_height": [ - "0.6" - ], - "min_layer_height": [ - "0.2" - ], - "host_type": "prusalink", - "printable_height": "220", - "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\nM74 W[extruded_weight_total]", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", - "scan_first_layer": "0", - "machine_load_filament_time": "17", - "machine_unload_filament_time": "16", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16", - "313x173", - "440x240" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Prusa MK4 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MK4IS", + "default_filament_profile": [ + "Prusa Generic PLA @MK4" + ], + "default_print_profile": "0.40mm Standard @MK4", + "nozzle_diameter": [ + "0.8" + ], + "printer_variant": "0.8", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "250x0", + "250x210", + "0x210" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "4000", + "4000" + ], + "machine_max_acceleration_y": [ + "4000", + "4000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "4000", + "4000" + ], + "max_layer_height": [ + "0.6" + ], + "min_layer_height": [ + "0.2" + ], + "host_type": "prusalink", + "printable_height": "220", + "machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK4\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.0.0-RC+11963\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\n{if filament_type[initial_tool]==\"PC\" or filament_type[initial_tool]==\"PA\"}\nM104 S{first_layer_temperature[initial_tool]-25} ; set extruder temp for bed leveling\nM109 R{first_layer_temperature[initial_tool]-25} ; wait for temp\n{elsif filament_type[initial_tool]==\"FLEX\"}\nM104 S210 ; set extruder temp for bed leveling\nM109 R210 ; wait for temp\n{else}\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\n{endif}\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if !spiral_mode}M74 W[extruded_weight_total]{endif}", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPG", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json new file mode 100644 index 0000000000..a8a7cd75da --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.25 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.15mm Speed @Prusa XL 0.25", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.25", + "nozzle_diameter": [ + "0.25" + ], + "max_layer_height": "0.15", + "min_layer_height": "0.05", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "2500", + "2500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.8", + "retraction_speed": "35", + "detraction_speed": "25", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "80%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json new file mode 100644 index 0000000000..e83f1871a1 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.3 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.20mm Speed @Prusa XL 0.3", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.3", + "nozzle_diameter": [ + "0.3" + ], + "max_layer_height": "0.22", + "min_layer_height": "0.05", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.7", + "retraction_speed": "35", + "detraction_speed": "25", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "80%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json new file mode 100644 index 0000000000..cbb286aa5b --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.20mm Speed @Prusa XL 0.4", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "max_layer_height": "0.3", + "min_layer_height": "0.07", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "5000", + "5000" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.8", + "retraction_speed": "35", + "detraction_speed": "25", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "80%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json new file mode 100644 index 0000000000..937e88f016 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.25mm Speed @Prusa XL 0.5", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "max_layer_height": "0.32", + "min_layer_height": "0.07", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "5000", + "5000" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.7", + "retraction_speed": "35", + "detraction_speed": "25", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "80%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json new file mode 100644 index 0000000000..e0d47b46c6 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.32mm Speed @Prusa XL 0.6", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "max_layer_height": "0.4", + "min_layer_height": "0.15", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "5000", + "5000" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.7", + "retraction_speed": "35", + "detraction_speed": "25", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "0%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json new file mode 100644 index 0000000000..85c1631bcb --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.40mm Quality @Prusa XL 0.8", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "max_layer_height": "0.6", + "min_layer_height": "0.2", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "5000", + "5000" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.6", + "retraction_speed": "25", + "detraction_speed": "15", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "50%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa XL.json b/resources/profiles/Prusa/machine/Prusa XL.json new file mode 100644 index 0000000000..eb8487609c --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Prusa XL", + "model_id": "Prusa XL", + "nozzle_diameter": "0.25;0.3;0.4;0.5;0.6;0.8", + "machine_tech": "FFF", + "family": "Prusa", + "bed_model": "Prusa XL_bed.stl", + "bed_texture": "Prusa XL.svg", + "hotend_model": "", + "default_materials": "Prusa Generic PLA @XL;Prusament PLA @XL;Prusament rPLA @XL;Prusa Generic PETG @XL;Prusament PETG @XL;Prusa Generic ABS @XL;Prusament ASA @XL;Prusament PC Blend @XL;Prusament PC-CF @XL;Prusament PVB @XL;Prusament PA-CF @XL" +} diff --git a/resources/profiles/Prusa/miniis.svg b/resources/profiles/Prusa/miniis.svg new file mode 100644 index 0000000000..96c8fdec08 --- /dev/null +++ b/resources/profiles/Prusa/miniis.svg @@ -0,0 +1,32 @@ + + MINI_bed_texture + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Prusa/miniis_bed.stl b/resources/profiles/Prusa/miniis_bed.stl new file mode 100644 index 0000000000..2f4c45b7b1 Binary files /dev/null and b/resources/profiles/Prusa/miniis_bed.stl differ diff --git a/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json new file mode 100644 index 0000000000..033f40d22f --- /dev/null +++ b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.05mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.27", + "inner_wall_line_width": "0.25", + "outer_wall_line_width": "0.25", + "top_surface_line_width": "0.27", + "sparse_infill_line_width": "0.25", + "initial_layer_line_width": "0.32", + "internal_solid_infill_line_width": "0.25", + "support_line_width": "0.25", + "layer_height": "0.05", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "13", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "10", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 0.25.json new file mode 100644 index 0000000000..408eecaf69 --- /dev/null +++ b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.05mm Detail @Prusa XL 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.05", + "wall_loops": "3", + "top_shell_layers": "13", + "bottom_shell_layers": "10", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.1", + "support_top_z_distance": "0.1", + "support_bottom_z_distance": "0.1", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "65", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "100", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "25", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "1500", + "outer_wall_acceleration": "800", + "inner_wall_acceleration": "1200", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "2500", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.25", + "outer_wall_line_width": "0.25", + "sparse_infill_line_width": "0.25", + "internal_solid_infill_line_width": "0.25", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.25.json b/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.25.json index 427b2c0a6d..b0a406ecfd 100644 --- a/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.25.json +++ b/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.25.json @@ -18,7 +18,7 @@ "raft_contact_distance": "0.1", "small_perimeter_speed": "20", "sparse_infill_acceleration": "800", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "30", "support_base_pattern_spacing": "1.5", "support_bottom_z_distance": "0.1", diff --git a/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.4.json b/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.4.json index 0fb58b0636..e8690b483f 100644 --- a/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S 0.4.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "20", "sparse_infill_acceleration": "800", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "30", "support_base_pattern_spacing": "1.5", "support_bottom_z_distance": "0.1", diff --git a/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S.json b/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S.json index ab3a95683f..7b9accb967 100644 --- a/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S.json +++ b/resources/profiles/Prusa/process/0.05mm UltraDetail @MK3S.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "20", "sparse_infill_acceleration": "800", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "30", "support_base_pattern_spacing": "1.5", "support_bottom_z_distance": "0.1", diff --git a/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json new file mode 100644 index 0000000000..51e281895e --- /dev/null +++ b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.07mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.27", + "inner_wall_line_width": "0.25", + "outer_wall_line_width": "0.25", + "top_surface_line_width": "0.27", + "sparse_infill_line_width": "0.25", + "initial_layer_line_width": "0.32", + "internal_solid_infill_line_width": "0.25", + "support_line_width": "0.25", + "layer_height": "0.07", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "10", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "8", + "bridge_speed": "30", + "internal_solid_infill_speed": "140", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json new file mode 100644 index 0000000000..e0c16d6552 --- /dev/null +++ b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.07mm Detail @Prusa XL 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.07", + "wall_loops": "3", + "top_shell_layers": "11", + "bottom_shell_layers": "9", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.1", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "65", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "70", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "1500", + "outer_wall_acceleration": "800", + "inner_wall_acceleration": "1200", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "2500", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.25", + "outer_wall_line_width": "0.25", + "sparse_infill_line_width": "0.25", + "internal_solid_infill_line_width": "0.25", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.25.json b/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.25.json index c297b69888..9d13c2c6a6 100644 --- a/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.25.json +++ b/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.25.json @@ -22,7 +22,7 @@ "small_perimeter_speed": "20", "sparse_infill_acceleration": "800", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "1.5", "support_bottom_z_distance": "0.1", "support_interface_speed": "32", diff --git a/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.4.json b/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.4.json index 3a597ecc52..5c55cdbc28 100644 --- a/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S 0.4.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "20", "sparse_infill_acceleration": "800", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "40", "support_base_pattern_spacing": "1.5", "support_bottom_z_distance": "0.1", diff --git a/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S.json b/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S.json index 2b99480459..bff18605e6 100644 --- a/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S.json +++ b/resources/profiles/Prusa/process/0.07mm UltraDetail @MK3S.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "20", "sparse_infill_acceleration": "800", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "40", "support_base_pattern_spacing": "1.5", "support_bottom_z_distance": "0.1", diff --git a/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.25.json b/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.25.json index 74caace798..7da160b769 100644 --- a/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.25.json +++ b/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.25.json @@ -12,7 +12,7 @@ "layer_height": "0.1", "raft_contact_distance": "0.15", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.17", "support_interface_speed": "40", diff --git a/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.4.json b/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.4.json index 68dfc86153..b2ab2c1ee1 100644 --- a/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.10mm Detail @MK3S 0.4.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "80", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.17", diff --git a/resources/profiles/Prusa/process/0.10mm Detail @MK3S.json b/resources/profiles/Prusa/process/0.10mm Detail @MK3S.json index b6b4251e7c..4f08560938 100644 --- a/resources/profiles/Prusa/process/0.10mm Detail @MK3S.json +++ b/resources/profiles/Prusa/process/0.10mm Detail @MK3S.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "80", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.17", diff --git a/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json new file mode 100644 index 0000000000..69947f0fc9 --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm FastDetail @Prusa XL 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.1", + "wall_loops": "3", + "top_shell_layers": "8", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.17", + "support_bottom_z_distance": "0.17", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "outer_wall_speed": "140", + "sparse_infill_speed": "140", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "40", + "gap_infill_speed": "120", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2000", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.4", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json new file mode 100644 index 0000000000..220e8c33d6 --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "line_width": "0.45", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "top_surface_line_width": "0.4", + "sparse_infill_line_width": "0.45", + "initial_layer_line_width": "0.5", + "internal_solid_infill_line_width": "0.45", + "support_line_width": "0.36", + "bridge_speed": "35", + "layer_height": "0.10", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "7", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "5", + "sparse_infill_acceleration": "3000", + "internal_solid_infill_acceleration": "3000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json new file mode 100644 index 0000000000..ff2f1c73ed --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Structural @Prusa XL 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.1", + "wall_loops": "2", + "top_shell_layers": "8", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.5", + "outer_wall_line_width": "0.5", + "sparse_infill_line_width": "0.5", + "internal_solid_infill_line_width": "0.5", + "top_surface_line_width": "0.45", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json new file mode 100644 index 0000000000..983535f48d --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json @@ -0,0 +1,37 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.27", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "top_surface_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "initial_layer_line_width": "0.32", + "internal_solid_infill_line_width": "0.27", + "support_line_width": "0.25", + "layer_height": "0.12", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "9", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "6", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "gap_infill_speed": "50", + "bridge_speed": "25", + "support_speed": "70", + "overhang_1_4_speed": "60", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "2500", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json new file mode 100644 index 0000000000..59b981f9de --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Speed @Prusa XL 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.12", + "wall_loops": "3", + "top_shell_layers": "9", + "bottom_shell_layers": "6", + "top_shell_thickness": "0.6", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json new file mode 100644 index 0000000000..4192e7d5f7 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json @@ -0,0 +1,42 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.27", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "top_surface_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "initial_layer_line_width": "0.32", + "internal_solid_infill_line_width": "0.27", + "support_line_width": "0.25", + "layer_height": "0.12", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "9", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "6", + "outer_wall_speed": "70", + "inner_wall_speed": "40", + "small_perimeter_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "gap_infill_speed": "50", + "support_speed": "70", + "bridge_speed": "25", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1000", + "bridge_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "2500", + "travel_acceleration": "3000", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json new file mode 100644 index 0000000000..d6dd18a043 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Structural @Prusa XL 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.12", + "wall_loops": "3", + "top_shell_layers": "9", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.6", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1000", + "inner_wall_acceleration": "1500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "2500", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json new file mode 100644 index 0000000000..ccb7d0fb73 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Structural @Prusa XL 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.12", + "wall_loops": "3", + "top_shell_layers": "7", + "bottom_shell_layers": "6", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "200", + "top_surface_speed": "40", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "1500", + "outer_wall_acceleration": "1200", + "inner_wall_acceleration": "1500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Detail @MK3S 0.6.json b/resources/profiles/Prusa/process/0.15mm Detail @MK3S 0.6.json index c2432e967e..71b0d43479 100644 --- a/resources/profiles/Prusa/process/0.15mm Detail @MK3S 0.6.json +++ b/resources/profiles/Prusa/process/0.15mm Detail @MK3S 0.6.json @@ -16,7 +16,7 @@ "raft_contact_distance": "0.2", "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "40", diff --git a/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.25.json b/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.25.json index 701ca77317..d186497283 100644 --- a/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.25.json +++ b/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.25.json @@ -11,7 +11,7 @@ "layer_height": "0.15", "raft_contact_distance": "0.2", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "40", diff --git a/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.4.json b/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.4.json index 6d3bf8cb2e..24ac54cf0e 100644 --- a/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.15mm Quality @MK3S 0.4.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "80", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.15mm Quality @MK3S.json b/resources/profiles/Prusa/process/0.15mm Quality @MK3S.json index b62d8bd5b5..561c01dd89 100644 --- a/resources/profiles/Prusa/process/0.15mm Quality @MK3S.json +++ b/resources/profiles/Prusa/process/0.15mm Quality @MK3S.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "80", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json new file mode 100644 index 0000000000..da4e58bc3b --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.27", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "top_surface_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "initial_layer_line_width": "0.32", + "internal_solid_infill_line_width": "0.27", + "support_line_width": "0.25", + "layer_height": "0.15", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "top_surface_speed": "120", + "sparse_infill_speed": "100", + "bridge_speed": "25", + "internal_solid_infill_speed": "140", + "sparse_infill_acceleration": "2500", + "internal_solid_infill_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json new file mode 100644 index 0000000000..14bce20a50 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.45", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "top_surface_line_width": "0.42", + "sparse_infill_line_width": "0.45", + "initial_layer_line_width": "0.5", + "internal_solid_infill_line_width": "0.45", + "support_line_width": "0.36", + "layer_height": "0.15", + "initial_layer_print_height": "0.20", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "top_surface_speed": "120", + "sparse_infill_speed": "100", + "bridge_speed": "25", + "internal_solid_infill_speed": "140", + "sparse_infill_acceleration": "2500", + "internal_solid_infill_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MK3S 0.4.json b/resources/profiles/Prusa/process/0.15mm Speed @MK3S 0.4.json index 264927a613..c6cdc973f9 100644 --- a/resources/profiles/Prusa/process/0.15mm Speed @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.15mm Speed @MK3S 0.4.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MK3S.json b/resources/profiles/Prusa/process/0.15mm Speed @MK3S.json index e56d6dfb8d..74dfcffe9c 100644 --- a/resources/profiles/Prusa/process/0.15mm Speed @MK3S.json +++ b/resources/profiles/Prusa/process/0.15mm Speed @MK3S.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json new file mode 100644 index 0000000000..c267c2fa28 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @Prusa XL 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json new file mode 100644 index 0000000000..d73fd44ca1 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @Prusa XL 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.17", + "support_bottom_z_distance": "0.17", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "170", + "small_perimeter_speed": "170", + "outer_wall_speed": "170", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "45", + "gap_infill_speed": "120", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json new file mode 100644 index 0000000000..57c789f5bd --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Standard @MINIIS 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.27", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "top_surface_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "initial_layer_line_width": "0.32", + "internal_solid_infill_line_width": "0.27", + "support_line_width": "0.25", + "layer_height": "0.15", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "40", + "inner_wall_speed": "70", + "top_surface_speed": "40", + "sparse_infill_speed": "100", + "bridge_speed": "25", + "internal_solid_infill_speed": "140", + "sparse_infill_acceleration": "2500", + "internal_solid_infill_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json new file mode 100644 index 0000000000..52819af718 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json @@ -0,0 +1,43 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Standard @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "line_width": "0.68", + "inner_wall_line_width": "0.6", + "outer_wall_line_width": "0.6", + "top_surface_line_width": "0.5", + "sparse_infill_line_width": "0.6", + "initial_layer_line_width": "0.68", + "internal_solid_infill_line_width": "0.6", + "support_line_width": "0.5", + "layer_height": "0.15", + "initial_layer_print_height": "0.25", + "wall_loops": "2", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "45", + "inner_wall_speed": "70", + "top_surface_speed": "70", + "sparse_infill_speed": "140", + "bridge_speed": "40", + "gap_infill_speed": "80", + "internal_solid_infill_speed": "140", + "travel_speed": "300", + "default_acceleration": "2000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1500", + "travel_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "2500", + "inner_wall_acceleration": "2500", + "outer_wall_acceleration": "1500", + "bridge_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json new file mode 100644 index 0000000000..6d6abbfaf1 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json @@ -0,0 +1,39 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.45", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "top_surface_line_width": "0.42", + "sparse_infill_line_width": "0.45", + "initial_layer_line_width": "0.5", + "internal_solid_infill_line_width": "0.45", + "support_line_width": "0.36", + "layer_height": "0.15", + "initial_layer_print_height": "0.20", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "top_surface_speed": "45", + "sparse_infill_speed": "110", + "bridge_speed": "25", + "default_acceleration": "2000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "3000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "bridge_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json new file mode 100644 index 0000000000..8395f8f596 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1000", + "inner_wall_acceleration": "1500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json new file mode 100644 index 0000000000..e4194b3a53 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.17", + "support_bottom_z_distance": "0.17", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "110", + "internal_solid_infill_speed": "140", + "top_surface_speed": "75", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "45", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json new file mode 100644 index 0000000000..e32188d18f --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "180", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json new file mode 100644 index 0000000000..912270b547 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.22", + "support_bottom_z_distance": "0.22", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "105", + "internal_solid_infill_speed": "160", + "top_surface_speed": "70", + "support_speed": "110", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "75", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "top_surface_line_width": "0.5", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json new file mode 100644 index 0000000000..235fa3deeb --- /dev/null +++ b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Speed @Prusa XL 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.16", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "200", + "top_surface_speed": "50", + "support_speed": "100", + "support_interface_speed": "45%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json new file mode 100644 index 0000000000..b27221145e --- /dev/null +++ b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Structural @Prusa XL 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.16", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "200", + "top_surface_speed": "50", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json b/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json index 819ec49e33..6fb6eb99be 100644 --- a/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json +++ b/resources/profiles/Prusa/process/0.20mm Detail @MK3S 0.6.json @@ -15,7 +15,7 @@ "layer_height": "0.2", "raft_contact_distance": "0.2", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "40", diff --git a/resources/profiles/Prusa/process/0.20mm Quality @MK3S.json b/resources/profiles/Prusa/process/0.20mm Quality @MK3S.json index ce53887663..6f00239050 100644 --- a/resources/profiles/Prusa/process/0.20mm Quality @MK3S.json +++ b/resources/profiles/Prusa/process/0.20mm Quality @MK3S.json @@ -24,7 +24,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "80", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json new file mode 100644 index 0000000000..0d7930f441 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json @@ -0,0 +1,38 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ], + "layer_height": "0.20", + "initial_layer_print_height": "0.25", + "line_width": "0.68", + "inner_wall_line_width": "0.62", + "outer_wall_line_width": "0.62", + "top_surface_line_width": "0.5", + "sparse_infill_line_width": "0.62", + "initial_layer_line_width": "0.68", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.5", + "wall_loops": "2", + "outer_wall_speed": "115", + "inner_wall_speed": "115", + "small_perimeter_speed": "115", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "100", + "top_surface_speed": "70", + "gap_infill_speed": "80", + "bridge_speed": "40", + "travel_speed": "300", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1500", + "inner_wall_acceleration": "2500", + "outer_wall_acceleration": "2000", + "bridge_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "overhang_1_4_speed": "45" +} diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json new file mode 100644 index 0000000000..18de123e5c --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ], + "line_width": "0.45", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "top_surface_line_width": "0.42", + "sparse_infill_line_width": "0.45", + "initial_layer_line_width": "0.5", + "internal_solid_infill_line_width": "0.45", + "support_line_width": "0.36" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json index 260abfd6ab..73355f53c2 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json @@ -24,7 +24,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json b/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json index e832d59f37..f3fbbe4cb1 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @MK3S.json @@ -24,7 +24,7 @@ "small_perimeter_speed": "25", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "200", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json new file mode 100644 index 0000000000..c8f4d1c288 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "3", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "200", + "top_surface_speed": "50", + "support_speed": "100", + "support_interface_speed": "45%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json new file mode 100644 index 0000000000..214c125a8d --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "170", + "small_perimeter_speed": "170", + "outer_wall_speed": "170", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "support_speed": "110", + "support_interface_speed": "50%", + "bridge_speed": "50", + "gap_infill_speed": "120", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json new file mode 100644 index 0000000000..469f93b422 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "outer_wall_speed": "140", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "135", + "top_surface_speed": "70", + "support_speed": "120", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json new file mode 100644 index 0000000000..4a9ff4d9e8 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.22", + "support_bottom_z_distance": "0.22", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "110", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "75", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "50", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.62", + "outer_wall_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "top_surface_line_width": "0.5", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json new file mode 100644 index 0000000000..16d53885bc --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MINIIS 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "layer_height": "0.20", + "initial_layer_print_height": "0.25", + "line_width": "0.68", + "inner_wall_line_width": "0.62", + "outer_wall_line_width": "0.62", + "top_surface_line_width": "0.5", + "sparse_infill_line_width": "0.62", + "initial_layer_line_width": "0.68", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.5", + "wall_loops": "2", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "100", + "top_surface_speed": "70", + "gap_infill_speed": "80", + "bridge_speed": "40", + "travel_speed": "300", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1500", + "inner_wall_acceleration": "2500", + "outer_wall_acceleration": "2000", + "bridge_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "overhang_1_4_speed": "45", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json new file mode 100644 index 0000000000..7a1f1d1baf --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ], + "line_width": "0.45", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "top_surface_line_width": "0.42", + "sparse_infill_line_width": "0.45", + "initial_layer_line_width": "0.5", + "internal_solid_infill_line_width": "0.45", + "support_line_width": "0.36" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json new file mode 100644 index 0000000000..6b94db2fde --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Structural @Prusa XL 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "140", + "top_surface_speed": "75", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "50", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json new file mode 100644 index 0000000000..d12f979788 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Structural @Prusa XL 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "120", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json new file mode 100644 index 0000000000..bd9ad1e9dc --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Structural @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.22", + "support_bottom_z_distance": "0.22", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "110", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "75", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "top_surface_line_width": "0.5", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json new file mode 100644 index 0000000000..a0dcf72759 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json @@ -0,0 +1,36 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "top_surface_line_width": "0.55", + "sparse_infill_line_width": "0.68", + "initial_layer_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "support_line_width": "0.5", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "wall_loops": "2", + "top_shell_thickness": "0.9", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.6", + "outer_wall_speed": "70", + "inner_wall_speed": "80", + "small_perimeter_speed": "70", + "sparse_infill_speed": "90", + "internal_solid_infill_speed": "80", + "top_surface_speed": "60", + "gap_infill_speed": "60", + "support_speed": "80", + "overhang_1_4_speed": "45", + "travel_speed": "300", + "internal_solid_infill_acceleration": "3000", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json new file mode 100644 index 0000000000..6bdd86ca3f --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @Prusa XL 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "outer_wall_speed": "140", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "120", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json new file mode 100644 index 0000000000..22654cab4e --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "80", + "outer_wall_speed": "80", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "90", + "top_surface_speed": "60", + "support_speed": "80", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "50", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json new file mode 100644 index 0000000000..0f3dcf81b6 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json @@ -0,0 +1,35 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "top_surface_line_width": "0.55", + "sparse_infill_line_width": "0.68", + "initial_layer_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "support_line_width": "0.5", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "wall_loops": "2", + "top_shell_thickness": "0.9", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.6", + "bottom_shell_layers": "3", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "sparse_infill_speed": "90", + "internal_solid_infill_speed": "80", + "top_surface_speed": "60", + "gap_infill_speed": "60", + "support_speed": "80", + "travel_speed": "300", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json new file mode 100644 index 0000000000..2e068b2d37 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Structural @Prusa XL 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "140", + "top_surface_speed": "75", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "50", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json new file mode 100644 index 0000000000..8d52826fa8 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Structural @Prusa XL 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json new file mode 100644 index 0000000000..9091395c5d --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Structural @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "95", + "top_surface_speed": "70", + "support_speed": "80", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json new file mode 100644 index 0000000000..447720117b --- /dev/null +++ b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.9", + "inner_wall_line_width": "0.9", + "outer_wall_line_width": "0.9", + "top_surface_line_width": "0.7", + "sparse_infill_line_width": "0.9", + "initial_layer_line_width": "1", + "internal_solid_infill_line_width": "0.9", + "support_line_width": "0.65", + "layer_height": "0.3", + "initial_layer_print_height": "0.4", + "top_shell_thickness": "0.7", + "top_shell_layers": "3", + "wall_loops": "2", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "2", + "travel_speed": "300", + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.30mm Detail @MK3S 0.8.json b/resources/profiles/Prusa/process/0.30mm Detail @MK3S 0.8.json index f558fda575..9009107337 100644 --- a/resources/profiles/Prusa/process/0.30mm Detail @MK3S 0.8.json +++ b/resources/profiles/Prusa/process/0.30mm Detail @MK3S 0.8.json @@ -12,7 +12,7 @@ "layer_height": "0.3", "raft_contact_distance": "0.2", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "36", diff --git a/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json new file mode 100644 index 0000000000..6307ceb9c2 --- /dev/null +++ b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Detail @Prusa XL 0.8", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.3", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "1.2", + "bottom_shell_thickness": "0.8", + "thick_bridges": "1", + "seam_position": "nearest", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.2", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.35", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "50", + "top_surface_speed": "35", + "support_speed": "65", + "support_interface_speed": "85%", + "bridge_speed": "22", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.9", + "initial_layer_line_width": "1", + "inner_wall_line_width": "0.9", + "outer_wall_line_width": "0.9", + "sparse_infill_line_width": "0.9", + "internal_solid_infill_line_width": "0.9", + "top_surface_line_width": "0.7", + "support_line_width": "0.65", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.30mm Draft @MK3S 0.4.json b/resources/profiles/Prusa/process/0.30mm Draft @MK3S 0.4.json index 0fa349f1d8..a7a5178a9b 100644 --- a/resources/profiles/Prusa/process/0.30mm Draft @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.30mm Draft @MK3S 0.4.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "30", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.5", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "85", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.30mm Draft @MK3S.json b/resources/profiles/Prusa/process/0.30mm Draft @MK3S.json index 50fff5aee5..a7e75600e3 100644 --- a/resources/profiles/Prusa/process/0.30mm Draft @MK3S.json +++ b/resources/profiles/Prusa/process/0.30mm Draft @MK3S.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "30", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.5", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "85", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.30mm Quality @MK3S 0.6.json b/resources/profiles/Prusa/process/0.30mm Quality @MK3S 0.6.json index 06cf70b799..7c9e8db80e 100644 --- a/resources/profiles/Prusa/process/0.30mm Quality @MK3S 0.6.json +++ b/resources/profiles/Prusa/process/0.30mm Quality @MK3S 0.6.json @@ -15,7 +15,7 @@ "raft_contact_distance": "0.2", "small_perimeter_speed": "30", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "36", diff --git a/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json new file mode 100644 index 0000000000..d7ba66b9ed --- /dev/null +++ b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Speed @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.32", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "70", + "outer_wall_speed": "70", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "70", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "50", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json new file mode 100644 index 0000000000..38e6891060 --- /dev/null +++ b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Structural @Prusa XL 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.32", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "70", + "internal_solid_infill_speed": "70", + "top_surface_speed": "70", + "support_speed": "80", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.35mm Speed @MK3S 0.6.json b/resources/profiles/Prusa/process/0.35mm Speed @MK3S 0.6.json index c0a957c59c..6c10dff365 100644 --- a/resources/profiles/Prusa/process/0.35mm Speed @MK3S 0.6.json +++ b/resources/profiles/Prusa/process/0.35mm Speed @MK3S 0.6.json @@ -23,7 +23,7 @@ "small_perimeter_speed": "30", "sparse_infill_acceleration": "1000", "sparse_infill_line_width": "0.5", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "85", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", diff --git a/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json new file mode 100644 index 0000000000..6aaff5322a --- /dev/null +++ b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json @@ -0,0 +1,36 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.35mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "top_surface_line_width": "0.55", + "sparse_infill_line_width": "0.68", + "initial_layer_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "support_line_width": "0.5", + "initial_layer_print_height": "0.25", + "layer_height": "0.35", + "wall_loops": "2", + "top_shell_thickness": "0.9", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.6", + "bottom_shell_layers": "3", + "outer_wall_speed": "45", + "inner_wall_speed": "60", + "bridge_speed": "30", + "support_speed": "60", + "small_perimeter_speed": "45", + "sparse_infill_speed": "70", + "internal_solid_infill_speed": "60", + "top_surface_speed": "55", + "gap_infill_speed": "45", + "travel_speed": "300", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.40mm Draft @MK3S 0.6.json b/resources/profiles/Prusa/process/0.40mm Draft @MK3S 0.6.json index bcf8503188..937c1f3a0e 100644 --- a/resources/profiles/Prusa/process/0.40mm Draft @MK3S 0.6.json +++ b/resources/profiles/Prusa/process/0.40mm Draft @MK3S 0.6.json @@ -14,7 +14,7 @@ "outer_wall_speed": "35", "raft_contact_distance": "0.2", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "36", diff --git a/resources/profiles/Prusa/process/0.40mm Quality @MK3S 0.8.json b/resources/profiles/Prusa/process/0.40mm Quality @MK3S 0.8.json index d5ac1ff768..ec5407618f 100644 --- a/resources/profiles/Prusa/process/0.40mm Quality @MK3S 0.8.json +++ b/resources/profiles/Prusa/process/0.40mm Quality @MK3S 0.8.json @@ -12,7 +12,7 @@ "outer_wall_line_width": "0.6", "raft_contact_distance": "0.2", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "36", diff --git a/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json new file mode 100644 index 0000000000..9788a261da --- /dev/null +++ b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Quality @Prusa XL 0.8", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.4", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "1.2", + "bottom_shell_thickness": "0.8", + "thick_bridges": "1", + "seam_position": "nearest", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.2", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.35", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "50", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "90", + "internal_solid_infill_speed": "45", + "top_surface_speed": "35", + "support_speed": "50", + "support_interface_speed": "85%", + "bridge_speed": "22", + "gap_infill_speed": "35", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.9", + "initial_layer_line_width": "1", + "inner_wall_line_width": "0.9", + "outer_wall_line_width": "0.9", + "sparse_infill_line_width": "0.9", + "internal_solid_infill_line_width": "0.9", + "top_surface_line_width": "0.75", + "support_line_width": "0.65", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json new file mode 100644 index 0000000000..ab085de8be --- /dev/null +++ b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json @@ -0,0 +1,46 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "line_width": "0.9", + "inner_wall_line_width": "0.9", + "outer_wall_line_width": "0.9", + "top_surface_line_width": "0.75", + "sparse_infill_line_width": "0.9", + "initial_layer_line_width": "1", + "internal_solid_infill_line_width": "0.9", + "support_line_width": "0.65", + "layer_height": "0.4", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "top_shell_thickness": "1.2", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.8", + "bottom_shell_layers": "3", + "initial_layer_speed": "30", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "bridge_speed": "22", + "support_speed": "40", + "small_perimeter_speed": "40", + "sparse_infill_speed": "50", + "internal_solid_infill_speed": "40", + "top_surface_speed": "35", + "gap_infill_speed": "35", + "travel_speed": "300", + "default_acceleration": "2000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "3000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "bridge_acceleration": "1000", + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.55mm Draft @MK3S 0.8.json b/resources/profiles/Prusa/process/0.55mm Draft @MK3S 0.8.json index 943bbbedd0..f1e02ac626 100644 --- a/resources/profiles/Prusa/process/0.55mm Draft @MK3S 0.8.json +++ b/resources/profiles/Prusa/process/0.55mm Draft @MK3S 0.8.json @@ -11,7 +11,7 @@ "inner_wall_acceleration": "800", "raft_contact_distance": "0.2", "sparse_infill_acceleration": "1000", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "support_base_pattern_spacing": "2", "support_bottom_z_distance": "0.2", "support_interface_speed": "36", diff --git a/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json new file mode 100644 index 0000000000..5abb705a88 --- /dev/null +++ b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.55mm Draft @Prusa XL 0.8", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl", + "inital_layer_height": "0.2", + "layer_height": "0.55", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "1.2", + "bottom_shell_thickness": "0.8", + "thick_bridges": "1", + "seam_position": "nearest", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.2", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.35", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "40", + "small_perimeter_speed": "35", + "outer_wall_speed": "35", + "sparse_infill_speed": "55", + "internal_solid_infill_speed": "35", + "top_surface_speed": "30", + "support_speed": "35", + "support_interface_speed": "85%", + "bridge_speed": "22", + "gap_infill_speed": "30", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.9", + "initial_layer_line_width": "1", + "inner_wall_line_width": "1", + "outer_wall_line_width": "1", + "sparse_infill_line_width": "0.9", + "internal_solid_infill_line_width": "0.9", + "top_surface_line_width": "0.75", + "support_line_width": "0.65", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/fdm_process_common.json b/resources/profiles/Prusa/process/fdm_process_common.json index 8aa6ebf563..70f8582d43 100644 --- a/resources/profiles/Prusa/process/fdm_process_common.json +++ b/resources/profiles/Prusa/process/fdm_process_common.json @@ -27,7 +27,7 @@ "wall_infill_order": "inner wall/outer wall/infill", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_print_height": "0.2", "infill_combination": "0", "infill_wall_overlap": "25%", @@ -39,6 +39,7 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", @@ -56,7 +57,8 @@ "raft_layers": "0", "seam_position": "aligned", "skirt_distance": "2", - "skirt_height": "1", + "skirt_height": "3", + "min_skirt_length": "4", "skirt_loops": "0", "minimum_sparse_infill_area": "15", "spiral_mode": "0", @@ -74,7 +76,7 @@ "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", "support_interface_speed": "80", - "support_base_pattern": "rectilinear", + "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", "support_speed": "150", "support_threshold_angle": "30", @@ -83,7 +85,7 @@ "tree_support_wall_count": "0", "tree_support_with_infill": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", @@ -102,6 +104,5 @@ "internal_solid_infill_speed": "150", "top_surface_speed": "50", "gap_infill_speed": "30", - "travel_speed": "200", - "prime_tower_width": "60" -} + "travel_speed": "200" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_common_miniis.json b/resources/profiles/Prusa/process/process_common_miniis.json new file mode 100644 index 0000000000..0bc991159b --- /dev/null +++ b/resources/profiles/Prusa/process/process_common_miniis.json @@ -0,0 +1,55 @@ +{ + "type": "process", + "name": "process_common_miniis", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "80", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "115", + "internal_solid_infill_speed": "140", + "top_surface_speed": "80", + "gap_infill_speed": "60", + "travel_speed": "400", + "bridge_speed": "35", + "internal_bridge_speed": "50", + "small_perimeter_speed": "45", + "travel_jerk": "8", + "outer_wall_jerk": "7", + "inner_wall_jerk": "8", + "default_jerk": "8", + "infill_jerk": "8", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "default_acceleration": "2000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "3000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "bridge_acceleration": "1500", + "exclude_object": "1", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", + "sparse_infill_pattern": "crosshatch", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "elefant_foot_compensation": "0.2", + "slowdown_for_curled_perimeters": "1", + "infill_anchor_max": "12", + "sparse_infill_anchor": "2,5", + "infill_wall_overlap": "10%", + "enable_arc_fitting": "1", + "support_speed": "100", + "support_style": "snug", + "precise_outer_wall": "1", + "overhang_reverse": "1" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_common_mk3.json b/resources/profiles/Prusa/process/process_common_mk3.json index 1a9667aa49..7a4b8c5d7e 100644 --- a/resources/profiles/Prusa/process/process_common_mk3.json +++ b/resources/profiles/Prusa/process/process_common_mk3.json @@ -70,15 +70,15 @@ "staggered_inner_seams": "0", "standby_temperature_delta": "-5", "support_angle": "0", - "support_base_pattern": "rectilinear", + "support_base_pattern": "default", "support_interface_bottom_layers": "0", "support_interface_loop_pattern": "0", - "support_interface_pattern": "rectilinear", + "support_interface_pattern": "auto", "support_interface_spacing": "0.2", "support_interface_top_layers": "2", "support_on_build_plate_only": "0", "support_style": "grid", - "support_threshold_angle": "50", + "support_threshold_angle": "30", "support_type": "normal(auto)", "top_shell_thickness": "0.7", "top_surface_acceleration": "0", diff --git a/resources/profiles/Prusa/process/process_common_xl.json b/resources/profiles/Prusa/process/process_common_xl.json new file mode 100644 index 0000000000..f3f2a7e791 --- /dev/null +++ b/resources/profiles/Prusa/process/process_common_xl.json @@ -0,0 +1,96 @@ +{ + "type": "process", + "name": "process_common_xl", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "infill_combination": "1", + "infill_anchor": "2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "detect_overhang_wall": "1", + "wall_generator": "arachne", + "gap_fill_target": "everywhere", + "bottom_shell_thickness": "0.5", + "infill_anchor_max": "12", + "sparse_infill_pattern": "crosshatch", + "sparse_infill_density": "15%", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_thickness": "0.3", + "skirt_height": "3", + "brim_type": "outer_only", + "brim_width": "0", + "support_threshold_angle": "45", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3", + "raft_contact_distance": "0.2", + "support_type": "tree(auto)", + "support_style": "organic", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_bottom_layers": "0", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_branch_angle_organic": "40", + "tree_support_angle_slow": "30", + "tree_support_branch_diameter_organic": "2", + "tree_support_bramch_diameter_angle": "3", + "tree_support_branch_diameter_double_wall": "3", + "tree_support_tip_diameter": "0.6", + "tree_support_top_rate": "30%", + "tree_support_branch_distance_organic": "1", + "initial_layer_speed": "25", + "initial_layer_infill_speed": "25", + "outer_wall_speed": "70", + "inner_wall_speed": "90", + "small_perimeter_speed": "40", + "sparse_infill_speed": "200", + "top_surface_speed": "40", + "internal_solid_infill_speed": "140", + "support_speed": "60", + "support_interface_speed": "70%", + "bridge_speed": "25", + "gap_infill_speed": "45", + "ironing_speed": "15", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "enable_overhang_speed": "1", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "15", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "25", + "travel_speed": "400", + "default_acceleration": "1250", + "outer_wall_acceleration": "1000", + "inner_wall_acceleration": "1200", + "top_surface_acceleration": "800", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "600", + "travel_acceleration": "0", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "outer_wall_line_width": "0.45", + "inner_wall_line_width": "0.45", + "top_surface_line_width": "0.42", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "support_line_width": "0.37", + "infill_wall_overlap": "10%", + "slice_closing_radius": "0.049", + "resolution": "0.0125", + "enable_arc_fitting": "1", + "elefant_foot_compensation": "0.2", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wall_distribution_count": "1", + "min_bead_width": "85%", + "min_feature_size": "25%", + "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{print_time}.gcode", + "gcode_label_objects": "1" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_detail_miniis.json b/resources/profiles/Prusa/process/process_detail_miniis.json new file mode 100644 index 0000000000..a505444987 --- /dev/null +++ b/resources/profiles/Prusa/process/process_detail_miniis.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "process_detail_miniis", + "from": "system", + "instantiation": "false", + "inherits": "process_common_miniis", + "travel_speed": "300", + "initial_layer_speed": "20", + "outer_wall_speed": "40", + "inner_wall_speed": "60", + "bridge_speed": "25", + "support_speed": "60", + "small_perimeter_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "100", + "top_surface_speed": "60", + "gap_infill_speed": "40", + "default_acceleration": "1500", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "inner_wall_acceleration": "1200", + "outer_wall_acceleration": "1000", + "bridge_acceleration": "1000", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "2000", + "travel_acceleration": "3000" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_speed_miniis.json b/resources/profiles/Prusa/process/process_speed_miniis.json new file mode 100644 index 0000000000..9822e2ac1f --- /dev/null +++ b/resources/profiles/Prusa/process/process_speed_miniis.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "name": "process_speed_miniis", + "from": "system", + "instantiation": "false", + "inherits": "process_common_miniis", + "outer_wall_speed": "140", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "sparse_infill_speed": "140", + "internal_solid_infill_speed": "140", + "top_surface_speed": "80", + "gap_infill_speed": "80", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "inner_wall_acceleration": "2500", + "outer_wall_acceleration": "2000", + "bridge_acceleration": "1500", + "internal_solid_infill_acceleration": "4000", + "overhang_1_4_speed": "60" +} \ No newline at end of file diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index ce70cfea8c..49349ee0dd 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS.json b/resources/profiles/Qidi/filament/Qidi Generic ABS.json index e70894296d..1928c7fda1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS.json @@ -6,6 +6,9 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_abs", + "activate_chamber_temp_control": [ + "0" + ], "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Qidi Generic ASA.json index b1b2924be8..53544c6931 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA.json @@ -6,7 +6,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_asa", - "filament_max_volumetric_speed": [ + "filament_max_volumetric_speed": [ "16" ], "filament_flow_ratio": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json index 1642aa4450..5f279fe8b7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -19,7 +19,7 @@ "0.036" ], "filament_max_volumetric_speed": [ - "2" + "14" ], "nozzle_temperature": [ "210" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json index c7b01f6d28..104cc9ee46 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json @@ -31,7 +31,7 @@ "250" ], "pressure_advance": [ - "0.082" + "0.04" ], "slow_down_layer_time": [ "4" diff --git a/resources/profiles/Qidi/filament/fdm_filament_abs.json b/resources/profiles/Qidi/filament/fdm_filament_abs.json index 58706b546b..d710938ecd 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_abs.json +++ b/resources/profiles/Qidi/filament/fdm_filament_abs.json @@ -4,6 +4,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "activate_chamber_temp_control": [ + "1" + ], "cool_plate_temp" : [ "90" ], diff --git a/resources/profiles/Qidi/filament/fdm_filament_asa.json b/resources/profiles/Qidi/filament/fdm_filament_asa.json index 6733f27f2e..9b3c88e032 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_asa.json +++ b/resources/profiles/Qidi/filament/fdm_filament_asa.json @@ -4,6 +4,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "activate_chamber_temp_control": [ + "1" + ], "cool_plate_temp" : [ "90" ], diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json index 077cf7160f..c67da91f1b 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json @@ -68,4 +68,4 @@ "default_filament_profile": [ "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" ] -} \ No newline at end of file +} 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 0a04225405..92284f4157 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 @@ -100,7 +100,7 @@ "default_filament_profile": [ "Qidi Generic PLA" ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_start_gcode": "G28\nG92 E0\nG0 X300 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-19\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 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json index ce361e8f2c..5ef98e7853 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 @@ -100,7 +100,7 @@ "default_filament_profile": [ "Qidi Generic PLA" ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_start_gcode": "G28\nG92 E0\nG0 X270 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-16\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/fdm_qidi_x3_common.json b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json index 4c49d380bb..2ffce21a63 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json @@ -19,8 +19,9 @@ "0.4" ], "thumbnails": [ - "380x380", - "210x210" + "380x380/COLPIC", + "210x210/COLPIC", + "380x380/PNG" ], "machine_start_gcode": "PRINT_START\nG28\nM141 S0\nG0 Z50 F600\nM190 S[hot_plate_temp_initial_layer]\nG28 Z\nG29; mesh bed leveling ,comment this code to close it\nG0 X0 Y0 Z50 F6000\nM191 S{overall_chamber_temperature}\nM109 S[nozzle_temperature_initial_layer]\nM106 P3 S255\nM83\nG4 P3000\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0)} Z5 F6000\nG0 Z[initial_layer_print_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 85} E{83 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 3} E{82 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 12} E{-10 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 E{10 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\n", "machine_end_gcode": "M141 S0\nM104 S0\nM140 S0\nG1 E-3 F1800\nG0 Z{min(max_print_height, max_layer_z + 3)} F600\nG0 X0 Y0 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json index 61346c894b..e9d30df753 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", "infill_combination": "0", @@ -64,12 +64,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "20", + "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "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 e94ba2bf36..9da8a3302d 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 27cc928993..4cefc3da3e 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 950638c6e8..5300d1bff0 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json index db7467a566..ef007adb47 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json @@ -23,7 +23,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -61,12 +61,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "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_pattern": "monotonicline", "top_surface_line_width": "0.4", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", 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 c3723494a1..7ac7e89df7 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 73d3761633..2fb5c2b0e2 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 5883e726e0..f86dfba7b8 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 978fb331bd..1a9bbd4eca 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 274a05a25a..a87644b615 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 39d83b5b7d..e014b43cef 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json index abeef5e362..aef70fc864 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json @@ -21,7 +21,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -59,11 +59,11 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "35", + "support_threshold_angle": "30", "support_object_xy_distance": "50%", "tree_support_branch_angle": "40", "tree_support_wall_count": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.45", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json index e2aff726a8..3e4f1b9c98 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.25", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "35", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 21ed5164fd..140de557c3 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 6cdb09eb56..349894c702 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", "support_speed": "30", - "support_threshold_angle": "35", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 3ab5523afe..e56d9a3f3e 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.25", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "35", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 3c9b3735cf..d1728a5bd7 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 52668072a4..895ce51ed0 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.25", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "35", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 f3d46079f7..2f239871fa 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.25", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "35", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json index 0e8fe22031..1673b7fa58 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json @@ -21,7 +21,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "infill_combination": "0", "sparse_infill_line_width": "0.45", @@ -59,12 +59,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "40", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json index 2607ba42df..3cc2e7aaba 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "40", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 7a6af747a9..30b0aed1c1 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 @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 063964384a..5b2387eac3 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 @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 6b5c01270e..9f338290f7 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 @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "40", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 0f3c7fbf6b..420f13969f 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 @@ -29,7 +29,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "500", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 19fec3bcff..9846a2ff5a 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 @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "40", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", 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 a9c78c9216..443e711358 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 @@ -25,7 +25,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.3", "infill_combination": "0", @@ -65,12 +65,12 @@ "support_interface_spacing": "0.5", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2.5", - "support_threshold_angle": "40", + "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_pattern": "monotonicline", "top_surface_line_width": "0.45", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Qidi/process/fdm_process_QIDI_0.24_nozzle_0.8.json b/resources/profiles/Qidi/process/fdm_process_QIDI_0.24_nozzle_0.8.json index bb88ef21c1..b650d2a639 100644 --- a/resources/profiles/Qidi/process/fdm_process_QIDI_0.24_nozzle_0.8.json +++ b/resources/profiles/Qidi/process/fdm_process_QIDI_0.24_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/Qidi/process/fdm_process_QIDI_0.32_nozzle_0.8.json b/resources/profiles/Qidi/process/fdm_process_QIDI_0.32_nozzle_0.8.json index c34e9f9421..6a017a5573 100644 --- a/resources/profiles/Qidi/process/fdm_process_QIDI_0.32_nozzle_0.8.json +++ b/resources/profiles/Qidi/process/fdm_process_QIDI_0.32_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/Qidi/process/fdm_process_QIDI_0.40_nozzle_0.8.json b/resources/profiles/Qidi/process/fdm_process_QIDI_0.40_nozzle_0.8.json index c7cc1dfa35..603ad93eff 100644 --- a/resources/profiles/Qidi/process/fdm_process_QIDI_0.40_nozzle_0.8.json +++ b/resources/profiles/Qidi/process/fdm_process_QIDI_0.40_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/Qidi/process/fdm_process_QIDI_0.48_nozzle_0.8.json b/resources/profiles/Qidi/process/fdm_process_QIDI_0.48_nozzle_0.8.json index 2bf013928a..3d596138b7 100644 --- a/resources/profiles/Qidi/process/fdm_process_QIDI_0.48_nozzle_0.8.json +++ b/resources/profiles/Qidi/process/fdm_process_QIDI_0.48_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/Qidi/process/fdm_process_QIDI_0.56_nozzle_0.8.json b/resources/profiles/Qidi/process/fdm_process_QIDI_0.56_nozzle_0.8.json index 02013be08c..d8f039f189 100644 --- a/resources/profiles/Qidi/process/fdm_process_QIDI_0.56_nozzle_0.8.json +++ b/resources/profiles/Qidi/process/fdm_process_QIDI_0.56_nozzle_0.8.json @@ -18,7 +18,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "120", diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 8da0fd26b7..244d5f6613 100644 --- a/resources/profiles/Qidi/process/fdm_process_common.json +++ b/resources/profiles/Qidi/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -58,7 +58,7 @@ "support_base_pattern": "default", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.42", diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_common.json index e1fa78fd3d..58e3843fd7 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -82,7 +82,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", 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 405054dcf5..37f0eced81 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json @@ -30,7 +30,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", diff --git a/resources/profiles/Raise3D.json b/resources/profiles/Raise3D.json index 7a57d09d3c..cb600c0168 100644 --- a/resources/profiles/Raise3D.json +++ b/resources/profiles/Raise3D.json @@ -1,7 +1,7 @@ { "name": "Raise3D", "url": "", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Raise3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json index 0818f0dd88..538eac440c 100644 --- a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json +++ b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.1", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json index 6150d744c3..9349189d44 100644 --- a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json +++ b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.1", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json index 93873d18a4..fddf85339f 100644 --- a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json +++ b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json index 9e06abcac5..03be9ff407 100644 --- a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json +++ b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json index 8fa0f3696e..d5aa1252ea 100644 --- a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json +++ b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.25", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json index 1c5076efc5..73091b97dd 100644 --- a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json +++ b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -79,12 +79,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.25", "support_speed": "60", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D/process/fdm_process_common.json b/resources/profiles/Raise3D/process/fdm_process_common.json index 4057092f54..fa7afc486f 100644 --- a/resources/profiles/Raise3D/process/fdm_process_common.json +++ b/resources/profiles/Raise3D/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.4", "initial_layer_print_height": "0.2", "initial_layer_speed": "15", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index 7253b6bfbd..3e8178d8c0 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ @@ -27,6 +27,30 @@ { "name": "RatRig V-Cast", "sub_path": "machine/RatRig V-Cast.json" + }, + { + "name": "RatRig V-Core 4 300", + "sub_path": "machine/RatRig V-Core 4 300.json" + }, + { + "name": "RatRig V-Core 4 400", + "sub_path": "machine/RatRig V-Core 4 400.json" + }, + { + "name": "RatRig V-Core 4 500", + "sub_path": "machine/RatRig V-Core 4 500.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500.json" } ], "process_list": [ @@ -61,6 +85,78 @@ { "name": "0.28mm Extra Draft @RatRig", "sub_path": "process/0.28mm Extra Draft @RatRig.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 0.6", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 0.6.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 0.4", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.4.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 0.5", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.5.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 0.6", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 0.6.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.4", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.4.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.5", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.5.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.6", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 0.6.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 0.4", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 0.4.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 0.5", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 0.5.json" + }, + { + "name": "0.30mm Big @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.30mm Big @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.4", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.4.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.5", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.5.json" + }, + { + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json" + }, + { + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6", + "sub_path": "process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.4", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.4.json" + }, + { + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.5", + "sub_path": "process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.5.json" } ], "filament_list": [ @@ -177,6 +273,78 @@ { "name": "RatRig V-Cast 0.6 nozzle", "sub_path": "machine/RatRig V-Cast 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 300 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 300 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 300 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 300 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 300 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 300 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 400 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 400 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 500 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 500 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 500 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 500 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 500 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 500 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 300 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 400 0.6 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.4 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.5 nozzle.json" + }, + { + "name": "RatRig V-Core 4 HYBRID 500 0.6 nozzle", + "sub_path": "machine/RatRig V-Core 4 HYBRID 500 0.6 nozzle.json" } ] } diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 300_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 300_cover.png new file mode 100644 index 0000000000..8490bf74a0 Binary files /dev/null and b/resources/profiles/Ratrig/RatRig V-Core 4 300_cover.png differ diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 400_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 400_cover.png new file mode 100644 index 0000000000..8490bf74a0 Binary files /dev/null and b/resources/profiles/Ratrig/RatRig V-Core 4 400_cover.png differ diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 500_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 500_cover.png new file mode 100644 index 0000000000..8490bf74a0 Binary files /dev/null and b/resources/profiles/Ratrig/RatRig V-Core 4 500_cover.png differ diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 300_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 300_cover.png new file mode 100644 index 0000000000..8490bf74a0 Binary files /dev/null and b/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 300_cover.png differ diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 400_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 400_cover.png new file mode 100644 index 0000000000..8490bf74a0 Binary files /dev/null and b/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 400_cover.png differ diff --git a/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 500_cover.png b/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 500_cover.png new file mode 100644 index 0000000000..8490bf74a0 Binary files /dev/null and b/resources/profiles/Ratrig/RatRig V-Core 4 HYBRID 500_cover.png differ diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json b/resources/profiles/Ratrig/filament/RatRig Generic ABS.json index fe4f9c504a..5be01be8c9 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic ABS.json @@ -52,6 +52,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json b/resources/profiles/Ratrig/filament/RatRig Generic ASA.json index 07a1b81880..eeff92f76f 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic ASA.json @@ -46,6 +46,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json b/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json index 69d8b492cd..dec08573fc 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json @@ -46,6 +46,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA.json b/resources/profiles/Ratrig/filament/RatRig Generic PA.json index c1a3fa2e59..e408857516 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PA.json @@ -43,6 +43,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PC.json b/resources/profiles/Ratrig/filament/RatRig Generic PC.json index 174e85b3d0..d73a99bf3f 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PC.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PC.json @@ -40,6 +40,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json b/resources/profiles/Ratrig/filament/RatRig Generic PETG.json index c9e2a45977..8c355a5966 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PETG.json @@ -64,6 +64,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json b/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json index 2ec922ac30..1d0a0b99ea 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json @@ -40,6 +40,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json b/resources/profiles/Ratrig/filament/RatRig Generic PLA.json index 7a90fc2dce..9f69c7f91d 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PLA.json @@ -37,6 +37,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json b/resources/profiles/Ratrig/filament/RatRig Generic PVA.json index 26217a73c8..35a7fc8579 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PVA.json @@ -34,6 +34,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json b/resources/profiles/Ratrig/filament/RatRig Generic TPU.json index 4097e688a0..784537f231 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic TPU.json @@ -31,6 +31,24 @@ "RatRig V-Core 3 500 0.4 nozzle", "RatRig V-Minion 0.4 nozzle", "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle" + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" ] } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.4 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.4 nozzle.json new file mode 100644 index 0000000000..ca065917b4 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 300 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 300", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.06"], + "max_layer_height": ["0.3"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "300", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.5 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.5 nozzle.json new file mode 100644 index 0000000000..8f78b122fe --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.5 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 300 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 300", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.07"], + "max_layer_height": ["0.32"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "300", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.6 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.6 nozzle.json new file mode 100644 index 0000000000..1383d316a2 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 300 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 300", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.1"], + "max_layer_height": ["0.4"], + "retract_lift_below": ["0.3"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "300", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json new file mode 100644 index 0000000000..fbe0699647 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "RatRig V-Core 4 300", + "model_id": "V-Core_4_300", + "nozzle_diameter": "0.4;0.5;0.6", + "machine_tech": "FFF", + "family": "RatRig_V-Core", + "bed_model": "ratrig-vcore-bed-300.stl", + "bed_texture": "ratrig_logo.svg", + "hotend_model": "", + "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.4 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.4 nozzle.json new file mode 100644 index 0000000000..4b065733f1 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 400 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 400", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.06"], + "max_layer_height": ["0.3"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "400", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.5 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.5 nozzle.json new file mode 100644 index 0000000000..c6c81a73eb --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.5 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 400 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 400", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.07"], + "max_layer_height": ["0.32"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "400", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.6 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.6 nozzle.json new file mode 100644 index 0000000000..2efa2e53cf --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400 0.6 nozzle.json @@ -0,0 +1,53 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 400 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 400", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.1"], + "max_layer_height": ["0.4"], + "retract_lift_below": ["0.3"], + "retraction_length": ["2"], + "retraction_speed": ["40"], + "deretraction_speed": ["0"], + "retraction_minimum_travel": ["2"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "400", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json new file mode 100644 index 0000000000..a3f9c85191 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "RatRig V-Core 4 400", + "model_id": "V-Core_4_400", + "nozzle_diameter": "0.4;0.5;0.6", + "machine_tech": "FFF", + "family": "RatRig_V-Core", + "bed_model": "ratrig-vcore-bed-400.stl", + "bed_texture": "ratrig_logo.svg", + "hotend_model": "", + "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.4 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.4 nozzle.json new file mode 100644 index 0000000000..e34c326e7f --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 500 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 500", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.06"], + "max_layer_height": ["0.3"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "500", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.5 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.5 nozzle.json new file mode 100644 index 0000000000..6bc08fb473 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.5 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 500 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 500", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.07"], + "max_layer_height": ["0.32"], + "retract_lift_below": ["0.25"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "500", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.6 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.6 nozzle.json new file mode 100644 index 0000000000..7c27538c58 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 500 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 500", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "machine_max_speed_x": ["400", "400"], + "machine_max_speed_y": ["400", "400"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["10000", "10000"], + "machine_max_acceleration_y": ["10000", "10000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["10000", "10000"], + "machine_max_acceleration_retracting": ["10000", "10000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.1"], + "max_layer_height": ["0.4"], + "retract_lift_below": ["0.3"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "500", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json new file mode 100644 index 0000000000..2803355533 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "RatRig V-Core 4 500", + "model_id": "V-Core_4_500", + "nozzle_diameter": "0.4;0.5;0.6", + "machine_tech": "FFF", + "family": "RatRig_V-Core", + "bed_model": "ratrig-vcore-bed-500.stl", + "bed_texture": "ratrig_logo.svg", + "hotend_model": "", + "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.4 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.4 nozzle.json new file mode 100644 index 0000000000..d72a3a5b2d --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 300", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.06"], + "max_layer_height": ["0.3"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "300", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.5 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.5 nozzle.json new file mode 100644 index 0000000000..bf8651e3ff --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.5 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 300", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.07"], + "max_layer_height": ["0.32"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "300", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.6 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.6 nozzle.json new file mode 100644 index 0000000000..e40e4beaf1 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 300", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.1"], + "max_layer_height": ["0.4"], + "retract_lift_below": ["0.3"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "300", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json new file mode 100644 index 0000000000..d1016f2662 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "RatRig V-Core 4 HYBRID 300", + "model_id": "V-Core_4_HYBRID_300", + "nozzle_diameter": "0.4;0.5;0.6", + "machine_tech": "FFF", + "family": "RatRig_V-Core", + "bed_model": "ratrig-vcore-bed-300.stl", + "bed_texture": "ratrig_logo.svg", + "hotend_model": "", + "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.4 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.4 nozzle.json new file mode 100644 index 0000000000..d6e8b028fd --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 400", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.06"], + "max_layer_height": ["0.3"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "400", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.5 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.5 nozzle.json new file mode 100644 index 0000000000..29d095b567 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.5 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 400", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.07"], + "max_layer_height": ["0.32"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "400", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.6 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.6 nozzle.json new file mode 100644 index 0000000000..95e1bbf29c --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 400", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.1"], + "max_layer_height": ["0.4"], + "retract_lift_below": ["0.3"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "400", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json new file mode 100644 index 0000000000..dce309372c --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "RatRig V-Core 4 HYBRID 400", + "model_id": "V-Core_4_HYBRID_400", + "nozzle_diameter": "0.4;0.5;0.6", + "machine_tech": "FFF", + "family": "RatRig_V-Core", + "bed_model": "ratrig-vcore-bed-400.stl", + "bed_texture": "ratrig_logo.svg", + "hotend_model": "", + "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.4 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.4 nozzle.json new file mode 100644 index 0000000000..d2ded5365f --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 500", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.06"], + "max_layer_height": ["0.3"], + "retract_lift_below": ["0.2"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "500", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.5 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.5 nozzle.json new file mode 100644 index 0000000000..83428f708b --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.5 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 500", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.07"], + "max_layer_height": ["0.32"], + "retract_lift_below": ["0.25"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "500", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.6 nozzle.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.6 nozzle.json new file mode 100644 index 0000000000..38797ef1e2 --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "RatRig V-Core 4 HYBRID 500 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_klipper_common", + "printer_model": "RatRig V-Core 4 HYBRID 500", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "machine_max_speed_x": ["500", "500"], + "machine_max_speed_y": ["500", "500"], + "machine_max_speed_z": ["50", "50"], + "machine_max_speed_e": ["120", "120"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["200", "200"], + "machine_max_acceleration_e": ["20000", "20000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["20000", "20000"], + "machine_max_jerk_x": ["5", "5"], + "machine_max_jerk_y": ["5", "5"], + "machine_max_jerk_z": ["0.4", "0.4"], + "machine_max_jerk_e": ["5", "5"], + "min_layer_height": ["0.1"], + "max_layer_height": ["0.4"], + "retract_lift_below": ["0.3"], + "retraction_length": ["0.8"], + "retraction_speed": ["120"], + "deretraction_speed": ["120"], + "wipe": ["0"], + "retract_before_wipe": ["0%"], + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nTOTAL_LAYER_COUNT={total_layer_count} X0={first_layer_print_min[0]} Y0={first_layer_print_min[1]} X1={first_layer_print_max[0]} Y1={first_layer_print_max[1]}", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_ON_LAYER_CHANGE LAYER={layer_num + 1}", + "before_layer_change_gcode": ";[layer_z]", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M601", + "printing_by_object_gcode": ";BETWEEN_OBJECTS\nG92 E0", + "printable_height": "500", + "thumbnails": [ + "64x64/PNG", + "400x300/PNG" + ] +} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json new file mode 100644 index 0000000000..0c27eeea8d --- /dev/null +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "RatRig V-Core 4 HYBRID 500", + "model_id": "V-Core_4_HYBRID_500", + "nozzle_diameter": "0.4;0.5;0.6", + "machine_tech": "FFF", + "family": "RatRig_V-Core", + "bed_model": "ratrig-vcore-bed-500.stl", + "bed_texture": "ratrig_logo.svg", + "hotend_model": "", + "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" +} diff --git a/resources/profiles/Ratrig/machine/fdm_klipper_common.json b/resources/profiles/Ratrig/machine/fdm_klipper_common.json index 71f5d18948..82b19d85c5 100644 --- a/resources/profiles/Ratrig/machine/fdm_klipper_common.json +++ b/resources/profiles/Ratrig/machine/fdm_klipper_common.json @@ -45,7 +45,7 @@ "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "M600", - "machine_pause_gcode": "M601", + "machine_pause_gcode": "PAUSE", "wipe": ["1"], "default_filament_profile": ["RatRig Generic ABS"], "default_print_profile": "0.20mm Standard @RatRig", diff --git a/resources/profiles/Ratrig/process/0.08mm Extra Fine @RatRig.json b/resources/profiles/Ratrig/process/0.08mm Extra Fine @RatRig.json index b0c4119cd1..6e0634b6ca 100644 --- a/resources/profiles/Ratrig/process/0.08mm Extra Fine @RatRig.json +++ b/resources/profiles/Ratrig/process/0.08mm Extra Fine @RatRig.json @@ -7,5 +7,14 @@ "inherits": "fdm_process_ratrig_common", "layer_height": "0.08", "bottom_shell_layers": "7", - "top_shell_layers": "9" + "top_shell_layers": "9", + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle" + ] } diff --git a/resources/profiles/Ratrig/process/0.12mm Fine @RatRig.json b/resources/profiles/Ratrig/process/0.12mm Fine @RatRig.json index df5043532b..3ccac5be9b 100644 --- a/resources/profiles/Ratrig/process/0.12mm Fine @RatRig.json +++ b/resources/profiles/Ratrig/process/0.12mm Fine @RatRig.json @@ -7,5 +7,14 @@ "inherits": "fdm_process_ratrig_common", "layer_height": "0.12", "bottom_shell_layers": "5", - "top_shell_layers": "6" + "top_shell_layers": "6", + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle" + ] } diff --git a/resources/profiles/Ratrig/process/0.15mm Optimal @RatRig.json b/resources/profiles/Ratrig/process/0.15mm Optimal @RatRig.json index d9404d259a..80e1c1274e 100644 --- a/resources/profiles/Ratrig/process/0.15mm Optimal @RatRig.json +++ b/resources/profiles/Ratrig/process/0.15mm Optimal @RatRig.json @@ -7,5 +7,14 @@ "inherits": "fdm_process_ratrig_common", "bottom_shell_layers": "4", "top_shell_layers": "5", - "layer_height": "0.15" + "layer_height": "0.15", + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle" + ] } diff --git a/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 0.4.json b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 0.4.json new file mode 100644 index 0000000000..b65a4b50cd --- /dev/null +++ b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 0.4.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.20mm Quality @RatRig V-Core 4 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.2", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "350", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "500", + "initial_layer_speed": "50", + "outer_wall_acceleration": "4000", + "inner_wall_acceleration": "8000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "2500", + "initial_layer_acceleration": "1500", + "travel_acceleration": "10000", + "default_acceleration": "10000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 0.5.json b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 0.5.json new file mode 100644 index 0000000000..1bc3d680c8 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 0.5.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.20mm Quality @RatRig V-Core 4 0.5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.2", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "350", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "500", + "initial_layer_speed": "50", + "outer_wall_acceleration": "4000", + "inner_wall_acceleration": "8000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "2500", + "initial_layer_acceleration": "1500", + "travel_acceleration": "10000", + "default_acceleration": "10000", + "line_width": "0.55", + "initial_layer_line_width": "0.7", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.52", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 500 0.5 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.4.json b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.4.json new file mode 100644 index 0000000000..4027e25c7f --- /dev/null +++ b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.4.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.2", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "300", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "80", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "15000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "15000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.5.json b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.5.json new file mode 100644 index 0000000000..be118426d1 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.20mm Quality @RatRig V-Core 4 HYBRID 0.5.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.20mm Quality @RatRig V-Core 4 HYBRID 0.5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.2", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "300", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "80", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "15000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "15000", + "line_width": "0.55", + "initial_layer_line_width": "0.7", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.52", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.20mm Standard @RatRig.json b/resources/profiles/Ratrig/process/0.20mm Standard @RatRig.json index eb73d2b3f6..4d27bb0b72 100644 --- a/resources/profiles/Ratrig/process/0.20mm Standard @RatRig.json +++ b/resources/profiles/Ratrig/process/0.20mm Standard @RatRig.json @@ -7,5 +7,14 @@ "instantiation": "true", "layer_height": "0.2", "bottom_shell_layers": "3", - "top_shell_layers": "4" + "top_shell_layers": "4", + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle" + ] } diff --git a/resources/profiles/Ratrig/process/0.24mm Draft @RatRig.json b/resources/profiles/Ratrig/process/0.24mm Draft @RatRig.json index 827a3a4800..253cbc11f5 100644 --- a/resources/profiles/Ratrig/process/0.24mm Draft @RatRig.json +++ b/resources/profiles/Ratrig/process/0.24mm Draft @RatRig.json @@ -8,5 +8,14 @@ "layer_height": "0.24", "top_surface_line_width": "0.45", "bottom_shell_layers": "3", - "top_shell_layers": "4" + "top_shell_layers": "4", + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle" + ] } diff --git a/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.4.json b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.4.json new file mode 100644 index 0000000000..3bf5a1faa2 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.4.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "350", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "500", + "initial_layer_speed": "50", + "outer_wall_acceleration": "4000", + "inner_wall_acceleration": "8000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "2500", + "initial_layer_acceleration": "1500", + "travel_acceleration": "10000", + "default_acceleration": "10000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.5.json b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.5.json new file mode 100644 index 0000000000..5f9277cd55 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.5.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "350", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "500", + "initial_layer_speed": "50", + "outer_wall_acceleration": "4000", + "inner_wall_acceleration": "8000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "2500", + "initial_layer_acceleration": "1500", + "travel_acceleration": "10000", + "default_acceleration": "10000", + "line_width": "0.55", + "initial_layer_line_width": "0.7", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.52", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 500 0.5 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.6.json b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.6.json new file mode 100644 index 0000000000..785ec5e762 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 0.6.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Quality Speed @RatRig V-Core 4 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.35", + "wall_count": "3", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "350", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "500", + "initial_layer_speed": "50", + "outer_wall_acceleration": "4000", + "inner_wall_acceleration": "8000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "2500", + "initial_layer_acceleration": "1500", + "travel_acceleration": "10000", + "default_acceleration": "10000", + "line_width": "0.65", + "initial_layer_line_width": "0.84", + "inner_wall_line_width": "0.65", + "outer_wall_line_width": "0.65", + "sparse_infill_line_width": "0.65", + "internal_solid_infill_line_width": "0.65", + "top_surface_line_width": "0.65", + "support_line_width": "0.65", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json new file mode 100644 index 0000000000..24a7497b61 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "300", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "80", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "15000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "15000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBIRD 500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json new file mode 100644 index 0000000000..dbf3f1e9e4 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "300", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "80", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "15000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "15000", + "line_width": "0.55", + "initial_layer_line_width": "0.7", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.52", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBIRD 500 0.5 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json new file mode 100644 index 0000000000..975e82da8a --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Quality Speed @RatRig V-Core 4 HYBRID 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "4", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "300", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "80", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "15000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "15000", + "line_width": "0.65", + "initial_layer_line_width": "0.84", + "inner_wall_line_width": "0.65", + "outer_wall_line_width": "0.65", + "sparse_infill_line_width": "0.65", + "internal_solid_infill_line_width": "0.65", + "top_surface_line_width": "0.65", + "support_line_width": "0.65", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBIRD 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.4.json b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.4.json new file mode 100644 index 0000000000..c14483511d --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.4.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Speed @RatRig V-Core 4 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "2", + "top_shell_layers": "3", + "bottom_shell_layers": "2", + "top_shell_thickness": "0", + "sparse_infill_density": "10%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "400", + "small_perimeter_speed": "350", + "outer_wall_speed": "400", + "sparse_infill_speed": "500", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "150", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "200", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "10000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.5.json b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.5.json new file mode 100644 index 0000000000..c720ad9ad1 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.5.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Speed @RatRig V-Core 4 0.5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "2", + "top_shell_layers": "3", + "bottom_shell_layers": "2", + "top_shell_thickness": "0", + "sparse_infill_density": "10%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "400", + "small_perimeter_speed": "350", + "outer_wall_speed": "400", + "sparse_infill_speed": "500", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "150", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "200", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "10000", + "line_width": "0.55", + "initial_layer_line_width": "0.7", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.52", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 500 0.5 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.6.json b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.6.json new file mode 100644 index 0000000000..1ff1df93c8 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 0.6.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Speed @RatRig V-Core 4 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "2", + "top_shell_layers": "3", + "bottom_shell_layers": "2", + "top_shell_thickness": "0", + "sparse_infill_density": "10%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "400", + "small_perimeter_speed": "350", + "outer_wall_speed": "400", + "sparse_infill_speed": "500", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "150", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "200", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "10000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.4.json b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.4.json new file mode 100644 index 0000000000..c277f10ff3 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.4.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "2", + "top_shell_layers": "3", + "bottom_shell_layers": "2", + "top_shell_thickness": "0", + "sparse_infill_density": "10%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "500", + "small_perimeter_speed": "500", + "outer_wall_speed": "500", + "sparse_infill_speed": "500", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "150", + "gap_infill_speed": "200", + "travel_speed": "800", + "initial_layer_speed": "200", + "outer_wall_acceleration": "15000", + "inner_wall_acceleration": "20000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "20000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "10000", + "default_acceleration": "20000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.5.json b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.5.json new file mode 100644 index 0000000000..d9351ba3b1 --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.5.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "2", + "top_shell_layers": "3", + "bottom_shell_layers": "2", + "top_shell_thickness": "0", + "sparse_infill_density": "10%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "500", + "small_perimeter_speed": "500", + "outer_wall_speed": "500", + "sparse_infill_speed": "500", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "150", + "gap_infill_speed": "200", + "travel_speed": "800", + "initial_layer_speed": "200", + "outer_wall_acceleration": "15000", + "inner_wall_acceleration": "20000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "20000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "10000", + "default_acceleration": "20000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.6.json b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.6.json new file mode 100644 index 0000000000..00d6c2113f --- /dev/null +++ b/resources/profiles/Ratrig/process/0.25mm Speed @RatRig V-Core 4 HYBRID 0.6.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.25mm Speed @RatRig V-Core 4 HYBRID 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.25", + "inital_layer_height": "0.3", + "wall_count": "2", + "top_shell_layers": "3", + "bottom_shell_layers": "2", + "top_shell_thickness": "0", + "sparse_infill_density": "10%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "500", + "small_perimeter_speed": "500", + "outer_wall_speed": "500", + "sparse_infill_speed": "500", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "150", + "gap_infill_speed": "200", + "travel_speed": "800", + "initial_layer_speed": "200", + "outer_wall_acceleration": "15000", + "inner_wall_acceleration": "20000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "20000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "10000", + "default_acceleration": "20000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.45", + "support_line_width": "0.45", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.28mm Extra Draft @RatRig.json b/resources/profiles/Ratrig/process/0.28mm Extra Draft @RatRig.json index 7bca592548..e0935d7fe5 100644 --- a/resources/profiles/Ratrig/process/0.28mm Extra Draft @RatRig.json +++ b/resources/profiles/Ratrig/process/0.28mm Extra Draft @RatRig.json @@ -8,5 +8,14 @@ "layer_height": "0.28", "top_surface_line_width": "0.45", "bottom_shell_layers": "3", - "top_shell_layers": "4" + "top_shell_layers": "4", + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle" + ] } diff --git a/resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 0.6.json b/resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 0.6.json new file mode 100644 index 0000000000..70df1a4edb --- /dev/null +++ b/resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 0.6.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.30mm Big @RatRig V-Core 4 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.3", + "inital_layer_height": "0.35", + "wall_count": "3", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "350", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "500", + "initial_layer_speed": "50", + "enable_overhang_speed": "1", + "overhang_1_4_speed": "20", + "overhang_2_4_speed": "45", + "overhang_3_4_speed": "80", + "overhang_4_4_speed": "100", + "outer_wall_acceleration": "4000", + "inner_wall_acceleration": "8000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "10000", + "bridge_acceleration": "2500", + "initial_layer_acceleration": "1500", + "travel_acceleration": "10000", + "default_acceleration": "10000", + "line_width": "0.65", + "initial_layer_line_width": "0.84", + "inner_wall_line_width": "0.65", + "outer_wall_line_width": "0.65", + "sparse_infill_line_width": "0.65", + "internal_solid_infill_line_width": "0.65", + "top_surface_line_width": "0.65", + "support_line_width": "0.65", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 HYBRID 0.6.json b/resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 HYBRID 0.6.json new file mode 100644 index 0000000000..0bbc5f062e --- /dev/null +++ b/resources/profiles/Ratrig/process/0.30mm Big @RatRig V-Core 4 HYBRID 0.6.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP006", + "name": "0.30mm Big @RatRig V-Core 4 HYBRID 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_ratrig_common", + "layer_height": "0.3", + "inital_layer_height": "0.35", + "wall_count": "3", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0", + "sparse_infill_density": "25%", + "infill_anchor": "600%", + "infill_anchor_max": "5", + "infill_combination": "1", + "skirt_loops": "2", + "skirt_distance": "10", + "support_threshold_angle": "65", + "support_bottom_z_distance": "0.2", + "support_on_build_plate_only": "1", + "support_object_xy_distance": "60%", + "inner_wall_speed": "300", + "small_perimeter_speed": "250", + "outer_wall_speed": "250", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "100%", + "top_surface_speed": "100%", + "support_speed": "50", + "support_interface_speed": "100%", + "bridge_speed": "50", + "gap_infill_speed": "200", + "travel_speed": "600", + "initial_layer_speed": "80", + "enable_overhang_speed": "1", + "overhang_1_4_speed": "20", + "overhang_2_4_speed": "45", + "overhang_3_4_speed": "80", + "overhang_4_4_speed": "100", + "outer_wall_acceleration": "8000", + "inner_wall_acceleration": "10000", + "top_surface_acceleration": "0", + "internal_solid_infill_acceleration": "0", + "sparse_infill_acceleration": "15000", + "bridge_acceleration": "5000", + "initial_layer_acceleration": "2500", + "travel_acceleration": "15000", + "default_acceleration": "15000", + "line_width": "0.65", + "initial_layer_line_width": "0.84", + "inner_wall_line_width": "0.65", + "outer_wall_line_width": "0.65", + "sparse_infill_line_width": "0.65", + "internal_solid_infill_line_width": "0.65", + "top_surface_line_width": "0.65", + "support_line_width": "0.65", + "infill_wall_overlap": "18%", + "bridge_flow": "0.85", + "resolution": "0.0125", + "elefant_foot_compensation": "0.1", + "compatible_printers": [ + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/process/fdm_process_common.json b/resources/profiles/Ratrig/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Ratrig/process/fdm_process_common.json +++ b/resources/profiles/Ratrig/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json index 10f49e4516..e5da6affa1 100644 --- a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json +++ b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json @@ -25,16 +25,15 @@ "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", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", + "inital_layer_height": "0.2", "infill_combination": "0", "sparse_infill_line_width": "0.4", "infill_wall_overlap": "25%", @@ -84,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/SecKit.json b/resources/profiles/SecKit.json index e7cba2af8a..ecacdd31fb 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ diff --git a/resources/profiles/SecKit/process/fdm_process_common.json b/resources/profiles/SecKit/process/fdm_process_common.json index 63ceeaa4a6..efcb23cea3 100644 --- a/resources/profiles/SecKit/process/fdm_process_common.json +++ b/resources/profiles/SecKit/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/SecKit/process/fdm_process_seckit_common.json b/resources/profiles/SecKit/process/fdm_process_seckit_common.json index 1ad7b2d9a7..f0f496349e 100644 --- a/resources/profiles/SecKit/process/fdm_process_seckit_common.json +++ b/resources/profiles/SecKit/process/fdm_process_seckit_common.json @@ -29,7 +29,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "gyroid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.45", "initial_layer_print_height": "0.2", @@ -82,7 +82,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 022452783d..e795fc8cb1 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ @@ -32,6 +32,22 @@ "name": "Snapmaker A350 QSKit", "sub_path": "machine/Snapmaker A350 QSKit.json" }, + { + "name": "Snapmaker A250 BKit", + "sub_path": "machine/Snapmaker A250 BKit.json" + }, + { + "name": "Snapmaker A350 BKit", + "sub_path": "machine/Snapmaker A350 BKit.json" + }, + { + "name": "Snapmaker A250 QS+B Kit", + "sub_path": "machine/Snapmaker A250 QS+B Kit.json" + }, + { + "name": "Snapmaker A350 QS+B Kit", + "sub_path": "machine/Snapmaker A350 QS+B Kit.json" + }, { "name": "Snapmaker A250 Dual QSKit", "sub_path": "machine/Snapmaker A250 Dual QSKit.json" @@ -39,6 +55,26 @@ { "name": "Snapmaker A350 Dual QSKit", "sub_path": "machine/Snapmaker A350 Dual QSKit.json" + }, + { + "name": "Snapmaker A250 Dual BKit", + "sub_path": "machine/Snapmaker A250 Dual BKit.json" + }, + { + "name": "Snapmaker A350 Dual BKit", + "sub_path": "machine/Snapmaker A350 Dual BKit.json" + }, + { + "name": "Snapmaker A250 Dual QS+B Kit", + "sub_path": "machine/Snapmaker A250 Dual QS+B Kit.json" + }, + { + "name": "Snapmaker A350 Dual QS+B Kit", + "sub_path": "machine/Snapmaker A350 Dual QS+B Kit.json" + }, + { + "name": "Snapmaker Artisan", + "sub_path": "machine/Snapmaker Artisan.json" } ], "process_list": [ @@ -50,6 +86,10 @@ "name": "fdm_process_idex", "sub_path": "process/fdm_process_idex.json" }, + { + "name": "fdm_process_a400", + "sub_path": "process/fdm_process_a400.json" + }, { "name": "0.06 Standard @Snapmaker (0.2 nozzle)", "sub_path": "process/0.06 Standard @Snapmaker (0.2 nozzle).json" @@ -58,6 +98,10 @@ "name": "0.06 Standard @Snapmaker J1 (0.2 nozzle)", "sub_path": "process/0.06 Standard @Snapmaker J1 (0.2 nozzle).json" }, + { + "name": "0.06 Standard @Snapmaker Artisan (0.2 nozzle)", + "sub_path": "process/0.06 Standard @Snapmaker Artisan (0.2 nozzle).json" + }, { "name": "0.08 Extra Fine @Snapmaker (0.4 nozzle)", "sub_path": "process/0.08 Extra Fine @Snapmaker (0.4 nozzle).json" @@ -66,6 +110,10 @@ "name": "0.08 Extra Fine @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.08 Extra Fine @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.10 Standard @Snapmaker (0.2 nozzle)", "sub_path": "process/0.10 Standard @Snapmaker (0.2 nozzle).json" @@ -74,6 +122,10 @@ "name": "0.10 Standard @Snapmaker J1 (0.2 nozzle)", "sub_path": "process/0.10 Standard @Snapmaker J1 (0.2 nozzle).json" }, + { + "name": "0.10 Standard @Snapmaker Artisan (0.2 nozzle)", + "sub_path": "process/0.10 Standard @Snapmaker Artisan (0.2 nozzle).json" + }, { "name": "0.12 Fine @Snapmaker (0.4 nozzle)", "sub_path": "process/0.12 Fine @Snapmaker (0.4 nozzle).json" @@ -82,6 +134,10 @@ "name": "0.12 Fine @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.12 Fine @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.12 Fine @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.12 Fine @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.14 Standard @Snapmaker (0.2 nozzle)", "sub_path": "process/0.14 Standard @Snapmaker (0.2 nozzle).json" @@ -90,6 +146,10 @@ "name": "0.14 Standard @Snapmaker J1 (0.2 nozzle)", "sub_path": "process/0.14 Standard @Snapmaker J1 (0.2 nozzle).json" }, + { + "name": "0.14 Standard @Snapmaker Artisan (0.2 nozzle)", + "sub_path": "process/0.14 Standard @Snapmaker Artisan (0.2 nozzle).json" + }, { "name": "0.16 Optimal @Snapmaker (0.4 nozzle)", "sub_path": "process/0.16 Optimal @Snapmaker (0.4 nozzle).json" @@ -98,6 +158,10 @@ "name": "0.16 Optimal @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.16 Optimal @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.16 Optimal @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.16 Optimal @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.18 Standard @Snapmaker (0.6 nozzle)", "sub_path": "process/0.18 Standard @Snapmaker (0.6 nozzle).json" @@ -106,6 +170,10 @@ "name": "0.18 Standard @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.18 Standard @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.18 Standard @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.18 Standard @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.20 Standard @Snapmaker (0.4 nozzle)", "sub_path": "process/0.20 Standard @Snapmaker (0.4 nozzle).json" @@ -114,6 +182,10 @@ "name": "0.20 Standard @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.20 Standard @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.20 Standard @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.20 Standard @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.20 Strength @Snapmaker (0.4 nozzle)", "sub_path": "process/0.20 Strength @Snapmaker (0.4 nozzle).json" @@ -122,6 +194,10 @@ "name": "0.20 Strength @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.20 Strength @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.20 Strength @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.20 Strength @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.24 Draft @Snapmaker (0.4 nozzle)", "sub_path": "process/0.24 Draft @Snapmaker (0.4 nozzle).json" @@ -130,10 +206,18 @@ "name": "0.24 Draft @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.24 Draft @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.24 Draft @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.24 Draft @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.25 Benchy @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.25 Benchy @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.25 Benchy @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.25 Benchy @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.24 Standard @Snapmaker (0.6 nozzle)", "sub_path": "process/0.24 Standard @Snapmaker (0.6 nozzle).json" @@ -142,6 +226,10 @@ "name": "0.24 Standard @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.24 Standard @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.24 Standard @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.24 Standard @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.24 Standard @Snapmaker (0.8 nozzle)", "sub_path": "process/0.24 Standard @Snapmaker (0.8 nozzle).json" @@ -150,6 +238,10 @@ "name": "0.24 Standard @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.24 Standard @Snapmaker J1 (0.8 nozzle).json" }, + { + "name": "0.24 Standard @Snapmaker Artisan (0.8 nozzle)", + "sub_path": "process/0.24 Standard @Snapmaker Artisan (0.8 nozzle).json" + }, { "name": "0.28 Extra Draft @Snapmaker (0.4 nozzle)", "sub_path": "process/0.28 Extra Draft @Snapmaker (0.4 nozzle).json" @@ -158,6 +250,10 @@ "name": "0.28 Extra Draft @Snapmaker J1 (0.4 nozzle)", "sub_path": "process/0.28 Extra Draft @Snapmaker J1 (0.4 nozzle).json" }, + { + "name": "0.28 Extra Draft @Snapmaker Artisan (0.4 nozzle)", + "sub_path": "process/0.28 Extra Draft @Snapmaker Artisan (0.4 nozzle).json" + }, { "name": "0.30 Standard @Snapmaker (0.6 nozzle)", "sub_path": "process/0.30 Standard @Snapmaker (0.6 nozzle).json" @@ -166,6 +262,10 @@ "name": "0.30 Standard @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.30 Standard @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.30 Standard @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.30 Standard @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.30 Strength @Snapmaker (0.6 nozzle)", "sub_path": "process/0.30 Strength @Snapmaker (0.6 nozzle).json" @@ -174,6 +274,10 @@ "name": "0.30 Strength @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.30 Strength @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.30 Strength @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.30 Strength @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.32 Standard @Snapmaker (0.8 nozzle)", "sub_path": "process/0.32 Standard @Snapmaker (0.8 nozzle).json" @@ -182,6 +286,10 @@ "name": "0.32 Standard @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.32 Standard @Snapmaker J1 (0.8 nozzle).json" }, + { + "name": "0.32 Standard @Snapmaker Artisan (0.8 nozzle)", + "sub_path": "process/0.32 Standard @Snapmaker Artisan (0.8 nozzle).json" + }, { "name": "0.34 Standard @Snapmaker (0.6 nozzle)", "sub_path": "process/0.34 Standard @Snapmaker (0.6 nozzle).json" @@ -190,6 +298,10 @@ "name": "0.34 Standard @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.34 Standard @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.34 Standard @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.34 Standard @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.36 Standard @Snapmaker (0.8 nozzle)", "sub_path": "process/0.36 Standard @Snapmaker (0.8 nozzle).json" @@ -198,6 +310,10 @@ "name": "0.36 Standard @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.36 Standard @Snapmaker J1 (0.8 nozzle).json" }, + { + "name": "0.36 Standard @Snapmaker Artisan (0.8 nozzle)", + "sub_path": "process/0.36 Standard @Snapmaker Artisan (0.8 nozzle).json" + }, { "name": "0.38 Standard @Snapmaker (0.6 nozzle)", "sub_path": "process/0.38 Standard @Snapmaker (0.6 nozzle).json" @@ -206,6 +322,10 @@ "name": "0.38 Standard @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.38 Standard @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.38 Standard @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.38 Standard @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.40 Standard @Snapmaker (0.8 nozzle)", "sub_path": "process/0.40 Standard @Snapmaker (0.8 nozzle).json" @@ -214,6 +334,10 @@ "name": "0.40 Standard @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.40 Standard @Snapmaker J1 (0.8 nozzle).json" }, + { + "name": "0.40 Standard @Snapmaker Artisan (0.8 nozzle)", + "sub_path": "process/0.40 Standard @Snapmaker Artisan (0.8 nozzle).json" + }, { "name": "0.42 Draft @Snapmaker (0.6 nozzle)", "sub_path": "process/0.42 Draft @Snapmaker (0.6 nozzle).json" @@ -222,6 +346,10 @@ "name": "0.42 Draft @Snapmaker J1 (0.6 nozzle)", "sub_path": "process/0.42 Draft @Snapmaker J1 (0.6 nozzle).json" }, + { + "name": "0.42 Draft @Snapmaker Artisan (0.6 nozzle)", + "sub_path": "process/0.42 Draft @Snapmaker Artisan (0.6 nozzle).json" + }, { "name": "0.48 Draft @Snapmaker (0.8 nozzle)", "sub_path": "process/0.48 Draft @Snapmaker (0.8 nozzle).json" @@ -229,6 +357,10 @@ { "name": "0.48 Draft @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json" + }, + { + "name": "0.48 Draft @Snapmaker Artisan (0.8 nozzle)", + "sub_path": "process/0.48 Draft @Snapmaker Artisan (0.8 nozzle).json" } ], "filament_list": [ @@ -324,10 +456,6 @@ "name": "Snapmaker PET", "sub_path": "filament/Snapmaker PET.json" }, - { - "name": "Snapmaker PET @Dual", - "sub_path": "filament/Snapmaker PET @Dual.json" - }, { "name": "Snapmaker PETG-CF @base", "sub_path": "filament/Snapmaker PETG-CF @base.json" @@ -436,6 +564,10 @@ "name": "Snapmaker J1 ABS @0.8 nozzle", "sub_path": "filament/Snapmaker J1 ABS @0.8 nozzle.json" }, + { + "name": "Snapmaker J1 ABS Benchy", + "sub_path": "filament/Snapmaker J1 ABS Benchy.json" + }, { "name": "Snapmaker J1 ASA @base", "sub_path": "filament/Snapmaker J1 ASA @base.json" @@ -607,6 +739,202 @@ { "name": "Snapmaker J1 TPE", "sub_path": "filament/Snapmaker J1 TPE.json" + }, + { + "name": "Snapmaker Dual ABS @base", + "sub_path": "filament/Snapmaker Dual ABS @base.json" + }, + { + "name": "Snapmaker Dual ABS", + "sub_path": "filament/Snapmaker Dual ABS.json" + }, + { + "name": "Snapmaker Dual ABS @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual ABS @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual ABS @0.8 nozzle", + "sub_path": "filament/Snapmaker Dual ABS @0.8 nozzle.json" + }, + { + "name": "Snapmaker Dual ABS Benchy", + "sub_path": "filament/Snapmaker Dual ABS Benchy.json" + }, + { + "name": "Snapmaker Dual ASA @base", + "sub_path": "filament/Snapmaker Dual ASA @base.json" + }, + { + "name": "Snapmaker Dual ASA", + "sub_path": "filament/Snapmaker Dual ASA.json" + }, + { + "name": "Snapmaker Dual ASA @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual ASA @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual PA-CF @base", + "sub_path": "filament/Snapmaker Dual PA-CF @base.json" + }, + { + "name": "Snapmaker Dual PA-CF", + "sub_path": "filament/Snapmaker Dual PA-CF.json" + }, + { + "name": "Snapmaker Dual PETG @base", + "sub_path": "filament/Snapmaker Dual PETG @base.json" + }, + { + "name": "Snapmaker Dual PETG", + "sub_path": "filament/Snapmaker Dual PETG.json" + }, + { + "name": "Snapmaker Dual PETG @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual PETG @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual PETG @0.8 nozzle", + "sub_path": "filament/Snapmaker Dual PETG @0.8 nozzle.json" + }, + { + "name": "Snapmaker Dual PET @base", + "sub_path": "filament/Snapmaker Dual PET @base.json" + }, + { + "name": "Snapmaker PET @Dual", + "sub_path": "filament/Snapmaker PET @Dual.json" + }, + { + "name": "Snapmaker Dual PET", + "sub_path": "filament/Snapmaker Dual PET.json" + }, + { + "name": "Snapmaker Dual PETG-CF @base", + "sub_path": "filament/Snapmaker Dual PETG-CF @base.json" + }, + { + "name": "Snapmaker Dual PETG-CF", + "sub_path": "filament/Snapmaker Dual PETG-CF.json" + }, + { + "name": "Snapmaker Dual PLA Eco @base", + "sub_path": "filament/Snapmaker Dual PLA Eco @base.json" + }, + { + "name": "Snapmaker Dual PLA Eco", + "sub_path": "filament/Snapmaker Dual PLA Eco.json" + }, + { + "name": "Snapmaker Dual PLA Eco @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual PLA Eco @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual PLA Eco @0.8 nozzle", + "sub_path": "filament/Snapmaker Dual PLA Eco @0.8 nozzle.json" + }, + { + "name": "Snapmaker Dual PLA @base", + "sub_path": "filament/Snapmaker Dual PLA @base.json" + }, + { + "name": "Snapmaker Dual PLA", + "sub_path": "filament/Snapmaker Dual PLA.json" + }, + { + "name": "Snapmaker Dual PLA Matte @base", + "sub_path": "filament/Snapmaker Dual PLA Matte @base.json" + }, + { + "name": "Snapmaker Dual PLA Matte", + "sub_path": "filament/Snapmaker Dual PLA Matte.json" + }, + { + "name": "Snapmaker Dual PLA Matte @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual PLA Matte @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual PLA Matte @0.8 nozzle", + "sub_path": "filament/Snapmaker Dual PLA Matte @0.8 nozzle.json" + }, + { + "name": "Snapmaker Dual PLA Metal @base", + "sub_path": "filament/Snapmaker Dual PLA Metal @base.json" + }, + { + "name": "Snapmaker Dual PLA Metal", + "sub_path": "filament/Snapmaker Dual PLA Metal.json" + }, + { + "name": "Snapmaker Dual PLA Metal @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual PLA Metal @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual PLA-CF @base", + "sub_path": "filament/Snapmaker Dual PLA-CF @base.json" + }, + { + "name": "Snapmaker Dual PLA-CF", + "sub_path": "filament/Snapmaker Dual PLA-CF.json" + }, + { + "name": "Snapmaker Dual PLA-CF @0.8 nozzle", + "sub_path": "filament/Snapmaker Dual PLA-CF @0.8 nozzle.json" + }, + { + "name": "Snapmaker Dual PLA Silk @base", + "sub_path": "filament/Snapmaker Dual PLA Silk @base.json" + }, + { + "name": "Snapmaker Dual PLA Silk", + "sub_path": "filament/Snapmaker Dual PLA Silk.json" + }, + { + "name": "Snapmaker Dual PLA Silk @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual PLA Silk @0.2 nozzle.json" + }, + { + "name": "PolyLite Dual PLA", + "sub_path": "filament/PolyLite Dual PLA.json" + }, + { + "name": "PolyLite Dual PLA @0.2 nozzle", + "sub_path": "filament/PolyLite Dual PLA @0.2 nozzle.json" + }, + { + "name": "PolyTerra Dual PLA", + "sub_path": "filament/PolyTerra Dual PLA.json" + }, + { + "name": "PolyTerra Dual PLA @0.2 nozzle", + "sub_path": "filament/PolyTerra Dual PLA @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual PVA @base", + "sub_path": "filament/Snapmaker Dual PVA @base.json" + }, + { + "name": "Snapmaker Dual PVA", + "sub_path": "filament/Snapmaker Dual PVA.json" + }, + { + "name": "Snapmaker Dual PVA @0.2 nozzle", + "sub_path": "filament/Snapmaker Dual PVA @0.2 nozzle.json" + }, + { + "name": "Snapmaker Dual TPU @base", + "sub_path": "filament/Snapmaker Dual TPU @base.json" + }, + { + "name": "Snapmaker Dual TPU", + "sub_path": "filament/Snapmaker Dual TPU.json" + }, + { + "name": "Snapmaker Dual TPU High-Flow", + "sub_path": "filament/Snapmaker Dual TPU High-Flow.json" + }, + { + "name": "Snapmaker Dual TPE", + "sub_path": "filament/Snapmaker Dual TPE.json" } ], "machine_list": [ @@ -650,6 +978,22 @@ "name": "fdm_a350_qs", "sub_path": "machine/fdm_a350_qs.json" }, + { + "name": "fdm_a250_bk", + "sub_path": "machine/fdm_a250_bk.json" + }, + { + "name": "fdm_a350_bk", + "sub_path": "machine/fdm_a350_bk.json" + }, + { + "name": "fdm_a250_qs_bk", + "sub_path": "machine/fdm_a250_qs_bk.json" + }, + { + "name": "fdm_a350_qs_bk", + "sub_path": "machine/fdm_a350_qs_bk.json" + }, { "name": "fdm_a250_dual_qs", "sub_path": "machine/fdm_a250_dual_qs.json" @@ -658,6 +1002,26 @@ "name": "fdm_a350_dual_qs", "sub_path": "machine/fdm_a350_dual_qs.json" }, + { + "name": "fdm_a250_dual_bk", + "sub_path": "machine/fdm_a250_dual_bk.json" + }, + { + "name": "fdm_a350_dual_bk", + "sub_path": "machine/fdm_a350_dual_bk.json" + }, + { + "name": "fdm_a250_dual_qs_bk", + "sub_path": "machine/fdm_a250_dual_qs_bk.json" + }, + { + "name": "fdm_a350_dual_qs_bk", + "sub_path": "machine/fdm_a350_dual_qs_bk.json" + }, + { + "name": "fdm_a400", + "sub_path": "machine/fdm_a400.json" + }, { "name": "Snapmaker J1 (0.2 nozzle)", "sub_path": "machine/Snapmaker J1 (0.2 nozzle).json" @@ -770,6 +1134,70 @@ "name": "Snapmaker A350 QSKit (0.8 nozzle)", "sub_path": "machine/Snapmaker A350 QSKit (0.8 nozzle).json" }, + { + "name": "Snapmaker A250 BKit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A250 BKit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A250 BKit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A250 BKit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A250 BKit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A250 BKit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A250 BKit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A250 BKit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A350 BKit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A350 BKit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A350 BKit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A350 BKit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A350 BKit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A350 BKit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A350 BKit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A350 BKit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A250 QS+B Kit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A250 QS+B Kit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A250 QS+B Kit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A250 QS+B Kit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A350 QS+B Kit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A350 QS+B Kit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A350 QS+B Kit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A350 QS+B Kit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A350 QS+B Kit (0.8 nozzle).json" + }, { "name": "Snapmaker A250 Dual QSKit (0.2 nozzle)", "sub_path": "machine/Snapmaker A250 Dual QSKit (0.2 nozzle).json" @@ -801,6 +1229,86 @@ { "name": "Snapmaker A350 Dual QSKit (0.8 nozzle)", "sub_path": "machine/Snapmaker A350 Dual QSKit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual BKit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual BKit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual BKit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual BKit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual BKit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual BKit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual BKit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual BKit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual BKit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual BKit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual BKit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual BKit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual BKit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual BKit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual BKit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual BKit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual QS+B Kit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual QS+B Kit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual QS+B Kit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A250 Dual QS+B Kit (0.8 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual QS+B Kit (0.2 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual QS+B Kit (0.4 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual QS+B Kit (0.6 nozzle).json" + }, + { + "name": "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "sub_path": "machine/Snapmaker A350 Dual QS+B Kit (0.8 nozzle).json" + }, + { + "name": "Snapmaker Artisan (0.2 nozzle)", + "sub_path": "machine/Snapmaker Artisan (0.2 nozzle).json" + }, + { + "name": "Snapmaker Artisan (0.4 nozzle)", + "sub_path": "machine/Snapmaker Artisan (0.4 nozzle).json" + }, + { + "name": "Snapmaker Artisan (0.6 nozzle)", + "sub_path": "machine/Snapmaker Artisan (0.6 nozzle).json" + }, + { + "name": "Snapmaker Artisan (0.8 nozzle)", + "sub_path": "machine/Snapmaker Artisan (0.8 nozzle).json" } ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/Snapmaker A250 BKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 BKit_cover.png new file mode 100644 index 0000000000..498cf295a9 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A250 BKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 Dual BKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 Dual BKit_cover.png new file mode 100644 index 0000000000..ff597361d2 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A250 Dual BKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 Dual QS+B Kit_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 Dual QS+B Kit_cover.png new file mode 100644 index 0000000000..987f50cae0 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A250 Dual QS+B Kit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 Dual QSKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 Dual QSKit_cover.png index 1ffb146361..a0bfb9dc86 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A250 Dual QSKit_cover.png and b/resources/profiles/Snapmaker/Snapmaker A250 Dual QSKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 Dual_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 Dual_cover.png index 9668553d64..cea13f5518 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A250 Dual_cover.png and b/resources/profiles/Snapmaker/Snapmaker A250 Dual_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 Dual_texture.svg b/resources/profiles/Snapmaker/Snapmaker A250 Dual_texture.svg new file mode 100644 index 0000000000..5c5fe4ffc2 --- /dev/null +++ b/resources/profiles/Snapmaker/Snapmaker A250 Dual_texture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/resources/profiles/Snapmaker/Snapmaker A250 QS+B Kit_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 QS+B Kit_cover.png new file mode 100644 index 0000000000..4c186581c0 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A250 QS+B Kit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 QSKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A250 QSKit_cover.png index 1ffb146361..67a74821a4 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A250 QSKit_cover.png and b/resources/profiles/Snapmaker/Snapmaker A250 QSKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250 QSKit_texture.svg b/resources/profiles/Snapmaker/Snapmaker A250 QSKit_texture.svg deleted file mode 100644 index c66f1f9cf8..0000000000 --- a/resources/profiles/Snapmaker/Snapmaker A250 QSKit_texture.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/resources/profiles/Snapmaker/Snapmaker A250_cover.png b/resources/profiles/Snapmaker/Snapmaker A250_cover.png index 9668553d64..49b33905ff 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A250_cover.png and b/resources/profiles/Snapmaker/Snapmaker A250_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A250_texture.svg b/resources/profiles/Snapmaker/Snapmaker A250_texture.svg index 31abbfeaa7..d19cd036c8 100644 --- a/resources/profiles/Snapmaker/Snapmaker A250_texture.svg +++ b/resources/profiles/Snapmaker/Snapmaker A250_texture.svg @@ -1,4 +1,11 @@ - - + + + + + + + + diff --git a/resources/profiles/Snapmaker/Snapmaker A350 BKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 BKit_cover.png new file mode 100644 index 0000000000..cf4da5e162 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A350 BKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 Dual BKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 Dual BKit_cover.png new file mode 100644 index 0000000000..5d4a23f909 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A350 Dual BKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 Dual QS+B Kit_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 Dual QS+B Kit_cover.png new file mode 100644 index 0000000000..e2d4dcdad9 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A350 Dual QS+B Kit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 Dual QSKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 Dual QSKit_cover.png index 27f6e27f45..17106bf043 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A350 Dual QSKit_cover.png and b/resources/profiles/Snapmaker/Snapmaker A350 Dual QSKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 Dual_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 Dual_cover.png index 9400dd45fb..eaf572c052 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A350 Dual_cover.png and b/resources/profiles/Snapmaker/Snapmaker A350 Dual_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 Dual_texture.svg b/resources/profiles/Snapmaker/Snapmaker A350 Dual_texture.svg new file mode 100644 index 0000000000..bdc061158c --- /dev/null +++ b/resources/profiles/Snapmaker/Snapmaker A350 Dual_texture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/resources/profiles/Snapmaker/Snapmaker A350 QS+B Kit_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 QS+B Kit_cover.png new file mode 100644 index 0000000000..2e79b01a24 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker A350 QS+B Kit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 QSKit_cover.png b/resources/profiles/Snapmaker/Snapmaker A350 QSKit_cover.png index 27f6e27f45..a967a388d1 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A350 QSKit_cover.png and b/resources/profiles/Snapmaker/Snapmaker A350 QSKit_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350 QSKit_texture.svg b/resources/profiles/Snapmaker/Snapmaker A350 QSKit_texture.svg deleted file mode 100644 index 27777e16db..0000000000 --- a/resources/profiles/Snapmaker/Snapmaker A350 QSKit_texture.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/resources/profiles/Snapmaker/Snapmaker A350_cover.png b/resources/profiles/Snapmaker/Snapmaker A350_cover.png index 9400dd45fb..dbecc7e061 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker A350_cover.png and b/resources/profiles/Snapmaker/Snapmaker A350_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker A350_texture.svg b/resources/profiles/Snapmaker/Snapmaker A350_texture.svg index a21a139607..92a346e0c1 100644 --- a/resources/profiles/Snapmaker/Snapmaker A350_texture.svg +++ b/resources/profiles/Snapmaker/Snapmaker A350_texture.svg @@ -1,4 +1,10 @@ - - - + + + + + + + + + \ No newline at end of file diff --git a/resources/profiles/Snapmaker/Snapmaker Artisan_bed.stl b/resources/profiles/Snapmaker/Snapmaker Artisan_bed.stl new file mode 100644 index 0000000000..a04b55a306 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker Artisan_bed.stl differ diff --git a/resources/profiles/Snapmaker/Snapmaker Artisan_cover.png b/resources/profiles/Snapmaker/Snapmaker Artisan_cover.png new file mode 100644 index 0000000000..e93435e952 Binary files /dev/null and b/resources/profiles/Snapmaker/Snapmaker Artisan_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker Artisan_texture.svg b/resources/profiles/Snapmaker/Snapmaker Artisan_texture.svg new file mode 100644 index 0000000000..1027b2ea93 --- /dev/null +++ b/resources/profiles/Snapmaker/Snapmaker Artisan_texture.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/resources/profiles/Snapmaker/Snapmaker J1_cover.png b/resources/profiles/Snapmaker/Snapmaker J1_cover.png index 6c914790ca..7c18503912 100644 Binary files a/resources/profiles/Snapmaker/Snapmaker J1_cover.png and b/resources/profiles/Snapmaker/Snapmaker J1_cover.png differ diff --git a/resources/profiles/Snapmaker/Snapmaker J1_texture.svg b/resources/profiles/Snapmaker/Snapmaker J1_texture.svg index 18f40548da..a9d6034b50 100644 --- a/resources/profiles/Snapmaker/Snapmaker J1_texture.svg +++ b/resources/profiles/Snapmaker/Snapmaker J1_texture.svg @@ -1,35 +1,36 @@ - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - + + + - - - + + + - - - - - + + + + + diff --git a/resources/profiles/Snapmaker/filament/PolyLite Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyLite Dual PLA @0.2 nozzle.json new file mode 100644 index 0000000000..f47614d710 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/PolyLite Dual PLA @0.2 nozzle.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "PolyLite Dual PLA @0.2 nozzle", + "setting_id": "490991920", + "inherits": "PolyLite PLA @0.2 nozzle", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/PolyLite Dual PLA.json b/resources/profiles/Snapmaker/filament/PolyLite Dual PLA.json new file mode 100644 index 0000000000..e6ab1a1496 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/PolyLite Dual PLA.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "PolyLite Dual PLA", + "setting_id": "64868365", + "inherits": "PolyLite PLA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json index f2caa20861..b3c643a042 100644 --- a/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json @@ -7,15 +7,15 @@ "inherits": "PolyLite PLA @base", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)" ], "filament_max_volumetric_speed": [ - "1" + "1.6" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/PolyLite PLA.json b/resources/profiles/Snapmaker/filament/PolyLite PLA.json index b0e4fe3ed2..aa38602aa8 100644 --- a/resources/profiles/Snapmaker/filament/PolyLite PLA.json +++ b/resources/profiles/Snapmaker/filament/PolyLite PLA.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA @0.2 nozzle.json new file mode 100644 index 0000000000..c3673b4d3c --- /dev/null +++ b/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA @0.2 nozzle.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "PolyTerra Dual PLA @0.2 nozzle", + "setting_id": "1258531391", + "inherits": "PolyTerra PLA @0.2 nozzle", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA.json b/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA.json new file mode 100644 index 0000000000..8b13924b72 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "PolyTerra Dual PLA", + "setting_id": "1258005940", + "inherits": "PolyTerra PLA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json index f2b469c764..215685b8e3 100644 --- a/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json @@ -7,15 +7,15 @@ "inherits": "PolyTerra PLA @base", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)" ], "filament_max_volumetric_speed": [ - "1" + "1.4" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/PolyTerra PLA @base.json b/resources/profiles/Snapmaker/filament/PolyTerra PLA @base.json index c09b45b79f..fdd96cf6f9 100644 --- a/resources/profiles/Snapmaker/filament/PolyTerra PLA @base.json +++ b/resources/profiles/Snapmaker/filament/PolyTerra PLA @base.json @@ -12,7 +12,7 @@ "1.31" ], "filament_max_volumetric_speed": [ - "18" + "14.4" ], "default_filament_colour": [ "#73CEC8" diff --git a/resources/profiles/Snapmaker/filament/PolyTerra PLA.json b/resources/profiles/Snapmaker/filament/PolyTerra PLA.json index 712fbd4c46..644b87e1ab 100644 --- a/resources/profiles/Snapmaker/filament/PolyTerra PLA.json +++ b/resources/profiles/Snapmaker/filament/PolyTerra PLA.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @0.2 nozzle.json index 1588ca9e2f..33966f31c7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @0.2 nozzle.json @@ -7,13 +7,13 @@ "inherits": "Snapmaker ABS @base", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", - "Snapmaker A350 QSKit (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)" + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QSKit (0.2 nozzle)" ], "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS.json index e6280f6b7b..5afe4a5632 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS.json @@ -9,26 +9,26 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @0.2 nozzle.json index 8df1b2ac86..0edcc66bdc 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @0.2 nozzle.json @@ -7,15 +7,15 @@ "inherits": "Snapmaker ASA @base", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", - "Snapmaker A350 QSKit (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)" + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QSKit (0.2 nozzle)" ], "filament_max_volumetric_speed": [ - "2" + "2.4" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA.json index 5a4c9270d7..762c3f8fe4 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA.json @@ -9,26 +9,26 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json new file mode 100644 index 0000000000..6db75b2afc --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual ABS @0.2 nozzle", + "setting_id": "2402717089", + "inherits": "Snapmaker Dual ABS @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_end_gcode": [ + "" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "overhang_fan_speed": [ + "80" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_loading_speed": [ + "25" + ], + "filament_unloading_speed_start": [ + "3" + ], + "filament_unloading_speed": [ + "25" + ], + "filament_load_time": [ + "0" + ], + "filament_unload_time": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "fan_max_speed": [ + "80" + ], + "pressure_advance": [ + "0.015" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.8 nozzle.json new file mode 100644 index 0000000000..41053273f2 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.8 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual ABS @0.8 nozzle", + "setting_id": "519475561", + "inherits": "Snapmaker Dual ABS @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_min_speed": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json new file mode 100644 index 0000000000..f4cb4f76ca --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual ABS @base", + "filament_id": "168223792", + "inherits": "fdm_filament_abs", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "overhang_fan_speed": [ + "20" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "fan_max_speed": [ + "15" + ], + "pressure_advance": [ + "0.02" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json new file mode 100644 index 0000000000..e6f005ca23 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json @@ -0,0 +1,62 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual ABS Benchy", + "setting_id": "3540754477", + "inherits": "Snapmaker Dual ABS @base", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "compatible_prints": [ + "0.25 Benchy @Snapmaker Artisan (0.4 nozzle)" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_for_layer_cooling": [ + "0" + ], + "fan_cooling_layer_time": [ + "2" + ], + "filament_deretraction_speed": [ + "55" + ], + "filament_max_volumetric_speed": [ + "31" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_z_hop": [ + "0" + ], + "filament_retraction_speed": [ + "55" + ], + "filament_wipe": [ + "0" + ], + "nozzle_temperature": [ + "250" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "0" + ], + "slow_down_layer_time": [ + "0" + ], + "default_filament_colour": [ + "#335BBB" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS.json new file mode 100644 index 0000000000..90049f3a65 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual ABS", + "setting_id": "937533070", + "inherits": "Snapmaker Dual ABS @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json new file mode 100644 index 0000000000..b2b5588eb2 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual ASA @0.2 nozzle", + "setting_id": "2698003242", + "inherits": "Snapmaker Dual ASA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_end_gcode": [ + "" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "overhang_fan_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "2.4" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_loading_speed": [ + "25" + ], + "filament_unloading_speed_start": [ + "3" + ], + "filament_unloading_speed": [ + "25" + ], + "filament_load_time": [ + "0" + ], + "filament_unload_time": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "fan_max_speed": [ + "35" + ], + "fan_min_speed": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json new file mode 100644 index 0000000000..1da233088a --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual ASA @base", + "filament_id": "1247172706", + "inherits": "fdm_filament_asa", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "overhang_fan_speed": [ + "15" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "0" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA.json new file mode 100644 index 0000000000..1715dca402 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual ASA", + "setting_id": "2541866198", + "inherits": "Snapmaker Dual ASA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json new file mode 100644 index 0000000000..514b9009a5 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PA-CF @base", + "filament_id": "3493177425", + "inherits": "fdm_filament_pa", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "overhang_fan_speed": [ + "50" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "15" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF.json new file mode 100644 index 0000000000..518d2b9f08 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PA-CF", + "setting_id": "2799665789", + "inherits": "Snapmaker Dual PA-CF @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json new file mode 100644 index 0000000000..67bca9c4e8 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PET @base", + "filament_id": "2128577941", + "inherits": "fdm_filament_pet", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "overhang_fan_speed": [ + "40" + ], + "filament_max_volumetric_speed": [ + "6.8" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "26" + ], + "slow_down_min_speed": [ + "35" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET.json new file mode 100644 index 0000000000..03a664e8cf --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PET", + "setting_id": "4213200045", + "inherits": "Snapmaker Dual PET @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @0.2 nozzle.json new file mode 100644 index 0000000000..8ab0c19c20 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PETG @0.2 nozzle", + "setting_id": "2935726097", + "inherits": "Snapmaker Dual PETG @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @0.8 nozzle.json new file mode 100644 index 0000000000..fd8f37e848 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @0.8 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PETG @0.8 nozzle", + "setting_id": "1060879577", + "inherits": "Snapmaker Dual PETG @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "10" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json new file mode 100644 index 0000000000..6dfe8db49b --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json @@ -0,0 +1,65 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PETG @base", + "filament_id": "2209001062", + "inherits": "fdm_filament_petg", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "overhang_fan_speed": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_z_hop_types": [ + "Spiral Lift" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "temperature_vitrification": [ + "178" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "0" + ], + "nozzle_temperature_range_low": [ + "240" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json new file mode 100644 index 0000000000..c1603ece8a --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json @@ -0,0 +1,95 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PETG-CF @base", + "filament_id": "1042511226", + "inherits": "fdm_filament_petg", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "required_nozzle_HRC": [ + "40" + ], + "overhang_fan_threshold": [ + "10%" + ], + "overhang_fan_speed": [ + "55" + ], + "fan_cooling_layer_time": [ + "10" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "1.25" + ], + "filament_max_volumetric_speed": [ + "6.4" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "temperature_vitrification": [ + "178" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "0" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_type": [ + "PETG-CF" + ], + "default_filament_colour": [ + "#3D3C39" + ], + "nozzle_temperature_range_high": [ + "255" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF.json new file mode 100644 index 0000000000..e74ff28c31 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PETG-CF", + "setting_id": "950459082", + "inherits": "Snapmaker Dual PETG-CF @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG.json new file mode 100644 index 0000000000..3847f3627b --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PETG", + "setting_id": "2452014271", + "inherits": "Snapmaker Dual PETG @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json new file mode 100644 index 0000000000..cb9e12eb4a --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PLA @base", + "filament_id": "1417031127", + "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature": [ + "220" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @0.2 nozzle.json new file mode 100644 index 0000000000..a6ff3b6952 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Eco @0.2 nozzle", + "setting_id": "3529576452", + "inherits": "Snapmaker Dual PLA Eco @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_max_volumetric_speed": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @0.8 nozzle.json new file mode 100644 index 0000000000..2c9432c24f --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @0.8 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Eco @0.8 nozzle", + "setting_id": "1134628044", + "inherits": "Snapmaker Dual PLA Eco @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "slow_down_min_speed": [ + "20" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json new file mode 100644 index 0000000000..0604c19211 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PLA Eco @base", + "filament_id": "200803790", + "inherits": "fdm_filament_pla_eco", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "filament_density": [ + "1.26" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco.json new file mode 100644 index 0000000000..570074dc3c --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Eco", + "setting_id": "2158656028", + "inherits": "Snapmaker Dual PLA Eco @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @0.2 nozzle.json new file mode 100644 index 0000000000..31e981dd13 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Matte @0.2 nozzle", + "setting_id": "2269792171", + "inherits": "Snapmaker Dual PLA Matte @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_max_volumetric_speed": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @0.8 nozzle.json new file mode 100644 index 0000000000..88e7b42ef6 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @0.8 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Matte @0.8 nozzle", + "setting_id": "378166115", + "inherits": "Snapmaker Dual PLA Matte @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "slow_down_min_speed": [ + "20" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json new file mode 100644 index 0000000000..455345c14e --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PLA Matte @base", + "filament_id": "3503790988", + "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "filament_density": [ + "1.32" + ], + "filament_max_volumetric_speed": [ + "9.6" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "default_filament_colour": [ + "#EAC3C3" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte.json new file mode 100644 index 0000000000..e681e7b185 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Matte", + "setting_id": "3959402964", + "inherits": "Snapmaker Dual PLA Matte @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @0.2 nozzle.json new file mode 100644 index 0000000000..9f8acad9bd --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Metal @0.2 nozzle", + "setting_id": "922702789", + "inherits": "Snapmaker Dual PLA Metal @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_max_volumetric_speed": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json new file mode 100644 index 0000000000..f5bbb7250d --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PLA Metal @base", + "filament_id": "2029994346", + "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.25" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature": [ + "220" + ], + "default_filament_colour": [ + "#767A7E" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal.json new file mode 100644 index 0000000000..dfa040e764 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Metal", + "setting_id": "720664627", + "inherits": "Snapmaker Dual PLA Metal @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @0.2 nozzle.json new file mode 100644 index 0000000000..caf986b50c --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Silk @0.2 nozzle", + "setting_id": "965040007", + "inherits": "Snapmaker Dual PLA Silk @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_max_volumetric_speed": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json new file mode 100644 index 0000000000..9e54ccb9cf --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json @@ -0,0 +1,62 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PLA Silk @base", + "filament_id": "1181363872", + "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.32" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "default_filament_colour": [ + "#CF942B" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk.json new file mode 100644 index 0000000000..083fdddb97 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA Silk", + "setting_id": "1328250686", + "inherits": "Snapmaker Dual PLA Silk @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @0.8 nozzle.json new file mode 100644 index 0000000000..edae140f17 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @0.8 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA-CF @0.8 nozzle", + "setting_id": "154056642", + "inherits": "Snapmaker Dual PLA-CF @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "filament_max_volumetric_speed": [ + "12.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json new file mode 100644 index 0000000000..c5568ad797 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json @@ -0,0 +1,77 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PLA-CF @base", + "filament_id": "1702147325", + "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "required_nozzle_HRC": [ + "40" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.22" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "temperature_vitrification": [ + "150" + ], + "default_filament_colour": [ + "#3D3C39" + ], + "filament_type": [ + "PLA-CF" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "additional_cooling_fan_speed": [ + "0" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF.json new file mode 100644 index 0000000000..4eca5405b0 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA-CF", + "setting_id": "3589359438", + "inherits": "Snapmaker Dual PLA-CF @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA.json new file mode 100644 index 0000000000..f2ae4d9948 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PLA", + "setting_id": "1195313935", + "inherits": "Snapmaker Dual PLA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.2 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @0.2 nozzle.json new file mode 100644 index 0000000000..f83d1b68b2 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PVA @0.2 nozzle", + "setting_id": "3656018400", + "inherits": "Snapmaker Dual PVA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A250 Dual QSKit (0.2 nozzle)", + "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker Artisan (0.2 nozzle)" + ], + "filament_max_volumetric_speed": [ + "1.4" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json new file mode 100644 index 0000000000..6083795b14 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual PVA @base", + "filament_id": "3104636980", + "inherits": "fdm_filament_pva", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA.json new file mode 100644 index 0000000000..b7a8430f65 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual PVA", + "setting_id": "4145213908", + "inherits": "Snapmaker Dual PVA @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json new file mode 100644 index 0000000000..b93954f9b2 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual TPE", + "setting_id": "2704030359", + "inherits": "Snapmaker Dual TPU @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "overhang_fan_speed": [ + "65" + ], + "filament_flow_ratio": [ + "1.1" + ], + "filament_density": [ + "1.22" + ], + "filament_max_volumetric_speed": [ + "7.2" + ], + "fan_max_speed": [ + "65" + ], + "fan_min_speed": [ + "65" + ], + "default_filament_colour": [ + "#383737" + ], + "filament_notes": [ + "eSUN eLastic TPE-83A\n" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json new file mode 100644 index 0000000000..f343d1fb25 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "false", + "name": "Snapmaker Dual TPU @base", + "filament_id": "2971656290", + "inherits": "fdm_filament_tpu", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json new file mode 100644 index 0000000000..e7be5e9e7d --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual TPU High-Flow", + "setting_id": "1072918854", + "inherits": "Snapmaker Dual TPU @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ], + "filament_flow_ratio": [ + "0.983" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "7.6" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_notes": [ + "!! It needs to be dried before use.\nSnapmaker TPU 95A High-Flow\n" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU.json new file mode 100644 index 0000000000..cc2c391c8a --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker Dual TPU", + "setting_id": "3164285683", + "inherits": "Snapmaker Dual TPU @base", + "compatible_printers": [ + "Snapmaker A250 Dual (0.4 nozzle)", + "Snapmaker A250 Dual (0.6 nozzle)", + "Snapmaker A250 Dual (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A250 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual QSKit (0.8 nozzle)", + "Snapmaker A350 Dual (0.4 nozzle)", + "Snapmaker A350 Dual (0.6 nozzle)", + "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker Artisan (0.4 nozzle)", + "Snapmaker Artisan (0.6 nozzle)", + "Snapmaker Artisan (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.2 nozzle.json index 40a9ff19c2..ca0d592a7c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.2 nozzle.json @@ -7,5 +7,32 @@ "inherits": "Snapmaker J1 ABS @base", "compatible_printers": [ "Snapmaker J1 (0.2 nozzle)" + ], + "filament_end_gcode": [ + "" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "overhang_fan_speed": [ + "80" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "15" + ], + "pressure_advance": [ + "0.015" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.8 nozzle.json index 04a2d058d6..b8ae69733d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @0.8 nozzle.json @@ -9,7 +9,7 @@ "Snapmaker J1 (0.8 nozzle)" ], "filament_max_volumetric_speed": [ - "22" + "16" ], "slow_down_min_speed": [ "10" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json index d49172be1c..2674a15d11 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json @@ -5,17 +5,29 @@ "name": "Snapmaker J1 ABS @base", "filament_id": "1223824394", "inherits": "fdm_filament_abs", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], "overhang_fan_speed": [ - "29" + "22" ], "filament_flow_ratio": [ "0.95" ], "filament_max_volumetric_speed": [ - "18" + "9.6" ], "fan_max_speed": [ - "29" + "22" + ], + "fan_min_speed": [ + "22" ], "pressure_advance": [ "0.02" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json new file mode 100644 index 0000000000..97d656cc38 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json @@ -0,0 +1,89 @@ +{ + "type": "filament", + "from": "system", + "instantiation": "true", + "name": "Snapmaker J1 ABS Benchy", + "setting_id": "356879727", + "inherits": "Snapmaker J1 ABS @base", + "compatible_printers": [ + "Snapmaker J1 (0.4 nozzle)" + ], + "compatible_prints": [ + "0.25 Benchy @Snapmaker J1 (0.4 nozzle)" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_for_layer_cooling": [ + "0" + ], + "fan_cooling_layer_time": [ + "2" + ], + "filament_deretraction_speed": [ + "55" + ], + "filament_max_volumetric_speed": [ + "31" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_z_hop": [ + "0" + ], + "filament_retraction_speed": [ + "55" + ], + "filament_wipe": [ + "0" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature": [ + "250" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "65" + ], + "slow_down_min_speed": [ + "0" + ], + "slow_down_layer_time": [ + "0" + ], + "default_filament_colour": [ + "#335BBB" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @0.2 nozzle.json index 41f1e92077..6e6be4145f 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @0.2 nozzle.json @@ -7,5 +7,23 @@ "inherits": "Snapmaker J1 ASA @base", "compatible_printers": [ "Snapmaker J1 (0.2 nozzle)" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "overhang_fan_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "2.4" + ], + "fan_max_speed": [ + "35" + ], + "fan_min_speed": [ + "10" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json index a38b508223..cd43cd00b4 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json @@ -5,9 +5,18 @@ "name": "Snapmaker J1 ASA @base", "filament_id": "144877656", "inherits": "fdm_filament_asa", + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], "overhang_fan_speed": [ "20" ], + "filament_max_volumetric_speed": [ + "9.6" + ], "fan_max_speed": [ "20" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json index b7bda1fadc..1514c32a42 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PA-CF @base", "filament_id": "1210173120", "inherits": "fdm_filament_pa", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "overhang_fan_speed": [ "55" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json index a65db99924..fdd3a613bf 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PET @base", "filament_id": "1009481135", "inherits": "fdm_filament_pet", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "overhang_fan_speed": [ "40" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.2 nozzle.json index f8c6325bc1..2f7f4539ac 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.2 nozzle.json @@ -9,6 +9,6 @@ "Snapmaker J1 (0.2 nozzle)" ], "filament_max_volumetric_speed": [ - "1.2" + "1.6" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.8 nozzle.json index 3860051545..d78b04b369 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @0.8 nozzle.json @@ -8,9 +8,6 @@ "compatible_printers": [ "Snapmaker J1 (0.8 nozzle)" ], - "filament_max_volumetric_speed": [ - "16" - ], "fan_max_speed": [ "60" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json index d856f8ed3e..ad69c9f187 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json @@ -5,12 +5,15 @@ "name": "Snapmaker J1 PETG @base", "filament_id": "1172603684", "inherits": "fdm_filament_petg", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], + "overhang_fan_speed": [ + "35" + ], "filament_density": [ "1.25" ], - "filament_max_volumetric_speed": [ - "14" - ], "filament_z_hop_types": [ "Spiral Lift" ], @@ -24,29 +27,11 @@ "178" ], "fan_max_speed": [ - "40" + "30" ], "fan_min_speed": [ "10" ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], "nozzle_temperature_range_low": [ "240" ] diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json index 30d518d9d4..7a8f9f949e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json @@ -5,14 +5,20 @@ "name": "Snapmaker J1 PETG-CF @base", "filament_id": "4235401834", "inherits": "fdm_filament_petg", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "required_nozzle_HRC": [ "40" ], - "reduce_fan_stop_start_freq": [ - "0" + "overhang_fan_threshold": [ + "10%" + ], + "overhang_fan_speed": [ + "55" ], "fan_cooling_layer_time": [ - "20" + "10" ], "filament_cost": [ "40" @@ -21,7 +27,7 @@ "1.25" ], "filament_max_volumetric_speed": [ - "14" + "6.4" ], "filament_retraction_minimum_travel": [ "nil" @@ -29,8 +35,8 @@ "filament_retraction_length": [ "nil" ], - "nozzle_temperature": [ - "255" + "nozzle_temperature_initial_layer": [ + "250" ], "temperature_vitrification": [ "178" @@ -50,31 +56,13 @@ "enable_pressure_advance": [ "0" ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" + "filament_type": [ + "PETG-CF" ], "default_filament_colour": [ "#3D3C39" ], - "filament_type": [ - "PETG-CF" - ], - "nozzle_temperature_range_low": [ - "240" + "nozzle_temperature_range_high": [ + "255" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json index abd1c42389..e95ea7a112 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PLA @base", "filament_id": "377675245", "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "filament_retraction_length": [ "nil" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json index f5f24aa8c0..4e2f8954b6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PLA Eco @base", "filament_id": "3383257822", "inherits": "fdm_filament_pla_eco", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "filament_density": [ "1.26" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @0.8 nozzle.json index b3f6fa1f3b..150999911f 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @0.8 nozzle.json @@ -8,9 +8,6 @@ "compatible_printers": [ "Snapmaker J1 (0.8 nozzle)" ], - "filament_max_volumetric_speed": [ - "22" - ], "slow_down_min_speed": [ "20" ] diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json index efca77692f..1f9759f562 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json @@ -5,11 +5,14 @@ "name": "Snapmaker J1 PLA Matte @base", "filament_id": "1192769348", "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "filament_density": [ "1.32" ], "filament_max_volumetric_speed": [ - "19" + "9.6" ], "nozzle_temperature_initial_layer": [ "215" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json index 3d75258f56..ceac663648 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PLA Metal @base", "filament_id": "4012961186", "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "filament_cost": [ "90" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json index e9fc62b8fc..780b647fca 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PLA Silk @base", "filament_id": "1528786603", "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "hot_plate_temp_initial_layer": [ "65" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @0.8 nozzle.json index e7714a602f..28dff6e2ea 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @0.8 nozzle.json @@ -9,6 +9,6 @@ "Snapmaker J1 (0.8 nozzle)" ], "filament_max_volumetric_speed": [ - "18" + "12.8" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json index 699e8eee37..5b5ffb42be 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PLA-CF @base", "filament_id": "3806593857", "inherits": "fdm_filament_pla", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "required_nozzle_HRC": [ "40" ], @@ -29,24 +32,6 @@ "temperature_vitrification": [ "150" ], - "cool_plate_temp": [ - "55" - ], - "eng_plate_temp": [ - "55" - ], - "textured_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], "default_filament_colour": [ "#3D3C39" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json index e7e03c48e1..e74dfa665f 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json @@ -5,6 +5,9 @@ "name": "Snapmaker J1 PVA @base", "filament_id": "4227461134", "inherits": "fdm_filament_pva", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ], "slow_down_layer_time": [ "8" ] diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json index 101d1bcd19..ae11ea5b29 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json @@ -4,5 +4,8 @@ "instantiation": "false", "name": "Snapmaker J1 TPU @base", "filament_id": "4092268632", - "inherits": "fdm_filament_tpu" + "inherits": "fdm_filament_tpu", + "filament_end_gcode": [ + "M104 S{temperature_vitrification[current_extruder]} ;standby T{current_extruder}" + ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF.json index 0a7bc640b3..7f1cf4b346 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF.json @@ -9,26 +9,26 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json index aaafafde46..801cb64b05 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json @@ -4,28 +4,8 @@ "instantiation": "true", "name": "Snapmaker PET @Dual", "setting_id": "145337790", - "inherits": "Snapmaker PET @base", + "inherits": "Snapmaker Dual PET @base", "compatible_printers": [ - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" - ], - "overhang_fan_speed": [ - "40" - ], - "fan_max_speed": [ - "55" - ], - "fan_min_speed": [ - "20" + "Snapmaker A250 Dual (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET.json b/resources/profiles/Snapmaker/filament/Snapmaker PET.json index 76943095ea..0357f8ce70 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET.json @@ -9,26 +9,26 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG @0.2 nozzle.json index 824fe3aeb6..eceef2ca82 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG @0.2 nozzle.json @@ -7,15 +7,15 @@ "inherits": "Snapmaker PETG @base", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", - "Snapmaker A350 QSKit (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)" + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QSKit (0.2 nozzle)" ], "filament_max_volumetric_speed": [ - "1" + "1.6" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json index 13a9d74895..06600fd9e8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json @@ -8,11 +8,14 @@ "required_nozzle_HRC": [ "40" ], - "reduce_fan_stop_start_freq": [ - "0" + "overhang_fan_threshold": [ + "10%" + ], + "overhang_fan_speed": [ + "55" ], "fan_cooling_layer_time": [ - "20" + "10" ], "filament_cost": [ "40" @@ -20,12 +23,18 @@ "filament_density": [ "1.25" ], + "filament_max_volumetric_speed": [ + "6.4" + ], "filament_retraction_minimum_travel": [ "nil" ], "filament_retraction_length": [ "nil" ], + "nozzle_temperature_initial_layer": [ + "250" + ], "temperature_vitrification": [ "178" ], @@ -44,31 +53,13 @@ "enable_pressure_advance": [ "0" ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" + "filament_type": [ + "PETG-CF" ], "default_filament_colour": [ "#3D3C39" ], - "filament_type": [ - "PETG-CF" - ], - "nozzle_temperature_range_low": [ - "240" + "nozzle_temperature_range_high": [ + "255" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF.json index 25bc06a599..6901560cc3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF.json @@ -9,26 +9,26 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG.json index 88dc72729d..855640f556 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG.json @@ -9,26 +9,26 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco.json index afe83fd299..ee4863686b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco.json @@ -10,25 +10,33 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "Snapmaker A250 QSKit (0.2 nozzle)", + "Snapmaker A250 QSKit (0.4 nozzle)", + "Snapmaker A250 QSKit (0.6 nozzle)", + "Snapmaker A250 QSKit (0.8 nozzle)", "Snapmaker A350 (0.2 nozzle)", "Snapmaker A350 (0.4 nozzle)", "Snapmaker A350 (0.6 nozzle)", "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", + "Snapmaker A350 QSKit (0.2 nozzle)", + "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @0.2 nozzle.json index 9e7b884d47..90f05057b6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @0.2 nozzle.json @@ -7,12 +7,12 @@ "inherits": "Snapmaker PLA Silk @base", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)" ], "filament_max_volumetric_speed": [ diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk.json index e26c80ff7e..6928499914 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF.json index 5fd902e217..5439435abf 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA.json index 0deea4e936..5dd453dfa4 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA.json @@ -10,33 +10,33 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.2 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", - "Snapmaker A350 QSKit (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 QSKit (0.8 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @0.2 nozzle.json index e983192099..18b8430d15 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @0.2 nozzle.json @@ -6,16 +6,6 @@ "setting_id": "1131479069", "inherits": "Snapmaker PVA @base", "compatible_printers": [ - "Snapmaker A250 (0.2 nozzle)", - "Snapmaker A350 (0.2 nozzle)", - "Snapmaker A250 Dual (0.2 nozzle)", - "Snapmaker A350 Dual (0.2 nozzle)", - "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)", - "Snapmaker A250 QSKit (0.2 nozzle)", - "Snapmaker A350 QSKit (0.2 nozzle)" - ], - "filament_max_volumetric_speed": [ - "1.2" + "Snapmaker A250 (0.2 nozzle)" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA.json index fdd0387142..0a44bae8ee 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json index 846a053688..ac388de223 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU.json index c1d56cc39b..3d203bcd72 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU.json @@ -9,24 +9,24 @@ "Snapmaker A250 (0.4 nozzle)", "Snapmaker A250 (0.6 nozzle)", "Snapmaker A250 (0.8 nozzle)", - "Snapmaker A350 (0.4 nozzle)", - "Snapmaker A350 (0.6 nozzle)", - "Snapmaker A350 (0.8 nozzle)", - "Snapmaker A250 Dual (0.4 nozzle)", - "Snapmaker A250 Dual (0.6 nozzle)", - "Snapmaker A250 Dual (0.8 nozzle)", - "Snapmaker A350 Dual (0.4 nozzle)", - "Snapmaker A350 Dual (0.6 nozzle)", - "Snapmaker A350 Dual (0.8 nozzle)", - "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", + "Snapmaker A350 (0.4 nozzle)", + "Snapmaker A350 (0.6 nozzle)", + "Snapmaker A350 (0.8 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/fdm_filament_common.json b/resources/profiles/Snapmaker/filament/fdm_filament_common.json index e2d108845f..4e6b9230ff 100644 --- a/resources/profiles/Snapmaker/filament/fdm_filament_common.json +++ b/resources/profiles/Snapmaker/filament/fdm_filament_common.json @@ -70,7 +70,7 @@ "0" ], "filament_minimal_purge_on_wipe_tower": [ - "3" + "0" ], "filament_retraction_minimum_travel": [ "nil" @@ -169,21 +169,21 @@ "0.04" ], "cool_plate_temp": [ - "60" + "0" ], "eng_plate_temp": [ - "60" + "0" ], "textured_plate_temp": [ - "60" + "0" ], "cool_plate_temp_initial_layer": [ - "60" + "0" ], "eng_plate_temp_initial_layer": [ - "60" + "0" ], "textured_plate_temp_initial_layer": [ - "60" + "0" ] } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/filament/fdm_filament_pa.json b/resources/profiles/Snapmaker/filament/fdm_filament_pa.json index aa2b20a5c2..983d97901d 100644 --- a/resources/profiles/Snapmaker/filament/fdm_filament_pa.json +++ b/resources/profiles/Snapmaker/filament/fdm_filament_pa.json @@ -8,10 +8,10 @@ "40" ], "hot_plate_temp": [ - "90" + "95" ], "hot_plate_temp_initial_layer": [ - "85" + "90" ], "overhang_fan_threshold": [ "0%" @@ -70,24 +70,6 @@ "slow_down_layer_time": [ "20" ], - "cool_plate_temp": [ - "90" - ], - "eng_plate_temp": [ - "90" - ], - "textured_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ], "default_filament_colour": [ "#3D3C39" ], diff --git a/resources/profiles/Snapmaker/filament/fdm_filament_pva.json b/resources/profiles/Snapmaker/filament/fdm_filament_pva.json index 73717471a5..9f34b6ed57 100644 --- a/resources/profiles/Snapmaker/filament/fdm_filament_pva.json +++ b/resources/profiles/Snapmaker/filament/fdm_filament_pva.json @@ -55,24 +55,6 @@ "slow_down_layer_time": [ "7" ], - "cool_plate_temp": [ - "50" - ], - "eng_plate_temp": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], "default_filament_colour": [ "#D9DFE3" ], diff --git a/resources/profiles/Snapmaker/filament/fdm_filament_tpu.json b/resources/profiles/Snapmaker/filament/fdm_filament_tpu.json index bb6a8df3a2..86075bf380 100644 --- a/resources/profiles/Snapmaker/filament/fdm_filament_tpu.json +++ b/resources/profiles/Snapmaker/filament/fdm_filament_tpu.json @@ -32,7 +32,7 @@ "1.24" ], "filament_deretraction_speed": [ - "20" + "25" ], "filament_max_volumetric_speed": [ "2.8" @@ -41,7 +41,7 @@ "0" ], "filament_retraction_length": [ - "0.6" + "0.5" ], "filament_z_hop": [ "0" @@ -50,7 +50,7 @@ "Normal Lift" ], "filament_retraction_speed": [ - "20" + "25" ], "nozzle_temperature_initial_layer": [ "240" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.2 nozzle).json new file mode 100644 index 0000000000..0e263e8412 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.2 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 BKit (0.2 nozzle)", + "setting_id": "601809056", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_bk", + "printer_model": "Snapmaker A250 BKit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.4 nozzle).json new file mode 100644 index 0000000000..149ab1f949 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.4 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 BKit (0.4 nozzle)", + "setting_id": "1355061546", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_bk", + "printer_model": "Snapmaker A250 BKit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.6 nozzle).json new file mode 100644 index 0000000000..6971038c81 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.6 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 BKit (0.6 nozzle)", + "setting_id": "2117251500", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_bk", + "printer_model": "Snapmaker A250 BKit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.8 nozzle).json new file mode 100644 index 0000000000..0753e53bb9 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit (0.8 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 BKit (0.8 nozzle)", + "setting_id": "3069209150", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_bk", + "printer_model": "Snapmaker A250 BKit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json new file mode 100644 index 0000000000..58ce739df1 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A250 BKit", + "url": "https://github.com/macdylan", + "model_id": "1921635482", + "bed_model": "Snapmaker A250_bed.stl", + "bed_texture": "Snapmaker A250_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.2 nozzle).json new file mode 100644 index 0000000000..fe7de49ffc --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.2 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual BKit (0.2 nozzle)", + "setting_id": "1737970856", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_bk", + "printer_model": "Snapmaker A250 Dual BKit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2", + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.4 nozzle).json new file mode 100644 index 0000000000..55221d047a --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.4 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual BKit (0.4 nozzle)", + "setting_id": "344796450", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_bk", + "printer_model": "Snapmaker A250 Dual BKit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4", + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.6 nozzle).json new file mode 100644 index 0000000000..04bab45414 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.6 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual BKit (0.6 nozzle)", + "setting_id": "981140900", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_bk", + "printer_model": "Snapmaker A250 Dual BKit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6", + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.8 nozzle).json new file mode 100644 index 0000000000..b938a00d3c --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit (0.8 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual BKit (0.8 nozzle)", + "setting_id": "4072267318", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_bk", + "printer_model": "Snapmaker A250 Dual BKit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8", + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json new file mode 100644 index 0000000000..4d353c996d --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A250 Dual BKit", + "url": "https://github.com/macdylan", + "model_id": "1463587605", + "bed_model": "Snapmaker A250_bed.stl", + "bed_texture": "Snapmaker A250 Dual_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.2 nozzle).json new file mode 100644 index 0000000000..6fad47bacb --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.2 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "setting_id": "1173309402", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_qs_bk", + "printer_model": "Snapmaker A250 Dual QS+B Kit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2", + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.4 nozzle).json new file mode 100644 index 0000000000..64560104bc --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.4 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "setting_id": "922041936", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_qs_bk", + "printer_model": "Snapmaker A250 Dual QS+B Kit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4", + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.6 nozzle).json new file mode 100644 index 0000000000..c61616bf2b --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.6 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "setting_id": "402855638", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_qs_bk", + "printer_model": "Snapmaker A250 Dual QS+B Kit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6", + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.8 nozzle).json new file mode 100644 index 0000000000..74c02a1699 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit (0.8 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "setting_id": "3502361924", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_dual_qs_bk", + "printer_model": "Snapmaker A250 Dual QS+B Kit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8", + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json new file mode 100644 index 0000000000..177c6ce1f3 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A250 Dual QS+B Kit", + "url": "https://github.com/macdylan", + "model_id": "3396626756", + "bed_model": "Snapmaker A250_bed.stl", + "bed_texture": "Snapmaker A250 Dual_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json index b9393c2dc3..ebf2d3524b 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json @@ -6,6 +6,6 @@ "url": "https://github.com/macdylan", "model_id": "2661871200", "bed_model": "Snapmaker A250_bed.stl", - "bed_texture": "Snapmaker A250 QSKit_texture.svg", + "bed_texture": "Snapmaker A250 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json index 2ec1c0ee92..2e655df13a 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json @@ -6,6 +6,6 @@ "url": "https://github.com/macdylan", "model_id": "2728546690", "bed_model": "Snapmaker A250_bed.stl", - "bed_texture": "Snapmaker A250_texture.svg", + "bed_texture": "Snapmaker A250 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.2 nozzle).json new file mode 100644 index 0000000000..7730efb8e2 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.2 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "setting_id": "302401596", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_qs_bk", + "printer_model": "Snapmaker A250 QS+B Kit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.4 nozzle).json new file mode 100644 index 0000000000..dbb4414dba --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.4 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "setting_id": "1629237686", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_qs_bk", + "printer_model": "Snapmaker A250 QS+B Kit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.6 nozzle).json new file mode 100644 index 0000000000..75fb433133 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.6 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "setting_id": "1340741936", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_qs_bk", + "printer_model": "Snapmaker A250 QS+B Kit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.8 nozzle).json new file mode 100644 index 0000000000..eec100468c --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit (0.8 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "setting_id": "2267595426", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a250_qs_bk", + "printer_model": "Snapmaker A250 QS+B Kit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json new file mode 100644 index 0000000000..5385dfbb62 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A250 QS+B Kit", + "url": "https://github.com/macdylan", + "model_id": "3626883798", + "bed_model": "Snapmaker A250_bed.stl", + "bed_texture": "Snapmaker A250_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json index 26a51f641c..06a06c068f 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json @@ -6,6 +6,6 @@ "url": "https://github.com/macdylan", "model_id": "3817522582", "bed_model": "Snapmaker A250_bed.stl", - "bed_texture": "Snapmaker A250 QSKit_texture.svg", + "bed_texture": "Snapmaker A250_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.2 nozzle).json new file mode 100644 index 0000000000..c785a1315a --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.2 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 BKit (0.2 nozzle)", + "setting_id": "3154404158", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_bk", + "printer_model": "Snapmaker A350 BKit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.4 nozzle).json new file mode 100644 index 0000000000..941bf35c7d --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.4 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 BKit (0.4 nozzle)", + "setting_id": "3474856628", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_bk", + "printer_model": "Snapmaker A350 BKit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.6 nozzle).json new file mode 100644 index 0000000000..59809d5f8e --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.6 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 BKit (0.6 nozzle)", + "setting_id": "3790090802", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_bk", + "printer_model": "Snapmaker A350 BKit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.8 nozzle).json new file mode 100644 index 0000000000..f23011008c --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit (0.8 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 BKit (0.8 nozzle)", + "setting_id": "690678176", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_bk", + "printer_model": "Snapmaker A350 BKit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json new file mode 100644 index 0000000000..55d9b2301b --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A350 BKit", + "url": "https://github.com/macdylan", + "model_id": "3190019076", + "bed_model": "Snapmaker A350_bed.stl", + "bed_texture": "Snapmaker A350_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.2 nozzle).json new file mode 100644 index 0000000000..eb0dccbbc2 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.2 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual BKit (0.2 nozzle)", + "setting_id": "2156589631", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_bk", + "printer_model": "Snapmaker A350 Dual BKit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2", + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.4 nozzle).json new file mode 100644 index 0000000000..8148ed097b --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.4 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual BKit (0.4 nozzle)", + "setting_id": "4086336437", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_bk", + "printer_model": "Snapmaker A350 Dual BKit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4", + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.6 nozzle).json new file mode 100644 index 0000000000..e589dcc894 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.6 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual BKit (0.6 nozzle)", + "setting_id": "3714491187", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_bk", + "printer_model": "Snapmaker A350 Dual BKit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6", + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.8 nozzle).json new file mode 100644 index 0000000000..2b5f34c71f --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit (0.8 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual BKit (0.8 nozzle)", + "setting_id": "363100321", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_bk", + "printer_model": "Snapmaker A350 Dual BKit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8", + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json new file mode 100644 index 0000000000..0ba9b50af7 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A350 Dual BKit", + "url": "https://github.com/macdylan", + "model_id": "2326416016", + "bed_model": "Snapmaker A350_bed.stl", + "bed_texture": "Snapmaker A350 Dual_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.2 nozzle).json new file mode 100644 index 0000000000..1edb00c17a --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.2 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)", + "setting_id": "2039456978", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_qs_bk", + "printer_model": "Snapmaker A350 Dual QS+B Kit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2", + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.4 nozzle).json new file mode 100644 index 0000000000..cf5552f923 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.4 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)", + "setting_id": "177593688", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_qs_bk", + "printer_model": "Snapmaker A350 Dual QS+B Kit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4", + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.6 nozzle).json new file mode 100644 index 0000000000..165ba09dea --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.6 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)", + "setting_id": "610530782", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_qs_bk", + "printer_model": "Snapmaker A350 Dual QS+B Kit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6", + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.8 nozzle).json new file mode 100644 index 0000000000..ba996f2e3b --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit (0.8 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", + "setting_id": "3969986124", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_dual_qs_bk", + "printer_model": "Snapmaker A350 Dual QS+B Kit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8", + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json new file mode 100644 index 0000000000..5bee6ae40d --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A350 Dual QS+B Kit", + "url": "https://github.com/macdylan", + "model_id": "1305649671", + "bed_model": "Snapmaker A350_bed.stl", + "bed_texture": "Snapmaker A350 Dual_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json index 4d3cb2f15c..a8e08120cf 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json @@ -6,6 +6,6 @@ "url": "https://github.com/macdylan", "model_id": "61280022", "bed_model": "Snapmaker A350_bed.stl", - "bed_texture": "Snapmaker A350 QSKit_texture.svg", + "bed_texture": "Snapmaker A350 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json index c44d84e8e3..a7c93c1eae 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json @@ -6,6 +6,6 @@ "url": "https://github.com/macdylan", "model_id": "1846038812", "bed_model": "Snapmaker A350_bed.stl", - "bed_texture": "Snapmaker A350_texture.svg", + "bed_texture": "Snapmaker A350 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.2 nozzle).json new file mode 100644 index 0000000000..7e774a0cdc --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.2 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 QS+B Kit (0.2 nozzle)", + "setting_id": "3079526450", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_qs_bk", + "printer_model": "Snapmaker A350 QS+B Kit", + "default_print_profile": "0.14 Standard @Snapmaker (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.4 nozzle).json new file mode 100644 index 0000000000..dae4dce720 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.4 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 QS+B Kit (0.4 nozzle)", + "setting_id": "3298271672", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_qs_bk", + "printer_model": "Snapmaker A350 QS+B Kit", + "default_print_profile": "0.16 Optimal @Snapmaker (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.6 nozzle).json new file mode 100644 index 0000000000..9b99e5d97f --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.6 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 QS+B Kit (0.6 nozzle)", + "setting_id": "3932260670", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_qs_bk", + "printer_model": "Snapmaker A350 QS+B Kit", + "default_print_profile": "0.18 Standard @Snapmaker (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.8 nozzle).json new file mode 100644 index 0000000000..356a03b517 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit (0.8 nozzle).json @@ -0,0 +1,20 @@ +{ + "name": "Snapmaker A350 QS+B Kit (0.8 nozzle)", + "setting_id": "581128876", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a350_qs_bk", + "printer_model": "Snapmaker A350 QS+B Kit", + "default_print_profile": "0.24 Standard @Snapmaker (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json new file mode 100644 index 0000000000..19f60cfa36 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker A350 QS+B Kit", + "url": "https://github.com/macdylan", + "model_id": "1133024953", + "bed_model": "Snapmaker A350_bed.stl", + "bed_texture": "Snapmaker A350_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json index d944423487..fb85033aa3 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json @@ -6,6 +6,6 @@ "url": "https://github.com/macdylan", "model_id": "4109488597", "bed_model": "Snapmaker A350_bed.stl", - "bed_texture": "Snapmaker A350 QSKit_texture.svg", + "bed_texture": "Snapmaker A350_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.2 nozzle).json new file mode 100644 index 0000000000..0f42b93bbb --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.2 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker Artisan (0.2 nozzle)", + "setting_id": "767951383", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a400", + "printer_model": "Snapmaker Artisan", + "default_print_profile": "0.14 Standard @Snapmaker Artisan (0.2 nozzle)", + "printer_variant": "0.2", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.06" + ], + "nozzle_diameter": [ + "0.2", + "0.2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..c5c4a6aaca --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker Artisan (0.4 nozzle)", + "setting_id": "1591507869", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a400", + "printer_model": "Snapmaker Artisan", + "default_print_profile": "0.16 Optimal @Snapmaker Artisan (0.4 nozzle)", + "printer_variant": "0.4", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4", + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..892223ec79 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker Artisan (0.6 nozzle)", + "setting_id": "1881821979", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a400", + "printer_model": "Snapmaker Artisan", + "default_print_profile": "0.18 Standard @Snapmaker Artisan (0.6 nozzle)", + "printer_variant": "0.6", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.18" + ], + "nozzle_diameter": [ + "0.6", + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.8 nozzle).json new file mode 100644 index 0000000000..0277708e84 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker Artisan (0.8 nozzle).json @@ -0,0 +1,21 @@ +{ + "name": "Snapmaker Artisan (0.8 nozzle)", + "setting_id": "3102247049", + "type": "machine", + "from": "system", + "instantiation": "true", + "inherits": "fdm_a400", + "printer_model": "Snapmaker Artisan", + "default_print_profile": "0.24 Standard @Snapmaker Artisan (0.8 nozzle)", + "printer_variant": "0.8", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8", + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json b/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json new file mode 100644 index 0000000000..84d08a9e57 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Snapmaker", + "name": "Snapmaker Artisan", + "url": "https://github.com/macdylan", + "model_id": "797581801", + "bed_model": "Snapmaker Artisan_bed.stl", + "bed_texture": "Snapmaker Artisan_texture.svg", + "nozzle_diameter": "0.2;0.4;0.6;0.8" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a250.json b/resources/profiles/Snapmaker/machine/fdm_a250.json index e95e8193d4..7b3915a880 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a250.json +++ b/resources/profiles/Snapmaker/machine/fdm_a250.json @@ -6,7 +6,7 @@ "inherits": "fdm_linear2", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250_texture.svg", - "printable_height": "235", + "printable_height": "230", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250\n", "printable_area": [ "0x0", @@ -14,7 +14,7 @@ "230x250", "0x250" ], - "machine_start_gcode": "; Model: Snapmaker A250\n; Update: 20231019\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\nM104 S165\nM204 S100\nG28\nG0 Z156 F960.0\nG0 Y125.0 F3420.0\nG0 X115.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\nG0 X0\nG0 Z0.2 F960.0\nG0 Y0 F3420.0\nG0 X230\nG0 Y250\nG0 X0\nG0 Y0\n\nM83\n\nT[initial_extruder]\nG0 Z20 F960.0\nG0 X{if initial_extruder == 0}-10{else}240{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[initial_extruder] + 15))} C2 W1; common flush temp\nG0 E35 F80.0\n\nM106 S{min(255, (fan_max_speed[initial_extruder] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[initial_extruder] + 5}\n\nG0 E35 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if initial_extruder == 0}10{else}220{endif} F3420.0\nG0 X{if initial_extruder == 0}-10{else}240{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[initial_extruder]} C3 W1\nG1 X{if initial_extruder == 0}105.0{else}125.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if initial_extruder == 0}0{else}230{endif} E6.54809 F3420.0\nG1 Y11 E0.68599\nG1 X{if initial_extruder == 0}0.5{else}229.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if initial_extruder == 0}9.5{else}220.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n; ready [plate_name]", - "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 0.5} F600\n; retract the filament to make it easier to replace\nG0 E-25 F200\nG28\n\n M104 S0\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", + "machine_start_gcode": "; Model: Snapmaker A250\n; Update: 20240428\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\nM104 S165\nM204 S100\nG28\nG0 Z153 F960.0\nG0 Y125.0 F3420.0\nG0 X115.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\n{if 1==1}\n G0 X0\n G0 Z0.2 F960.0\n G0 Y0 F3420.0\n G0 X230\n G0 Y250\n G0 X0\n G0 Y0\n{endif}\n\nM83\n{if 1==1 && max(hot_plate_temp_initial_layer[initial_extruder], hot_plate_temp[initial_extruder]) >= 90}\nG0 Z0.06\nG92 Z0 ;reset z\n{endif}\n\n; flush initial nozzle\nT[initial_extruder]\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( initial_extruder % 2 == 0 ? 100.0 : 130.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))} C2 W1\nG1 E15 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 5}\n\nG1 E9.0 F200\nG92 E0\nG1 E6.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( initial_extruder % 2 == 0 ? 55.0 : 175.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( initial_extruder % 2 == 0 ? 0 : 230 )} E3.42995 F3420.0\nG92 E0\n\nG1 E-{retraction_length[initial_extruder]} F200\nG92 E0\nG0 Y20 F3420.0\n\n; ready [plate_name]", + "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 2.0} F600\n; retract the filament to make it easier to replace\nG0 E-5 F200\nG28\n\n M104 S0\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", "before_layer_change_gcode": "; layer_num: [layer_num]\nG92 E0" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_bk.json b/resources/profiles/Snapmaker/machine/fdm_a250_bk.json new file mode 100644 index 0000000000..9a03e3072a --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a250_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a250_bk", + "inherits": "fdm_a250", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "224", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250\nPRINTER_MODEL_SNAPMAKER_A250_BRACINGKIT\n", + "bed_exclude_area": [ + "0x238", + "230x238", + "230x250", + "0x250" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_dual.json b/resources/profiles/Snapmaker/machine/fdm_a250_dual.json index aa1ba00f7a..7425a37bf1 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a250_dual.json +++ b/resources/profiles/Snapmaker/machine/fdm_a250_dual.json @@ -5,8 +5,8 @@ "name": "fdm_a250_dual", "inherits": "fdm_linear2_dual", "bed_model": "Snapmaker A250_bed.stl", - "bed_texture": "Snapmaker A250_texture.svg", - "printable_height": "205", + "bed_texture": "Snapmaker A250 Dual_texture.svg", + "printable_height": "190", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250_DUAL\n", "printable_area": [ "0x0", @@ -14,8 +14,14 @@ "230x250", "0x250" ], - "machine_start_gcode": "; Model: Snapmaker A250 Dual ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20231019\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[0]}\n; --- T1: {is_extruder_used[1]}\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[0]}M104 T0 S165{endif}\n{if is_extruder_used[1]}M104 T1 S165{endif}\nM204 S100\nG28\nG0 Z136 F960.0\nG0 Y125.0 F3420.0\nG0 X115.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\nG0 X0\nG0 Z0.2 F960.0\nG0 Y0 F3420.0\nG0 X230\nG0 Y250\nG0 X0\nG0 Y0\n\nM83\n\n{if is_extruder_used[0]}M104 T0 S{max(250, min(290, nozzle_temperature_initial_layer[0] + 15))}{endif}\n{if is_extruder_used[1]}M104 T1 S{max(250, min(290, nozzle_temperature_initial_layer[1] + 15))}{endif}\n\n{if is_extruder_used[0] and initial_extruder != 0}\n T0\nG0 Z20 F960.0\nG0 X{if 0 == 0}-10{else}240{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[0] + 15))} C2 W1; common flush temp\nG0 E45 F80.0\n\nM106 S{min(255, (fan_max_speed[0] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[0] + 5}\n\nG0 E45 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if 0 == 0}10{else}220{endif} F3420.0\nG0 X{if 0 == 0}-10{else}240{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[0]} C3 W1\nG1 X{if 0 == 0}105.0{else}125.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if 0 == 0}0{else}230{endif} E6.54809 F3420.0\nG1 Y11 E0.68599\nG1 X{if 0 == 0}0.5{else}229.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if 0 == 0}9.5{else}220.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n M104 S{temperature_vitrification[0]}\n{endif}\n{if is_extruder_used[1] and initial_extruder != 1}\n T1\nG0 Z20 F960.0\nG0 X{if 1 == 0}-10{else}240{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[1] + 15))} C2 W1; common flush temp\nG0 E45 F80.0\n\nM106 S{min(255, (fan_max_speed[1] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[1] + 5}\n\nG0 E45 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if 1 == 0}10{else}220{endif} F3420.0\nG0 X{if 1 == 0}-10{else}240{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[1]} C3 W1\nG1 X{if 1 == 0}105.0{else}125.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if 1 == 0}0{else}230{endif} E6.54809 F3420.0\nG1 Y11 E0.68599\nG1 X{if 1 == 0}0.5{else}229.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if 1 == 0}9.5{else}220.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n M104 S{temperature_vitrification[1]}\n{endif}\n\nT[initial_extruder]\nG0 Z20 F960.0\nG0 X{if initial_extruder == 0}-10{else}240{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[initial_extruder] + 15))} C2 W1; common flush temp\nG0 E45 F80.0\n\nM106 S{min(255, (fan_max_speed[initial_extruder] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[initial_extruder] + 5}\n\nG0 E45 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if initial_extruder == 0}10{else}220{endif} F3420.0\nG0 X{if initial_extruder == 0}-10{else}240{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[initial_extruder]} C3 W1\nG1 X{if initial_extruder == 0}105.0{else}125.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if initial_extruder == 0}0{else}230{endif} E6.54809 F3420.0\nG1 Y11 E0.68599\nG1 X{if initial_extruder == 0}0.5{else}229.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if initial_extruder == 0}9.5{else}220.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n; ready [plate_name]", - "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 0.5} F600\n; retract the filament to make it easier to replace\nG0 E-35 F200\nG28\n\n {if is_extruder_used[0]}M104 T0 S0{endif}\n {if is_extruder_used[1]}M104 T1 S0{endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", - "change_filament_gcode": ";***** Update: 20230923\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num]\n; layer\nT{next_extruder}\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n ; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\n M140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_num == 1}\n G1 E{retraction_length[next_extruder]} F2000;deretract\n{endif}\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n; M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n; End Toolchange\n{endif}", + "bed_exclude_area": [ + "0x240", + "230x240", + "230x250", + "0x250" + ], + "machine_start_gcode": "; Model: Snapmaker A250 Dual ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20240428\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - 1, 0))]}\n; --- T1: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - 0, 0))]}\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S165\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S165\n {endif}\nM204 S100\nG28\nG0 Z126 F960.0\nG0 Y125.0 F3420.0\nG0 X115.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\n{if 1==1}\n G0 X0\n G0 Z0.2 F960.0\n G0 Y0 F3420.0\n G0 X230\n G0 Y250\n G0 X0\n G0 Y0\n{endif}\n\nM83\n{if 1==1 && max(hot_plate_temp_initial_layer[initial_extruder], hot_plate_temp[initial_extruder]) >= 90}\nG0 Z0.06\nG92 Z0 ;reset z\n{endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n; preheat 0\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n; preheat 1\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] and (initial_extruder % 2) != 0}\n; flush nozzle 0\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( 0 % 2 == 0 ? 100.0 : 130.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 0 % 2 == 0 ? 55.0 : 175.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 0 % 2 == 0 ? 0 : 230 )} E3.42995 F3420.0\nG92 E0\n\nG1 E-{retract_length_toolchange[0]} F200\nG92 E0\nG0 Y20 F3420.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] and (initial_extruder % 2) != 1}\n; flush nozzle 1\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( 1 % 2 == 0 ? 100.0 : 130.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 1 % 2 == 0 ? 55.0 : 175.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 1 % 2 == 0 ? 0 : 230 )} E3.42995 F3420.0\nG92 E0\n\nG1 E-{retract_length_toolchange[1]} F200\nG92 E0\nG0 Y20 F3420.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n {endif}\n\n; flush initial nozzle\nT[initial_extruder]\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( initial_extruder % 2 == 0 ? 100.0 : 130.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( initial_extruder % 2 == 0 ? 55.0 : 175.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( initial_extruder % 2 == 0 ? 0 : 230 )} E3.42995 F3420.0\nG92 E0\n\nG1 E-{retraction_length[initial_extruder]} F200\nG92 E0\nG0 Y20 F3420.0\n\n; ready [plate_name]", + "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 2.0} F600\n; retract the filament to make it easier to replace\nG0 E-10 F200\nG28\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S0\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S0\n {endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", + "change_filament_gcode": ";***** Update: 20230923\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num]\n; layer\nT{next_extruder}\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n ; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\n M140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_num == 1}\n G1 E{retraction_length[next_extruder]} F200;deretract\n{endif}\n\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n; M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n; End Toolchange\n{endif}", "before_layer_change_gcode": "; layer_num: [layer_num]\nG92 E0" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_dual_bk.json b/resources/profiles/Snapmaker/machine/fdm_a250_dual_bk.json new file mode 100644 index 0000000000..5d084ebfaf --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a250_dual_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a250_dual_bk", + "inherits": "fdm_a250_dual", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "184", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250_DUAL\nPRINTER_MODEL_SNAPMAKER_A250_DUAL_BRACINGKIT\n", + "bed_exclude_area": [ + "0x228", + "230x228", + "230x250", + "0x250" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs.json b/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs.json index 2180b332c9..59d55fc579 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs.json +++ b/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs.json @@ -4,11 +4,11 @@ "instantiation": "false", "name": "fdm_a250_dual_qs", "inherits": "fdm_a250_dual", - "bed_texture": "Snapmaker A250 QSKit_texture.svg", + "printable_height": "175", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250_DUAL\nPRINTER_MODEL_SNAPMAKER_A250_DUAL_QUICKSWAPKIT\n", "bed_exclude_area": [ - "0x235", - "230x235", + "0x225", + "230x225", "230x250", "0x250" ] diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs_bk.json b/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs_bk.json new file mode 100644 index 0000000000..a270c15dbc --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a250_dual_qs_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a250_dual_qs_bk", + "inherits": "fdm_a250_dual", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "169", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250_DUAL\nPRINTER_MODEL_SNAPMAKER_A250_DUAL_QUICKSWAPKIT\nPRINTER_MODEL_SNAPMAKER_A250_DUAL_BRACINGKIT\n", + "bed_exclude_area": [ + "0x213", + "230x213", + "230x250", + "0x250" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_qs.json b/resources/profiles/Snapmaker/machine/fdm_a250_qs.json index d814aba7ad..dc606b984c 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a250_qs.json +++ b/resources/profiles/Snapmaker/machine/fdm_a250_qs.json @@ -4,8 +4,7 @@ "instantiation": "false", "name": "fdm_a250_qs", "inherits": "fdm_a250", - "bed_texture": "Snapmaker A250 QSKit_texture.svg", - "printable_height": "220", + "printable_height": "215", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250\nPRINTER_MODEL_SNAPMAKER_A250_QUICKSWAPKIT\n", "bed_exclude_area": [ "0x235", diff --git a/resources/profiles/Snapmaker/machine/fdm_a250_qs_bk.json b/resources/profiles/Snapmaker/machine/fdm_a250_qs_bk.json new file mode 100644 index 0000000000..f450b7a38d --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a250_qs_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a250_qs_bk", + "inherits": "fdm_a250", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "209", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A250\nPRINTER_MODEL_SNAPMAKER_A250_QUICKSWAPKIT\nPRINTER_MODEL_SNAPMAKER_A250_BRACINGKIT\n", + "bed_exclude_area": [ + "0x223", + "230x223", + "230x250", + "0x250" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a350.json b/resources/profiles/Snapmaker/machine/fdm_a350.json index 4398c81124..1ae94e4af7 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a350.json +++ b/resources/profiles/Snapmaker/machine/fdm_a350.json @@ -6,7 +6,7 @@ "inherits": "fdm_linear2", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350_texture.svg", - "printable_height": "330", + "printable_height": "325", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350\n", "printable_area": [ "0x0", @@ -14,7 +14,7 @@ "320x350", "0x350" ], - "machine_start_gcode": "; Model: Snapmaker A350\n; Update: 20231019\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\nM104 S165\nM204 S100\nG28\nG0 Z220 F960.0\nG0 Y175.0 F3420.0\nG0 X160.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\nG0 X0\nG0 Z0.2 F960.0\nG0 Y0 F3420.0\nG0 X320\nG0 Y350\nG0 X0\nG0 Y0\n\nM83\n\nT[initial_extruder]\nG0 Z20 F960.0\nG0 X{if initial_extruder == 0}-10{else}330{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[initial_extruder] + 15))} C2 W1; common flush temp\nG0 E35 F80.0\n\nM106 S{min(255, (fan_max_speed[initial_extruder] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[initial_extruder] + 5}\n\nG0 E35 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if initial_extruder == 0}10{else}310{endif} F3420.0\nG0 X{if initial_extruder == 0}-10{else}330{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[initial_extruder]} C3 W1\nG1 X{if initial_extruder == 0}150.0{else}170.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if initial_extruder == 0}0{else}320{endif} E9.35442 F3420.0\nG1 Y11 E0.68599\nG1 X{if initial_extruder == 0}0.5{else}319.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if initial_extruder == 0}9.5{else}310.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n; ready [plate_name]", - "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 0.5} F600\n; retract the filament to make it easier to replace\nG0 E-25 F200\nG28\n\n M104 S0\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", + "machine_start_gcode": "; Model: Snapmaker A350\n; Update: 20240428\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\nM104 S165\nM204 S100\nG28\nG0 Z216 F960.0\nG0 Y175.0 F3420.0\nG0 X160.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\n{if 1==1}\n G0 X0\n G0 Z0.2 F960.0\n G0 Y0 F3420.0\n G0 X320\n G0 Y350\n G0 X0\n G0 Y0\n{endif}\n\nM83\n{if 1==1 && max(hot_plate_temp_initial_layer[initial_extruder], hot_plate_temp[initial_extruder]) >= 90}\nG0 Z0.06\nG92 Z0 ;reset z\n{endif}\n\n; flush initial nozzle\nT[initial_extruder]\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( initial_extruder % 2 == 0 ? 145.0 : 175.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))} C2 W1\nG1 E15 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 5}\n\nG1 E9.0 F200\nG92 E0\nG1 E6.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( initial_extruder % 2 == 0 ? 100.0 : 220.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( initial_extruder % 2 == 0 ? 0 : 320 )} E6.23628 F3420.0\nG92 E0\n\nG1 E-{retraction_length[initial_extruder]} F200\nG92 E0\nG0 Y20 F3420.0\n\n; ready [plate_name]", + "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 2.0} F600\n; retract the filament to make it easier to replace\nG0 E-5 F200\nG28\n\n M104 S0\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", "before_layer_change_gcode": "; layer_num: [layer_num]\nG92 E0" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_bk.json b/resources/profiles/Snapmaker/machine/fdm_a350_bk.json new file mode 100644 index 0000000000..3a1f9655db --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a350_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a350_bk", + "inherits": "fdm_a350", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "319", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350\nPRINTER_MODEL_SNAPMAKER_A350_BRACINGKIT\n", + "bed_exclude_area": [ + "0x338", + "320x338", + "320x350", + "0x350" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_dual.json b/resources/profiles/Snapmaker/machine/fdm_a350_dual.json index 3ffbd990cd..a2e3a40589 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a350_dual.json +++ b/resources/profiles/Snapmaker/machine/fdm_a350_dual.json @@ -5,8 +5,8 @@ "name": "fdm_a350_dual", "inherits": "fdm_linear2_dual", "bed_model": "Snapmaker A350_bed.stl", - "bed_texture": "Snapmaker A350_texture.svg", - "printable_height": "290", + "bed_texture": "Snapmaker A350 Dual_texture.svg", + "printable_height": "285", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350_DUAL\n", "printable_area": [ "0x0", @@ -14,8 +14,14 @@ "320x350", "0x350" ], - "machine_start_gcode": "; Model: Snapmaker A350 Dual ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20231019\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[0]}\n; --- T1: {is_extruder_used[1]}\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[0]}M104 T0 S165{endif}\n{if is_extruder_used[1]}M104 T1 S165{endif}\nM204 S100\nG28\nG0 Z193 F960.0\nG0 Y175.0 F3420.0\nG0 X160.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\nG0 X0\nG0 Z0.2 F960.0\nG0 Y0 F3420.0\nG0 X320\nG0 Y350\nG0 X0\nG0 Y0\n\nM83\n\n{if is_extruder_used[0]}M104 T0 S{max(250, min(290, nozzle_temperature_initial_layer[0] + 15))}{endif}\n{if is_extruder_used[1]}M104 T1 S{max(250, min(290, nozzle_temperature_initial_layer[1] + 15))}{endif}\n\n{if is_extruder_used[0] and initial_extruder != 0}\n T0\nG0 Z20 F960.0\nG0 X{if 0 == 0}-10{else}330{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[0] + 15))} C2 W1; common flush temp\nG0 E45 F80.0\n\nM106 S{min(255, (fan_max_speed[0] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[0] + 5}\n\nG0 E45 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if 0 == 0}10{else}310{endif} F3420.0\nG0 X{if 0 == 0}-10{else}330{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[0]} C3 W1\nG1 X{if 0 == 0}150.0{else}170.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if 0 == 0}0{else}320{endif} E9.35442 F3420.0\nG1 Y11 E0.68599\nG1 X{if 0 == 0}0.5{else}319.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if 0 == 0}9.5{else}310.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n M104 S{temperature_vitrification[0]}\n{endif}\n{if is_extruder_used[1] and initial_extruder != 1}\n T1\nG0 Z20 F960.0\nG0 X{if 1 == 0}-10{else}330{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[1] + 15))} C2 W1; common flush temp\nG0 E45 F80.0\n\nM106 S{min(255, (fan_max_speed[1] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[1] + 5}\n\nG0 E45 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if 1 == 0}10{else}310{endif} F3420.0\nG0 X{if 1 == 0}-10{else}330{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[1]} C3 W1\nG1 X{if 1 == 0}150.0{else}170.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if 1 == 0}0{else}320{endif} E9.35442 F3420.0\nG1 Y11 E0.68599\nG1 X{if 1 == 0}0.5{else}319.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if 1 == 0}9.5{else}310.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n M104 S{temperature_vitrification[1]}\n{endif}\n\nT[initial_extruder]\nG0 Z20 F960.0\nG0 X{if initial_extruder == 0}-10{else}330{endif} F3420.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[initial_extruder] + 15))} C2 W1; common flush temp\nG0 E45 F80.0\n\nM106 S{min(255, (fan_max_speed[initial_extruder] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[initial_extruder] + 5}\n\nG0 E45 F200\n\nG0 E-0.5 F200\nM107\n\nG0 Z0.1 F960.0\nG0 X{if initial_extruder == 0}10{else}310{endif} F3420.0\nG0 X{if initial_extruder == 0}-10{else}330{endif}\n\nG0 Z1.0 F960.0\n\nM109 S{nozzle_temperature_initial_layer[initial_extruder]} C3 W1\nG1 X{if initial_extruder == 0}150.0{else}170.0{endif} F3420.0\nG1 Z0.3 F960.0\nG1 E4 F200\nG1 X{if initial_extruder == 0}0{else}320{endif} E9.35442 F3420.0\nG1 Y11 E0.68599\nG1 X{if initial_extruder == 0}0.5{else}319.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if initial_extruder == 0}9.5{else}310.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n; ready [plate_name]", - "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 0.5} F600\n; retract the filament to make it easier to replace\nG0 E-35 F200\nG28\n\n {if is_extruder_used[0]}M104 T0 S0{endif}\n {if is_extruder_used[1]}M104 T1 S0{endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", - "change_filament_gcode": ";***** Update: 20230923\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num]\n; layer\nT{next_extruder}\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n ; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\n M140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_num == 1}\n G1 E{retraction_length[next_extruder]} F2000;deretract\n{endif}\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n; M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n; End Toolchange\n{endif}", + "bed_exclude_area": [ + "0x330", + "320x330", + "320x350", + "0x350" + ], + "machine_start_gcode": "; Model: Snapmaker A350 Dual ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20240428\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - 1, 0))]}\n; --- T1: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - 0, 0))]}\n\nT[initial_extruder]\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S165\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S165\n {endif}\nM204 S100\nG28\nG0 Z190 F960.0\nG0 Y175.0 F3420.0\nG0 X160.0\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\nG28\n{if 1==1}\n G0 X0\n G0 Z0.2 F960.0\n G0 Y0 F3420.0\n G0 X320\n G0 Y350\n G0 X0\n G0 Y0\n{endif}\n\nM83\n{if 1==1 && max(hot_plate_temp_initial_layer[initial_extruder], hot_plate_temp[initial_extruder]) >= 90}\nG0 Z0.06\nG92 Z0 ;reset z\n{endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n; preheat 0\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n; preheat 1\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] and (initial_extruder % 2) != 0}\n; flush nozzle 0\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( 0 % 2 == 0 ? 145.0 : 175.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 0 % 2 == 0 ? 100.0 : 220.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 0 % 2 == 0 ? 0 : 320 )} E6.23628 F3420.0\nG92 E0\n\nG1 E-{retract_length_toolchange[0]} F200\nG92 E0\nG0 Y20 F3420.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] and (initial_extruder % 2) != 1}\n; flush nozzle 1\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( 1 % 2 == 0 ? 145.0 : 175.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 1 % 2 == 0 ? 100.0 : 220.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 1 % 2 == 0 ? 0 : 320 )} E6.23628 F3420.0\nG92 E0\n\nG1 E-{retract_length_toolchange[1]} F200\nG92 E0\nG0 Y20 F3420.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n {endif}\n\n; flush initial nozzle\nT[initial_extruder]\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( initial_extruder % 2 == 0 ? 145.0 : 175.0 )} F3420.0\nG0 Y0 F3420.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( initial_extruder % 2 == 0 ? 100.0 : 220.0 )} F3420.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( initial_extruder % 2 == 0 ? 0 : 320 )} E6.23628 F3420.0\nG92 E0\n\nG1 E-{retraction_length[initial_extruder]} F200\nG92 E0\nG0 Y20 F3420.0\n\n; ready [plate_name]", + "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 2.0} F600\n; retract the filament to make it easier to replace\nG0 E-10 F200\nG28\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S0\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S0\n {endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", + "change_filament_gcode": ";***** Update: 20230923\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num]\n; layer\nT{next_extruder}\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n ; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\n M140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_num == 1}\n G1 E{retraction_length[next_extruder]} F200;deretract\n{endif}\n\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n; M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n; End Toolchange\n{endif}", "before_layer_change_gcode": "; layer_num: [layer_num]\nG92 E0" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_dual_bk.json b/resources/profiles/Snapmaker/machine/fdm_a350_dual_bk.json new file mode 100644 index 0000000000..5b16424711 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a350_dual_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a350_dual_bk", + "inherits": "fdm_a350_dual", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "279", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350_DUAL\nPRINTER_MODEL_SNAPMAKER_A350_DUAL_BRACINGKIT\n", + "bed_exclude_area": [ + "0x318", + "320x318", + "320x350", + "0x350" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs.json b/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs.json index b2505329ff..0e4823e2be 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs.json +++ b/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs.json @@ -4,12 +4,11 @@ "instantiation": "false", "name": "fdm_a350_dual_qs", "inherits": "fdm_a350_dual", - "bed_texture": "Snapmaker A350 QSKit_texture.svg", - "printable_height": "300", + "printable_height": "270", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350_DUAL\nPRINTER_MODEL_SNAPMAKER_A350_DUAL_QUICKSWAPKIT\n", "bed_exclude_area": [ - "0x335", - "320x335", + "0x315", + "320x315", "320x350", "0x350" ] diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs_bk.json b/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs_bk.json new file mode 100644 index 0000000000..0494b8e7ea --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a350_dual_qs_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a350_dual_qs_bk", + "inherits": "fdm_a350_dual", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "264", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350_DUAL\nPRINTER_MODEL_SNAPMAKER_A350_DUAL_BRACINGKIT\nPRINTER_MODEL_SNAPMAKER_A350_DUAL_QUICKSWAPKIT\n", + "bed_exclude_area": [ + "0x303", + "320x303", + "320x350", + "0x350" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_qs.json b/resources/profiles/Snapmaker/machine/fdm_a350_qs.json index 590161e292..2b5eb369fc 100644 --- a/resources/profiles/Snapmaker/machine/fdm_a350_qs.json +++ b/resources/profiles/Snapmaker/machine/fdm_a350_qs.json @@ -4,8 +4,7 @@ "instantiation": "false", "name": "fdm_a350_qs", "inherits": "fdm_a350", - "bed_texture": "Snapmaker A350 QSKit_texture.svg", - "printable_height": "315", + "printable_height": "310", "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350\nPRINTER_MODEL_SNAPMAKER_A350_QUICKSWAPKIT\n", "bed_exclude_area": [ "0x335", diff --git a/resources/profiles/Snapmaker/machine/fdm_a350_qs_bk.json b/resources/profiles/Snapmaker/machine/fdm_a350_qs_bk.json new file mode 100644 index 0000000000..e3ede6d2a5 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a350_qs_bk.json @@ -0,0 +1,39 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a350_qs_bk", + "inherits": "fdm_a350", + "machine_max_acceleration_x": [ + "3500" + ], + "machine_max_acceleration_y": [ + "3500" + ], + "machine_max_acceleration_z": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "3500" + ], + "machine_max_acceleration_extruding": [ + "3500" + ], + "machine_max_acceleration_retracting": [ + "3500" + ], + "machine_max_jerk_y": [ + "5" + ], + "machine_max_jerk_z": [ + "3" + ], + "printable_height": "304", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_A350\nPRINTER_MODEL_SNAPMAKER_A350_BRACINGKIT\nPRINTER_MODEL_SNAPMAKER_A350_QUICKSWAPKIT\n", + "bed_exclude_area": [ + "0x323", + "320x323", + "320x350", + "0x350" + ] +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_a400.json b/resources/profiles/Snapmaker/machine/fdm_a400.json new file mode 100644 index 0000000000..4bfd754b69 --- /dev/null +++ b/resources/profiles/Snapmaker/machine/fdm_a400.json @@ -0,0 +1,59 @@ +{ + "type": "machine", + "from": "system", + "instantiation": "false", + "name": "fdm_a400", + "inherits": "fdm_linear2_dual", + "extruder_clearance_height_to_rod": "32", + "extruder_clearance_height_to_lid": "400", + "machine_max_acceleration_x": [ + "5000" + ], + "machine_max_acceleration_y": [ + "5000" + ], + "machine_max_acceleration_z": [ + "200" + ], + "machine_max_acceleration_travel": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "5000" + ], + "machine_max_acceleration_retracting": [ + "2000" + ], + "machine_max_speed_x": [ + "300" + ], + "machine_max_speed_y": [ + "300" + ], + "machine_max_jerk_x": [ + "10" + ], + "machine_max_jerk_y": [ + "10" + ], + "machine_max_jerk_z": [ + "3" + ], + "thumbnails": [ + "600x600" + ], + "bed_model": "Snapmaker Artisan_bed.stl", + "bed_texture": "Snapmaker Artisan_texture.svg", + "printable_height": "400", + "printer_notes": "PRINTER_MODEL_SNAPMAKER_ARTISAN\nPRINTER_MODEL_SNAPMAKER_A400_DUAL\n", + "printable_area": [ + "0x0", + "400x0", + "400x400", + "0x400" + ], + "machine_start_gcode": "; Model: Snapmaker Artisan ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20240428\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - 1, 0))]}\n; --- T1: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - 0, 0))]}\n\nT[initial_extruder]\n\nM205 V[machine_max_jerk_x] ;Junction Deviation (mm)\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S165\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S165\n {endif}\nM204 S100\nG28\nG0 Z266 F960.0\nG0 Y200.0 F6840.0\nG0 X200.0\n\n{if first_layer_print_min[0] >= 70 && first_layer_print_max[0] <= 330 && first_layer_print_min[1] >= 70 && first_layer_print_max[1] <= 330}\nM190 P0 R{first_layer_bed_temperature[initial_extruder]} ;only inner part of the bed\n{else}\nM190 R{first_layer_bed_temperature[initial_extruder]}\n{endif}\n\nG28\n{if 1==1}\n G0 X0\n G0 Z0.2 F960.0\n G0 Y0 F6840.0\n G0 X400\n G0 Y400\n G0 X0\n G0 Y0\n{endif}\n\nM83\n{if 1==1 && max(hot_plate_temp_initial_layer[initial_extruder], hot_plate_temp[initial_extruder]) >= 90}\nG0 Z0.06\nG92 Z0 ;reset z\n{endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n; preheat 0\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n; preheat 1\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] and (initial_extruder % 2) != 0}\n; flush nozzle 0\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( 0 % 2 == 0 ? 185.0 : 215.0 )} F6840.0\nG0 Y0 F6840.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 0 % 2 == 0 ? 140.0 : 260.0 )} F6840.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 0 % 2 == 0 ? 0 : 400 )} E8.73079 F6840.0\nG92 E0\n\nG1 E-{retract_length_toolchange[0]} F200\nG92 E0\nG0 Y20 F6840.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] and (initial_extruder % 2) != 1}\n; flush nozzle 1\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( 1 % 2 == 0 ? 185.0 : 215.0 )} F6840.0\nG0 Y0 F6840.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 1 % 2 == 0 ? 140.0 : 260.0 )} F6840.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 1 % 2 == 0 ? 0 : 400 )} E8.73079 F6840.0\nG92 E0\n\nG1 E-{retract_length_toolchange[1]} F200\nG92 E0\nG0 Y20 F6840.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n {endif}\n\n; flush initial nozzle\nT[initial_extruder]\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))}; common flush temp\nG0 Z1.6 F960.0\nG0 X{( initial_extruder % 2 == 0 ? 185.0 : 215.0 )} F6840.0\nG0 Y0 F6840.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( initial_extruder % 2 == 0 ? 140.0 : 260.0 )} F6840.0\nG0 Z0.3 F960.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( initial_extruder % 2 == 0 ? 0 : 400 )} E8.73079 F6840.0\nG92 E0\n\nG1 E-{retraction_length[initial_extruder]} F200\nG92 E0\nG0 Y20 F6840.0\n\n; ready [plate_name]", + "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 2.0} F600\n; retract the filament to make it easier to replace\nG0 E-10 F200\nG28\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S0\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S0\n {endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", + "change_filament_gcode": ";***** Update: 20230923\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num]\n; layer\nT{next_extruder}\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n ; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\n M140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_num == 1}\n G1 E{retraction_length[next_extruder]} F200;deretract\n{endif}\n\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n; M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n; End Toolchange\n{endif}", + "before_layer_change_gcode": "; layer_num: [layer_num]\nG92 E0" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_common.json b/resources/profiles/Snapmaker/machine/fdm_common.json index 6066188b5c..9dde4953b3 100644 --- a/resources/profiles/Snapmaker/machine/fdm_common.json +++ b/resources/profiles/Snapmaker/machine/fdm_common.json @@ -11,7 +11,7 @@ "auxiliary_fan": "0", "remaining_times": "1", "single_extruder_multi_material": "0", - "purge_in_prime_tower": "0", + "purge_in_prime_tower": "1", "enable_filament_ramming": "0", "nozzle_volume": "0", "cooling_tube_retraction": "0", diff --git a/resources/profiles/Snapmaker/machine/fdm_idex.json b/resources/profiles/Snapmaker/machine/fdm_idex.json index 867e6b31a5..28176df2d5 100644 --- a/resources/profiles/Snapmaker/machine/fdm_idex.json +++ b/resources/profiles/Snapmaker/machine/fdm_idex.json @@ -11,28 +11,28 @@ "2" ], "retraction_speed": [ - "30", - "30" + "25", + "25" ], "deretraction_speed": [ - "30", - "30" + "25", + "25" ], "bed_model": "Snapmaker J1_bed.stl", "bed_texture": "Snapmaker J1_texture.svg", "printable_height": "200", - "extruder_clearance_radius": "68", - "extruder_clearance_height_to_rod": "36", - "extruder_clearance_height_to_lid": "90", + "extruder_clearance_radius": "35", + "extruder_clearance_height_to_rod": "35", + "extruder_clearance_height_to_lid": "150", "printer_notes": "PRINTER_MODEL_SNAPMAKER_J1\n", "fan_speedup_time": [ - "0.2" + "0.3" ], "machine_max_acceleration_x": [ - "11000" + "10000" ], "machine_max_acceleration_y": [ - "11000" + "8000" ], "machine_max_acceleration_z": [ "100" @@ -41,19 +41,19 @@ "6000" ], "machine_max_acceleration_travel": [ - "11000" + "10000" ], "machine_max_acceleration_extruding": [ - "11000" + "10000" ], "machine_max_acceleration_retracting": [ - "5000" + "6000" ], "machine_max_speed_x": [ "350" ], "machine_max_speed_y": [ - "350" + "300" ], "machine_max_speed_z": [ "10" @@ -62,10 +62,10 @@ "40" ], "machine_max_jerk_x": [ - "8" + "10" ], "machine_max_jerk_y": [ - "8" + "10" ], "machine_max_jerk_z": [ "3" @@ -100,8 +100,8 @@ "Snapmaker J1 PLA", "Snapmaker J1 PETG" ], - "machine_start_gcode": "; Model: Snapmaker J1 ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20231019\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[0]}\n; --- T1: {is_extruder_used[1]}\n\nT[initial_extruder]\n\nM205 V20 ;Junction Deviation (mm)\n\n{if plate_name =~/.*IDEXDupl.*/ || plate_name =~/.*IDEXCopy.*/ }\n M605 S2 X162 R0 ;IDEX Duplication\n{elsif plate_name =~/.*IDEXMirr.*/}\n M605 S3 ;IDEX Mirror\n{elsif plate_name =~/.*IDEXBack.*/}\n M605 S4 ;IDEX Backup\n{endif}\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[0]}M104 T0 S165{endif}\n{if is_extruder_used[1]}M104 T1 S165{endif}\nM204 S100\nG28\n\nG0 Z100.0\n{if is_extruder_used[0]}\n T0\n G0 X{if 0 == 0}80{else}240{endif} Y0 F7980.0\n {endif}\n{if is_extruder_used[1]}\n T1\n G0 X{if 1 == 0}80{else}240{endif} Y0 F7980.0\n {endif}\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n{if 1==1}; LED\n M355 S1 P64\n G4 P100\n M355 S1 P128\n G4 P100\n M355 S1 P64\n G4 P200\n M355 S1 P255\n G4 P100\n{endif}\nG28 X Y\n\nM83\n\n{if is_extruder_used[0]}M104 T0 S{max(250, min(290, nozzle_temperature_initial_layer[0] + 15))}{endif}\n{if is_extruder_used[1]}M104 T1 S{max(250, min(290, nozzle_temperature_initial_layer[1] + 15))}{endif}\n\n{if is_extruder_used[0] and initial_extruder != 0}\n T0\nG0 Z20 F240.0\nG0 X{if 0 == 0}-7{else}331{endif} F7980.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[0] + 15))} C2 W1; common flush temp\nG0 E50 F80.0\n\nM106 S{min(255, (fan_max_speed[0] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[0] + 5}\n\nG0 E50 F200\n\nG0 E-0.5 F200\nM107\n\nG28 X\n\nG0 Z1.0 F240.0\n\nM109 S{nozzle_temperature_initial_layer[0]} C3 W1\nG1 X{if 0 == 0}142.0{else}182.0{endif} F7980.0\nG1 Z0.3 F240.0\nG1 E4 F200\nG1 X{if 0 == 0}10{else}314{endif} E9.47915 F7980.0\nG1 Y11 E0.68599\nG1 X{if 0 == 0}10.5{else}313.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if 0 == 0}19.5{else}304.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n M104 S{temperature_vitrification[0]}\n{endif}\n{if is_extruder_used[1] and initial_extruder != 1}\n T1\nG0 Z20 F240.0\nG0 X{if 1 == 0}-7{else}331{endif} F7980.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[1] + 15))} C2 W1; common flush temp\nG0 E50 F80.0\n\nM106 S{min(255, (fan_max_speed[1] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[1] + 5}\n\nG0 E50 F200\n\nG0 E-0.5 F200\nM107\n\nG28 X\n\nG0 Z1.0 F240.0\n\nM109 S{nozzle_temperature_initial_layer[1]} C3 W1\nG1 X{if 1 == 0}142.0{else}182.0{endif} F7980.0\nG1 Z0.3 F240.0\nG1 E4 F200\nG1 X{if 1 == 0}10{else}314{endif} E9.47915 F7980.0\nG1 Y11 E0.68599\nG1 X{if 1 == 0}10.5{else}313.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if 1 == 0}19.5{else}304.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n M104 S{temperature_vitrification[1]}\n{endif}\n\nT[initial_extruder]\nG0 Z20 F240.0\nG0 X{if initial_extruder == 0}-7{else}331{endif} F7980.0\nG0 Y0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[initial_extruder] + 15))} C2 W1; common flush temp\nG0 E50 F80.0\n\nM106 S{min(255, (fan_max_speed[initial_extruder] + 10) * 2.55)}\nM104 S{nozzle_temperature_initial_layer[initial_extruder] + 5}\n\nG0 E50 F200\n\nG0 E-0.5 F200\nM107\n\nG28 X\n\nG0 Z1.0 F240.0\n\nM109 S{nozzle_temperature_initial_layer[initial_extruder]} C3 W1\nG1 X{if initial_extruder == 0}142.0{else}182.0{endif} F7980.0\nG1 Z0.3 F240.0\nG1 E4 F200\nG1 X{if initial_extruder == 0}10{else}314{endif} E9.47915 F7980.0\nG1 Y11 E0.68599\nG1 X{if initial_extruder == 0}10.5{else}313.5{endif}\nG1 E0.4\nG1 Y0.8 E0.6361\nG1 X{if initial_extruder == 0}19.5{else}304.5{endif} E0.59245\nG1 E-0.5 F200\nG92 E0\n\n; ready [plate_name]", - "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 0.5} F600\n; retract the filament to make it easier to replace\nG0 E-40 F200\nG28\n\n {if is_extruder_used[0]}M104 T0 S0{endif}\n {if is_extruder_used[1]}M104 T1 S0{endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", - "change_filament_gcode": ";***** Update: 20230730\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num]\n; layer\nT{next_extruder}\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\nM140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM2000 S200 V[travel_speed] A[travel_acceleration] ;quick switch extruders, S:200 mode/V:speed/A:acceleration\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n\n{endif}", + "machine_start_gcode": "; Model: Snapmaker J1 ({nozzle_diameter[0]}/{nozzle_diameter[1]})\n; Update: 20240428\n; Maintained by https://github.com/macdylan/3dp-configs\n; Printer : [printer_preset]\n; Profile : [print_preset]\n; Plate : [plate_name]\n; --- initial_extruder: [initial_extruder]\n; --- has_wipe_tower: [has_wipe_tower]\n; --- total_toolchanges: [total_toolchanges]\n; --- T0: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - 1, 0))]}\n; --- T1: {is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - 0, 0))]}\n\nT[initial_extruder]\n\nM205 V[machine_max_jerk_x] ;Junction Deviation (mm)\n\n{if plate_name =~/.*IDEXDupl.*/ || plate_name =~/.*IDEXCopy.*/ }\n M605 S2 X162 R0 ;IDEX Duplication\n{elsif plate_name =~/.*IDEXMirr.*/}\n M605 S3 ;IDEX Mirror\n{elsif plate_name =~/.*IDEXBack.*/}\n M605 S4 ;IDEX Backup\n{endif}\n\nM140 S{first_layer_bed_temperature[initial_extruder]}\n\n; you can clean the nozzle\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S165\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n M104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S165\n {endif}\nM204 S100\nG28\n\nG0 Z100.0\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))}\n G0 X{if 0 == 0}80{else}240{endif} Y0 F6840.0\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))}\n G0 X{if 1 == 0}80{else}240{endif} Y0 F6840.0\n {endif}\n\nM190 R{first_layer_bed_temperature[initial_extruder]}\n\n{if 1==1}; LED\n M355 S1 P64\n G4 P100\n M355 S1 P128\n G4 P100\n M355 S1 P64\n G4 P200\n M355 S1 P255\n G4 P100\n{endif}\nG28 X Y\n\nM83\n{if 1==1 && max(hot_plate_temp_initial_layer[initial_extruder], hot_plate_temp[initial_extruder]) >= 90}\nG0 Z0.06\nG92 Z0 ;reset z\n{endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n; preheat 0\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n; preheat 1\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] and (initial_extruder % 2) != 0}\n; flush nozzle 0\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))}; common flush temp\nG0 Z1.6 F240.0\nG0 X{( 0 % 2 == 0 ? 147.0 : 177.0 )} F6840.0\nG0 Y0 F6840.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 0 % 2 == 0 ? 137.0 : 187.0 )} F6840.0\nG0 Z0.3 F240.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 0 % 2 == 0 ? 0 : 324 )} E8.5437 F6840.0\nG92 E0\n\nG1 E-{retract_length_toolchange[0]} F200\nG92 E0\nG0 Y20 F6840.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\n {endif}\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] and (initial_extruder % 2) != 1}\n; flush nozzle 1\nT{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))}\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))}; common flush temp\nG0 Z1.6 F240.0\nG0 X{( 1 % 2 == 0 ? 147.0 : 177.0 )} F6840.0\nG0 Y0 F6840.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( 1 % 2 == 0 ? 137.0 : 187.0 )} F6840.0\nG0 Z0.3 F240.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( 1 % 2 == 0 ? 0 : 324 )} E8.5437 F6840.0\nG92 E0\n\nG1 E-{retract_length_toolchange[1]} F200\nG92 E0\nG0 Y20 F6840.0\nM104 S{temperature_vitrification[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\n {endif}\n\n; flush initial nozzle\nT[initial_extruder]\nM104 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))}; common flush temp\nG0 Z1.6 F240.0\nG0 X{( initial_extruder % 2 == 0 ? 147.0 : 177.0 )} F6840.0\nG0 Y0 F6840.0\n\nM109 S{max(250, min(290, nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 15))} C2 W1\nG1 E20 F80.0\nG92 E0\n\nM106 S{min(255, (fan_max_speed[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 10) * 2.55)}\n\nM104 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))] + 5}\n\nG1 E12.0 F200\nG92 E0\nG1 E8.0 Z4.6 F200\nG92 E0\n\nG0 Z5.6 F200\nM107\n\nG0 X{( initial_extruder % 2 == 0 ? 137.0 : 187.0 )} F6840.0\nG0 Z0.3 F240.0\nM109 S{nozzle_temperature_initial_layer[(initial_extruder % 2 == 0 ? min(initial_extruder + initial_extruder, 63) : max(initial_extruder - (1-initial_extruder), 0))]} C3 W1\nG1 E3 F200\nG92 E0\nG1 X{( initial_extruder % 2 == 0 ? 0 : 324 )} E8.5437 F6840.0\nG92 E0\n\nG1 E-{retraction_length[initial_extruder]} F200\nG92 E0\nG0 Y20 F6840.0\n\n; ready [plate_name]", + "machine_end_gcode": "G92 E0\n\nG0 Z{max_layer_z + 2.0} F600\n; retract the filament to make it easier to replace\nG0 E-10 F200\nG28\n\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 0, 63) : max(initial_extruder - (1-0), 0))} S0\n {endif}\n{if is_extruder_used[(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))]}\nM104 T{(initial_extruder % 2 == 0 ? min(initial_extruder + 1, 63) : max(initial_extruder - (1-1), 0))} S0\n {endif}\nM140 S0\nM107\nM220 S100\nM84\n\n;\n; DON'T REMOVE these lines if you're using the smfix (https://github.com/macdylan/SMFix)\n; min_x = [first_layer_print_min_0]\n; min_y = [first_layer_print_min_1]\n; max_x = [first_layer_print_max_0]\n; max_y = [first_layer_print_max_1]\n; max_z = [max_layer_z]\n; total_layer_number = [layer_num]\n;", + "change_filament_gcode": ";***** Update: 20230730\n{if current_extruder != next_extruder}\n; Change T[current_extruder] -> T[next_extruder] (layer [layer_num] [toolchange_count]/[total_toolchanges])\n; layer [layer_num] at [layer_z]mm\nT[next_extruder]\n\nM107 P[current_extruder] ;fan off T[current_extruder]\nM104 T[current_extruder] S{temperature_vitrification[current_extruder]} ;standby T[current_extruder]\n\n{if layer_num == 1 &&\n ((filament_type[current_extruder] == \"PLA\" || filament_type[current_extruder] == \"TPU\")\n || (filament_type[next_extruder] == \"PLA\" || filament_type[next_extruder] == \"TPU\"))\n}\n; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) -> {filament_type[next_extruder]}({bed_temperature[next_extruder]})\nM140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}\n{endif}\n\nM2000 S200 V[travel_speed] A[travel_acceleration] ;quick switch extruders, S:200 mode/V:speed/A:acceleration\nM109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]\n{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}\n M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]\n{endif}\n{endif}", "before_layer_change_gcode": "; layer_num: [layer_num]\nG92 E0" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/machine/fdm_linear2.json b/resources/profiles/Snapmaker/machine/fdm_linear2.json index 3a37a7f8ec..ed91a1489d 100644 --- a/resources/profiles/Snapmaker/machine/fdm_linear2.json +++ b/resources/profiles/Snapmaker/machine/fdm_linear2.json @@ -14,10 +14,10 @@ "Normal Lift" ], "extruder_clearance_radius": "75", - "extruder_clearance_height_to_rod": "25", - "extruder_clearance_height_to_lid": "90", + "extruder_clearance_height_to_rod": "35", + "extruder_clearance_height_to_lid": "325", "machine_max_acceleration_x": [ - "1000" + "1100" ], "machine_max_acceleration_y": [ "1000" @@ -29,13 +29,13 @@ "3000" ], "machine_max_acceleration_travel": [ - "1000" + "1100" ], "machine_max_acceleration_extruding": [ - "1000" + "1100" ], "machine_max_acceleration_retracting": [ - "2000" + "1100" ], "machine_max_speed_x": [ "150" @@ -50,7 +50,7 @@ "45" ], "machine_max_jerk_x": [ - "1" + "5" ], "machine_max_jerk_y": [ "1" diff --git a/resources/profiles/Snapmaker/machine/fdm_linear2_dual.json b/resources/profiles/Snapmaker/machine/fdm_linear2_dual.json index e335bdc4a0..fcd3e85154 100644 --- a/resources/profiles/Snapmaker/machine/fdm_linear2_dual.json +++ b/resources/profiles/Snapmaker/machine/fdm_linear2_dual.json @@ -12,18 +12,11 @@ "35", "35" ], - "extruder_clearance_radius": "110", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_height_to_lid": "133", - "machine_max_acceleration_retracting": [ - "1000" - ], - "machine_max_speed_e": [ - "35" - ], + "extruder_clearance_height_to_rod": "60", + "extruder_clearance_height_to_lid": "285", "retract_length_toolchange": [ - "8", - "8" + "18", + "18" ], "default_filament_profile": [ "Snapmaker PLA", diff --git a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker (0.2 nozzle).json index 93ce6eb0e1..ffbaf1b649 100644 --- a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker (0.2 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)" + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)" ], "bottom_shell_layers": "5", "bridge_flow": "1", diff --git a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker Artisan (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker Artisan (0.2 nozzle).json new file mode 100644 index 0000000000..e28c15c8f7 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker Artisan (0.2 nozzle).json @@ -0,0 +1,27 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.06 Standard @Snapmaker Artisan (0.2 nozzle)", + "setting_id": "3200425436", + "compatible_printers": [ + "Snapmaker Artisan (0.2 nozzle)" + ], + "bottom_shell_layers": "4", + "bridge_flow": "1", + "initial_layer_line_width": "0.25", + "initial_layer_print_height": "0.1", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "layer_height": "0.06", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "sparse_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_shell_layers": "5", + "top_surface_line_width": "0.22", + "wall_loops": "4", + "initial_layer_infill_speed": "70", + "initial_layer_speed": "40", + "inner_wall_speed": "150" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker J1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker J1 (0.2 nozzle).json index a46f8f910e..b6a267151d 100644 --- a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker J1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker J1 (0.2 nozzle).json @@ -8,7 +8,7 @@ "compatible_printers": [ "Snapmaker J1 (0.2 nozzle)" ], - "bottom_shell_layers": "5", + "bottom_shell_layers": "4", "bridge_flow": "1", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", @@ -19,18 +19,9 @@ "outer_wall_line_width": "0.22", "sparse_infill_line_width": "0.22", "support_line_width": "0.22", - "top_shell_layers": "7", + "top_shell_layers": "5", "top_surface_line_width": "0.22", "wall_loops": "4", - "gap_infill_speed": "120", - "initial_layer_infill_speed": "70", - "initial_layer_speed": "40", - "inner_wall_speed": "200", - "internal_solid_infill_speed": "200", - "sparse_infill_speed": "100", - "support_interface_speed": "40", - "top_surface_speed": "150", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker (0.4 nozzle).json index b53e32ce63..a081fe766e 100644 --- a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "bottom_shell_layers": "7", "bridge_flow": "1", diff --git a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..22bdb6cb08 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,22 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "723238605", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "bottom_shell_layers": "4", + "bridge_flow": "1", + "elefant_foot_compensation": "0.15", + "ironing_flow": "8%", + "layer_height": "0.08", + "initial_layer_print_height": "0.1", + "support_threshold_angle": "15", + "top_shell_layers": "5", + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145", + "internal_solid_infill_speed": "150" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker J1 (0.4 nozzle).json index d15aa3175e..eaf51d4cd6 100644 --- a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker J1 (0.4 nozzle).json @@ -8,20 +8,15 @@ "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)" ], - "bottom_shell_layers": "7", + "bottom_shell_layers": "4", "bridge_flow": "1", "elefant_foot_compensation": "0.15", "ironing_flow": "8%", "layer_height": "0.08", "initial_layer_print_height": "0.1", "support_threshold_angle": "15", - "top_shell_layers": "9", - "gap_infill_speed": "160", - "initial_layer_infill_speed": "65", - "inner_wall_speed": "230", - "internal_solid_infill_speed": "230", - "sparse_infill_speed": "120", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "top_shell_layers": "5", + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145", + "internal_solid_infill_speed": "150" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker (0.2 nozzle).json index c7e117ba78..10f10cbe48 100644 --- a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker (0.2 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)" + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)" ], "layer_height": "0.1", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker Artisan (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker Artisan (0.2 nozzle).json new file mode 100644 index 0000000000..a1bc54d546 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker Artisan (0.2 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.10 Standard @Snapmaker Artisan (0.2 nozzle)", + "setting_id": "2309389761", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.2 nozzle)" + ], + "layer_height": "0.1", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker J1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker J1 (0.2 nozzle).json index cc3a94a7bc..f928d404ba 100644 --- a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker J1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker J1 (0.2 nozzle).json @@ -22,15 +22,6 @@ "internal_solid_infill_line_width": "0.22", "support_line_width": "0.22", "top_surface_line_width": "0.22", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "gap_infill_speed": "120", - "inner_wall_speed": "200", - "internal_solid_infill_speed": "200", - "support_interface_speed": "40", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker (0.4 nozzle).json index 884381d110..24216b3c5c 100644 --- a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "layer_height": "0.12", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..41cfa41d21 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,21 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.12 Fine @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "3320746901", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "layer_height": "0.12", + "bottom_shell_layers": "5", + "elefant_foot_compensation": "0.15", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "bridge_flow": "1", + "support_threshold_angle": "20", + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145", + "internal_solid_infill_speed": "150" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker J1 (0.4 nozzle).json index 5fce09ed24..1ff7629339 100644 --- a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker J1 (0.4 nozzle).json @@ -15,13 +15,7 @@ "top_shell_thickness": "0.6", "bridge_flow": "1", "support_threshold_angle": "20", - "initial_layer_infill_speed": "60", - "inner_wall_speed": "230", - "internal_solid_infill_speed": "230", - "sparse_infill_speed": "120", - "top_surface_speed": "120", - "gap_infill_speed": "160", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145", + "internal_solid_infill_speed": "150" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker (0.2 nozzle).json index 09d5e2d93f..29567647ae 100644 --- a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker (0.2 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.2 nozzle)", "Snapmaker A250 QSKit (0.2 nozzle)", "Snapmaker A350 QSKit (0.2 nozzle)", + "Snapmaker A250 BKit (0.2 nozzle)", + "Snapmaker A350 BKit (0.2 nozzle)", + "Snapmaker A250 QS+B Kit (0.2 nozzle)", + "Snapmaker A350 QS+B Kit (0.2 nozzle)", "Snapmaker A250 Dual QSKit (0.2 nozzle)", - "Snapmaker A350 Dual QSKit (0.2 nozzle)" + "Snapmaker A350 Dual QSKit (0.2 nozzle)", + "Snapmaker A250 Dual BKit (0.2 nozzle)", + "Snapmaker A350 Dual BKit (0.2 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)" ], "layer_height": "0.14", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker Artisan (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker Artisan (0.2 nozzle).json new file mode 100644 index 0000000000..06f70315ba --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker Artisan (0.2 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.14 Standard @Snapmaker Artisan (0.2 nozzle)", + "setting_id": "1624466618", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.2 nozzle)" + ], + "layer_height": "0.14", + "wall_loops": "4", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_infill_speed": "80" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker J1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker J1 (0.2 nozzle).json index 78827b2172..9370091a51 100644 --- a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker J1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker J1 (0.2 nozzle).json @@ -10,8 +10,8 @@ ], "layer_height": "0.14", "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", + "bottom_shell_layers": "4", + "top_shell_layers": "5", "bridge_flow": "1", "line_width": "0.22", "outer_wall_line_width": "0.22", @@ -21,15 +21,5 @@ "internal_solid_infill_line_width": "0.22", "support_line_width": "0.22", "top_surface_line_width": "0.22", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "gap_infill_speed": "120", - "inner_wall_speed": "200", - "internal_solid_infill_speed": "200", - "support_interface_speed": "40", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "initial_layer_infill_speed": "80" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker (0.4 nozzle).json index 0e68e7b1b0..119ae1e3e5 100644 --- a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "layer_height": "0.16", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..e2547e522b --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,20 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.16 Optimal @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "2870109378", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "layer_height": "0.16", + "elefant_foot_compensation": "0.15", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "bridge_flow": "1", + "support_threshold_angle": "25", + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker J1 (0.4 nozzle).json index 3872ca6e36..77a170ef61 100644 --- a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker J1 (0.4 nozzle).json @@ -11,17 +11,10 @@ "layer_height": "0.16", "elefant_foot_compensation": "0.15", "bottom_shell_layers": "4", + "top_shell_layers": "5", "top_shell_thickness": "0.6", "bridge_flow": "1", "support_threshold_angle": "25", - "initial_layer_infill_speed": "60", - "inner_wall_speed": "200", - "internal_solid_infill_speed": "200", - "outer_wall_speed": "80", - "sparse_infill_speed": "140", - "top_surface_speed": "80", - "gap_infill_speed": "160", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "initial_layer_infill_speed": "80", + "inner_wall_speed": "145" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker (0.6 nozzle).json index 064c5a4b24..fa83e160f8 100644 --- a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.18", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..0993b70654 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,22 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.18 Standard @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "3721468026", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.18", + "wall_loops": "2", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker J1 (0.6 nozzle).json index 822b4189be..a514ec6870 100644 --- a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker J1 (0.6 nozzle).json @@ -19,15 +19,6 @@ "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", "top_surface_line_width": "0.62", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "support_interface_speed": "35" + "inner_wall_speed": "145", + "internal_solid_infill_speed": "150" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker (0.4 nozzle).json index 075efd986b..6780e6f04e 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "elefant_foot_compensation": "0.15", "initial_layer_infill_speed": "60", diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..107a05eccf --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,12 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.20 Standard @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "864558918", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "elefant_foot_compensation": "0.15" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker J1 (0.4 nozzle).json index 2e8d4d0f18..54bd710c1e 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker J1 (0.4 nozzle).json @@ -8,14 +8,5 @@ "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)" ], - "elefant_foot_compensation": "0.15", - "outer_wall_speed": "140", - "inner_wall_speed": "240", - "sparse_infill_speed": "300", - "internal_solid_infill_speed": "240", - "top_surface_speed": "140", - "gap_infill_speed": "240", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "elefant_foot_compensation": "0.15" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker (0.4 nozzle).json index 832d265b24..1d57dc1427 100644 --- a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "elefant_foot_compensation": "0.15", "wall_loops": "6", diff --git a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..de5b6b2cad --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,15 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.20 Strength @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "1825586885", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "elefant_foot_compensation": "0.15", + "wall_loops": "6", + "bottom_shell_layers": "4", + "sparse_infill_density": "25%" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker J1 (0.4 nozzle).json index 4b03f36e16..3bf46734bd 100644 --- a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker J1 (0.4 nozzle).json @@ -10,15 +10,6 @@ ], "elefant_foot_compensation": "0.15", "wall_loops": "6", - "outer_wall_speed": "120", - "top_surface_speed": "120", - "sparse_infill_density": "25%", - "gap_infill_speed": "160", - "initial_layer_infill_speed": "65", - "inner_wall_speed": "200", - "internal_solid_infill_speed": "200", - "sparse_infill_speed": "160", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "bottom_shell_layers": "4", + "sparse_infill_density": "25%" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker (0.4 nozzle).json index 52f1e24065..17089131eb 100644 --- a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "layer_height": "0.24", "elefant_foot_compensation": "0.15", diff --git a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..43947ed427 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,18 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.24 Draft @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "2003861482", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "layer_height": "0.24", + "elefant_foot_compensation": "0.15", + "top_surface_line_width": "0.45", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "support_threshold_angle": "35", + "initial_layer_infill_speed": "65" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker J1 (0.4 nozzle).json index a7609b7a3b..23877e116c 100644 --- a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker J1 (0.4 nozzle).json @@ -14,13 +14,5 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "support_threshold_angle": "35", - "initial_layer_infill_speed": "65", - "inner_wall_speed": "190", - "internal_solid_infill_speed": "190", - "sparse_infill_speed": "160", - "top_surface_speed": "160", - "gap_infill_speed": "160", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "initial_layer_infill_speed": "65" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.6 nozzle).json index 75d8c107ba..4c1635b046 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.24", "wall_loops": "2", diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.8 nozzle).json index fe005c6d89..f14c178747 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker (0.8 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.8 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)" ], "layer_height": "0.24", "wall_loops": "2", @@ -26,7 +34,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "90", diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..b01cefd7e4 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,22 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.24 Standard @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "4094373563", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.24", + "wall_loops": "2", + "top_shell_layers": "3", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker Artisan (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker Artisan (0.8 nozzle).json new file mode 100644 index 0000000000..4affcd8001 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker Artisan (0.8 nozzle).json @@ -0,0 +1,23 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.24 Standard @Snapmaker Artisan (0.8 nozzle)", + "setting_id": "1019868457", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.8 nozzle)" + ], + "layer_height": "0.24", + "initial_layer_print_height": "0.3", + "wall_loops": "2", + "top_shell_layers": "3", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.6 nozzle).json index db6de9e9c7..8fb9f65bc8 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.6 nozzle).json @@ -18,16 +18,5 @@ "inner_wall_line_width": "0.62", "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", - "top_surface_line_width": "0.62", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "support_interface_speed": "35" + "top_surface_line_width": "0.62" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.8 nozzle).json index ae3070e3ab..e05c3bd7df 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker J1 (0.8 nozzle).json @@ -19,19 +19,5 @@ "inner_wall_line_width": "0.82", "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", - "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "support_interface_speed": "35" + "top_surface_line_width": "0.82" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..6cb96ddab1 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,60 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.25 Benchy @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "2853588009", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "elefant_foot_compensation": "0.15", + "top_shell_layers": "3", + "top_shell_thickness": "0.5", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "180", + "outer_wall_speed": "180", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "180", + "gap_infill_speed": "200", + "ironing_speed": "30", + "enable_overhang_speed": "0", + "overhang_1_4_speed": "180", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "10", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "detect_overhang_wall": "0", + "reduce_crossing_wall": "0", + "ensure_vertical_shell_thickness": "none", + "filename_format": "ArtisanBenchy_{print_time}.gcode", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "alignedrectilinear", + "wall_generator": "classic", + "seam_position": "nearest", + "wall_loops": "2", + "minimum_sparse_infill_area": "0", + "infill_combination": "1", + "infill_direction": "90", + "gap_fill_target": "nowhere", + "line_width": "0.4", + "inner_wall_line_width": "0.5", + "internal_solid_infill_line_width": "0.5", + "outer_wall_line_width": "0.5", + "sparse_infill_line_width": "0.5", + "top_surface_line_width": "0.5", + "bottom_shell_layers": "2", + "initial_layer_travel_speed": "100%", + "bridge_acceleration": "3000", + "bridge_speed": "100", + "default_acceleration": "3000", + "inner_wall_acceleration": "3000", + "internal_solid_infill_acceleration": "3000", + "outer_wall_acceleration": "1600", + "small_perimeter_speed": "200", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "3000", + "initial_layer_acceleration": "1600" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker J1 (0.4 nozzle).json index 3aed2018f2..da364c6b57 100644 --- a/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.25 Benchy @Snapmaker J1 (0.4 nozzle).json @@ -9,47 +9,52 @@ "Snapmaker J1 (0.4 nozzle)" ], "elefant_foot_compensation": "0.15", + "top_shell_layers": "3", "top_shell_thickness": "0.5", - "initial_layer_infill_speed": "60", + "initial_layer_speed": "120", + "initial_layer_infill_speed": "200", "outer_wall_speed": "180", "inner_wall_speed": "280", "sparse_infill_speed": "200", "internal_solid_infill_speed": "280", "top_surface_speed": "200", "gap_infill_speed": "280", + "ironing_speed": "30", "enable_overhang_speed": "0", "overhang_1_4_speed": "150", "overhang_2_4_speed": "20", - "overhang_3_4_speed": "10", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", "detect_overhang_wall": "0", "reduce_crossing_wall": "0", - "ensure_vertical_shell_thickness": "0", + "ensure_vertical_shell_thickness": "none", "filename_format": "J1Benchy_{print_time}.gcode", "sparse_infill_density": "10%", + "sparse_infill_pattern": "alignedrectilinear", "wall_generator": "classic", "seam_position": "nearest", "wall_loops": "2", - "only_one_wall_top": "1", - "only_one_wall_first_layer": "1", - "resolution": "0.05", "minimum_sparse_infill_area": "0", "infill_combination": "1", - "line_width": "0.5", + "infill_direction": "90", + "gap_fill_target": "nowhere", + "line_width": "0.4", "inner_wall_line_width": "0.5", - "initial_layer_print_height": "0.25", "internal_solid_infill_line_width": "0.5", "outer_wall_line_width": "0.5", "sparse_infill_line_width": "0.5", - "support_line_width": "0.5", "top_surface_line_width": "0.5", + "bottom_shell_layers": "2", + "initial_layer_travel_speed": "100%", "bridge_acceleration": "3000", "bridge_speed": "180", "default_acceleration": "15000", "inner_wall_acceleration": "15000", "internal_solid_infill_acceleration": "20000", - "outer_wall_acceleration": "3000", + "outer_wall_acceleration": "5000", "small_perimeter_speed": "200", "sparse_infill_acceleration": "15000", "top_surface_acceleration": "8000", - "travel_acceleration": "28000" + "travel_acceleration": "28000", + "initial_layer_acceleration": "5000" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker (0.4 nozzle).json index 7a5407da27..1fa3b0654e 100644 --- a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker (0.4 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.4 nozzle)", "Snapmaker A250 QSKit (0.4 nozzle)", "Snapmaker A350 QSKit (0.4 nozzle)", + "Snapmaker A250 BKit (0.4 nozzle)", + "Snapmaker A350 BKit (0.4 nozzle)", + "Snapmaker A250 QS+B Kit (0.4 nozzle)", + "Snapmaker A350 QS+B Kit (0.4 nozzle)", "Snapmaker A250 Dual QSKit (0.4 nozzle)", - "Snapmaker A350 Dual QSKit (0.4 nozzle)" + "Snapmaker A350 Dual QSKit (0.4 nozzle)", + "Snapmaker A250 Dual BKit (0.4 nozzle)", + "Snapmaker A350 Dual BKit (0.4 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.4 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.4 nozzle)" ], "layer_height": "0.28", "elefant_foot_compensation": "0.15", @@ -21,6 +29,7 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "support_threshold_angle": "40", + "wall_loops": "2", "initial_layer_infill_speed": "65", "outer_wall_speed": "85", "inner_wall_speed": "95", diff --git a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker Artisan (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker Artisan (0.4 nozzle).json new file mode 100644 index 0000000000..0780fd81b3 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker Artisan (0.4 nozzle).json @@ -0,0 +1,19 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.28 Extra Draft @Snapmaker Artisan (0.4 nozzle)", + "setting_id": "3141987096", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.4 nozzle)" + ], + "layer_height": "0.28", + "elefant_foot_compensation": "0.15", + "top_surface_line_width": "0.45", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "support_threshold_angle": "40", + "wall_loops": "2", + "initial_layer_infill_speed": "65" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker J1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker J1 (0.4 nozzle).json index b3831aaea2..b18c01c857 100644 --- a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker J1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker J1 (0.4 nozzle).json @@ -14,12 +14,6 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "support_threshold_angle": "40", - "initial_layer_infill_speed": "65", - "inner_wall_speed": "180", - "sparse_infill_speed": "160", - "top_surface_speed": "150", - "gap_infill_speed": "160", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10" + "wall_loops": "2", + "initial_layer_infill_speed": "65" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker (0.6 nozzle).json index 49bf34e10e..74c8bb139d 100644 --- a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.3", "top_shell_layers": "3", @@ -26,6 +34,7 @@ "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", "top_surface_line_width": "0.62", + "wall_loops": "2", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "75", diff --git a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..76d5d0013b --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.30 Standard @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "1517142331", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.3", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "wall_loops": "2", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker J1 (0.6 nozzle).json index 323c6ce9ae..1573baaf49 100644 --- a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker J1 (0.6 nozzle).json @@ -19,15 +19,7 @@ "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", "top_surface_line_width": "0.62", - "initial_layer_speed": "35", + "wall_loops": "2", "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "support_interface_speed": "35" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker (0.6 nozzle).json index 72a85a87d3..471106ef3e 100644 --- a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.3", "top_shell_layers": "3", diff --git a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..f564a36bc4 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,26 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.30 Strength @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "87417016", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.3", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "wall_loops": "5", + "sparse_infill_density": "25%", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker J1 (0.6 nozzle).json index b2fc14f58e..03e484da04 100644 --- a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker J1 (0.6 nozzle).json @@ -19,17 +19,8 @@ "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", "top_surface_line_width": "0.62", - "wall_loops": "6", + "wall_loops": "5", "sparse_infill_density": "25%", - "initial_layer_speed": "35", "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "support_interface_speed": "35" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker (0.8 nozzle).json index 93bb0015a1..02058c5dfd 100644 --- a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker (0.8 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.8 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)" ], "layer_height": "0.32", "wall_loops": "2", @@ -27,7 +35,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "75", diff --git a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker Artisan (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker Artisan (0.8 nozzle).json new file mode 100644 index 0000000000..51103f3941 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker Artisan (0.8 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.32 Standard @Snapmaker Artisan (0.8 nozzle)", + "setting_id": "195892532", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.8 nozzle)" + ], + "layer_height": "0.32", + "wall_loops": "2", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker J1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker J1 (0.8 nozzle).json index 07017dbce5..37769e42d4 100644 --- a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker J1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker J1 (0.8 nozzle).json @@ -20,18 +20,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "support_interface_speed": "35" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker (0.6 nozzle).json index 4449b024c9..c8da8c4505 100644 --- a/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.34", "wall_loops": "2", @@ -27,7 +35,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", "gap_infill_speed": "50", "initial_layer_infill_speed": "55", "initial_layer_speed": "35", diff --git a/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..836464a00e --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.34 Standard @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "3004749888", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.34", + "wall_loops": "2", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker J1 (0.6 nozzle).json index 3eaae555ca..37b2265fdf 100644 --- a/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.34 Standard @Snapmaker J1 (0.6 nozzle).json @@ -20,16 +20,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "gap_infill_speed": "50", "initial_layer_infill_speed": "55", - "initial_layer_speed": "35", - "inner_wall_speed": "150", - "internal_solid_infill_speed": "150", - "outer_wall_speed": "120", - "sparse_infill_speed": "100", - "support_interface_speed": "35", - "top_surface_speed": "150", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker (0.8 nozzle).json index 97b8429378..09d8603d8f 100644 --- a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker (0.8 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.8 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)" ], "layer_height": "0.36", "wall_loops": "2", @@ -27,7 +35,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", "gap_infill_speed": "50", "initial_layer_infill_speed": "55", "initial_layer_speed": "35", diff --git a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker Artisan (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker Artisan (0.8 nozzle).json new file mode 100644 index 0000000000..cc48b094d9 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker Artisan (0.8 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.36 Standard @Snapmaker Artisan (0.8 nozzle)", + "setting_id": "3805809743", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.8 nozzle)" + ], + "layer_height": "0.36", + "wall_loops": "2", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker J1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker J1 (0.8 nozzle).json index 7830c7cb83..f76c40b967 100644 --- a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker J1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker J1 (0.8 nozzle).json @@ -20,18 +20,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "gap_infill_speed": "50", "initial_layer_infill_speed": "55", - "initial_layer_speed": "35", - "inner_wall_speed": "150", - "internal_solid_infill_speed": "150", - "outer_wall_speed": "120", - "sparse_infill_speed": "100", - "support_interface_speed": "35", - "top_surface_speed": "150", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker (0.6 nozzle).json index d2e7d337f3..803c9d21c9 100644 --- a/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.38", "wall_loops": "2", @@ -27,7 +35,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", "gap_infill_speed": "50", "initial_layer_infill_speed": "55", "initial_layer_speed": "35", diff --git a/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..ba2d953ab1 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.38 Standard @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "1408693644", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.38", + "wall_loops": "2", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker J1 (0.6 nozzle).json index 5755a88be0..9c7105cdf6 100644 --- a/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.38 Standard @Snapmaker J1 (0.6 nozzle).json @@ -20,16 +20,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "gap_infill_speed": "50", "initial_layer_infill_speed": "55", - "initial_layer_speed": "35", - "inner_wall_speed": "150", - "internal_solid_infill_speed": "150", - "outer_wall_speed": "120", - "sparse_infill_speed": "100", - "support_interface_speed": "35", - "top_surface_speed": "150", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker (0.8 nozzle).json index ea1670e0c3..2604772bce 100644 --- a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker (0.8 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.8 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)" ], "layer_height": "0.4", "top_shell_layers": "3", @@ -26,7 +34,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", + "wall_loops": "2", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "75", diff --git a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker Artisan (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker Artisan (0.8 nozzle).json new file mode 100644 index 0000000000..37e1bd3458 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker Artisan (0.8 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.40 Standard @Snapmaker Artisan (0.8 nozzle)", + "setting_id": "2628115465", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.8 nozzle)" + ], + "layer_height": "0.4", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "wall_loops": "2", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker J1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker J1 (0.8 nozzle).json index 74c2ab7f8b..51fd196ebb 100644 --- a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker J1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker J1 (0.8 nozzle).json @@ -19,18 +19,7 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", + "wall_loops": "2", "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "support_interface_speed": "35" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker (0.6 nozzle).json index f7da29784a..9bf1ccc285 100644 --- a/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker (0.6 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.6 nozzle)", "Snapmaker A250 QSKit (0.6 nozzle)", "Snapmaker A350 QSKit (0.6 nozzle)", + "Snapmaker A250 BKit (0.6 nozzle)", + "Snapmaker A350 BKit (0.6 nozzle)", + "Snapmaker A250 QS+B Kit (0.6 nozzle)", + "Snapmaker A350 QS+B Kit (0.6 nozzle)", "Snapmaker A250 Dual QSKit (0.6 nozzle)", - "Snapmaker A350 Dual QSKit (0.6 nozzle)" + "Snapmaker A350 Dual QSKit (0.6 nozzle)", + "Snapmaker A250 Dual BKit (0.6 nozzle)", + "Snapmaker A350 Dual BKit (0.6 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.6 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.6 nozzle)" ], "layer_height": "0.42", "wall_loops": "2", diff --git a/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker Artisan (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker Artisan (0.6 nozzle).json new file mode 100644 index 0000000000..af11989579 --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker Artisan (0.6 nozzle).json @@ -0,0 +1,25 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.42 Draft @Snapmaker Artisan (0.6 nozzle)", + "setting_id": "1891109323", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.6 nozzle)" + ], + "layer_height": "0.42", + "wall_loops": "2", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker J1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker J1 (0.6 nozzle).json index 23abeb1ed7..2ca0c16a98 100644 --- a/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker J1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.42 Draft @Snapmaker J1 (0.6 nozzle).json @@ -20,15 +20,6 @@ "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", "top_surface_line_width": "0.62", - "initial_layer_speed": "35", "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "support_interface_speed": "35" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker (0.8 nozzle).json index 733d0bc492..3b79307201 100644 --- a/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker (0.8 nozzle).json @@ -12,8 +12,16 @@ "Snapmaker A350 Dual (0.8 nozzle)", "Snapmaker A250 QSKit (0.8 nozzle)", "Snapmaker A350 QSKit (0.8 nozzle)", + "Snapmaker A250 BKit (0.8 nozzle)", + "Snapmaker A350 BKit (0.8 nozzle)", + "Snapmaker A250 QS+B Kit (0.8 nozzle)", + "Snapmaker A350 QS+B Kit (0.8 nozzle)", "Snapmaker A250 Dual QSKit (0.8 nozzle)", - "Snapmaker A350 Dual QSKit (0.8 nozzle)" + "Snapmaker A350 Dual QSKit (0.8 nozzle)", + "Snapmaker A250 Dual BKit (0.8 nozzle)", + "Snapmaker A350 Dual BKit (0.8 nozzle)", + "Snapmaker A250 Dual QS+B Kit (0.8 nozzle)", + "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)" ], "layer_height": "0.48", "initial_layer_print_height": "0.4", @@ -28,7 +36,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", "initial_layer_speed": "35", "initial_layer_infill_speed": "55", "outer_wall_speed": "75", diff --git a/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker Artisan (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker Artisan (0.8 nozzle).json new file mode 100644 index 0000000000..477d70a63a --- /dev/null +++ b/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker Artisan (0.8 nozzle).json @@ -0,0 +1,26 @@ +{ + "type": "process", + "from": "system", + "instantiation": "true", + "name": "0.48 Draft @Snapmaker Artisan (0.8 nozzle)", + "setting_id": "1018401408", + "inherits": "fdm_process_a400", + "compatible_printers": [ + "Snapmaker Artisan (0.8 nozzle)" + ], + "layer_height": "0.48", + "initial_layer_print_height": "0.4", + "wall_loops": "2", + "top_shell_layers": "3", + "bridge_speed": "30", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "initial_layer_infill_speed": "55", + "initial_layer_speed": "40" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json index 9282498056..633be804e7 100644 --- a/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json @@ -21,18 +21,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", "initial_layer_infill_speed": "55", - "outer_wall_speed": "120", - "inner_wall_speed": "150", - "sparse_infill_speed": "100", - "internal_solid_infill_speed": "150", - "top_surface_speed": "150", - "gap_infill_speed": "50", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "support_interface_speed": "35" + "initial_layer_speed": "40" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/fdm_process_a400.json b/resources/profiles/Snapmaker/process/fdm_process_a400.json new file mode 100644 index 0000000000..90c851f116 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_a400.json @@ -0,0 +1,37 @@ +{ + "type": "process", + "from": "system", + "instantiation": "false", + "name": "fdm_process_a400", + "setting_id": "3085664947", + "inherits": "fdm_process_common", + "initial_layer_print_height": "0.2", + "enable_arc_fitting": "1", + "initial_layer_infill_speed": "75", + "outer_wall_speed": "145", + "inner_wall_speed": "160", + "sparse_infill_speed": "160", + "internal_solid_infill_speed": "160", + "gap_infill_speed": "160", + "support_speed": "100", + "overhang_1_4_speed": "0", + "travel_speed": "190", + "default_acceleration": "2000", + "inner_wall_acceleration": "2000", + "sparse_infill_acceleration": "2000", + "internal_solid_infill_acceleration": "2000", + "travel_acceleration": "3000", + "infill_jerk": "8", + "initial_layer_jerk": "8", + "outer_wall_jerk": "4", + "top_surface_jerk": "4", + "travel_jerk": "10", + "support_filament": "1", + "support_interface_filament": "2", + "support_top_z_distance": "0", + "support_bottom_z_distance": "0", + "support_interface_top_layers": "3", + "support_interface_pattern": "rectilinear", + "small_perimeter_threshold": "0", + "support_material_synchronize_layers": "1" +} \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/fdm_process_common.json b/resources/profiles/Snapmaker/process/fdm_process_common.json index af5fba9617..f35f39ffb1 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_common.json @@ -42,7 +42,7 @@ "bridge_density": "100%", "thick_bridges": "1", "top_solid_infill_flow_ratio": "1", - "bottom_solid_infill_flow_ratio": "1", + "bottom_solid_infill_flow_ratio": "1.2", "only_one_wall_top": "0", "only_one_wall_first_layer": "0", "detect_overhang_wall": "1", @@ -56,14 +56,14 @@ "print_flow_ratio": "1", "wall_loops": "3", "detect_thin_wall": "0", - "top_surface_pattern": "monotonicline", + "top_surface_pattern": "monotonic", "top_shell_layers": "4", "top_shell_thickness": "0.8", "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "cubic", "filter_out_gap_fill": "0", "infill_wall_overlap": "15%", "infill_direction": "45", @@ -84,7 +84,7 @@ "gap_infill_speed": "100", "support_speed": "80", "support_interface_speed": "50", - "ironing_speed": "50", + "ironing_speed": "35", "enable_overhang_speed": "1", "overhang_speed_classic": "0", "overhang_1_4_speed": "35", @@ -93,15 +93,15 @@ "overhang_4_4_speed": "10", "bridge_speed": "50", "travel_speed": "120", - "default_acceleration": "2000", + "default_acceleration": "1100", "outer_wall_acceleration": "1000", - "inner_wall_acceleration": "2000", + "inner_wall_acceleration": "1100", "bridge_acceleration": "1000", - "sparse_infill_acceleration": "2000", - "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "1100", + "internal_solid_infill_acceleration": "1100", "initial_layer_acceleration": "500", "top_surface_acceleration": "1000", - "travel_acceleration": "2000", + "travel_acceleration": "1100", "default_jerk": "0", "infill_jerk": "4", "initial_layer_jerk": "4", @@ -124,7 +124,7 @@ "support_interface_filament": "0", "tree_support_branch_distance": "5", "tree_support_branch_diameter": "5", - "tree_support_branch_angle": "30", + "tree_support_branch_angle": "15", "tree_support_wall_count": "2", "tree_support_adaptive_layer_height": "1", "tree_support_auto_brim": "1", @@ -149,7 +149,7 @@ "skirt_height": "1", "brim_type": "auto_brim", "brim_width": "5", - "brim_object_gap": "0.1", + "brim_object_gap": "0", "enable_prime_tower": "1", "prime_tower_width": "25", "prime_volume": "7.3", @@ -167,13 +167,13 @@ "reduce_infill_retraction": "1", "gcode_comments": "0", "gcode_add_line_number": "0", - "gcode_label_objects": "0", + "gcode_label_objects": "1", "filename_format": "{input_filename_base}_{layer_height}mm_{print_time}.gcode", "post_process": "", "enforce_support_layers": "0", - "exclude_object": "1", + "exclude_object": "0", "standby_temperature_delta": "-45", "timelapse_type": "0", - "single_extruder_multi_material_priming": "0", - "gap_fill_enabled": "0" + "gap_fill_enabled": "0", + "single_extruder_multi_material_priming": "0" } \ No newline at end of file diff --git a/resources/profiles/Snapmaker/process/fdm_process_idex.json b/resources/profiles/Snapmaker/process/fdm_process_idex.json index bfaa964a0c..7682a1e12d 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_idex.json +++ b/resources/profiles/Snapmaker/process/fdm_process_idex.json @@ -8,27 +8,27 @@ "initial_layer_print_height": "0.2", "enable_arc_fitting": "1", "initial_layer_infill_speed": "75", - "outer_wall_speed": "100", + "outer_wall_speed": "145", "inner_wall_speed": "250", - "sparse_infill_speed": "150", - "internal_solid_infill_speed": "180", - "gap_infill_speed": "150", + "sparse_infill_speed": "250", + "internal_solid_infill_speed": "250", + "gap_infill_speed": "250", "support_speed": "100", - "ironing_speed": "30", - "travel_speed": "350", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "travel_speed": "300", "default_acceleration": "10000", - "outer_wall_acceleration": "5000", - "inner_wall_acceleration": "10000", + "inner_wall_acceleration": "6000", "bridge_acceleration": "2000", "sparse_infill_acceleration": "10000", "internal_solid_infill_acceleration": "10000", "top_surface_acceleration": "2000", - "travel_acceleration": "12000", - "infill_jerk": "9", - "initial_layer_jerk": "9", - "inner_wall_jerk": "9", - "outer_wall_jerk": "9", - "top_surface_jerk": "9", + "travel_acceleration": "10000", + "infill_jerk": "8", + "initial_layer_jerk": "8", + "outer_wall_jerk": "4", + "top_surface_jerk": "4", "travel_jerk": "10", "support_filament": "1", "support_interface_filament": "2", diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index 1139c9f816..000c72cc9e 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ @@ -32,6 +32,10 @@ { "name": "Sovol SV07 Plus", "sub_path": "machine/Sovol SV07 Plus.json" + }, + { + "name": "Sovol SV08", + "sub_path": "machine/Sovol SV08.json" } ], "process_list": [ @@ -94,6 +98,26 @@ { "name": "0.20mm Standard @Sovol SV07 Plus", "sub_path": "process/0.20mm Standard @Sovol SV07Plus.json" + }, + { + "name": "0.10mm Standard @Sovol SV08 0.2 nozzle", + "sub_path": "process/0.10mm Standard @Sovol SV08 0.2 nozzle.json" + }, + { + "name": "0.20mm Standard @Sovol SV08 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Sovol SV08 0.4 nozzle.json" + }, + { + "name": "0.30mm Standard @Sovol SV08 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Sovol SV08 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Sovol SV08 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Sovol SV08 0.8 nozzle.json" + }, + { + "name": "0.20mm High-Speed @Sovol SV06", + "sub_path": "process/0.20mm High-Speed @Sovol SV06.json" } ], "filament_list": [ @@ -113,6 +137,10 @@ "name": "fdm_filament_pla", "sub_path": "filament/fdm_filament_pla.json" }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, { "name": "Sovol Generic ABS", "sub_path": "filament/Sovol Generic ABS.json" @@ -124,6 +152,34 @@ { "name": "Sovol Generic PLA", "sub_path": "filament/Sovol Generic PLA.json" + }, + { + "name": "Sovol Generic TPU", + "sub_path": "filament/Sovol Generic TPU.json" + }, + { + "name": "Sovol SV07 PLA", + "sub_path": "filament/Sovol SV07 PLA.json" + }, + { + "name": "Sovol SV08 PLA", + "sub_path": "filament/Sovol SV08 PLA.json" + }, + { + "name": "Sovol SV08 PLA @SV08 0.2 nozzle", + "sub_path": "filament/Sovol SV08 PLA @SV08 0.2 nozzle.json" + }, + { + "name": "Sovol SV08 ABS", + "sub_path": "filament/Sovol SV08 ABS.json" + }, + { + "name": "Sovol SV08 PETG", + "sub_path": "filament/Sovol SV08 PETG.json" + }, + { + "name": "Sovol SV08 TPU", + "sub_path": "filament/Sovol SV08 TPU.json" } ], "machine_list": [ @@ -158,6 +214,22 @@ { "name": "Sovol SV07 Plus 0.4 nozzle", "sub_path": "machine/Sovol SV07 Plus 0.4 nozzle.json" + }, + { + "name": "Sovol SV08 0.2 nozzle", + "sub_path": "machine/Sovol SV08 0.2 nozzle.json" + }, + { + "name": "Sovol SV08 0.4 nozzle", + "sub_path": "machine/Sovol SV08 0.4 nozzle.json" + }, + { + "name": "Sovol SV08 0.6 nozzle", + "sub_path": "machine/Sovol SV08 0.6 nozzle.json" + }, + { + "name": "Sovol SV08 0.8 nozzle", + "sub_path": "machine/Sovol SV08 0.8 nozzle.json" } ] } diff --git a/resources/profiles/Sovol/Sovol SV08_cover.png b/resources/profiles/Sovol/Sovol SV08_cover.png new file mode 100644 index 0000000000..2081d83d2c Binary files /dev/null and b/resources/profiles/Sovol/Sovol SV08_cover.png differ diff --git a/resources/profiles/Sovol/filament/Sovol Generic TPU.json b/resources/profiles/Sovol/filament/Sovol Generic TPU.json new file mode 100644 index 0000000000..511ab16ecb --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol Generic TPU.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "Sovol Generic TPU", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Sovol SV01 Pro 0.4 nozzle", + "Sovol SV02 0.4 nozzle", + "Sovol SV05 0.4 nozzle", + "Sovol SV06 0.4 nozzle", + "Sovol SV06 Plus 0.4 nozzle", + "Sovol SV07 0.4 nozzle", + "Sovol SV07 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json b/resources/profiles/Sovol/filament/Sovol SV07 PLA.json new file mode 100644 index 0000000000..9a977e92ad --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol SV07 PLA.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Sovol SV07 PLA", + "from": "system", + "instantiation": "true", + "inherits": "Sovol Generic PLA", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": ["24"], + "filament_retraction_length": ["0.5"], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV07 0.4 nozzle" + ], + "fan_min_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "50" + ], + "fan_max_speed": [ + "100" + ], + "slow_down_layer_time": [ + "6" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "200" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json new file mode 100644 index 0000000000..dc51fb5b67 --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json @@ -0,0 +1,75 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Sovol SV08 ABS", + "from": "system", + "instantiation": "true", + "inherits": "Sovol Generic ABS", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": ["21"], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp": [ + "95" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "30" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "temperature_vitrification": [ + "60" + ], + "activate_air_filtration": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "is_custom_defined": "0", + "compatible_printers": [ + "Sovol SV08 0.2 nozzle", + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json new file mode 100644 index 0000000000..6f2a8f041d --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json @@ -0,0 +1,74 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Sovol SV08 PETG", + "from": "system", + "instantiation": "true", + "inherits": "Sovol Generic PETG", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": [ + "17" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "fan_min_speed": [ + "30" + ], + "fan_max_speed": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "temperature_vitrification": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_z_hop": [ + "0.4" + ], + "is_custom_defined": "0", + "compatible_printers": [ + "Sovol SV08 0.2 nozzle", + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json new file mode 100644 index 0000000000..09a5db4744 --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json @@ -0,0 +1,62 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Sovol SV08 PLA @SV08 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Sovol Generic PLA", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": ["10"], + "compatible_printers": [ + "Sovol SV08 0.2 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "fan_min_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json new file mode 100644 index 0000000000..fbf3fa6802 --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Sovol SV08 PLA", + "from": "system", + "instantiation": "true", + "inherits": "Sovol Generic PLA", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": ["21"], + "compatible_printers": [ + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "fan_min_speed": [ + "50" + ], + "fan_max_speed": [ + "70" + ], + "fan_cooling_layer_time": [ + "50" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json new file mode 100644 index 0000000000..aeefdaac18 --- /dev/null +++ b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json @@ -0,0 +1,68 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Sovol SV08 TPU", + "from": "system", + "instantiation": "true", + "inherits": "Sovol Generic TPU", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": [ + "3.6" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "fan_cooling_layer_time": [ + "50" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ], + "filament_z_hop": [ + "0.4" + ], + "is_custom_defined": "0", + "compatible_printers": [ + "Sovol SV08 0.2 nozzle", + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/fdm_filament_abs.json b/resources/profiles/Sovol/filament/fdm_filament_abs.json index a3a4574810..1ada3b4ae1 100644 --- a/resources/profiles/Sovol/filament/fdm_filament_abs.json +++ b/resources/profiles/Sovol/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" : [ - "80" - ], - "eng_plate_temp" : [ - "80" - ], - "hot_plate_temp" : [ - "80" - ], - "textured_plate_temp" : [ - "80" - ], - "cool_plate_temp_initial_layer" : [ - "80" - ], - "eng_plate_temp_initial_layer" : [ - "80" - ], - "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": [ - "30" - ], - "filament_max_volumetric_speed": [ - "0" - ], - "filament_type": [ - "ABS" - ], - "filament_density": [ - "1.10" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "5" - ], - "fan_min_speed": [ - "5" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "235" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "235" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "15" - ] -} +{ + "type": "filament", + "name": "fdm_filament_abs", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "80" + ], + "eng_plate_temp" : [ + "80" + ], + "hot_plate_temp" : [ + "80" + ], + "textured_plate_temp" : [ + "80" + ], + "cool_plate_temp_initial_layer" : [ + "80" + ], + "eng_plate_temp_initial_layer" : [ + "80" + ], + "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": [ + "30" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "ABS" + ], + "filament_density": [ + "1.10" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "5" + ], + "fan_min_speed": [ + "5" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "235" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "235" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Sovol/filament/fdm_filament_common.json b/resources/profiles/Sovol/filament/fdm_filament_common.json index 9f77975119..e8244c65c4 100644 --- a/resources/profiles/Sovol/filament/fdm_filament_common.json +++ b/resources/profiles/Sovol/filament/fdm_filament_common.json @@ -1,144 +1,144 @@ -{ - "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" - ], - "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 gcode\n" - ], - "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" + ], + "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 gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/Sovol/filament/fdm_filament_pet.json b/resources/profiles/Sovol/filament/fdm_filament_pet.json index 0c65253151..58fd5baf30 100644 --- a/resources/profiles/Sovol/filament/fdm_filament_pet.json +++ b/resources/profiles/Sovol/filament/fdm_filament_pet.json @@ -1,82 +1,82 @@ -{ - "type": "filament", - "name": "fdm_filament_pet", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "85" - ], - "eng_plate_temp" : [ - "85" - ], - "hot_plate_temp" : [ - "85" - ], - "textured_plate_temp" : [ - "85" - ], - "cool_plate_temp_initial_layer" : [ - "85" - ], - "eng_plate_temp_initial_layer" : [ - "85" - ], - "hot_plate_temp_initial_layer" : [ - "85" - ], - "textured_plate_temp_initial_layer" : [ - "85" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "15" - ], - "filament_max_volumetric_speed": [ - "0" - ], - "filament_type": [ - "PETG" - ], - "filament_density": [ - "1.27" - ], - "filament_cost": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "50" - ], - "nozzle_temperature": [ - "235" - ], - "temperature_vitrification": [ - "80" - ], - "nozzle_temperature_range_low": [ - "235" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "85" + ], + "eng_plate_temp" : [ + "85" + ], + "hot_plate_temp" : [ + "85" + ], + "textured_plate_temp" : [ + "85" + ], + "cool_plate_temp_initial_layer" : [ + "85" + ], + "eng_plate_temp_initial_layer" : [ + "85" + ], + "hot_plate_temp_initial_layer" : [ + "85" + ], + "textured_plate_temp_initial_layer" : [ + "85" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "15" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "PETG" + ], + "filament_density": [ + "1.27" + ], + "filament_cost": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "50" + ], + "nozzle_temperature": [ + "235" + ], + "temperature_vitrification": [ + "80" + ], + "nozzle_temperature_range_low": [ + "235" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Sovol/filament/fdm_filament_pla.json b/resources/profiles/Sovol/filament/fdm_filament_pla.json index 1111af5b8d..b5403a0855 100644 --- a/resources/profiles/Sovol/filament/fdm_filament_pla.json +++ b/resources/profiles/Sovol/filament/fdm_filament_pla.json @@ -1,91 +1,91 @@ -{ - "type": "filament", - "name": "fdm_filament_pla", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "0" - ], - "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" : [ - "55" - ], - "eng_plate_temp_initial_layer" : [ - "55" - ], - "hot_plate_temp_initial_layer" : [ - "55" - ], - "textured_plate_temp_initial_layer" : [ - "55" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "210" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "210" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "55" + ], + "eng_plate_temp_initial_layer" : [ + "55" + ], + "hot_plate_temp_initial_layer" : [ + "55" + ], + "textured_plate_temp_initial_layer" : [ + "55" + ], + "nozzle_temperature_initial_layer": [ + "205" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "210" + ], + "temperature_vitrification": [ + "100" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "210" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Sovol/filament/fdm_filament_tpu.json b/resources/profiles/Sovol/filament/fdm_filament_tpu.json new file mode 100644 index 0000000000..5a89993bd3 --- /dev/null +++ b/resources/profiles/Sovol/filament/fdm_filament_tpu.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "55" + ], + "eng_plate_temp_initial_layer" : [ + "55" + ], + "hot_plate_temp_initial_layer" : [ + "55" + ], + "textured_plate_temp_initial_layer" : [ + "55" + ], + "nozzle_temperature_initial_layer": [ + "205" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "210" + ], + "temperature_vitrification": [ + "100" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "210" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json index 5702397a43..a04e707cc3 100644 --- a/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json @@ -1,109 +1,109 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Sovol SV01 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Sovol SV01 Pro", - "default_print_profile": "0.20mm Standard @Sovol SV01Pro", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "280x0", - "280x240", - "0x240" - ], - "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": [ - "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": "Sovol", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "1" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Sovol 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": "GM001", + "name": "Sovol SV01 Pro 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV01 Pro", + "default_print_profile": "0.20mm Standard @Sovol SV01Pro", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "280x0", + "280x240", + "0x240" + ], + "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": [ + "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": "Sovol", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "1" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Sovol 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" } \ No newline at end of file diff --git a/resources/profiles/Sovol/machine/Sovol SV01 Pro.json b/resources/profiles/Sovol/machine/Sovol SV01 Pro.json index b7c47060eb..5bc220c62c 100644 --- a/resources/profiles/Sovol/machine/Sovol SV01 Pro.json +++ b/resources/profiles/Sovol/machine/Sovol SV01 Pro.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Sovol SV01 Pro", - "model_id": "Sovol-SV01-Pro", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Sovol", - "bed_model": "sovol_sv01pro_buildplate_model.stl", - "bed_texture": "sovol_sv01pro_buildplate_texture.png", - "hotend_model": "", - "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" -} +{ + "type": "machine_model", + "name": "Sovol SV01 Pro", + "model_id": "Sovol-SV01-Pro", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Sovol", + "bed_model": "sovol_sv01pro_buildplate_model.stl", + "bed_texture": "sovol_sv01pro_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" +} diff --git a/resources/profiles/Sovol/machine/Sovol SV02 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV02 0.4 nozzle.json index d3860a4c3b..9bb5c55d9f 100644 --- a/resources/profiles/Sovol/machine/Sovol SV02 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV02 0.4 nozzle.json @@ -1,141 +1,141 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Sovol SV02 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Sovol SV02", - "default_print_profile": "0.20mm Standard @Sovol SV02", - "nozzle_diameter": [ - "0.4", - "0.4" - ], - "extruder_colour": [ - "#FCE94F", - "#FCE94F" - ], - "extruder_offset": [ - "0x0", - "0x0" - ], - "printable_area": [ - "0x0", - "280x0", - "280x240", - "0x240" - ], - "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": [ - "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": "Sovol", - "retraction_minimum_travel": [ - "2", - "2" - ], - "retract_before_wipe": [ - "70%", - "70%" - ], - "retraction_length": [ - "6", - "6" - ], - "retract_length_toolchange": [ - "1", - "1" - ], - "retract_when_changing_layer": [ - "1", - "1" - ], - "retract_restart_extra": [ - "0", - "0" - ], - "retract_restart_extra_toolchange": [ - "0", - "0" - ], - "deretraction_speed": [ - "60", - "60" - ], - "wipe": [ - "1", - "1" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Sovol 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 ; 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": "GM001", + "name": "Sovol SV02 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV02", + "default_print_profile": "0.20mm Standard @Sovol SV02", + "nozzle_diameter": [ + "0.4", + "0.4" + ], + "extruder_colour": [ + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0" + ], + "printable_area": [ + "0x0", + "280x0", + "280x240", + "0x240" + ], + "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": [ + "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": "Sovol", + "retraction_minimum_travel": [ + "2", + "2" + ], + "retract_before_wipe": [ + "70%", + "70%" + ], + "retraction_length": [ + "6", + "6" + ], + "retract_length_toolchange": [ + "1", + "1" + ], + "retract_when_changing_layer": [ + "1", + "1" + ], + "retract_restart_extra": [ + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "0", + "0" + ], + "deretraction_speed": [ + "60", + "60" + ], + "wipe": [ + "1", + "1" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Sovol 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 ; 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/Sovol/machine/Sovol SV02.json b/resources/profiles/Sovol/machine/Sovol SV02.json index 4ffc265976..887e496425 100644 --- a/resources/profiles/Sovol/machine/Sovol SV02.json +++ b/resources/profiles/Sovol/machine/Sovol SV02.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Sovol SV02", - "model_id": "Sovol-SV02", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Sovol", - "bed_model": "sovol_sv02_buildplate_model.stl", - "bed_texture": "sovol_sv02_buildplate_texture.png", - "hotend_model": "", - "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" -} +{ + "type": "machine_model", + "name": "Sovol SV02", + "model_id": "Sovol-SV02", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Sovol", + "bed_model": "sovol_sv02_buildplate_model.stl", + "bed_texture": "sovol_sv02_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" +} diff --git a/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json index dc3a2aa435..f4e169a391 100644 --- a/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json @@ -1,109 +1,109 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Sovol SV05 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Sovol SV05", - "default_print_profile": "0.20mm Standard @Sovol SV05", - "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": "Sovol", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "2" - ], - "retract_length_toolchange": [ - "1" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "M600", - "machine_pause_gcode": "M0", - "default_filament_profile": [ - "Sovol 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": "GM001", + "name": "Sovol SV05 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV05", + "default_print_profile": "0.20mm Standard @Sovol SV05", + "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": "Sovol", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "2" + ], + "retract_length_toolchange": [ + "1" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "M600", + "machine_pause_gcode": "M0", + "default_filament_profile": [ + "Sovol 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" } \ No newline at end of file diff --git a/resources/profiles/Sovol/machine/Sovol SV05.json b/resources/profiles/Sovol/machine/Sovol SV05.json index 10e8082a86..db85cba8d1 100644 --- a/resources/profiles/Sovol/machine/Sovol SV05.json +++ b/resources/profiles/Sovol/machine/Sovol SV05.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Sovol SV05", - "model_id": "Sovol-SV05", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Sovol", - "bed_model": "sovol_sv05_buildplate_model.stl", - "bed_texture": "sovol_sv05_buildplate_texture.png", - "hotend_model": "", - "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" -} +{ + "type": "machine_model", + "name": "Sovol SV05", + "model_id": "Sovol-SV05", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Sovol", + "bed_model": "sovol_sv05_buildplate_model.stl", + "bed_texture": "sovol_sv05_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" +} diff --git a/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json index fec43b9303..9fa2344888 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json @@ -1,114 +1,114 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Sovol SV06 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Sovol SV06", - "default_print_profile": "0.20mm Standard @Sovol SV06", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "1000", - "1250" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1250" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "500", - "960" - ], - "machine_max_acceleration_y": [ - "500", - "960" - ], - "machine_max_acceleration_z": [ - "100", - "200" - ], - "machine_max_speed_e": [ - "30", - "120" - ], - "machine_max_speed_x": [ - "80", - "100" - ], - "machine_max_speed_y": [ - "80", - "100" - ], - "machine_max_speed_z": [ - "10", - "12" - ], - "machine_max_jerk_e": [ - "5", - "4.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.25" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Sovol", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "0.5" - ], - "retract_length_toolchange": [ - "4" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "30" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "machine_pause_gcode": "M601", - "default_filament_profile": [ - "Sovol Generic PLA" - ], - "machine_start_gcode": "G90 ; use absoulte coordinates\nM83 ; extruder relative mode\n\nM104 S150 ; set nozzle temp to 150\n\nG28 ; home all axes\nM420 S1 ;load mesh\n\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM104 S[nozzle_temperature_initial_layer] ; set final extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG1 X0.1 Y10 Z5.0 F1500 ; move to start position\nG1 Z0.26 F150 ; Move lower\nG4 S0.5 ; wait 0.5 seconds\n\nG1 X0.1 Y150 Z0.3 F1500 E10 ; prime the nozzle\nG1 X0.3 F1500\nG1 X0.4 Y15 Z0.3 F1500 E15 ; prime the nozzle\nG4 S0.1 ; wait 0.1 seconds\n\nG1 Z0.6 F150 ; lift nozzle\nG92 E0 ; Reset Extruder\nG1 Z2 F150 ; lift nozzle more\n", - "machine_end_gcode": "M117 READY\n\nG1 E0 F1000 ; reset extruder\n\nG91 ; relative positioning\nG1 Z2 F1000 ; lift nozzle\n\nG90 ; absolute positioning\nG27 P2 ; park extruder\n\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.0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV06 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV06", + "default_print_profile": "0.20mm Standard @Sovol SV06", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "1000", + "1250" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1250" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "500", + "960" + ], + "machine_max_acceleration_y": [ + "500", + "960" + ], + "machine_max_acceleration_z": [ + "100", + "200" + ], + "machine_max_speed_e": [ + "30", + "120" + ], + "machine_max_speed_x": [ + "80", + "100" + ], + "machine_max_speed_y": [ + "80", + "100" + ], + "machine_max_speed_z": [ + "10", + "12" + ], + "machine_max_jerk_e": [ + "5", + "4.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.25" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Sovol", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "4" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "machine_pause_gcode": "M601", + "default_filament_profile": [ + "Sovol Generic PLA" + ], + "machine_start_gcode": "G90 ; use absoulte coordinates\nM83 ; extruder relative mode\n\nM104 S150 ; set nozzle temp to 150\n\nG28 ; home all axes\nM420 S1 ;load mesh\n\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM104 S[nozzle_temperature_initial_layer] ; set final extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG1 X0.1 Y10 Z5.0 F1500 ; move to start position\nG1 Z0.26 F150 ; Move lower\nG4 S0.5 ; wait 0.5 seconds\n\nG1 X0.1 Y150 Z0.3 F1500 E10 ; prime the nozzle\nG1 X0.3 F1500\nG1 X0.4 Y15 Z0.3 F1500 E15 ; prime the nozzle\nG4 S0.1 ; wait 0.1 seconds\n\nG1 Z0.6 F150 ; lift nozzle\nG92 E0 ; Reset Extruder\nG1 Z2 F150 ; lift nozzle more\n", + "machine_end_gcode": "M117 READY\n\nG1 E0 F1000 ; reset extruder\n\nG91 ; relative positioning\nG1 Z2 F1000 ; lift nozzle\n\nG90 ; absolute positioning\nG27 P2 ; park extruder\n\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.0\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/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json index d75d181a11..fa81ddaedb 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json @@ -1,114 +1,114 @@ -{ - "type": "machine", - "setting_id": "GM001", - "name": "Sovol SV06 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Sovol SV06 Plus", - "default_print_profile": "0.20mm Standard @Sovol SV06Plus", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "300x0", - "300x300", - "0x300" - ], - "printable_height": "340", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_extruding": [ - "1000", - "1250" - ], - "machine_max_acceleration_retracting": [ - "1000", - "1250" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "1500", - "960" - ], - "machine_max_acceleration_y": [ - "1500", - "960" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_speed_e": [ - "120", - "120" - ], - "machine_max_speed_x": [ - "140", - "140" - ], - "machine_max_speed_y": [ - "140", - "140" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "4.5" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "0.4" - ], - "max_layer_height": [ - "0.25" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Sovol", - "retraction_minimum_travel": [ - "0.5" - ], - "retract_before_wipe": [ - "0%" - ], - "retraction_length": [ - "0.5" - ], - "retract_length_toolchange": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "30" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "machine_pause_gcode": "M601", - "default_filament_profile": [ - "Sovol Generic PLA" - ], - "machine_start_gcode": "G90 ; use absoulte coordinates\nM83 ; extruder relative mode\n\nM104 S150 ; set nozzle temp to 150\n\nG28 ; home all axes\nM420 S1 ;load mesh\n\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM104 S[nozzle_temperature_initial_layer] ; set final extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG1 X0.1 Y10 Z5.0 F1500 ; move to start position\nG1 Z0.26 F150 ; Move lower\nG4 S0.5 ; wait 0.5 seconds\n\nG1 X0.1 Y150 Z0.3 F1500 E10 ; prime the nozzle\nG1 X0.3 F1500\nG1 X0.4 Y15 Z0.3 F1500 E15 ; prime the nozzle\nG4 S0.1 ; wait 0.1 seconds\n\nG1 Z0.6 F150 ; lift nozzle\nG92 E0 ; Reset Extruder\nG1 Z2 F150 ; lift nozzle more\n", - "machine_end_gcode": "M117 READY\n\nG1 E0 F1000 ; reset extruder\n\nG91 ; relative positioning\nG1 Z2 F1000 ; lift nozzle\n\nG90 ; absolute positioning\nG27 P2 ; park extruder\n\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.0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV06 Plus 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV06 Plus", + "default_print_profile": "0.20mm Standard @Sovol SV06Plus", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "340", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "machine_max_acceleration_extruding": [ + "1000", + "1250" + ], + "machine_max_acceleration_retracting": [ + "1000", + "1250" + ], + "machine_max_acceleration_travel": [ + "1500", + "1250" + ], + "machine_max_acceleration_x": [ + "1500", + "960" + ], + "machine_max_acceleration_y": [ + "1500", + "960" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_speed_e": [ + "120", + "120" + ], + "machine_max_speed_x": [ + "140", + "140" + ], + "machine_max_speed_y": [ + "140", + "140" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "4.5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "0.4" + ], + "max_layer_height": [ + "0.25" + ], + "min_layer_height": [ + "0.07" + ], + "printer_settings_id": "Sovol", + "retraction_minimum_travel": [ + "0.5" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "machine_pause_gcode": "M601", + "default_filament_profile": [ + "Sovol Generic PLA" + ], + "machine_start_gcode": "G90 ; use absoulte coordinates\nM83 ; extruder relative mode\n\nM104 S150 ; set nozzle temp to 150\n\nG28 ; home all axes\nM420 S1 ;load mesh\n\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM104 S[nozzle_temperature_initial_layer] ; set final extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG1 X0.1 Y10 Z5.0 F1500 ; move to start position\nG1 Z0.26 F150 ; Move lower\nG4 S0.5 ; wait 0.5 seconds\n\nG1 X0.1 Y150 Z0.3 F1500 E10 ; prime the nozzle\nG1 X0.3 F1500\nG1 X0.4 Y15 Z0.3 F1500 E15 ; prime the nozzle\nG4 S0.1 ; wait 0.1 seconds\n\nG1 Z0.6 F150 ; lift nozzle\nG92 E0 ; Reset Extruder\nG1 Z2 F150 ; lift nozzle more\n", + "machine_end_gcode": "M117 READY\n\nG1 E0 F1000 ; reset extruder\n\nG91 ; relative positioning\nG1 Z2 F1000 ; lift nozzle\n\nG90 ; absolute positioning\nG27 P2 ; park extruder\n\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.0\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/Sovol/machine/Sovol SV06 Plus.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus.json index 5e9e06b1ba..4b49fb45f1 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Sovol SV06 Plus", - "model_id": "Sovol-SV06-Plus", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Sovol", - "bed_model": "sovol_sv06plus_buildplate_model.stl", - "bed_texture": "sovol_sv06plus_buildplate_texture.png", - "hotend_model": "", - "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" -} +{ + "type": "machine_model", + "name": "Sovol SV06 Plus", + "model_id": "Sovol-SV06-Plus", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Sovol", + "bed_model": "sovol_sv06plus_buildplate_model.stl", + "bed_texture": "sovol_sv06plus_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" +} diff --git a/resources/profiles/Sovol/machine/Sovol SV06.json b/resources/profiles/Sovol/machine/Sovol SV06.json index 25a69810d9..a2b769763d 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06.json +++ b/resources/profiles/Sovol/machine/Sovol SV06.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "Sovol SV06", - "model_id": "Sovol-SV06", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "Sovol", - "bed_model": "sovol_sv06_buildplate_model.stl", - "bed_texture": "sovol_sv06_buildplate_texture.png", - "hotend_model": "", - "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" -} +{ + "type": "machine_model", + "name": "Sovol SV06", + "model_id": "Sovol-SV06", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Sovol", + "bed_model": "sovol_sv06_buildplate_model.stl", + "bed_texture": "sovol_sv06_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" +} diff --git a/resources/profiles/Sovol/machine/Sovol SV07 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV07 0.4 nozzle.json index 51ca43ed74..b06bade6e4 100644 --- a/resources/profiles/Sovol/machine/Sovol SV07 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV07 0.4 nozzle.json @@ -1,128 +1,87 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Sovol SV07 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "Sovol SV07", + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV07 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV07", "default_print_profile": "0.20mm Standard @Sovol SV07", - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "nozzle_type": "undefine", - "auxiliary_fan": "0", - "machine_max_acceleration_e": [ - "20000" - ], - "machine_max_acceleration_extruding": [ - "4000", - "1250" - ], - "machine_max_acceleration_retracting": [ - "4000", - "1250" - ], - "machine_max_acceleration_travel": [ - "1500", - "1250" - ], - "machine_max_acceleration_x": [ - "8000", - "960" - ], - "machine_max_acceleration_y": [ - "8000", - "960" - ], - "machine_max_acceleration_z": [ - "400", - "200" - ], - "machine_max_jerk_e": [ - "15", - "4.5" - ], - "machine_max_jerk_x": [ - "27", - "8" - ], - "machine_max_jerk_y": [ - "27", - "8" - ], - "machine_max_jerk_z": [ - "3.6", - "0.4" - ], - "machine_max_speed_e": [ - "500", - "120" - ], - "machine_max_speed_x": [ - "500", - "100" - ], - "machine_max_speed_y": [ - "500", - "100" - ], - "machine_max_speed_z": [ - "500", - "12" - ], - "machine_min_extruding_rate": [ - "0" - ], - "machine_min_travel_rate": [ - "0" - ], - "max_layer_height": [ - "0.25" - ], - "min_layer_height": [ - "0.07" - ], - "printer_settings_id": "Sovol", - "use_relative_e_distances": "0", - "gcode_flavor": "klipper", - "fan_kickstart": "0.2", - "fan_speedup_overhangs": "0", - "fan_speedup_time": "0.5", - "retraction_minimum_travel": [ - "0.5" - ], - "retract_before_wipe": [ - "0%" + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "thumbnails": [ + "300x300" ], + "thumbnails_format": "PNG", "retraction_length": [ - "0.5" - ], - "retract_length_toolchange": [ - "1" - ], - "retraction_speed": [ - "140" - ], - "deretraction_speed": [ - "140" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", - "machine_pause_gcode": "M601", - "default_filament_profile": [ - "Sovol Generic PLA" - ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single] ; Setting bed temprature\nM109 S[nozzle_temperature_initial_layer] ; Setting hot-end temprature\nSTART_PRINT ; Running macro from klipper\n", - "machine_end_gcode": "END_PRINT", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;G92 E0.0\n;[layer_z]\n\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0" -} \ No newline at end of file + "0.8" + ], + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000" + ], + "machine_max_acceleration_x": [ + "12000" + ], + "machine_max_acceleration_y": [ + "12000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_e": [ + "50" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "0.25" + ], + "machine_max_jerk_e": [ + "3" + ], + "z_hop": [ + "0.4" + ], + "max_layer_height": [ + "0.32" + ], + "retract_lift_below": [ + "348" + ], + "retraction_speed": [ + "50" + ], + "deretraction_speed": [ + "50" + ], + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "G28\nG90\nG1 X0 F9000\nG1 Y20 F9000\nG1 Z0.300 F600\nG1 Y0 F9000\nG91\nM83\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG1 E25 F480\nG4 P1000\nG1 E-0.200 Z5 F600\nG1 X55.000 Y0.000 F6000\nG1 Z-4.800 F600\nG1 X55.000 E13.2 F3000\nG1 X55.000 E8.8 F3000\nG1 Y1 E0.16 F3000\nG1 X-55.000 E8.8 F3000\nG1 X-55.000 E13.2 F3000\nG1 Y1 E0.24 F3000\nG1 X55.000 E13.2 F3000\nG1 X55.000 E8.8 F3000\nG1 E-0.200 Z1 F600\nM400\n\n", + "machine_end_gcode": "END_PRINT\n" +} diff --git a/resources/profiles/Sovol/machine/Sovol SV07 Plus.json b/resources/profiles/Sovol/machine/Sovol SV07 Plus.json index 0a9b2434f7..3533765e38 100644 --- a/resources/profiles/Sovol/machine/Sovol SV07 Plus.json +++ b/resources/profiles/Sovol/machine/Sovol SV07 Plus.json @@ -5,7 +5,7 @@ "nozzle_diameter": "0.4", "machine_tech": "FFF", "family": "Sovol", - "bed_model": "", + "bed_model": "sovol_sv07plus_buildplate_model.stl", "bed_texture": "sovol_sv07plus_buildplate_texture.png", "hotend_model": "", "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" diff --git a/resources/profiles/Sovol/machine/Sovol SV07.json b/resources/profiles/Sovol/machine/Sovol SV07.json index d4bd473581..f59911bd6b 100644 --- a/resources/profiles/Sovol/machine/Sovol SV07.json +++ b/resources/profiles/Sovol/machine/Sovol SV07.json @@ -5,8 +5,8 @@ "nozzle_diameter": "0.4", "machine_tech": "FFF", "family": "Sovol", - "bed_model": "", + "bed_model": "sovol_sv07_buildplate_model.stl", "bed_texture": "sovol_sv07_buildplate_texture.png", "hotend_model": "", - "default_materials": "Sovol Generic ABS;Sovol Generic PETG;Sovol Generic PLA" + "default_materials": "Sovol SV07 PLA" } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json new file mode 100644 index 0000000000..2ee1d7a4d7 --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json @@ -0,0 +1,112 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV08 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV08", + "default_print_profile": "0.10mm Standard @Sovol SV08 0.2 nozzle", + "printer_variant": "0.2", + "nozzle_diameter": [ + "0.2" + ], + "min_layer_height": [ + "0.04" + ], + "max_layer_height": [ + "0.14" + ], + "retract_before_wipe": [ + "0%" + ], + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "345", + "gcode_flavor": "klipper", + "retraction_length": [ + "0.5" + ], + "machine_max_speed_e": [ + "50" + ], + "machine_max_speed_x": [ + "700" + ], + "machine_max_speed_y": [ + "700" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000" + ], + "machine_max_acceleration_travel": [ + "40000" + ], + "machine_max_acceleration_x": [ + "40000" + ], + "machine_max_acceleration_y": [ + "40000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "20" + ], + "machine_max_jerk_y": [ + "20" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "z_hop": [ + "0.4" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "retraction_minimum_travel": [ + "1" + ], + "retract_length_toolchange": [ + "2" + ], + "wipe_distance": [ + "2" + ], + "thumbnails": [ + "300x300", + "400x300", + "32x32" + ], + "retract_lift_below": [ + "343" + ], + "thumbnails_format": "PNG", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "G28\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nSTART_PRINT\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nM400\nG91\nM83\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG1 E25 F300\nG4 P1000\nG1 E-0.200 Z5 F600\nG1 X88.000 F9000\nG1 Z-5.000 F600\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 Y1 E0.16 F1800\nG1 X-87.000 E13.92 F1800\nG1 X-87.000 E20.88 F1800\nG1 Y1 E0.24 F1800\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 E-0.200 Z1 F600\nM400\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV08 PLA @SV08 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json new file mode 100644 index 0000000000..7f2c1887dc --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json @@ -0,0 +1,106 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV08 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV08", + "default_print_profile": "0.20mm Standard @Sovol SV08", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "retract_before_wipe": [ + "0%" + ], + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "345", + "gcode_flavor": "klipper", + "retraction_length": [ + "0.5" + ], + "machine_max_speed_e": [ + "50" + ], + "machine_max_speed_x": [ + "700" + ], + "machine_max_speed_y": [ + "700" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000" + ], + "machine_max_acceleration_travel": [ + "40000" + ], + "machine_max_acceleration_x": [ + "40000" + ], + "machine_max_acceleration_y": [ + "40000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "20" + ], + "machine_max_jerk_y": [ + "20" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "z_hop": [ + "0.4" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "retraction_minimum_travel": [ + "1" + ], + "retract_length_toolchange": [ + "2" + ], + "wipe_distance": [ + "2" + ], + "thumbnails": [ + "300x300", + "400x300", + "32x32" + ], + "retract_lift_below": [ + "343" + ], + "thumbnails_format": "PNG", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "G28\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nSTART_PRINT\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nM400\nG91\nM83\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG1 E25 F300\nG4 P1000\nG1 E-0.200 Z5 F600\nG1 X88.000 F9000\nG1 Z-5.000 F600\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 Y1 E0.16 F1800\nG1 X-87.000 E13.92 F1800\nG1 X-87.000 E20.88 F1800\nG1 Y1 E0.24 F1800\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 E-0.200 Z1 F600\nM400\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV08 PLA" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json new file mode 100644 index 0000000000..fec88e538b --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json @@ -0,0 +1,112 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV08 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV08", + "default_print_profile": "0.30mm Standard @Sovol SV08 0.6 nozzle", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "min_layer_height": [ + "0.12" + ], + "max_layer_height": [ + "0.42" + ], + "retract_before_wipe": [ + "0%" + ], + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "345", + "gcode_flavor": "klipper", + "retraction_length": [ + "0.5" + ], + "machine_max_speed_e": [ + "50" + ], + "machine_max_speed_x": [ + "700" + ], + "machine_max_speed_y": [ + "700" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000" + ], + "machine_max_acceleration_travel": [ + "40000" + ], + "machine_max_acceleration_x": [ + "40000" + ], + "machine_max_acceleration_y": [ + "40000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "20" + ], + "machine_max_jerk_y": [ + "20" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "z_hop": [ + "0.4" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "retraction_minimum_travel": [ + "1" + ], + "retract_length_toolchange": [ + "2" + ], + "wipe_distance": [ + "2" + ], + "thumbnails": [ + "300x300", + "400x300", + "32x32" + ], + "retract_lift_below": [ + "343" + ], + "thumbnails_format": "PNG", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "G28\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nSTART_PRINT\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nM400\nG91\nM83\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG1 E25 F300\nG4 P1000\nG1 E-0.200 Z5 F600\nG1 X88.000 F9000\nG1 Z-5.000 F600\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 Y1 E0.16 F1800\nG1 X-87.000 E13.92 F1800\nG1 X-87.000 E20.88 F1800\nG1 Y1 E0.24 F1800\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 E-0.200 Z1 F600\nM400\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV08 PLA" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json new file mode 100644 index 0000000000..2f0daf9b32 --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json @@ -0,0 +1,112 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Sovol SV08 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Sovol SV08", + "default_print_profile": "0.20mm Standard @Sovol SV08 0.8 nozzle", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "min_layer_height": [ + "0.16" + ], + "max_layer_height": [ + "0.56" + ], + "retract_before_wipe": [ + "0%" + ], + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "345", + "gcode_flavor": "klipper", + "retraction_length": [ + "0.5" + ], + "machine_max_speed_e": [ + "50" + ], + "machine_max_speed_x": [ + "700" + ], + "machine_max_speed_y": [ + "700" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000" + ], + "machine_max_acceleration_travel": [ + "40000" + ], + "machine_max_acceleration_x": [ + "40000" + ], + "machine_max_acceleration_y": [ + "40000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "20" + ], + "machine_max_jerk_y": [ + "20" + ], + "machine_max_jerk_z": [ + "0.5" + ], + "z_hop": [ + "0.4" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "retraction_minimum_travel": [ + "1" + ], + "retract_length_toolchange": [ + "2" + ], + "wipe_distance": [ + "2" + ], + "thumbnails": [ + "300x300", + "400x300", + "32x32" + ], + "retract_lift_below": [ + "343" + ], + "thumbnails_format": "PNG", + "before_layer_change_gcode": "TIMELAPSE_TAKE_FRAME\nG92 E0", + "machine_start_gcode": "G28\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nSTART_PRINT\nG90\nG1 X0 F9000\nG1 Y20\nG1 Z0.600 F600\nG1 Y0 F9000\nM400\nG91\nM83\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\nG1 E25 F300\nG4 P1000\nG1 E-0.200 Z5 F600\nG1 X88.000 F9000\nG1 Z-5.000 F600\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 Y1 E0.16 F1800\nG1 X-87.000 E13.92 F1800\nG1 X-87.000 E20.88 F1800\nG1 Y1 E0.24 F1800\nG1 X87.000 E20.88 F1800\nG1 X87.000 E13.92 F1800\nG1 E-0.200 Z1 F600\nM400\n", + "machine_end_gcode": "END_PRINT\n", + "default_filament_profile": [ + "Sovol SV08 PLA" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/machine/Sovol SV08.json b/resources/profiles/Sovol/machine/Sovol SV08.json new file mode 100644 index 0000000000..a392c578e1 --- /dev/null +++ b/resources/profiles/Sovol/machine/Sovol SV08.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Sovol SV08", + "model_id": "Sovol-SV08", + "nozzle_diameter": "0.2;0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Sovol", + "bed_model": "sovol_sv08_buildplate_model.stl", + "bed_texture": "sovol_sv08_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Sovol SV08 PLA;Sovol SV08 PLA @SV08 0.2 nozzle;Sovol SV08 ABS;Sovol SV08 PETG;Sovol SV08 TPU" +} diff --git a/resources/profiles/Sovol/machine/fdm_machine_common.json b/resources/profiles/Sovol/machine/fdm_machine_common.json index f537b78c6f..1afd9b9991 100644 --- a/resources/profiles/Sovol/machine/fdm_machine_common.json +++ b/resources/profiles/Sovol/machine/fdm_machine_common.json @@ -1,118 +1,122 @@ -{ - "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": [ - "500" - ], - "machine_max_acceleration_retracting": [ - "1000" - ], - "machine_max_acceleration_x": [ - "500" - ], - "machine_max_acceleration_y": [ - "500" - ], - "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": "1", - "change_filament_gcode": "", - "wipe": [ - "1" - ], - "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": "" -} +{ + "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": [ + "500" + ], + "machine_max_acceleration_retracting": [ + "1000" + ], + "machine_max_acceleration_x": [ + "500" + ], + "machine_max_acceleration_y": [ + "500" + ], + "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" + ], + "retract_lift_below": [ + "0" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": [ + "1" + ], + "z_lift_type": "NormalLift", + "z_hop_types": "Normal Lift", + "default_print_profile": "", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_start_gcode": "G90\nG1 X0 Y0 F8000\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\n\nSTART_PRINT\n\nM400\nG90\nM83\nG1 Z0.500 F1200\nG1 E10\nG1 E-0.200 Z5 F1200\nG1 X78.000 Y0.000 F8000\nG1 Z0.300 F1200\nG1 X128.000 E12 F{outer_wall_volumetric_speed * 1.0 /(0.3*0.5) * 30}\nG1 X178.000 E8 F{outer_wall_volumetric_speed * 1.0 /(0.3*0.5) * 60}\nG1 X188.000 E-0.200 Z1\nM400\n\nG90\nM83\nG1 X78.000 Y1.000 F8000\nG1 Z0.300 F1200\nG1 X128.000 E12 F{outer_wall_volumetric_speed * 1.0 /(0.3*0.5) * 30}\nG1 X178.000 E8 F{outer_wall_volumetric_speed * 1.0 /(0.3*0.5) * 60}\nG1 X188.000 E-0.500 Z1\nM400\n\n", + "machine_end_gcode": "" +} diff --git a/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json b/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json new file mode 100644 index 0000000000..1643d33e8b --- /dev/null +++ b/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json @@ -0,0 +1,120 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Standard @Sovol SV08 0.2 nozzle", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.10", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "2", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "20000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "exclude_object": "1", + "outer_wall_line_width": "0.22", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.22", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "20000", + "inner_wall_acceleration": "12000", + "initial_layer_line_width": "0.25", + "initial_layer_print_height": "0.1", + "infill_combination": "0", + "sparse_infill_line_width": "0.22", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.22", + "wall_loops": "4", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "0", + "skirt_height": "1", + "skirt_loops": "1", + "skirt_speed": "30", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.22", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.22", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.22", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.22", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "60", + "initial_layer_travel_speed": "80%", + "outer_wall_speed": "160", + "inner_wall_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "180", + "gap_infill_speed": "150", + "sparse_infill_speed": "200", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "100%", + "support_interface_pattern": "auto", + "seam_gap": "5%", + "wall_generator": "classic", + "gcode_label_objects": "1", + "slow_down_layers": "3", + "compatible_printers": [ + "Sovol SV08 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json index 7e4a1b232c..e5776938fc 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.18mm Optimal @Sovol SV01Pro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.18", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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": "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": "25", - "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": [ - "Sovol SV01 Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Optimal @Sovol SV01Pro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.18", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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": "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": "25", + "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": [ + "Sovol SV01 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json index f598f0464c..6517139790 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.18mm Optimal @Sovol SV02", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.18", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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": "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": "25", - "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": [ - "Sovol SV02 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Optimal @Sovol SV02", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.18", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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": "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": "25", + "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": [ + "Sovol SV02 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json index f6686c5718..8b4d715bfa 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.18mm Optimal @Sovol SV05", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.18", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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": "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": "25", - "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": [ - "Sovol SV05 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Optimal @Sovol SV05", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.18", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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": "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": "25", + "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": [ + "Sovol SV05 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json index 5ed34435b4..ba996a069c 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.18mm Optimal @Sovol SV06", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.18", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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": "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": "25", - "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": [ - "Sovol SV06 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Optimal @Sovol SV06", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.18", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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": "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": "25", + "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": [ + "Sovol SV06 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json index a98e47d432..ace13b9236 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.18mm Optimal @Sovol SV06Plus", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.18", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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": "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": "25", - "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": [ - "Sovol SV06 Plus 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Optimal @Sovol SV06Plus", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.18", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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": "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": "25", + "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": [ + "Sovol SV06 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json index 8e66ac39b7..796207e238 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json @@ -31,7 +31,7 @@ "line_width": "0.44", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -46,7 +46,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "[input_filename_base].gcode", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json index 3ac6922467..68f6ea4fdc 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json @@ -46,7 +46,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "[input_filename_base].gcode", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json new file mode 100644 index 0000000000..30d4a32379 --- /dev/null +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Optimal @Sovol SV08", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.18", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "20000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "exclude_object": "1", + "outer_wall_line_width": "0.42", + "wall_infill_order": "outer wall/inner wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "20000", + "inner_wall_acceleration": "12000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "0", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.5", + "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.5", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "10", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "90", + "outer_wall_speed": "200", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "200", + "top_surface_speed": "200", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "100%", + "support_interface_pattern": "auto", + "seam_gap": "5%", + "wall_generator": "classic", + "gcode_label_objects": "1", + "slow_down_layers": "3", + "compatible_printers": [ + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json b/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json new file mode 100644 index 0000000000..0c57b02b39 --- /dev/null +++ b/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json @@ -0,0 +1,116 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm High-Speed @Sovol SV06", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "top_surface_acceleration": "2500", + "bridge_no_support": "1", + "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", + "wall_sequence": "inner-outer-inner wall", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "2500", + "inner_wall_acceleration": "2500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.42", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "3", + "skirt_height": "1", + "skirt_speed": "30", + "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": "tree(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.18", + "support_filament": "0", + "support_line_width": "0.4", + "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_pattern": "concentric", + "support_interface_speed": "100%", + "support_base_pattern": "hollow", + "support_base_pattern_spacing": "0.2", + "support_speed": "40", + "support_threshold_angle": "20", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "20", + "initial_layer_infill_speed": "25", + "slow_down_layers": "3", + "outer_wall_speed": "100", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "100", + "gap_infill_speed": "80", + "sparse_infill_speed": "150", + "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", + "wall_generator": "classic", + "compatible_printers": [ + "Sovol SV06 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json index e9fa54468c..246575ffa0 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV01Pro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.20", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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.18", - "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": "25", - "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": [ - "Sovol SV01 Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV01Pro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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.18", + "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": "25", + "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": [ + "Sovol SV01 Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json index dd0b5b9f21..40822e7437 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV02", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.20", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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.18", - "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": "25", - "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": [ - "Sovol SV02 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV02", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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.18", + "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": "25", + "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": [ + "Sovol SV02 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json index 8a5661ad38..8c8409cdca 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV05", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.20", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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.18", - "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": "25", - "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": [ - "Sovol SV05 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV05", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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.18", + "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": "25", + "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": [ + "Sovol SV05 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json index ae293d4841..d5aa379f3e 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV06", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.20", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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.18", - "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": "25", - "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": [ - "Sovol SV06 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV06", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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.18", + "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": "25", + "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": [ + "Sovol SV06 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json index 2859ad0ed5..5d57643c31 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV06Plus", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.20", - "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.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", - "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.24", - "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.25", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "3", - "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.18", - "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": "25", - "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": [ - "Sovol SV06 Plus 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV06Plus", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "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.42", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.44", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "0", + "travel_acceleration": "0", + "inner_wall_acceleration": "0", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.24", + "infill_combination": "0", + "sparse_infill_line_width": "0.44", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "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": "3", + "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.18", + "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": "25", + "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": [ + "Sovol SV06 Plus 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json index db0e7d0d9c..82a8194663 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json @@ -1,77 +1,72 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Sovol SV07", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV07", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", "adaptive_layer_height": "1", "reduce_crossing_wall": "0", - "layer_height": "0.20", + "layer_height": "0.2", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", + "bottom_shell_layers": "3", "bottom_shell_thickness": "0", - "bridge_flow": "0.85", - "bridge_speed": "25", - "brim_width": "0", + "bridge_flow": "0.95", + "bridge_speed": "50", + "internal_bridge_speed": "50", + "brim_width": "5", + "brim_type": "outer_only", "brim_object_gap": "0", "compatible_printers_condition": "", + "default_acceleration": "8000", "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", + "elefant_foot_compensation": "0", "enable_arc_fitting": "0", - "exclude_object": "0", "outer_wall_line_width": "0.42", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.44", + "wall_infill_order": "outer wall/inner wall/infill", + "line_width": "0.42", "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.24", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.3", "infill_combination": "0", - "sparse_infill_line_width": "0.44", - "infill_wall_overlap": "23%", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "25%", "interface_shells": "0", "ironing_flow": "15%", "ironing_spacing": "0.25", "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": "3", + "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", "skirt_distance": "3", - "skirt_height": "2", - "skirt_loops": "2", + "skirt_height": "1", + "skirt_loops": "1", "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", + "internal_solid_infill_line_width": "0.45", "spiral_mode": "0", "standby_temperature_delta": "-5", "enable_support": "0", "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", + "support_type": "tree(auto)", + "support_style": "snug", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.18", + "support_top_z_distance": "0.15", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.45", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -80,31 +75,47 @@ "support_interface_speed": "100%", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", - "support_speed": "40", - "support_threshold_angle": "40", + "support_speed": "80", + "support_threshold_angle": "30", "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_surface_line_width": "0.45", + "top_shell_layers": "4", "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "25", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "60", + "initial_layer_travel_speed": "60%", + "outer_wall_speed": "150", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "180", + "top_surface_speed": "180", + "gap_infill_speed": "150", + "sparse_infill_speed": "300", + "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "Sovol SV07 0.4 nozzle" - ] + "xy_contour_compensation": "0", + "seam_gap": "5%", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "6000", + "initial_layer_acceleration": "5000", + "top_surface_acceleration": "6000", + "travel_acceleration": "8000", + "wall_generator": "classic", + "slow_down_layers": "3", + "bottom_solid_infill_flow_ratio": "1.25", + "accel_to_decel_enable": "0", + "accel_to_decel_factor": "30%", + "skirt_speed": "0", + "gcode_label_objects": "0", + "exclude_object": "0", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "compatible_printers": [ + "Sovol SV07 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json index 50eb1ca5a4..a0b04d11a5 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json @@ -31,7 +31,7 @@ "line_width": "0.44", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -46,7 +46,7 @@ "ironing_speed": "15", "ironing_type": "no ironing", "reduce_infill_retraction": "1", - "filename_format": "[input_filename_base].gcode", + "filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "20", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json new file mode 100644 index 0000000000..3910350b48 --- /dev/null +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV08 0.4 nozzle", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "20000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "exclude_object": "1", + "outer_wall_line_width": "0.4", + "wall_infill_order": "outer wall/inner wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "20000", + "inner_wall_acceleration": "12000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.42", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "0", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "90", + "outer_wall_speed": "200", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "200", + "top_surface_speed": "200", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "100%", + "support_interface_pattern": "auto", + "seam_gap": "5%", + "wall_generator": "classic", + "gcode_label_objects": "1", + "slow_down_layers": "3", + "compatible_printers": [ + "Sovol SV08 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json new file mode 100644 index 0000000000..3d0bf35b12 --- /dev/null +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Sovol SV08", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.20", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "20000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "exclude_object": "1", + "outer_wall_line_width": "0.42", + "wall_infill_order": "outer wall/inner wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "20000", + "inner_wall_acceleration": "12000", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "30%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "0", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.5", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.5", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "90", + "outer_wall_speed": "200", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "200", + "top_surface_speed": "200", + "gap_infill_speed": "200", + "sparse_infill_speed": "300", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "100%", + "support_interface_pattern": "auto", + "seam_gap": "5%", + "wall_generator": "classic", + "gcode_label_objects": "1", + "slow_down_layers": "3", + "compatible_printers": [ + "Sovol SV08 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json new file mode 100644 index 0000000000..ee72482838 --- /dev/null +++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Sovol SV08 0.6 nozzle", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.30", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "20000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "exclude_object": "1", + "outer_wall_line_width": "0.6", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.6", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "20000", + "inner_wall_acceleration": "12000", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.6", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.6", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "0", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.6", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.6", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.6", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "60", + "outer_wall_speed": "150", + "inner_wall_speed": "180", + "internal_solid_infill_speed": "180", + "top_surface_speed": "150", + "gap_infill_speed": "150", + "sparse_infill_speed": "180", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "100%", + "support_interface_pattern": "auto", + "seam_gap": "5%", + "wall_generator": "classic", + "gcode_label_objects": "1", + "slow_down_layers": "3", + "compatible_printers": [ + "Sovol SV08 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json new file mode 100644 index 0000000000..1494854474 --- /dev/null +++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @Sovol SV08 0.8 nozzle", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.40", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed" : "50", + "brim_type": "outer_only", + "brim_width": "5", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "20000", + "outer_wall_acceleration": "8000", + "top_surface_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "0", + "exclude_object": "1", + "outer_wall_line_width": "0.8", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.8", + "infill_direction": "45", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "20000", + "inner_wall_acceleration": "12000", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "infill_combination": "0", + "sparse_infill_line_width": "0.8", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.25", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.8", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "0", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.8", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "snug", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.8", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "80", + "support_threshold_angle": "20", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.8", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "60", + "outer_wall_speed": "135", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "135", + "gap_infill_speed": "135", + "sparse_infill_speed": "150", + "travel_speed": "600", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "100%", + "support_interface_pattern": "auto", + "seam_gap": "5%", + "wall_generator": "classic", + "gcode_label_objects": "1", + "slow_down_layers": "3", + "compatible_printers": [ + "Sovol SV08 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Sovol/process/fdm_process_common.json b/resources/profiles/Sovol/process/fdm_process_common.json index 7ccf87cfd2..c5c2fd19e0 100644 --- a/resources/profiles/Sovol/process/fdm_process_common.json +++ b/resources/profiles/Sovol/process/fdm_process_common.json @@ -1,70 +1,73 @@ -{ - "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": "0", - "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" -} +{ + "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", + "internal_bridge_speed" : "150", + "brim_width": "5", + "compatible_printers": [], + "print_sequence": "by layer", + "default_acceleration": "0", + "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": "crosshatch", + "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": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{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", + "gcode_label_objects": "0", + "top_surface_pattern": "monotonicline" +} diff --git a/resources/profiles/Sovol/sovol_sv08_buildplate_model.stl b/resources/profiles/Sovol/sovol_sv08_buildplate_model.stl new file mode 100644 index 0000000000..91acb50bd4 Binary files /dev/null and b/resources/profiles/Sovol/sovol_sv08_buildplate_model.stl differ diff --git a/resources/profiles/Sovol/sovol_sv08_buildplate_texture.png b/resources/profiles/Sovol/sovol_sv08_buildplate_texture.png new file mode 100644 index 0000000000..e5371e4493 Binary files /dev/null and b/resources/profiles/Sovol/sovol_sv08_buildplate_texture.png differ diff --git a/resources/profiles/Tronxy.json b/resources/profiles/Tronxy.json index 5c1498973a..4381ed9493 100644 --- a/resources/profiles/Tronxy.json +++ b/resources/profiles/Tronxy.json @@ -1,6 +1,6 @@ { "name": "Tronxy", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Tronxy configurations", "machine_model_list": [ diff --git a/resources/profiles/Tronxy/process/fdm_process_common.json b/resources/profiles/Tronxy/process/fdm_process_common.json index d9b11e2551..7683f55d25 100644 --- a/resources/profiles/Tronxy/process/fdm_process_common.json +++ b/resources/profiles/Tronxy/process/fdm_process_common.json @@ -26,7 +26,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -79,7 +79,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json b/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json index 99b1ec95ff..bb2868d2e9 100644 --- a/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json +++ b/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -80,7 +80,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index 1fef53bef0..710a7cc62e 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ diff --git a/resources/profiles/TwoTrees/process/0.08mm Extra Fine @SK1.json b/resources/profiles/TwoTrees/process/0.08mm Extra Fine @SK1.json index 4feb9e39ce..982a3a42f3 100644 --- a/resources/profiles/TwoTrees/process/0.08mm Extra Fine @SK1.json +++ b/resources/profiles/TwoTrees/process/0.08mm Extra Fine @SK1.json @@ -74,13 +74,13 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "thick_bridges": "1", "top_shell_layers": "9", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/0.12mm Fine @SK1.json b/resources/profiles/TwoTrees/process/0.12mm Fine @SK1.json index 648094331d..8eb8ce8030 100644 --- a/resources/profiles/TwoTrees/process/0.12mm Fine @SK1.json +++ b/resources/profiles/TwoTrees/process/0.12mm Fine @SK1.json @@ -72,13 +72,13 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "thick_bridges": "1", "top_shell_layers": "5", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/0.16mm Optimal @SK1.json b/resources/profiles/TwoTrees/process/0.16mm Optimal @SK1.json index 1c74438f86..f3cbc2d4c7 100644 --- a/resources/profiles/TwoTrees/process/0.16mm Optimal @SK1.json +++ b/resources/profiles/TwoTrees/process/0.16mm Optimal @SK1.json @@ -75,13 +75,13 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "thick_bridges": "1", "top_shell_layers": "4", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/0.20mm Quality @SK1.json b/resources/profiles/TwoTrees/process/0.20mm Quality @SK1.json index 5b394002eb..b4e5df02f7 100644 --- a/resources/profiles/TwoTrees/process/0.20mm Quality @SK1.json +++ b/resources/profiles/TwoTrees/process/0.20mm Quality @SK1.json @@ -75,14 +75,14 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "support_top_z_distance": "0.2", "thick_bridges": "1", "top_shell_layers": "3", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "60", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/0.20mm Standard @SK1.json b/resources/profiles/TwoTrees/process/0.20mm Standard @SK1.json index 4eb5e8000d..63617b794a 100644 --- a/resources/profiles/TwoTrees/process/0.20mm Standard @SK1.json +++ b/resources/profiles/TwoTrees/process/0.20mm Standard @SK1.json @@ -75,14 +75,14 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "support_top_z_distance": "0.2", "thick_bridges": "1", "top_shell_layers": "3", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/0.24mm Draft @SK1.json b/resources/profiles/TwoTrees/process/0.24mm Draft @SK1.json index 303f020c9b..b1d2096444 100644 --- a/resources/profiles/TwoTrees/process/0.24mm Draft @SK1.json +++ b/resources/profiles/TwoTrees/process/0.24mm Draft @SK1.json @@ -75,14 +75,14 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "support_top_z_distance": "0.2", "thick_bridges": "1", "top_shell_layers": "3", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/0.24mm HSpeed @SK1.json b/resources/profiles/TwoTrees/process/0.24mm HSpeed @SK1.json index 0eedf1a9cc..7cc15775ed 100644 --- a/resources/profiles/TwoTrees/process/0.24mm HSpeed @SK1.json +++ b/resources/profiles/TwoTrees/process/0.24mm HSpeed @SK1.json @@ -64,7 +64,7 @@ "sparse_infill_acceleration": "0", "sparse_infill_density": "10%", "sparse_infill_line_width": "0.42", - "sparse_infill_pattern": "supportcubic", + "sparse_infill_pattern": "crosshatch", "sparse_infill_speed": "400", "staggered_inner_seams": "0", "support_angle": "0", @@ -80,7 +80,7 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "support_top_z_distance": "0.2", "support_type": "normal(auto)", "thick_bridges": "1", @@ -88,7 +88,7 @@ "top_shell_thickness": "0", "top_surface_acceleration": "0", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "700", diff --git a/resources/profiles/TwoTrees/process/0.28mm Extra Draft @SK1.json b/resources/profiles/TwoTrees/process/0.28mm Extra Draft @SK1.json index 5e2eef68f4..659e3c4655 100644 --- a/resources/profiles/TwoTrees/process/0.28mm Extra Draft @SK1.json +++ b/resources/profiles/TwoTrees/process/0.28mm Extra Draft @SK1.json @@ -77,14 +77,14 @@ "support_line_width": "0.35", "support_object_xy_distance": "0.21", "support_speed": "100", - "support_threshold_angle": "0", + "support_threshold_angle": "30", "support_top_z_distance": "0.2", "thick_bridges": "1", "top_shell_layers": "3", "top_shell_thickness": "0", "top_surface_acceleration": "5000", "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_speed": "200", "travel_acceleration": "20000", "travel_speed": "500", diff --git a/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json b/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json index 73b67bc1c3..50cab2548b 100644 --- a/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json +++ b/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/TwoTrees/process/fdm_process_common.json b/resources/profiles/TwoTrees/process/fdm_process_common.json index 87bbbe1a8c..5cad348417 100644 --- a/resources/profiles/TwoTrees/process/fdm_process_common.json +++ b/resources/profiles/TwoTrees/process/fdm_process_common.json @@ -25,7 +25,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/UltiMaker.json b/resources/profiles/UltiMaker.json index b05fc11677..eca199f40f 100644 --- a/resources/profiles/UltiMaker.json +++ b/resources/profiles/UltiMaker.json @@ -1,7 +1,7 @@ { "name": "UltiMaker", "url": "", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "UltiMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json b/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json index 567a228c3c..d16991a051 100644 --- a/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json +++ b/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "7", "top_shell_thickness": "0.8", diff --git a/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json b/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json index 6e6829860f..b7f8eb9cd0 100644 --- a/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json +++ b/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "20%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json b/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json index 5740c576b5..fb5b4ba2c8 100644 --- a/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json +++ b/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json @@ -29,7 +29,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "40", "tree_support_wall_count": "0", "detect_thin_wall": "1", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "4", "top_shell_thickness": "0.8", diff --git a/resources/profiles/UltiMaker/process/fdm_process_common.json b/resources/profiles/UltiMaker/process/fdm_process_common.json index 7ccf87cfd2..27c32cdf0d 100644 --- a/resources/profiles/UltiMaker/process/fdm_process_common.json +++ b/resources/profiles/UltiMaker/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Vivedino.json b/resources/profiles/Vivedino.json index 95cbec2413..a7c394d436 100644 --- a/resources/profiles/Vivedino.json +++ b/resources/profiles/Vivedino.json @@ -1,6 +1,6 @@ { "name": "Vivedino", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Vivedino configurations", "machine_model_list": [ diff --git a/resources/profiles/Vivedino/process/fdm_process_common.json b/resources/profiles/Vivedino/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Vivedino/process/fdm_process_common.json +++ b/resources/profiles/Vivedino/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json index f12f318c52..b3a22c7fa5 100644 --- a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json +++ b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json @@ -30,7 +30,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 5208f72290..abeeb669ef 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron/process/fdm_process_common.json b/resources/profiles/Voron/process/fdm_process_common.json index e22d2e56e0..b89db3c759 100644 --- a/resources/profiles/Voron/process/fdm_process_common.json +++ b/resources/profiles/Voron/process/fdm_process_common.json @@ -19,7 +19,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -58,7 +58,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Voron/process/fdm_process_voron_common.json b/resources/profiles/Voron/process/fdm_process_voron_common.json index d993c7b5ea..241b984857 100644 --- a/resources/profiles/Voron/process/fdm_process_voron_common.json +++ b/resources/profiles/Voron/process/fdm_process_voron_common.json @@ -30,7 +30,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -84,7 +84,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Voxelab.json b/resources/profiles/Voxelab.json index d4e6471dcd..f1a4bf101a 100644 --- a/resources/profiles/Voxelab.json +++ b/resources/profiles/Voxelab.json @@ -1,7 +1,7 @@ { "name": "Voxelab", "url": "", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Voxelab configurations", "machine_model_list": [ 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 6aa62f184d..20974f73ab 100644 --- a/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json +++ b/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json @@ -30,7 +30,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -80,12 +80,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", 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 db2d6f6595..586bf0908f 100644 --- a/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json +++ b/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json @@ -30,7 +30,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "0", "travel_acceleration": "0", "inner_wall_acceleration": "0", @@ -80,12 +80,12 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "0.2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "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_pattern": "monotonicline", "top_surface_line_width": "0.38", "top_shell_layers": "5", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Voxelab/process/fdm_process_common.json b/resources/profiles/Voxelab/process/fdm_process_common.json index 7ccf87cfd2..27c32cdf0d 100644 --- a/resources/profiles/Voxelab/process/fdm_process_common.json +++ b/resources/profiles/Voxelab/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Vzbot.json b/resources/profiles/Vzbot.json index cfd5750fd6..9257d30174 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json index 96202dd138..678807a9dd 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json @@ -31,7 +31,7 @@ "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "5000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", @@ -86,7 +86,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json index 5e5a80da0b..a9e7f559a6 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json @@ -31,7 +31,7 @@ "line_width": "0.52", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "5000", "initial_layer_line_width": "0.58", "initial_layer_print_height": "0.2", @@ -85,7 +85,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.52", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json index eedeb3fd31..00daaba49b 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json @@ -31,7 +31,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "5000", "initial_layer_line_width": "0.68", "initial_layer_print_height": "0.2", @@ -85,7 +85,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.65", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Vzbot/process/fdm_process_common.json b/resources/profiles/Vzbot/process/fdm_process_common.json index e22d2e56e0..b89db3c759 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_common.json @@ -19,7 +19,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -58,7 +58,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json index 3782ae9894..f76090f634 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json @@ -19,7 +19,7 @@ "line_width": "0.52", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.52", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -59,7 +59,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.52", diff --git a/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json index fd852dbcd4..f6cc0d2c0a 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json @@ -19,7 +19,7 @@ "line_width": "0.62", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -59,7 +59,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.65", diff --git a/resources/profiles/Wanhao.json b/resources/profiles/Wanhao.json index b6574de3ae..b46fbc552e 100644 --- a/resources/profiles/Wanhao.json +++ b/resources/profiles/Wanhao.json @@ -1,6 +1,6 @@ { "name": "Wanhao", - "version": "02.00.02.00", + "version": "02.01.00.01", "force_update": "0", "description": "Wanhao configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao/process/fdm_process_common.json b/resources/profiles/Wanhao/process/fdm_process_common.json index 7398bcd481..1da14b4d91 100644 --- a/resources/profiles/Wanhao/process/fdm_process_common.json +++ b/resources/profiles/Wanhao/process/fdm_process_common.json @@ -18,7 +18,7 @@ "line_width": "0.45", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.42", "initial_layer_print_height": "0.2", "initial_layer_speed": "20", @@ -57,7 +57,7 @@ "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", "support_speed": "40", - "support_threshold_angle": "40", + "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json b/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json index bbb877de8f..6d05e45a9c 100644 --- a/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json +++ b/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json @@ -27,7 +27,7 @@ "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "initial_layer_acceleration": "500", "travel_acceleration": "700", "inner_wall_acceleration": "500", @@ -83,7 +83,7 @@ "tree_support_branch_angle": "45", "tree_support_wall_count": "0", "detect_thin_wall": "0", - "top_surface_pattern": "monotonic", + "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", "top_shell_layers": "3", "top_shell_thickness": "0.8", diff --git a/resources/profiles_template/Template/process/process template.json b/resources/profiles_template/Template/process/process template.json index 67eb93909d..ea663dbde0 100644 --- a/resources/profiles_template/Template/process/process template.json +++ b/resources/profiles_template/Template/process/process template.json @@ -60,7 +60,7 @@ "raft_layers": "0", "resolution": "0.012", "sparse_infill_density": "15%", - "sparse_infill_pattern": "grid", + "sparse_infill_pattern": "crosshatch", "sparse_infill_line_width": "0.45", "sparse_infill_speed": "270", "seam_position": "aligned", diff --git a/resources/shaders/110/thumbnail.fs b/resources/shaders/110/thumbnail.fs index 4b269734ee..5a57674602 100644 --- a/resources/shaders/110/thumbnail.fs +++ b/resources/shaders/110/thumbnail.fs @@ -1,5 +1,6 @@ #version 110 +uniform bool ban_light; uniform vec4 uniform_color; uniform float emission_factor; @@ -12,5 +13,9 @@ void main() { if (world_pos.z < 0.0) discard; - gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); + if(ban_light){ + gl_FragColor = uniform_color; + } else{ + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); + } } diff --git a/resources/shaders/140/thumbnail.fs b/resources/shaders/140/thumbnail.fs index 9e6d5d854c..e7963328f9 100644 --- a/resources/shaders/140/thumbnail.fs +++ b/resources/shaders/140/thumbnail.fs @@ -1,5 +1,6 @@ #version 140 +uniform bool ban_light; uniform vec4 uniform_color; uniform float emission_factor; @@ -12,5 +13,9 @@ void main() { if (world_pos.z < 0.0) discard; - gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); + if(ban_light){ + gl_FragColor = uniform_color; + } else{ + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); + } } diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 1b69d6d97a..c80bb979c8 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -108,6 +108,115 @@ var LangText = { orca1: "Edit Project Info", orca2: "no model information", }, + ca_ES: { + t1: "Benvingut a Orca Slicer", + t2: "Orca Slicer es configurarà en diversos passos. Comencem!", + t3: "Acord de l'Usuari", + t4: "No accepto", + t5: "Accepto", + t6: "Sol·licitem la vostra ajuda per millorar la impressió de tothom.
Vine i uneix-te al nostre Programa de Millora de l'Experiència del Client", + t7: "Uneix-te al nostre Programa de Millora de l'Experiència del Client", + t8: "Enrere", + t9: "Següent", + t10: "Selecció d'Impressora", + t11: "Totes", + t12: "Netejar tot", + t13: "mm broquet", + t14: "Selecció de Filament", + t15: "Impressora", + t16: "Tipus de filament", + t17: "Proveïdor", + t18: "error", + t19: "S'ha de seleccionar almenys un filament.", + t20: "Vols utilitzar el filament per defecte?", + t21: "sí", + t22: "no", + t23: "Nota de llançament", + t24: "Comença", + t25: "Finalitzar", + t26: "Iniciar sessió", + t27: "Registrar", + t28: "Recent", + t29: "Botiga", + t30: "Manual", + t31: "Nou Projecte", + t32: "Crear nou projecte", + t33: "Obrir Projecte", + t34: "hotspot", + t35: "Obert recentment", + t36: "d'acord", + t37: "S'ha de seleccionar almenys una impressora.", + t38: "Cancel·lar", + t39: "Confirmar", + t40: "Desconnexió de la xarxa, si us plau comprova i intenta-ho de nou més tard.", + t47: "Si us plau selecciona la teva regió d'inici de sessió", + t48: "Àsia-Pacífic", + t49: "Xina", + t50: "Tancar sessió", + t52: "Saltar", + t53: "Unir-se", + t54: "A la comunitat d'Impressió 3D, aprenem dels èxits i fracassos dels altres per ajustar els nostres propis paràmetres i configuracions de laminació. Orca Slicer segueix el mateix principi i utilitza l'aprenentatge automàtic per millorar el seu rendiment a partir dels èxits i fracassos d'un gran nombre d'impressions dels nostres usuaris. Estem entrenant Orca Slicer per ser més intel·ligent alimentant-lo amb dades del món real. Si estàs disposat, aquest servei accedirà a informació dels teus registres d'errors i registres d'ús, que poden incloure informació descrita a la ", + t55: "Política de Privacitat", + t56: ". No recopilarem cap dada personal que pugui identificar directament o indirectament a un individu, incloent-hi noms, adreces, informació de pagament o números de telèfon. En habilitar aquest servei, acceptes aquests termes i la declaració sobre la Política de Privacitat.", + t57: "", + t58: "", + t59: ".", + t60: "Europa", + t61: "Amèrica del Nord", + t62: "Altres", + t63: "Després de canviar la regió, el teu compte es tancarà la sessió. Si us plau inicia sessió de nou més tard.", + t64: "Connectors propietaris", + t65: "Tingues en compte que aquests connectors no són desenvolupats ni mantinguts per OrcaSlicer. S'han d'utilitzar a la teva discreció i risc.", + t66: "Control remot complet", + t67: "Transmissió en directe", + t68: "Sincronització de dades de l'usuari", + t69: "Instal·lar connector Bambu Network", + t70: "", + t71: "Descarregant", + t72: "Descàrrega fallida", + t73: "Instal·lació exitosa.", + t74: "Reiniciar", + t75: "Alguns proveïdors d'impressora requereixen connectors propietaris per comunicar-se amb les seves impressores. Si us plau selecciona el connector corresponent si utilitzes aquestes impressores.", + t76: "No s'ha detectat el connector Bambu Network. Fes clic ", + t77: "aquí", + t78: " per instal·lar-lo.", + t79: "No s'ha pogut instal·lar el connector.", + t80: "Prova els següents passos:", + t81: "1, Fes clic ", + t82: " per obrir el directori de connectors", + t83: "2, Tanca totes les Orca Slicer obertes", + t84: "3, Elimina tots els fitxers del directori de connectors", + t85: "4, Reobre Orca Slicer i instal·la el connector de nou", + t86: "Tancar", + t87: "Manual de l'Usuari", + t88: "Eliminar", + t89: "Obrir Carpeta Contenidora", + t90: "Model 3D", + t91: "Descarregar models 3D", + t92: "Creat per", + t93: "Remesclat per", + t94: "Compartit per", + t95: "Informació del Model", + t96: "Accessoris", + t97: "Informació del Perfil", + t98: "Nom del model", + t100: "Descripció del model", + t101: "BOM", + t102: "Guia d'Assemblea", + t103: "Altres", + t104: "Nom del perfil", + t105: "Autor del perfil", + t106: "Descripció del perfil", + t107: "Models en línia", + t108: "MÉS", + t109: "Filaments del Sistema", + t110: "Filaments Personalitzats", + t111: "Crear Nou", + t112: "Unir-se al Programa", + t113: "Pots canviar la teva elecció en les preferències en qualsevol moment.", + orca1: "Editar Informació del Projecte", + orca2: "no hi ha informació del model" +}, es_ES: { t1: "Bienvenido a Orca Slicer", t2: "Va a configurar Orca Slicer mediante varios pasos. ¡Vamos a comenzar!", @@ -1030,7 +1139,7 @@ var LangText = { t62: "Diğerleri", t63: "Bölgeyi değiştirdikten sonra hesabınızdan çıkış yapılacaktır. Lütfen daha sonra tekrar giriş yapın.", t64: "Bambu Ağı eklentisi", - t65: "Please be aware that these plugins are not developed or maintained by OrcaSlicer. They should be used at your own discretion and risk.", + t65: "Lütfen bu eklentilerin OrcaSlicer tarafından geliştirilmediğini veya bakımının yapılmadığını unutmayın. Kendi takdirinize ve riskinize göre kullanılmalıdırlar.", t66: "Tam uzaktan kontrol", t67: "Canlı görüntü akışı", t68: "Kullanıcı veri senkronizasyonu", @@ -1040,7 +1149,7 @@ var LangText = { t72: "İndirme başarısız oldu", t73: "Kurulum başarılı oldu.", t74: "Tekrar başlat", - t75: "Some printer vendors require proprietary plugins for communication with their printers. Please select the corresponding plugin if you use such printers.", + t75: "Bazı yazıcı üreticileri, yazıcılarıyla iletişim için özel eklentilere ihtiyaç duyar. Bu tür yazıcılar kullanıyorsanız lütfen ilgili eklentiyi seçin.", t76: "Bambu Ağı eklentisi algılanmadı. Yüklemek ", t77: "için ", t78: " burayı tıklayın.", @@ -1057,11 +1166,29 @@ var LangText = { t89: "Dosyayı içeren klasörü açınız", t90: "3D Model", t91: "3D modelleri indirin", - t92: "Bambu Noel Kabini", - t93: "Yazıcı Bağlantısı", - t94: "Cihazı görüntülemek için lütfen yazıcı bağlantınızı kurun.", - orca1: "Edit Project Info", - orca2: "no model information", + t92: "Oluşturan", + t93: "Değiştiren", + t94: "Paylaşan", + t95: "Model Bilgileri", + t96: "Aksesuarlar", + t97: "Profil Bilgisi", + t98: "Model adı", + t100: "Model açıklaması", + t101: "Malzeme Listesi", + t102: "Montaj Kılavuzu", + t103: "Diğer", + t104: "Profil ismi", + t105: "Profil Yazarı", + t106: "Profil açıklaması", + t107: "Çevrimiçi Modeller", + t108: "DAHA FAZLA", + t109: "Sistem Filamentleri", + t110: "Özel Filamentler", + t111: "Yeni Oluştur", + t112: "Programa Katılın", + t113: "Tercihinizi istediğiniz zaman değiştirebilirsiniz.", + orca1: "Proje Bilgilerini Düzenle", + orca2: "model bilgisi yok", }, pl_PL: { t1: "Witamy w Orca Slicer", @@ -1172,6 +1299,115 @@ var LangText = { orca1: "Edytuj informacje o projekcie", orca2: "brak informacji o modelu", }, + pt_BR: { + t1: "Bem-vindo ao Orca Slicer", + t2: "Orca Slicer será configurado em algumas etapas. Vamos começar!", + t3: "Termos de Uso", + t4: "Discordo", + t5: "Concordo", + t6: "Nós pedimos gentilmente sua ajuda para melhorar a impressão de todos.
Venha e junte-se ao nosso Programa de Melhoria de Experiência do Usuário", + t7: "Juntar-se ao nosso Programa de Melhoria de Experiência do Usuário", + t8: "Voltar", + t9: "Próximo", + t10: "Seleção de Impressora", + t11: "Tudo", + t12: "Limpar tudo", + t13: "mm nozzle", + t14: "Seleção de Filamento", + t15: "Impressora", + t16: "Tipo de Filamento", + t17: "Fabricante", + t18: "Erro", + t19: "Pelo menos um filamento deve ser selecionado.", + t20: "Você deseja usar o filamento padrão?", + t21: "Sim", + t22: "Não", + t23: "Notas de Atualização", + t24: "Vamos Começar", + t25: "Terminar", + t26: "Login", + t27: "Registrar", + t28: "Recente", + t29: "Loja", + t30: "Manual", + t31: "Novo Projeto", + t32: "Criar Novo Projeto", + t33: "Abrir Projeto", + t34: "hotspot", + t35: "Aberto Recentemente", + t36: "Ok", + t37: "Pelo menos uma impressora deve ser selecionada.", + t38: "Cancelar", + t39: "Confirmar", + t40: "Conexão desconectada, por favor cheque e tente novamente.", + t47: "Por favor, selecione sua região de login", + t48: "Asia-Pacifico", + t49: "China", + t50: "Desconectar", + t52: "Pular", + t53: "Juntar", + t54: "Na comunidade de Impressão 3D, aprendemos com os sucessos e falhas uns dos outros para ajustar nossos próprios parâmetros e configurações de fatiamento. O Orca Slicer segue o mesmo princípio e utiliza aprendizado de máquina para melhorar seu desempenho com base nos sucessos e falhas de um grande número de impressões realizadas por nossos usuários. Estamos treinando o Orca Slicer para ser mais inteligente, alimentando-o com dados do mundo real. Se você concordar, este serviço acessará informações de seus registros de erros e registros de uso, que podem incluir informações descritas em…", + t55: "Política de Privacidade", + t56: ". Não coletaremos nenhum dado pessoal pelo qual um indivíduo possa ser identificado diretamente ou indiretamente, incluindo, sem limitação, nomes, endereços, informações de pagamento ou números de telefone. Ao habilitar este serviço, você concorda com estes termos e com a declaração sobre a Política de Privacidade.", + t57: "", + t58: "", + t59: ".", + t60: "Europa", + t61: "America do Norte", + t62: "Outras", + t63: "Após alterar sua região, sua conta será desconectada. Por favor faça login novamente mais tarde.", + t64: "Plugins Proprietários", + t65: "Por favor seja cuidadoso estes plugins não são desenvolvidos ou mantidos por OrcaSlicer. Eles devem ser usados por sua conta e risco.", + t66: "Controle remoto total", + t67: "Transmissão Ao Vivo", + t68: "Sincronização de Dados do Usuário", + t69: "Instalar Bambu Network plug-in", + t70: "", + t71: "Baixando", + t72: "Baixando falhou", + t73: "Instalação concluida.", + t74: "Reiniciar", + t75: "Algumass fabricantes de impressoras exigem plugins proprietários para comunicação com suas impressoras. Se você utiliza tais impressoras, selecione o plug-in correspondente.", + t76: "Bambu Network plug-in não detectado. Clique ", + t77: "Aqui", + t78: " para instalar isto.", + t79: "Instalação do plug-in falhou. ", + t80: "Tente os seguintes passos:", + t81: "1, Clique ", + t82: " para abrir a pasta do plug-in", + t83: "2, Feche totalmente o Orca Slicer", + t84: "3, Delete todos os arquivos na pasta do plug-in", + t85: "4, Reabra o Orca Slicer e instale o plug-in novamente", + t86: "Fechar", + t87: "Manual de Usuário", + t88: "Remover", + t89: "Abrir pasta de Conteúdo", + t90: "Modelo 3D", + t91: "Baixar Modelos 3D", + t92: "Criado por", + t93: "Remixado por", + t94: "Compartilhado por", + t95: "Informações do Modelo", + t96: "Acessórios", + t97: "Informações do Perfil", + t98: "Nome do Modelo", + t100: "Descrição do Modelo", + t101: "BOM", + t102: "Guia de Montagem", + t103: "Outro", + t104: "Nome do Perfil", + t105: "Autor do Perfil", + t106: "Descrição do Perfil", + t107: "Modelos Online", + t108: "MAIS", + t109: "Filamentos do Sistema", + t110: "Filamentos Personalizados", + t111: "Criar Novo", + t112: "Junte-se ao Programa", + t113: "Você pode alterar sua escolha nas Preferências a qualquer momento", + orca1: "Editar Info do Projeto", + orca2: "Sem informação do modelo", + }, }; var LANG_COOKIE_NAME = "BambuWebLang"; diff --git a/resources/web/guide/23/23.css b/resources/web/guide/23/23.css index de2ca9f3e8..35ceff9960 100644 --- a/resources/web/guide/23/23.css +++ b/resources/web/guide/23/23.css @@ -148,7 +148,7 @@ input height: calc(100% - 6px); display: flex; align-items: center; - border-bottom: 6px solid #00AE42; + border-bottom: 6px solid #009688; } #Title div.TitleUnselected @@ -205,4 +205,4 @@ input .CFilament_EditBtn:hover { -} \ No newline at end of file +} diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index 17de9d6b3e..2fbaa43304 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -1,20 +1,15 @@ -/*var TestData={"sequence_id":"0","command":"studio_send_recentfile","data":[{"path":"D:\\work\\Models\\Toy\\3d-puzzle-cube-model_files\\3d-puzzle-cube.3mf","time":"2022\/3\/24 20:33:10"},{"path":"D:\\work\\Models\\Art\\Carved Stone Vase - remeshed+drainage\\Carved Stone Vase.3mf","time":"2022\/3\/24 17:11:51"},{"path":"D:\\work\\Models\\Art\\Kity & Cat\\Cat.3mf","time":"2022\/3\/24 17:07:55"},{"path":"D:\\work\\Models\\Toy\\鐩村墤.3mf","time":"2022\/3\/24 17:06:02"},{"path":"D:\\work\\Models\\Toy\\minimalistic-dual-tone-whistle-model_files\\minimalistic-dual-tone-whistle.3mf","time":"2022\/3\/22 21:12:22"},{"path":"D:\\work\\Models\\Toy\\spiral-city-model_files\\spiral-city.3mf","time":"2022\/3\/22 18:58:37"},{"path":"D:\\work\\Models\\Toy\\impossible-dovetail-puzzle-box-model_files\\impossible-dovetail-puzzle-box.3mf","time":"2022\/3\/22 20:08:40"}]};*/ +//var TestData={"sequence_id":"0","command":"get_recent_projects","response":[{"path":"D:\\work\\Models\\Toy\\3d-puzzle-cube-model_files\\3d-puzzle-cube.3mf","time":"2022\/3\/24 20:33:10"},{"path":"D:\\work\\Models\\Art\\Carved Stone Vase - remeshed+drainage\\Carved Stone Vase.3mf","time":"2022\/3\/24 17:11:51"},{"path":"D:\\work\\Models\\Art\\Kity & Cat\\Cat.3mf","time":"2022\/3\/24 17:07:55"},{"path":"D:\\work\\Models\\Toy\\鐩村墤.3mf","time":"2022\/3\/24 17:06:02"},{"path":"D:\\work\\Models\\Toy\\minimalistic-dual-tone-whistle-model_files\\minimalistic-dual-tone-whistle.3mf","time":"2022\/3\/22 21:12:22"},{"path":"D:\\work\\Models\\Toy\\spiral-city-model_files\\spiral-city.3mf","time":"2022\/3\/22 18:58:37"},{"path":"D:\\work\\Models\\Toy\\impossible-dovetail-puzzle-box-model_files\\impossible-dovetail-puzzle-box.3mf","time":"2022\/3\/22 20:08:40"}]}; var m_HotModelList=null; function OnInit() -{ - //-----Test----- - //Set_RecentFile_MouseRightBtn_Event(); - +{ //-----Official----- TranslatePage(); SendMsg_GetLoginInfo(); SendMsg_GetRecentFile(); SendMsg_GetStaffPick(); - - //InitStaffPick(); } //------最佳打开文件的右键菜单功能---------- @@ -311,14 +306,7 @@ function OnOpenRecentFile( strPath ) function OnDeleteRecentFile( ) { - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="homepage_delete_recentfile"; - tSend['data']={}; - tSend['data']['path']=decodeURI(RightBtnFilePath); - - SendWXMessage( JSON.stringify(tSend) ); - + //Clear in UI $("#recnet_context_menu").hide(); let AllFile=$(".FileItem"); @@ -331,19 +319,27 @@ function OnDeleteRecentFile( ) } UpdateRecentClearBtnDisplay(); + + //Send Msg to C++ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="homepage_delete_recentfile"; + tSend['data']={}; + tSend['data']['path']=RightBtnFilePath; + + SendWXMessage( JSON.stringify(tSend) ); } function OnDeleteAllRecentFiles() { + $('#FileList').html(''); + UpdateRecentClearBtnDisplay(); + var tSend={}; tSend['sequence_id']=Math.round(new Date() / 1000); tSend['command']="homepage_delete_all_recentfile"; - SendWXMessage( JSON.stringify(tSend) ); - - $('#FileList').html(''); - - UpdateRecentClearBtnDisplay(); + SendWXMessage( JSON.stringify(tSend) ); } function UpdateRecentClearBtnDisplay() diff --git a/resources/web/homepage2/css/online.css b/resources/web/homepage2/css/online.css new file mode 100644 index 0000000000..cfed7f41ce --- /dev/null +++ b/resources/web/homepage2/css/online.css @@ -0,0 +1,162 @@ +.RedFont +{ + font-size:12px; + color: #F07E4A; +} + +.LinkBtn +{ + font-size:12px; + color: #1200FF; + cursor: pointer; +} + +.LinkBtn:hover +{ + text-decoration:underline; +} + + +/*------------------*/ + +/*--------------------*/ +#ContentBoard +{ + overflow-y:auto; + padding: 0px 40px; + display: flex; + flex-direction: column; + position: relative; + height: 100%; +} + +#Online_Models_Bar +{ + +} + +#ForU_Models_Bar +{ + display:none; +} + + +/*--Staff Pick--*/ +#HotModelArea +{ + display: none; + width: 100%; +} + +#HotModelList +{ + display: flex; + flex-wrap: wrap; + align-content: flex-start; +} + +.HotModelPiece +{ + display:flex; + flex-direction: column; + cursor: pointer; + border-radius: 8px; +} + +.HotModel_PrevBlock +{ + text-align: center; + background-color: #E4E4E4; + width: 100%; + border-radius: 8px; + line-height: 0px; + padding: 0px; +} + +.HotModel_PrevImg +{ + border-radius: 8px; + width: 100%; + aspect-ratio: 4/3; + object-fit: cover; +} + +.HotModel_Designer_Info +{ + display:flex; + align-items: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 4px 2px; +} + +.HotModel_Author_HeadIcon +{ + margin-right: 6px; + width: 32px; + height: 32px; +} + +.HotModel_Author_HeadIcon img +{ + width: 32px; + height: 32px; + border-radius: 16px; +} + +.HotModel_Right_1 +{ + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0px 4px; +} + +.HotModel_Name +{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 700; +} + + +.HotModel_Right_1_2 +{ + display:flex; +} + +.HotModel_Author_Name +{ + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-right: 4px; +} + + +.HotModel_click_info +{ + flex: 0 0 auto; + display: flex; + justify-content: flex-start; + align-items: center; + font-size: 12px; + overflow: hidden; +} + +.HotModel_click_info img +{ + width: 20px; + height: 20px; +} + +.Model_Click_Number +{ + display: flex; + align-items: center; +} + diff --git a/resources/web/homepage2/css/recent.css b/resources/web/homepage2/css/recent.css new file mode 100644 index 0000000000..1e3729e210 --- /dev/null +++ b/resources/web/homepage2/css/recent.css @@ -0,0 +1,257 @@ + + +#RecentFileArea +{ + flex: 1; + display: flex; + flex-direction: column; + position: relative; + top: 0px; + bottom: 0px; + right: 0px; + left: 0px; +} + +#RecentTitleBlock +{ + display:flex; + align-items: center; + justify-content:space-between; + padding: 6px 10px; +} + +#RecentClearAllBtn +{ + border-width: 1px; + border-style: solid; + padding: 0px 10px; + border-radius: 6px; + line-height: 26px; + height: 26px; + margin-left: 20px; + cursor: pointer; + display: none; +} + +#RecentClearAllBtn:hover +{ + background-color:#CDCECE; +} + +#Recent_LEFT_Title +{ + display:flex; + align-items: center; + padding: 0px 0px; +} + +#Right_Title_Block +{ + display:flex; + align-items: center; +} + +.Right_Title_Btn +{ + display:flex; + align-items: center; + margin-right: 16px; +} + +.Right_Title_Btn_Icon +{ + width:16px; + height: 16px; + margin-right: 6px; +} + +#Menu_Delete +{ + display:none; +} + +#Menu_Cancel +{ + display:none; +} + +#FileList +{ + flex: 1; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + overflow-y: auto; +} + +.FileItem +{ + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + word-break: break-all; + position: relative; + cursor: pointer; + border-radius: 8px; +} + +.FileMask +{ + position:absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + background-color: darkgrey; + opacity: 0.3; + display: none; +} + +.FileCheckBox +{ + position:absolute; + top: 14px; + left: 14px; + width: 26px; + height: 26px; + border:1px solid grey; + border-radius: 4px; + background-color: white; + display: none; +} + +.FileCheckBox_checked +{ + background-image: url("../img/checkbox.svg"); + background-size: contain; +} + +.FileCheckBox_checked:hover +{ + background-image: url("../img/checkbox_hover.svg"); +} + +.FileTip +{ + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; +} + +.FileImg +{ + text-align: center; + background-color: #E4E4E4; + width: 100%; + border-radius: 8px; + line-height: 0px; +} + +.FileImg img +{ + border-radius: 8px; + width: 100%; + aspect-ratio: 4/3; + object-fit: cover; +} + +.FileName +{ + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + word-break: break-all; + line-height: 32px; + font-weight: 700; + padding: 0px 4px; +} + +.FileDate +{ + color: #A8A8A8; + font-size: 10px; + padding: 0px 4px; +} + +#recnet_context_menu +{ + position: absolute; + margin: 0px; + padding: 10px; + border: 0px; + min-width: 100px; + border: 1px solid #D7D7D7; + top: 100px; + border-radius: 5px; + color: #323A3D; + background-color: #fff; + display: none; + z-index: 1; +} + +.CT_Item +{ + padding: 4px 12px; + display: flex; + flex-direction: row; + align-items: center; +} + +.CT_Item:hover +{ + cursor: pointer; + background-color: #0078D4; + border-radius: 4px; + color: #fff; +} + + +.CT_Icon +{ + margin-right: 6px; + width: 16px; + height: 16px; +} + +#CT_Delete_Bar:hover .CT_Delete +{ + background: url("../img/remove2.svg"); + background-repeat: no-repeat; + background-size: contain; +} + +.CT_Delete +{ + background: url("../img/remove.svg"); + background-repeat: no-repeat; + background-size: contain; +} + +#CT_Folder_Bar:hover .CT_Explore +{ + background: url("../img/open_folder2.svg"); + background-repeat: no-repeat; + background-size: contain; +} + +.CT_Explore +{ + background: url("../img/open_folder.svg"); + background-repeat: no-repeat; + background-size: contain; +} + + +.CT_Seperate +{ + border-bottom:1px solid #C5C5C5; +} + +.CT_Text +{ + line-height: 20px; + height: 20px; + display: block; +} \ No newline at end of file diff --git a/resources/web/model/model.js b/resources/web/model/model.js index 30bbdce678..b401bea75b 100644 --- a/resources/web/model/model.js +++ b/resources/web/model/model.js @@ -206,6 +206,12 @@ function ShowModelInfo( pModel ) let sLicence=pModel.license.toUpperCase(); let sModelDesc=decodeURIComponent(pModel.description); + if( pModel.hasOwnProperty('model_id') ) + { + let m_id=pModel['model_id']+''; + UpdateModelID( m_id.trim() ); + } + SendWXDebugInfo("Model Name: "+sModelName); $('#ModelName').html(sModelName); diff --git a/sandboxes/aabb-evaluation/aabb-evaluation.cpp b/sandboxes/aabb-evaluation/aabb-evaluation.cpp index 1019ecf28b..86b672ca05 100644 --- a/sandboxes/aabb-evaluation/aabb-evaluation.cpp +++ b/sandboxes/aabb-evaluation/aabb-evaluation.cpp @@ -95,7 +95,7 @@ void profile(const TriangleMesh &mesh) Eigen::MatrixXd occlusion_output1; { std::vector vertices; - std::vector triangles; + std::vector triangles; for (int i = 0; i < V.rows(); ++ i) vertices.emplace_back(V.row(i).transpose()); for (int i = 0; i < F.rows(); ++ i) diff --git a/sandboxes/its_neighbor_index/ItsNeighborIndex.cpp b/sandboxes/its_neighbor_index/ItsNeighborIndex.cpp index 84ada72adc..8e97c87dde 100644 --- a/sandboxes/its_neighbor_index/ItsNeighborIndex.cpp +++ b/sandboxes/its_neighbor_index/ItsNeighborIndex.cpp @@ -45,7 +45,7 @@ FaceNeighborIndex its_create_neighbors_index_1(const indexed_triangle_set &its) // Go through all edges of all facets and mark the facets touching each edge for (size_t face_id = 0; face_id < its.indices.size(); ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; EdgeID e1 = hash(face(0), face(1)), e2 = hash(face(1), face(2)), e3 = hash(face(2), face(0)); @@ -59,7 +59,7 @@ FaceNeighborIndex its_create_neighbors_index_1(const indexed_triangle_set &its) // Now collect the neighbors for each facet into the final index for (size_t face_id = 0; face_id < its.indices.size(); ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; EdgeID e1 = hash(face(0), face(1)), e2 = hash(face(1), face(2)), e3 = hash(face(2), face(0)); @@ -77,9 +77,9 @@ FaceNeighborIndex its_create_neighbors_index_1(const indexed_triangle_set &its) return index; } -std::vector its_create_neighbors_index_2(const indexed_triangle_set &its) +std::vector its_create_neighbors_index_2(const indexed_triangle_set &its) { - std::vector out(its.indices.size(), Vec3i(-1, -1, -1)); + std::vector out(its.indices.size(), Vec3i32(-1, -1, -1)); // Create a mapping from triangle edge into face. struct EdgeToFace { @@ -157,9 +157,9 @@ std::vector its_create_neighbors_index_2(const indexed_triangle_set &its) return out; } -std::vector its_create_neighbors_index_3(const indexed_triangle_set &its) +std::vector its_create_neighbors_index_3(const indexed_triangle_set &its) { - std::vector out(its.indices.size(), Vec3i(-1, -1, -1)); + std::vector out(its.indices.size(), Vec3i32(-1, -1, -1)); // Create a mapping from triangle edge into face. struct EdgeToFace { @@ -288,7 +288,7 @@ FaceNeighborIndex its_create_neighbors_index_4(const indexed_triangle_set &its) // Go through all edges of all facets and mark the facets touching each edge for (size_t face_id = 0; face_id < its.indices.size(); ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; EdgeID e1 = hash(face(0), face(1)), e2 = hash(face(1), face(2)), e3 = hash(face(2), face(0)); @@ -302,7 +302,7 @@ FaceNeighborIndex its_create_neighbors_index_4(const indexed_triangle_set &its) // Now collect the neighbors for each facet into the final index for (size_t face_id = 0; face_id < its.indices.size(); ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; EdgeID e1 = hash(face(0), face(1)), e2 = hash(face(1), face(2)), e3 = hash(face(2), face(0)); @@ -443,7 +443,7 @@ std::vector> its_create_neighbors_index_6(const indexed_tr // Go through all edges of all facets and mark the facets touching each edge for (size_t face_id = 0; face_id < facenum; ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; edge_map[face_id * 3] = {hash(face(0), face(1)), face_id}; edge_map[face_id * 3 + 1] = {hash(face(1), face(2)), face_id}; @@ -503,7 +503,7 @@ std::vector> its_create_neighbors_index_7(const indexed_tr // Go through all edges of all facets and mark the facets touching each edge for (size_t face_id = 0; face_id < facenum; ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; edge_map[face_id * 3] = {hash(face(0), face(1)), face_id}; edge_map[face_id * 3 + 1] = {hash(face(1), face(2)), face_id}; @@ -568,7 +568,7 @@ FaceNeighborIndex its_create_neighbors_index_8(const indexed_triangle_set &its) // Go through all edges of all facets and mark the facets touching each edge for (size_t face_id = 0; face_id < its.indices.size(); ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; EdgeID e1 = hash(face(0), face(1)), e2 = hash(face(1), face(2)), e3 = hash(face(2), face(0)); @@ -582,7 +582,7 @@ FaceNeighborIndex its_create_neighbors_index_8(const indexed_triangle_set &its) // Now collect the neighbors for each facet into the final index for (size_t face_id = 0; face_id < its.indices.size(); ++face_id) { - const Vec3i &face = its.indices[face_id]; + const Vec3i32 &face = its.indices[face_id]; EdgeID e1 = hash(face(0), face(1)), e2 = hash(face(1), face(2)), e3 = hash(face(2), face(0)); @@ -605,7 +605,7 @@ std::vector its_create_neighbors_index_9(const indexed_triangle_set &it return create_face_neighbors_index(ex_seq, its); } -std::vector its_create_neighbors_index_10(const indexed_triangle_set &its) +std::vector its_create_neighbors_index_10(const indexed_triangle_set &its) { return create_face_neighbors_index(ex_tbb, its); } diff --git a/sandboxes/its_neighbor_index/ItsNeighborIndex.hpp b/sandboxes/its_neighbor_index/ItsNeighborIndex.hpp index 66f2b23485..305e445345 100644 --- a/sandboxes/its_neighbor_index/ItsNeighborIndex.hpp +++ b/sandboxes/its_neighbor_index/ItsNeighborIndex.hpp @@ -4,8 +4,8 @@ namespace Slic3r { using FaceNeighborIndex = std::vector>; FaceNeighborIndex its_create_neighbors_index_1(const indexed_triangle_set &its); -std::vector its_create_neighbors_index_2(const indexed_triangle_set &its); -std::vector its_create_neighbors_index_3(const indexed_triangle_set &its); +std::vector its_create_neighbors_index_2(const indexed_triangle_set &its); +std::vector its_create_neighbors_index_3(const indexed_triangle_set &its); FaceNeighborIndex its_create_neighbors_index_4(const indexed_triangle_set &its); //FaceNeighborIndex its_create_neighbors_index_4(const indexed_triangle_set &its); std::vector its_create_neighbors_index_5(const indexed_triangle_set &its); @@ -13,7 +13,7 @@ std::vector> its_create_neighbors_index_6(const indexed_tr std::vector> its_create_neighbors_index_7(const indexed_triangle_set &its); FaceNeighborIndex its_create_neighbors_index_8(const indexed_triangle_set &its); std::vector its_create_neighbors_index_9(const indexed_triangle_set &its); -std::vector its_create_neighbors_index_10(const indexed_triangle_set &its); +std::vector its_create_neighbors_index_10(const indexed_triangle_set &its); std::vector> create_vertex_faces_index(const indexed_triangle_set &its); } diff --git a/sandboxes/opencsg/Engine.cpp b/sandboxes/opencsg/Engine.cpp index e64a471326..0562d8620f 100644 --- a/sandboxes/opencsg/Engine.cpp +++ b/sandboxes/opencsg/Engine.cpp @@ -364,7 +364,7 @@ void Controller::on_scroll(long v, long d, MouseInput::WheelAxis /*wa*/) void Controller::on_moved_to(long x, long y) { if (m_left_btn) { - call_cameras(&Camera::rotate, (Vec2i{x, y} - m_mouse_pos).cast()); + call_cameras(&Camera::rotate, (Vec2i32{x, y} - m_mouse_pos).cast()); call(&Display::repaint, m_displays); } diff --git a/sandboxes/opencsg/Engine.hpp b/sandboxes/opencsg/Engine.hpp index 114268ddc9..c0b1c62976 100644 --- a/sandboxes/opencsg/Engine.hpp +++ b/sandboxes/opencsg/Engine.hpp @@ -358,7 +358,7 @@ private: class Display : public Scene::Listener { protected: - Vec2i m_size; + Vec2i32 m_size; bool m_initialized = false; std::shared_ptr m_camera; @@ -379,7 +379,7 @@ public: virtual void swap_buffers() = 0; virtual void set_active(long width, long height); virtual void set_screen_size(long width, long height); - Vec2i get_screen_size() const { return m_size; } + Vec2i32 get_screen_size() const { return m_size; } virtual void repaint(); @@ -438,7 +438,7 @@ class Controller : public std::enable_shared_from_this, public Scene::Listener { long m_wheel_pos = 0; - Vec2i m_mouse_pos, m_mouse_pos_rprev, m_mouse_pos_lprev; + Vec2i32 m_mouse_pos, m_mouse_pos_rprev, m_mouse_pos_lprev; bool m_left_btn = false, m_right_btn = false; std::shared_ptr m_scene; diff --git a/scripts/generate_presets_vendors.py b/scripts/generate_presets_vendors.py new file mode 100644 index 0000000000..e5c3c837d5 --- /dev/null +++ b/scripts/generate_presets_vendors.py @@ -0,0 +1,155 @@ +# helps manage the static list of vendor names in src/slic3r/GUI/CreatePresetsDialog.cpp + +import json +from pathlib import Path +from typing import Dict, List + + +scripts_dir = Path(__file__).resolve().parent +print(f'Scripts dir: {scripts_dir}') +root_dir = scripts_dir.parent +profiles_dir = root_dir / 'resources' / 'profiles' + +printers: Dict[str, List[str]] = {} + +# generates the printer vendor list +print(f'Looking in {profiles_dir.resolve()}') +for entry in profiles_dir.glob('*.json'): + if entry.is_file(): + entry_info = json.loads(entry.read_text()) + vendor_name = entry_info.get('name', None) + if vendor_name: + models = [machine.get('name', None) for machine in entry_info.get('machine_model_list', []) if machine.get('name', None)] + printers[vendor_name] = models + +vendor_names = [f'"{vendor_name}",' for vendor_name in sorted(printers.keys(), key=str.casefold)] +vend_col_width = len(max(vendor_names, key=len)) +vendors_formatted = ' {' + '\n '.join(' '.join(f"{vendor_name:{vend_col_width}}" for vendor_name in vendor_names[i:i+5]) for i in range(0, len(vendor_names), 5)).rstrip()[:-1] + '}' +print(vendors_formatted) + +# generates the printer model map +models_formatted = ' {' +models_indent = len(models_formatted) + vend_col_width + 2 +for vendor_name in sorted(printers.keys(), key=str.casefold): + vendor_formatted = f'"{vendor_name}",' + models_formatted += f'{{{vendor_formatted:{vend_col_width}}{{' + + model_names = printers[vendor_name] + model_names_formatted = [f'"{model_name}",' for model_name in model_names] + model_col_width = len(max(model_names_formatted, key=len)) + model_names_str = ('\n' + ' ' * models_indent).join(' '.join(f"{model_name:{model_col_width}}" for model_name in model_names_formatted[i:i+5]) for i in range(0, len(model_names), 5)).rstrip()[:-1] + '}' + + models_formatted += model_names_str + + models_formatted += '},\n ' + +models_formatted = models_formatted.rstrip()[:-1] +print(models_formatted) + + +# Generate Filament Vendors +filament_vendors = [ + '3Dgenius', + '3DJake', + '3DXTECH', + '3D BEST-Q', + '3D Hero', + '3D-Fuel', + 'Aceaddity', + 'AddNorth', + 'Amazon Basics', + 'AMOLEN', + 'Ankermake', + 'Anycubic', + 'Atomic', + 'AzureFilm', + 'BASF', + 'Bblife', + 'BCN3D', + 'Beyond Plastic', + 'California Filament', + 'Capricorn', + 'CC3D', + 'colorFabb', + 'Comgrow', + 'Cookiecad', + 'Creality', + 'CERPRiSE', + 'Das Filament', + 'DO3D', + 'DOW', + 'DSM', + 'Duramic', + 'ELEGOO', + 'Eryone', + 'Essentium', + 'eSUN', + 'Extrudr', + 'Fiberforce', + 'Fiberlogy', + 'FilaCube', + 'Filamentive', + 'Fillamentum', + 'FLASHFORGE', + 'Formfutura', + 'Francofil', + 'FilamentOne', + 'GEEETECH', + 'Giantarm', + 'Gizmo Dorks', + 'GreenGate3D', + 'HATCHBOX', + 'Hello3D', + 'IC3D', + 'IEMAI', + 'IIID Max', + 'INLAND', + 'iProspect', + 'iSANMATE', + 'Justmaker', + 'Keene Village Plastics', + 'Kexcelled', + 'MakerBot', + 'MatterHackers', + 'MIKA3D', + 'NinjaTek', + 'Nobufil', + 'Novamaker', + 'OVERTURE', + 'OVVNYXE', + 'Polymaker', + 'Priline', + 'Printed Solid', + 'Protopasta', + 'Prusament', + 'Push Plastic', + 'R3D', + 'Re-pet3D', + 'Recreus', + 'Regen', + 'Sain SMART', + 'SliceWorx', + 'Snapmaker', + 'SnoLabs', + 'Spectrum', + 'SUNLU', + 'TTYT3D', + 'Tianse', + 'UltiMaker', + 'Valment', + 'Verbatim', + 'VO3D', + 'Voxelab', + 'VOXELPLA', + 'YOOPAI', + 'Yousu', + 'Ziro', + 'Zyltech', + ] + +filament_vendors_formatted = [f'"{vendor_name}",' for vendor_name in filament_vendors] +fil_col_width = len(max(filament_vendors_formatted, key=len)) +filaments_formatted = ' {' +filament_indent = len(filaments_formatted) +filaments_formatted += ('\n' + ' ' * filament_indent).join(' '.join(f'{vendor_name:{fil_col_width}}' for vendor_name in filament_vendors_formatted[i:i+5]) for i in range(0, len(filament_vendors), 5)).rstrip()[:-1] + '};' +print(filaments_formatted) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 1a3b6ca859..bb52a0aea1 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -80,6 +80,7 @@ using namespace nlohmann; #include "slic3r/GUI/OpenGLManager.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/Camera.hpp" +#include "slic3r/GUI/Plater.hpp" #include #ifdef __WXGTK__ @@ -124,6 +125,7 @@ std::map cli_errors = { {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_MODIFIED_PARAMS_TO_PRINTER, "Found modified parameter in printer preset in the 3mf file, which should not be changed."}, + {CLI_FILE_VERSION_NOT_SUPPORTED, "Unsupported 3MF version. Please make sure the 3MF file was created with the official version of Bambu Studio, not a beta version."}, {CLI_NO_SUITABLE_OBJECTS, "One of the plate is empty or has no object fully inside it. Please check that the 3mf contains no empty plate in Orca Slicer before uploading."}, {CLI_VALIDATE_ERROR, "There are some incorrect slicing parameters in the 3mf. Please verify the slicing of all plates in Orca Slicer before uploading."}, {CLI_OBJECTS_PARTLY_INSIDE, "Some objects are located over the boundary of the heated bed."}, @@ -159,6 +161,8 @@ typedef struct _sliced_info { std::vector sliced_plates; size_t prepare_time; size_t export_time; + std::vector upward_machines; + std::vector downward_machines; }sliced_info_t; std::vector g_slicing_warnings; @@ -407,6 +411,10 @@ void record_exit_reson(std::string outputdir, int code, int plate_id, std::strin try { json j; //record the headers + if (sliced_info.downward_machines.size() > 0) + j["downward_compatible_machine"] = sliced_info.downward_machines; + if (sliced_info.upward_machines.size() > 0) + j["upward_compatible_machine"] = sliced_info.upward_machines; j["plate_index"] = plate_id; j["return_code"] = code; j["error_string"] = error_message; @@ -677,6 +685,51 @@ static int load_assemble_plate_list(std::string config_file, std::vector>(); BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, object %2% has %3% print params") % (plate_index + 1) %assemble_object.path % assemble_object.print_params.size(); } + if (object_json.contains(JSON_ASSEMPLE_OBJECT_HEIGHT_RANGES)) { + json height_range_json = object_json[JSON_ASSEMPLE_OBJECT_HEIGHT_RANGES]; + int range_count = height_range_json.size(); + + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, object %2% has %3% height ranges") % (plate_index + 1) %assemble_object.path % range_count; + + assemble_object.height_ranges.resize(range_count); + for (int range_index = 0; range_index < range_count; range_index++) + { + height_range_info_t& height_range = assemble_object.height_ranges[range_index]; + height_range.min_z = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_MIN_Z]; + height_range.max_z = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_MAX_Z]; + height_range.range_params = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_RANGE_PARAMS].get>(); + } + } + } + if (plate_json.contains(JSON_ASSEMPLE_ASSEMBLE_PARAMS)) { + json assemble_params_json = plate_json[JSON_ASSEMPLE_ASSEMBLE_PARAMS]; + int assemble_count = assemble_params_json.size(); + for (int i = 0; i < assemble_count; i++) + { + assembled_param_info_t assembled_param; + int assemble_index = assemble_params_json[i][JSON_ASSEMPLE_OBJECT_ASSEMBLE_INDEX]; + if (assemble_params_json[i].contains(JSON_ASSEMPLE_OBJECT_PRINT_PARAMS)) { + assembled_param.print_params = assemble_params_json[i][JSON_ASSEMPLE_OBJECT_PRINT_PARAMS].get>(); + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, assemble object %2% has %3% print params") % (plate_index + 1) %i % assembled_param.print_params.size(); + } + if (assemble_params_json[i].contains(JSON_ASSEMPLE_OBJECT_HEIGHT_RANGES)) { + json height_range_json = assemble_params_json[i][JSON_ASSEMPLE_OBJECT_HEIGHT_RANGES]; + int range_count = height_range_json.size(); + + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, assemble object %2% has %3% height ranges") % (plate_index + 1) %i % range_count; + + assembled_param.height_ranges.resize(range_count); + for (int range_index = 0; range_index < range_count; range_index++) + { + height_range_info_t& height_range = assembled_param.height_ranges[range_index]; + height_range.min_z = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_MIN_Z]; + height_range.max_z = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_MAX_Z]; + height_range.range_params = height_range_json[range_index][JSON_ASSEMPLE_OBJECT_RANGE_PARAMS].get>(); + } + } + assemble_plate.assembled_param_list.emplace(assemble_index, std::move(assembled_param)); + } + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, has %2% plate params") % (plate_index + 1) % assemble_plate.plate_params.size(); } } } @@ -789,7 +842,8 @@ static int construct_assemble_list(std::vector &assemble_ else if (boost::algorithm::iends_with(assemble_object.path, ".obj")) { std::string message; - bool result = load_obj(path_str, &mesh, message); + ObjInfo obj_info; + bool result = load_obj(path_str, &mesh, obj_info, message); if (!result) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(": failed to read a valid mesh from obj file %1%, plate index %2%, object index %3%, error %4%") % assemble_object.path % (index + 1) % (obj_index + 1) % message; return CLI_DATA_FILE_ERROR; @@ -817,6 +871,21 @@ static int construct_assemble_list(std::vector &assemble_ } } + if (!assemble_object.height_ranges.empty()) + { + for (int range_index = 0; range_index < assemble_object.height_ranges.size(); range_index++) + { + height_range_info_t& range = assemble_object.height_ranges[range_index]; + DynamicPrintConfig range_config; + for (auto range_config_iter = range.range_params.begin(); range_config_iter != range.range_params.end(); range_config_iter++) + { + range_config.set_deserialize(range_config_iter->first, range_config_iter->second, config_substitutions); + BOOST_LOG_TRIVIAL(debug) << boost::format("object %1%, height range %2% key %3%, value %4%") % object_1_name % range_index % range_config_iter->first % range_config_iter->second; + } + object->layer_config_ranges[{ range.min_z, range.max_z }].assign_config(std::move(range_config)); + } + } + if (assemble_object.pos_x.empty()) assemble_object.pos_x.resize(1, 0.f); if (assemble_object.pos_y.empty()) @@ -861,6 +930,46 @@ static int construct_assemble_list(std::vector &assemble_ } } + size_t assemble_count = merged_objects.size(); + if ((assemble_count > 0) && (assemble_plate_info.assembled_param_list.size() > 0)) + { + for (auto& iter : merged_objects) + { + ModelObject* assemble_obj = iter.second; + int assemble_index = iter.first; + + auto assemble_iter = assemble_plate_info.assembled_param_list.find(assemble_index); + + if (assemble_iter != assemble_plate_info.assembled_param_list.end()) + { + assembled_param_info_t& assembled_param = assemble_iter->second; + if (!assembled_param.print_params.empty()) + { + for (auto param_iter = assembled_param.print_params.begin(); param_iter != assembled_param.print_params.end(); param_iter++) + { + assemble_obj->config.set_deserialize(param_iter->first, param_iter->second, config_substitutions); + BOOST_LOG_TRIVIAL(debug) << boost::format("Plate %1%, assemble object %2% key %3%, value %4%") % (index + 1) % assemble_obj->name % param_iter->first % param_iter->second; + } + } + + if (!assembled_param.height_ranges.empty()) + { + for (int range_index = 0; range_index < assembled_param.height_ranges.size(); range_index++) + { + height_range_info_t& range = assembled_param.height_ranges[range_index]; + DynamicPrintConfig range_config; + for (auto range_config_iter = range.range_params.begin(); range_config_iter != range.range_params.end(); range_config_iter++) + { + range_config.set_deserialize(range_config_iter->first, range_config_iter->second, config_substitutions); + BOOST_LOG_TRIVIAL(debug) << boost::format("assenble object %1%, height range %2% key %3%, value %4%") % assemble_obj->name % range_index % range_config_iter->first % range_config_iter->second; + } + assemble_obj->layer_config_ranges[{ range.min_z, range.max_z }].assign_config(std::move(range_config)); + } + } + } + } + } + assemble_plate_info.filaments_count = used_filaments.size(); assemble_plate_info.assemble_obj_list.clear(); assemble_plate_info.assemble_obj_list.shrink_to_fit(); @@ -876,6 +985,56 @@ static int construct_assemble_list(std::vector &assemble_ return ret; } +static void load_downward_settings_list_from_config(std::string config_file, std::string printer_name, std::string printer_model, std::vector& downward_settings) +{ + std::map printer_params; + + boost::filesystem::path directory_path(config_file); + + BOOST_LOG_TRIVIAL(info) << boost::format("%1%, will parse file %2% for printer mode %3%, printer name %4%")%__FUNCTION__ % config_file %printer_model %printer_name; + if (!fs::exists(directory_path)) { + BOOST_LOG_TRIVIAL(warning) << boost::format("file %1% not exist.")%config_file; + } + else { + try { + json root_json; + boost::nowide::ifstream ifs(config_file); + ifs >> root_json; + ifs.close(); + + if (root_json.contains("printer")) { + json printer_json = root_json["printer"]; + if (!printer_model.empty() && printer_json.contains(printer_model)) { + json printer_model_json = printer_json[printer_model]; + + if (printer_model_json.contains("downward_check")) { + json downward_check_json = printer_model_json["downward_check"]; + if (downward_check_json.contains(printer_name)) { + downward_settings = downward_check_json[printer_name].get>(); + BOOST_LOG_TRIVIAL(info) << boost::format("got %1% downward settings of %2% in cli_config.json")%downward_settings.size() %printer_name; + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("can not find %1% in downward_check of %2% in cli_config.json")%printer_name %printer_model; + } + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("can not find downward_check for %1% in cli_config.json")%printer_model; + } + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("can not find printer_model %1% in the file")%printer_model; + } + } + else { + BOOST_LOG_TRIVIAL(warning) << boost::format("can not find key printer in the file"); + } + } + catch (std::exception &err) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse file "< &load_configs = m_config.option("load_settings", true)->values; const std::vector &uptodate_configs = m_config.option("uptodate_settings", true)->values; const std::vector &uptodate_filaments = m_config.option("uptodate_filaments", true)->values; + std::vector downward_settings = m_config.option("downward_settings", true)->values; + std::vector downward_compatible_machines; //BBS: always use ForwardCompatibilitySubstitutionRule::Enable //const ForwardCompatibilitySubstitutionRule config_substitution_rule = m_config.option>("config_compatibility", true)->value; const ForwardCompatibilitySubstitutionRule config_substitution_rule = ForwardCompatibilitySubstitutionRule::Enable; @@ -957,6 +1116,11 @@ int CLI::run(int argc, char **argv) sliced_info_t sliced_info; std::map record_key_values; + ConfigOptionBool* downward_check_option = m_config.option("downward_check"); + if (downward_check_option) + downward_check = downward_check_option->value; + + bool start_gui = m_actions.empty() && !downward_check; if (start_gui) { BOOST_LOG_TRIVIAL(info) << "no action, start gui directly" << std::endl; ::Label::initSysFont(); @@ -1025,19 +1189,29 @@ int CLI::run(int argc, char **argv) //BBS: add plate data related logic PlateDataPtrs plate_data_src; + std::vector plate_obj_size_infos; int arrange_option; 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, minimum_save = false, enable_timelapse = false; - bool allow_rotations = true, skip_modified_gcodes = false, avoid_extrusion_cali_region = false; + bool allow_rotations = true, skip_modified_gcodes = false, avoid_extrusion_cali_region = false, skip_useless_pick = false, allow_newer_file = 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, new_process_system_name, new_printer_system_name, printer_model_id, printer_model;//, 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_model_id, current_printer_model, printer_model;//, 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; bool new_process_config_is_system = true, new_printer_config_is_system = true; - std::string pipe_name, makerlab_name, makerlab_version; + std::string pipe_name, makerlab_name, makerlab_version, different_process_setting; + const std::vector &metadata_name = m_config.option("metadata_name", true)->values; + const std::vector &metadata_value = m_config.option("metadata_value", true)->values; + + if (metadata_name.size() != metadata_value.size()) + { + BOOST_LOG_TRIVIAL(error) << boost::format("metadata_name should be the same size with metadata_value"); + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } // Read input file(s) if any. BOOST_LOG_TRIVIAL(info) << "Will start to read model file now, file count :" << m_input_files.size() << "\n"; @@ -1073,6 +1247,14 @@ int CLI::run(int argc, char **argv) if (skip_modified_gcodes_option) skip_modified_gcodes = skip_modified_gcodes_option->value; + ConfigOptionBool* skip_useless_picks_option = m_config.option("skip_useless_pick"); + if (skip_useless_picks_option) + skip_useless_pick = skip_useless_picks_option->value; + + ConfigOptionBool* allow_newer_file_option = m_config.option("allow_newer_file"); + if (allow_newer_file_option) + allow_newer_file = allow_newer_file_option->value; + ConfigOptionBool* avoid_extrusion_cali_region_option = m_config.option("avoid_extrusion_cali_region"); if (avoid_extrusion_cali_region_option) avoid_extrusion_cali_region = avoid_extrusion_cali_region_option->value; @@ -1124,8 +1306,8 @@ int CLI::run(int argc, char **argv) const std::vector clone_objects = m_config.option("clone_objects", true)->values; //when load objects from stl/obj, the total used filaments set std::set used_filament_set; - BOOST_LOG_TRIVIAL(info) << boost::format("allow_multicolor_oneplate %1%, allow_rotations %2% skip_modified_gcodes %3% avoid_extrusion_cali_region %4% loaded_filament_ids size %5%, clone_objects size %6%") - %allow_multicolor_oneplate %allow_rotations %skip_modified_gcodes %avoid_extrusion_cali_region %loaded_filament_ids.size() %clone_objects.size(); + BOOST_LOG_TRIVIAL(info) << boost::format("allow_multicolor_oneplate %1%, allow_rotations %2% skip_modified_gcodes %3% avoid_extrusion_cali_region %4% loaded_filament_ids size %5%, clone_objects size %6%, skip_useless_pick %7%, allow_newer_file %8%") + %allow_multicolor_oneplate %allow_rotations %skip_modified_gcodes %avoid_extrusion_cali_region %loaded_filament_ids.size() %clone_objects.size() %skip_useless_pick %allow_newer_file; if (clone_objects.size() > 0) { if (clone_objects.size() != m_input_files.size()) @@ -1223,6 +1405,12 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "object "<name <<", id :" << o->id().id << ", from bbl 3mf\n"; }*/ + Semver cli_ver = *Semver::parse(SLIC3R_VERSION); + if (!allow_newer_file && ((cli_ver.maj() != file_version.maj()) || (cli_ver.min() < file_version.min()))){ + BOOST_LOG_TRIVIAL(error) << boost::format("Version Check: File Version %1% not supported by current cli version %2%")%file_version.to_string() %SLIC3R_VERSION; + record_exit_reson(outfile_dir, CLI_FILE_VERSION_NOT_SUPPORTED, 0, cli_errors[CLI_FILE_VERSION_NOT_SUPPORTED], sliced_info); + flush_and_exit(CLI_FILE_VERSION_NOT_SUPPORTED); + } Semver old_version(1, 5, 9), old_version2(1, 5, 9); if ((file_version < old_version) && !config.empty()) { translate_old = true; @@ -1253,6 +1441,7 @@ 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_printer_model = config.option("printer_model", true)->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; @@ -1438,6 +1627,12 @@ int CLI::run(int argc, char **argv) m_models.push_back(std::move(model)); } + if (!is_bbl_3mf && plate_to_slice > 0) + { + BOOST_LOG_TRIVIAL(warning) << boost::format("%1%: not support to slice plate %2%, reset to 0")%__LINE__ %plate_to_slice; + plate_to_slice = 0; + } + //load custom gcode file std::map custom_gcodes_map; if (!custom_gcode_file.empty()) { @@ -1608,6 +1803,11 @@ int CLI::run(int argc, char **argv) config.set("print_settings_id", new_process_name, true); //print_inherits = config.option("inherits", true)->value; new_print_compatible_printers = config.option("compatible_printers", true)->values; + + if (!is_bbl_3mf && config.option("different_settings_to_system")) { + std::vector diff_settings = config.option("different_settings_to_system")->values; + different_process_setting = diff_settings[0]; + } load_process_config = std::move(config); BOOST_LOG_TRIVIAL(info) << boost::format("loaded process config %1%, type %2%, name %3%, inherits %4%")%file %config_name %config_from % new_process_system_name; } @@ -2020,7 +2220,7 @@ int CLI::run(int argc, char **argv) } //upwards check - bool process_compatible = false, machine_upwards = false; + bool process_compatible = false, machine_upwards = false, machine_switch = 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; @@ -2082,11 +2282,16 @@ int CLI::run(int argc, char **argv) %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)) { + //set all printer to compatible + process_compatible = true; + machine_switch = true; + BOOST_LOG_TRIVIAL(info) << boost::format("switch to new printers, set to compatible"); if (upward_compatible_printers.size() > 0) { for (int index = 0; index < upward_compatible_printers.size(); index++) { if (upward_compatible_printers[index] == new_printer_system_name) { process_compatible = true; machine_upwards = true; + BOOST_LOG_TRIVIAL(info) << boost::format("new printer is upward_compatible"); break; } } @@ -2096,11 +2301,11 @@ int CLI::run(int argc, char **argv) flush_and_exit(CLI_3MF_NEW_MACHINE_NOT_SUPPORTED); } } - else { + /*else { 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], sliced_info); flush_and_exit(CLI_3MF_NOT_SUPPORT_MACHINE_CHANGE); - } + }*/ } if (!process_compatible) { @@ -2108,10 +2313,11 @@ int CLI::run(int argc, char **argv) record_exit_reson(outfile_dir, CLI_PROCESS_NOT_COMPATIBLE, 0, cli_errors[CLI_PROCESS_NOT_COMPATIBLE], sliced_info); flush_and_exit(CLI_PROCESS_NOT_COMPATIBLE); } + sliced_info.upward_machines = upward_compatible_printers; //create project embedded preset if needed Preset *new_preset = NULL; - if (is_bbl_3mf && machine_upwards) { + if (is_bbl_3mf && machine_switch) { //we need to update the compatible printer and create a new process here, or if we load the 3mf in studio, the process preset can not be loaded as not compatible Preset *current_preset = NULL; size_t project_presets_count = project_presets.size(); @@ -2203,6 +2409,9 @@ int CLI::run(int argc, char **argv) std::vector& inherits_group = m_print_config.option("inherits_group", true)->values; inherits_group.resize(filament_count + 2, std::string()); different_settings.resize(filament_count + 2, std::string()); + if (!is_bbl_3mf && !different_process_setting.empty()) { + different_settings[0] = different_process_setting; + } //set the machine settings into print config if (!new_printer_name.empty() || up_config_to_date) { std::vector different_keys; @@ -2268,33 +2477,40 @@ int CLI::run(int argc, char **argv) if (root_json.contains("printer")) { json printer_json = root_json["printer"]; if (!printer_model.empty() && printer_json.contains(printer_model)) { - json new_printer_json = printer_json[printer_model]; - printer_params = new_printer_json.get>(); + json printer_model_json = printer_json[printer_model]; - for (auto param_iter = printer_params.begin(); param_iter != printer_params.end(); param_iter++) - { - std::string key = param_iter->first; - //replace "cli_safe" with "machine_max" - key.replace(0, 8, "machine_max"); + if (printer_model_json.contains("machine_limits")) { + json machine_limits_json = printer_model_json["machine_limits"]; + printer_params = machine_limits_json.get>(); - ConfigOptionFloats* option = m_print_config.option(key); - if (option) { - //de-serialize the values from param_iter->second, and do the compare here - unsigned int array_count = option->size(); - ConfigOptionFloats new_option; - new_option.deserialize(param_iter->second); - unsigned int new_array_count = new_option.size(); - for (unsigned int index = 0; index < array_count; index++) - { - if ((index < new_array_count) && new_option.values[index] != 0.f && (new_option.values[index] < option->values[index])) + for (auto param_iter = printer_params.begin(); param_iter != printer_params.end(); param_iter++) + { + std::string key = param_iter->first; + //replace "cli_safe" with "machine_max" + key.replace(0, 8, "machine_max"); + + ConfigOptionFloats* option = m_print_config.option(key); + if (option) { + //de-serialize the values from param_iter->second, and do the compare here + unsigned int array_count = option->size(); + ConfigOptionFloats new_option; + new_option.deserialize(param_iter->second); + unsigned int new_array_count = new_option.size(); + for (unsigned int index = 0; index < array_count; index++) { - BOOST_LOG_TRIVIAL(info) << boost::format("set key %1% index %2%, from %3% to %4%") % key %index %option->values[index] % new_option.values[index]; - option->values[index] = new_option.values[index]; + if ((index < new_array_count) && new_option.values[index] != 0.f && (new_option.values[index] < option->values[index])) + { + BOOST_LOG_TRIVIAL(info) << boost::format("set key %1% index %2%, from %3% to %4%") % key %index %option->values[index] % new_option.values[index]; + option->values[index] = new_option.values[index]; + } } } + else + BOOST_LOG_TRIVIAL(warning) << boost::format("can not find key %1% in config") %key; } - else - BOOST_LOG_TRIVIAL(warning) << boost::format("can not find key %1% in config") %key; + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("can not find machine_limits for printer %1% in cli_config.json")%printer_model; } } else { @@ -2384,7 +2600,7 @@ int CLI::run(int argc, char **argv) } } - if (machine_upwards) { + if (machine_switch) { print_compatible_printers.push_back(new_printer_system_name); std::string old_setting = different_settings[0]; @@ -2605,8 +2821,8 @@ int CLI::run(int argc, char **argv) //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; + + const std::vector& min_flush_volumes = Slic3r::GUI::get_min_flush_volumes(m_print_config); if (filament_is_support->size() != project_filament_count) { @@ -2615,9 +2831,13 @@ int CLI::run(int argc, char **argv) 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(); + { + std::ostringstream volumes_str; + std::copy(min_flush_volumes.begin(), min_flush_volumes.end(), std::ostream_iterator(volumes_str, ",")); + BOOST_LOG_TRIVIAL(info) << boost::format("extra_flush_volume: %1%") % volumes_str.str(); + 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] = {}; @@ -2641,7 +2861,7 @@ int CLI::run(int argc, char **argv) //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); + Slic3r::FlushVolCalculator calculator(min_flush_volumes[from_idx], 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) { @@ -2765,134 +2985,6 @@ int CLI::run(int argc, char **argv) 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 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 cleareance_radius = m_print_config.opt_float("extruder_clearance_radius"); - //double plate_stride; - std::string bed_texture; - - 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)) - { - //check the printable size logic - //if ((old_printable_width > current_printable_width) || (old_printable_depth > current_printable_depth) || (old_printable_height > current_printable_height)) - if ((old_printable_width > current_printable_width) || (old_printable_depth > current_printable_depth)) - { - 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], sliced_info); - 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 { - 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; - } - } - - if (m_models.size() > 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(); - } - - auto translate_models = [translate_old, shrink_to_new_bed, old_printable_width, old_printable_depth, old_printable_height, current_printable_width, current_printable_depth, current_printable_height] (Slic3r::GUI::PartPlateList& plate_list, DynamicPrintConfig& print_config) { - //BBS: translate old 3mf to correct positions - if (translate_old) { - //translate the objects - int plate_count = plate_list.get_plate_count(); - for (int index = 1; index < plate_count; index ++) { - Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)plate_list.get_plate(index); - - Vec3d cur_origin = cur_plate->get_origin(); - Vec3d new_origin = plate_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%}")%old_printable_width %old_printable_depth %old_printable_height; - plate_list.reset_size(old_printable_width, old_printable_depth, old_printable_height, true, true); - } - - if (shrink_to_new_bed) - { - int plate_count = plate_list.get_plate_count(); - ConfigOptionFloats *wipe_x_option = nullptr, *wipe_y_option = nullptr; - Vec3d wipe_offset; - if (print_config.has("wipe_tower_x")) { - wipe_x_option = dynamic_cast(print_config.option("wipe_tower_x")); - wipe_y_option = dynamic_cast(print_config.option("wipe_tower_y")); - } - for (int index = 0; index < plate_count; index ++) { - Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)plate_list.get_plate(index); - - Vec3d cur_origin = cur_plate->get_origin(); - Vec3d new_origin = plate_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); - if (index == 0) - wipe_offset = offset; - if (wipe_x_option) { - BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed, plate %1%: wipe tower src: {%2%, %3%}")%(index+1) %wipe_x_option->get_at(index) %wipe_y_option->get_at(index); - ConfigOptionFloat wipe_tower_x(wipe_x_option->get_at(index) + wipe_offset(0)); - ConfigOptionFloat wipe_tower_y(wipe_y_option->get_at(index) + wipe_offset(1)); - - wipe_x_option->set_at(&wipe_tower_x, index, 0); - wipe_y_option->set_at(&wipe_tower_y, index, 0); - BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed, plate %1% wipe tower changes to: {%2%, %3%}")%(index+1) %wipe_x_option->get_at(index) %wipe_y_option->get_at(index); - } - - 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; - plate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true); - } - }; - if (plate_data_src.size() > 0) - { - partplate_list.load_from_3mf_structure(plate_data_src); - - translate_models(partplate_list, m_print_config); - } - - /*for (ModelObject *model_object : m_models[0].objects) - for (ModelInstance *model_instance : model_object->instances) - { - const Vec3d &instance_offset = model_instance->get_offset(); - BOOST_LOG_TRIVIAL(info) << boost::format("instance %1% transform {%2%,%3%,%4%} at %5%:%6%")% model_object->name % instance_offset.x() % instance_offset.y() %instance_offset.z() % __FUNCTION__ % __LINE__<< std::endl; - }*/ - auto timelapse_type_opt = m_print_config.option("timelapse_type"); bool is_smooth_timelapse = false; if (enable_timelapse && timelapse_type_opt && (timelapse_type_opt->getInt() == TimelapseType::tlSmooth)) @@ -2928,6 +3020,378 @@ int CLI::run(int argc, char **argv) } } + //BBS: partplate list + Slic3r::GUI::PartPlateList partplate_list(NULL, m_models.data(), printer_technology); + //use Pointfs insteadof Points + 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 cleareance_radius = m_print_config.opt_float("extruder_clearance_radius"); + //double plate_stride; + std::string bed_texture; + + 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 (is_bbl_3mf && (old_printable_width > 0) && (old_printable_depth > 0) && (old_printable_height > 0)) + { + //check the printable size logic + //if ((old_printable_width > current_printable_width) || (old_printable_depth > current_printable_depth) || (old_printable_height > current_printable_height)) + 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%}, the object size should be limited") + %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], sliced_info); + flush_and_exit(CLI_PRINTABLE_SIZE_REDUCED);*/ + shrink_to_new_bed = 2; + } + 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 = 1; + } + else { + if ((current_exclude_area.size() > 0)&&(current_exclude_area != old_exclude_area)) { + BOOST_LOG_TRIVIAL(info) << boost::format("old printable size {%1%, %2%, %3%}, new printable size {%4%, %5%, %6%}, exclude_area different, need to shrink") + %old_printable_width %old_printable_depth %old_printable_height %current_printable_width %current_printable_depth %current_printable_height; + shrink_to_new_bed = 2; + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("old printable size {%1%, %2%, %3%}, new printable size {%4%, %5%, %6%}, extract the same, no need shrink") + %old_printable_width %old_printable_depth %old_printable_height %current_printable_width %current_printable_depth %current_printable_height; + } + } + } + + if (m_models.size() > 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(); + } + + auto get_print_sequence = [](Slic3r::GUI::PartPlate* plate, DynamicPrintConfig& print_config, bool &is_seq_print) { + PrintSequence curr_plate_seq = plate->get_print_seq(); + if (curr_plate_seq == PrintSequence::ByDefault) { + auto seq_print = print_config.option>("print_sequence"); + if (seq_print && (seq_print->value == PrintSequence::ByObject)) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate print by object, set from global"); + is_seq_print = true; + } + } + else if (curr_plate_seq == PrintSequence::ByObject) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate print by object, set from plate self"); + is_seq_print = true; + } + }; + + auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) { + plate_obj_size_info.obj_bbox= plate->get_objects_bounding_box(); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, object bbox: min {%2%, %3%, %4%} - max {%5%, %6%, %7%}") + %(plate_index+1) %plate_obj_size_info.obj_bbox.min.x() % plate_obj_size_info.obj_bbox.min.y() % plate_obj_size_info.obj_bbox.min.z() %plate_obj_size_info.obj_bbox.max.x() % plate_obj_size_info.obj_bbox.max.y() % plate_obj_size_info.obj_bbox.max.z(); + if (!print_config.has("wipe_tower_x")) { + plate_obj_size_info.has_wipe_tower = false; + BOOST_LOG_TRIVIAL(info) << boost::format("can not found wipe_tower_x in config, set to no wipe tower"); + return; + } + + int valid_count = plate->printable_instance_size(); + if (valid_count <= 0){ + plate_obj_size_info.has_wipe_tower = false; + BOOST_LOG_TRIVIAL(info) << boost::format("no printable object found, set to no wipe tower"); + return; + } + + bool is_sequence = false; + get_print_sequence(plate, print_config, is_sequence); + if (is_sequence && valid_count > 1) { + plate_obj_size_info.has_wipe_tower = false; + BOOST_LOG_TRIVIAL(info) << boost::format("sequence print, valid_count=%1%, set to no wipe tower")%valid_count; + return; + } + + std::vector extruders = plate->get_extruders_under_cli(true, print_config); + unsigned int filaments_cnt = extruders.size(); + if ((filaments_cnt <= 1) && !is_smooth_timelapse){ + plate_obj_size_info.has_wipe_tower = false; + BOOST_LOG_TRIVIAL(info) << boost::format("filaments_cnt=%1%, set to no wipe tower")%filaments_cnt; + return; + } + + ConfigOptionFloats *wipe_x_option = dynamic_cast(print_config.option("wipe_tower_x")); + ConfigOptionFloats *wipe_y_option = dynamic_cast(print_config.option("wipe_tower_y")); + + plate_obj_size_info.wipe_x = wipe_x_option->get_at(plate_index); + plate_obj_size_info.wipe_y = wipe_y_option->get_at(plate_index); + + ConfigOptionFloat* width_option = print_config.option("prime_tower_width", true); + plate_obj_size_info.wipe_width = width_option->value; + + ConfigOptionFloat* brim_width_option = print_config.option("prime_tower_brim_width", true); + float brim_width = brim_width_option->value; + + ConfigOptionFloat* volume_option = print_config.option("prime_volume", true); + float wipe_volume = volume_option->value; + + Vec3d wipe_tower_size = plate->estimate_wipe_tower_size(print_config, plate_obj_size_info.wipe_width, wipe_volume, filaments_cnt); + plate_obj_size_info.wipe_depth = wipe_tower_size(1); + + Vec3d origin = plate->get_origin(); + Vec3d start(origin(0) + plate_obj_size_info.wipe_x - brim_width, origin(1) + plate_obj_size_info.wipe_y, 0.f); + plate_obj_size_info.obj_bbox.merge(start); + Vec3d end(origin(0) + plate_obj_size_info.wipe_x + plate_obj_size_info.wipe_width + brim_width, origin(1) + plate_obj_size_info.wipe_y + plate_obj_size_info.wipe_depth, 0.f); + plate_obj_size_info.obj_bbox.merge(end); + plate_obj_size_info.has_wipe_tower = true; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, has wipe tower, wipe bbox: min {%2%, %3%, %4%} - max {%5%, %6%, %7%}") + %(plate_index+1) %start.x() % start.y() % start.z() %end.x() % end.y() % end.z(); + }; + + auto translate_models = [translate_old, shrink_to_new_bed, old_printable_width, old_printable_depth, old_printable_height, current_printable_width, current_printable_depth, current_printable_height, current_exclude_area, &plate_obj_size_infos] (Slic3r::GUI::PartPlateList& plate_list, DynamicPrintConfig& print_config) { + //BBS: translate old 3mf to correct positions + if (translate_old) { + //translate the objects + int plate_count = plate_list.get_plate_count(); + for (int index = 1; index < plate_count; index ++) { + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)plate_list.get_plate(index); + + Vec3d cur_origin = cur_plate->get_origin(); + Vec3d new_origin = plate_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%}")%old_printable_width %old_printable_depth %old_printable_height; + plate_list.reset_size(old_printable_width, old_printable_depth, old_printable_height, true, true); + } + + if (shrink_to_new_bed > 0) + { + int plate_count = plate_list.get_plate_count(); + ConfigOptionFloats *wipe_x_option = nullptr, *wipe_y_option = nullptr; + Vec3d wipe_offset; + if (print_config.has("wipe_tower_x")) { + wipe_x_option = dynamic_cast(print_config.option("wipe_tower_x")); + wipe_y_option = dynamic_cast(print_config.option("wipe_tower_y")); + } + double exclude_width = 0.f, exclude_depth = 0.f; + + if (current_exclude_area.size() >= 4) { + exclude_width = current_exclude_area[2].x() - current_exclude_area[0].x(); + exclude_depth = current_exclude_area[2].y() - current_exclude_area[0].y(); + } + for (int index = 0; index < plate_count; index ++) { + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)plate_list.get_plate(index); + Vec3d cur_origin = cur_plate->get_origin(); + Vec3d new_origin = plate_list.compute_origin_using_new_size(index, current_printable_width, current_printable_depth); + Vec3d offset; + + + if (shrink_to_new_bed == 1) { + 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; + + offset = new_center - cur_center; + + if (index == 0) + wipe_offset = offset; + + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed 1, plate %1%, cur_origin: {%2%, %3%}, new_origin: {%4%, %5%}, cur_center {%6%, %7%} new_center {%8%, %9%}") + %(index+1) %cur_origin(0) %cur_origin(1) %new_origin(0) %new_origin(1) %cur_center(0) %cur_center(1) %new_center(0) %new_center(1); + } + else { + //center the object + Vec3d new_center_offset { ((double)current_printable_width + exclude_width)/2, ((double)current_printable_depth + exclude_depth)/2, 0}; + BoundingBoxf3& bbox = plate_obj_size_infos[index].obj_bbox; + Vec3d size = bbox.size(); + if (size.x() > (current_printable_width - exclude_width)) + new_center_offset(0) = ((double)current_printable_width)/2; + if (size.y() > (current_printable_depth - exclude_depth)) + new_center_offset(1) = ((double)current_printable_depth)/2; + Vec3d new_center = new_origin + new_center_offset; + + offset = new_center - bbox.center(); + + wipe_offset = offset + cur_origin - new_origin; + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed 2, plate %1%, new_origin: {%2%, %3%}, new_center: {%4%, %5%}, obj bbox(including wipe tower) min {%6%, %7%} max {%8%, %9%}") + %(index+1) %new_origin(0) %new_origin(1) %new_center(0) %new_center(1) %bbox.min(0) %bbox.min(1) %bbox.max(0) %bbox.max(1); + } + offset(2) = 0.f; + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed %1%, plate %2% translate offset: {%3%, %4%} wipe_offset {%5%, %6%}") %shrink_to_new_bed %(index+1) %offset[0] %offset[1] %wipe_offset[0] %wipe_offset[1]; + cur_plate->translate_all_instance(offset); + + if (wipe_x_option) { + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed %4%, plate %1%: wipe tower src: {%2%, %3%}")%(index+1) %wipe_x_option->get_at(index) %wipe_y_option->get_at(index)%shrink_to_new_bed; + ConfigOptionFloat wipe_tower_x(wipe_x_option->get_at(index) + wipe_offset(0)); + ConfigOptionFloat wipe_tower_y(wipe_y_option->get_at(index) + wipe_offset(1)); + + wipe_x_option->set_at(&wipe_tower_x, index, 0); + wipe_y_option->set_at(&wipe_tower_y, index, 0); + BOOST_LOG_TRIVIAL(info) << boost::format("shrink_to_new_bed %4%, plate %1% wipe tower changes to: {%2%, %3%}")%(index+1) %wipe_x_option->get_at(index) %wipe_y_option->get_at(index) %shrink_to_new_bed; + } + + + } + 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; + plate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true); + } + }; + if (plate_data_src.size() > 0) + { + partplate_list.load_from_3mf_structure(plate_data_src); + + int plate_count = partplate_list.get_plate_count(); + plate_obj_size_infos.resize(plate_count, plate_obj_size_info_t()); + for (int index = 0; index < plate_count; index ++) { + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); + + check_plate_wipe_tower(cur_plate, index, m_print_config, plate_obj_size_infos[index]); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, has_wipe_tower %2%, wipe_x %3%, wipe_y %4%, width %5%, depth %6%") + %(index+1) %plate_obj_size_infos[index].has_wipe_tower %plate_obj_size_infos[index].wipe_x %plate_obj_size_infos[index].wipe_y %plate_obj_size_infos[index].wipe_width %plate_obj_size_infos[index].wipe_depth; + } + + translate_models(partplate_list, m_print_config); + } + + /*for (ModelObject *model_object : m_models[0].objects) + for (ModelInstance *model_instance : model_object->instances) + { + const Vec3d &instance_offset = model_instance->get_offset(); + BOOST_LOG_TRIVIAL(info) << boost::format("instance %1% transform {%2%,%3%,%4%} at %5%:%6%")% model_object->name % instance_offset.x() % instance_offset.y() %instance_offset.z() % __FUNCTION__ % __LINE__<< std::endl; + }*/ + + //doing downward_check + std::vector downward_check_printers; + std::vector downward_check_status; + if (downward_check) { + bool use_default = false; + std::string default_path; + if (downward_settings.size() == 0) { + //parse from internal + std::string cli_config_file = resources_dir() + "/profiles/BBL/cli_config.json"; + load_downward_settings_list_from_config(cli_config_file, current_printer_name, current_printer_model, downward_settings); + use_default = true; + default_path = resources_dir() + "/profiles/BBL/machine_full/"; + } + for (auto const &file : downward_settings) { + DynamicPrintConfig config; + std::string config_type, config_name, filament_id, config_from, downward_printer; + std::string file_path = use_default?(default_path+file+".json"):file; + int ret = load_config_file(file_path, config, config_type, config_name, filament_id, config_from); + if (ret) { + record_exit_reson(outfile_dir, ret, 0, cli_errors[ret], sliced_info); + flush_and_exit(ret); + } + if ((config_type != "machine") || (config_from != "system")) { + BOOST_LOG_TRIVIAL(info) << boost::format("found invalid config type %1% or from %2% in file %3% when downward_check")%config_type %config_from %file_path; + record_exit_reson(outfile_dir, ret, 0, cli_errors[CLI_CONFIG_FILE_ERROR], sliced_info); + flush_and_exit(ret); + + } + BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: loaded machine config %1%, from %2%")%config_name %file_path ; + + printer_plate_info_t printer_plate; + Pointfs temp_printable_area, temp_exclude_area; + + printer_plate.printer_name = config_name; + + temp_printable_area = config.option("printable_area", true)->values; + temp_exclude_area = config.option("bed_exclude_area", true)->values; + if (temp_printable_area.size() >= 4) { + printer_plate.printable_width = (int)(temp_printable_area[2].x() - temp_printable_area[0].x()); + printer_plate.printable_depth = (int)(temp_printable_area[2].y() - temp_printable_area[0].y()); + printer_plate.printable_height = (int)(config.opt_float("printable_height")); + } + if (temp_exclude_area.size() >= 4) { + printer_plate.exclude_width = (int)(temp_exclude_area[2].x() - temp_exclude_area[0].x()); + printer_plate.exclude_depth = (int)(temp_exclude_area[2].y() - temp_exclude_area[0].y()); + printer_plate.exclude_x = (int)temp_exclude_area[0].x(); + printer_plate.exclude_y = (int)temp_exclude_area[0].y(); + } + BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: printable size{%1%,%2%, %3%}, exclude area{%4%, %5%: %6% x %7%}") + %printer_plate.printable_width %printer_plate.printable_depth %printer_plate.printable_height + %printer_plate.exclude_x %printer_plate.exclude_y %printer_plate.exclude_width %printer_plate.exclude_depth; + downward_check_printers.push_back(std::move(printer_plate)); + } + } + + int downward_check_size = downward_check_printers.size(); + if (downward_check_size > 0) + { + downward_check_status.resize(downward_check_size, false); + int plate_count = partplate_list.get_plate_count(); + int failed_count = 0; + for (int index = 0; index < plate_count; index ++) + { + if (failed_count == downward_check_size) { + BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: all failed, size %1%")%downward_check_size; + break; + } + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); + Vec3d size = plate_obj_size_infos[index].obj_bbox.size(); + + for (int index2 = 0; index2 < downward_check_size; index2 ++) + { + if (failed_count == downward_check_size) { + break; + } + if (downward_check_status[index2]) + continue; + printer_plate_info_t& plate_info = downward_check_printers[index2]; + if ((size.z() > plate_info.printable_height) || (size.y() > plate_info.printable_depth) || (size.x() > plate_info.printable_width)) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, downward_check index %2%, name %3%, bbox {%4%, %5%, %6%} exceeds printer size {%7%, %8%, %9%}") + %(index+1) %(index2+1) %plate_info.printer_name + %size.x() % size.y() % size.z() %plate_info.printable_width %plate_info.printable_depth %plate_info.printable_height; + downward_check_status[index2] = true; + failed_count ++; + continue; + } + if (plate_info.exclude_width > 0) { + int real_width = plate_info.printable_width - plate_info.exclude_width; + int real_depth = plate_info.printable_depth - plate_info.exclude_depth; + if ((size.x() > real_width) && (size.y() > real_depth)) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, downward_check index %2%, name %3%, bbox {%4%, %5%} exceeds real size without exclude_area {%6%, %7%}") + %(index+1) %(index2+1) %plate_info.printer_name + %size.x() % size.y() %real_width %real_depth; + downward_check_status[index2] = true; + failed_count ++; + continue; + } + } + } + } + if (failed_count < downward_check_size) + { + //has success ones + BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: downward_check_size %1%, failed_count %2%")%downward_check_size %failed_count; + for (int index2 = 0; index2 < downward_check_size; index2 ++) + { + if (downward_check_status[index2]) + continue; + printer_plate_info_t& plate_info = downward_check_printers[index2]; + BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: found compatible printer %1%")%plate_info.printer_name; + downward_compatible_machines.push_back(plate_info.printer_name); + } + sliced_info.downward_machines = downward_compatible_machines; + } + } + // Loop through transform options. bool user_center_specified = false; Points beds = get_bed_shape(m_print_config); @@ -3235,7 +3699,7 @@ int CLI::run(int argc, char **argv) } else { - BOOST_LOG_TRIVIAL(info) << "Before process command, no need to orient, object id :" << o->id().id<id().id<thumbnail_file; plate_data_src[index]->thumbnail_file.clear(); } + if (!plate_data_src[index]->no_light_thumbnail_file.empty()) { + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded no_light_thumbnail %2%.")%(index+1)%plate_data_src[index]->no_light_thumbnail_file; + plate_data_src[index]->no_light_thumbnail_file.clear(); + } if (!plate_data_src[index]->top_file.empty()) { BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded top_thumbnail %2%.")%(index+1)%plate_data_src[index]->top_file; plate_data_src[index]->top_file.clear(); @@ -3323,21 +3791,6 @@ int CLI::run(int argc, char **argv) } } - auto get_print_sequence = [](Slic3r::GUI::PartPlate* plate, DynamicPrintConfig& print_config, bool &is_seq_print) { - PrintSequence curr_plate_seq = plate->get_print_seq(); - if (curr_plate_seq == PrintSequence::ByDefault) { - auto seq_print = print_config.option>("print_sequence"); - if (seq_print && (seq_print->value == PrintSequence::ByObject)) { - BOOST_LOG_TRIVIAL(info) << boost::format("plate print by object, set from global"); - is_seq_print = true; - } - } - else if (curr_plate_seq == PrintSequence::ByObject) { - BOOST_LOG_TRIVIAL(info) << boost::format("plate print by object, set from plate self"); - is_seq_print = true; - } - }; - if (!assemble_plate_info_list.empty()) { //need to arrange for assemble cases @@ -3395,6 +3848,9 @@ int CLI::run(int argc, char **argv) int plate_count = partplate_list.get_plate_count(); auto printer_structure_opt = m_print_config.option>("printer_structure"); + const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; + const float tower_margin = WIPE_TOWER_MARGIN + tower_brim_width; + // set the default position, the same with print config(left top) float x = WIPE_TOWER_DEFAULT_X_POS; float y = WIPE_TOWER_DEFAULT_Y_POS; @@ -3402,11 +3858,11 @@ int CLI::run(int argc, char **argv) x = I3_WIPE_TOWER_DEFAULT_X_POS; y = I3_WIPE_TOWER_DEFAULT_Y_POS; } - if (x < WIPE_TOWER_MARGIN) { - x = WIPE_TOWER_MARGIN; + if (x < tower_margin) { + x = tower_margin; } - if (y < WIPE_TOWER_MARGIN) { - y = WIPE_TOWER_MARGIN; + if (y < tower_margin) { + y = tower_margin; } ConfigOptionFloat wt_x_opt(x); @@ -3503,7 +3959,8 @@ int CLI::run(int argc, char **argv) ap.apply(); } - partplate_list.rebuild_plates_after_arrangement(false, true, i); + //lock here + cur_plate->lock(true); } else { size_t plate_obj_count = assemble_plate.loaded_obj_list.size(); @@ -3526,6 +3983,8 @@ int CLI::run(int argc, char **argv) Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate*)partplate_list.get_plate(i); cur_plate->lock(false); } + + partplate_list.reload_all_objects(false, -1); } else if (need_arrange) { @@ -3540,6 +3999,7 @@ int CLI::run(int argc, char **argv) bool finished_arrange = false, first_run = true; Slic3r::GUI::PartPlate* cur_plate = nullptr; int low_duplicate_count = 0, up_duplicate_count = duplicate_count, arrange_count = 0; + float orig_wipe_x = 0.f, orig_wipe_y = 0.f; if (duplicate_count > 0) { original_model = model; @@ -3566,8 +4026,22 @@ int CLI::run(int argc, char **argv) unprintable.clear(); locked_aps.clear(); } - else + else { first_run = false; + if (plate_to_slice > 0) { + ConfigOptionFloats* wipe_x_option = m_print_config.option("wipe_tower_x"); + ConfigOptionFloats* wipe_y_option = m_print_config.option("wipe_tower_y"); + + if (wipe_x_option && (wipe_x_option->size() > (plate_to_slice-1))) { + orig_wipe_x = wipe_x_option->get_at(plate_to_slice-1); + BOOST_LOG_TRIVIAL(info) << boost::format("%1%, plate_to_slice %2%, orig_wipe_x=%3%")%__LINE__%plate_to_slice%orig_wipe_x; + } + if (wipe_y_option && (wipe_y_option->size() > (plate_to_slice-1))) { + orig_wipe_y = wipe_y_option->get_at(plate_to_slice-1); + BOOST_LOG_TRIVIAL(info) << boost::format("%1%, plate_to_slice %2%, orig_wipe_y=%3%")%__LINE__%plate_to_slice%orig_wipe_y; + } + } + } cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(plate_to_slice-1); cur_plate->duplicate_all_instance(duplicate_count, need_skip, skip_maps); @@ -3629,6 +4103,8 @@ int CLI::run(int argc, char **argv) int extruder_size = used_filament_set.size(); auto printer_structure_opt = m_print_config.option>("printer_structure"); + const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; + const float tower_margin = WIPE_TOWER_MARGIN + tower_brim_width; // set the default position, the same with print config(left top) float x = WIPE_TOWER_DEFAULT_X_POS; float y = WIPE_TOWER_DEFAULT_Y_POS; @@ -3637,11 +4113,11 @@ int CLI::run(int argc, char **argv) y = I3_WIPE_TOWER_DEFAULT_Y_POS; } - if (x < WIPE_TOWER_MARGIN) { - x = WIPE_TOWER_MARGIN; + if (x < tower_margin) { + x = tower_margin; } - if (y < WIPE_TOWER_MARGIN) { - y = WIPE_TOWER_MARGIN; + if (y < tower_margin) { + y = tower_margin; } ConfigOptionFloat wt_x_opt(x); ConfigOptionFloat wt_y_opt(y); @@ -4000,11 +4476,22 @@ int CLI::run(int argc, char **argv) if (duplicate_count == 0) { //restore to the original - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore to the original model and plates"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore to the original model and plates, orig_wipe_x %1%, orig_wipe_y %2%")%orig_wipe_x %orig_wipe_y; finished_arrange = true; model = original_model; partplate_list.load_from_3mf_structure(plate_data_src); partplate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true); + if ((orig_wipe_x > 0.f) && (orig_wipe_y > 0.f)) + { + ConfigOptionFloat wt_x_opt(orig_wipe_x); + ConfigOptionFloat wt_y_opt(orig_wipe_y); + ConfigOptionFloats* wipe_x_option = m_print_config.option("wipe_tower_x", true); + ConfigOptionFloats* wipe_y_option = m_print_config.option("wipe_tower_y", true); + + wipe_x_option->set_at(&wt_x_opt, plate_to_slice-1, 0); + wipe_y_option->set_at(&wt_y_opt, plate_to_slice-1, 0); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore wipe_tower position to {%1%, %2%}")%orig_wipe_x %orig_wipe_y; + } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": exit arrange process"); } continue; @@ -4013,7 +4500,7 @@ int CLI::run(int argc, char **argv) if (duplicate_single_object) { if (real_duplicate_count <= 1) { - BOOST_LOG_TRIVIAL(warning) << "no object can be placed under single object mode, restore to the original model and plates also" << std::endl; + BOOST_LOG_TRIVIAL(warning) << boost::format("no object can be placed under single object mode, restore to the original model and plates also, orig_wipe_x %1%, orig_wipe_y %2%")%orig_wipe_x %orig_wipe_y; //record_exit_reson(outfile_dir, CLI_OBJECT_ARRANGE_FAILED, 0, cli_errors[CLI_OBJECT_ARRANGE_FAILED], sliced_info); //flush_and_exit(CLI_OBJECT_ARRANGE_FAILED); finished_arrange = true; @@ -4021,6 +4508,17 @@ int CLI::run(int argc, char **argv) partplate_list.load_from_3mf_structure(plate_data_src); partplate_list.reset_size(current_printable_width, current_printable_depth, current_printable_height, true, true); duplicate_count = 0; + if ((orig_wipe_x > 0.f) && (orig_wipe_y > 0.f)) + { + ConfigOptionFloat wt_x_opt(orig_wipe_x); + ConfigOptionFloat wt_y_opt(orig_wipe_y); + ConfigOptionFloats* wipe_x_option = m_print_config.option("wipe_tower_x", true); + ConfigOptionFloats* wipe_y_option = m_print_config.option("wipe_tower_y", true); + + wipe_x_option->set_at(&wt_x_opt, plate_to_slice-1, 0); + wipe_y_option->set_at(&wt_y_opt, plate_to_slice-1, 0); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restore wipe_tower position to {%1%, %2%}")%orig_wipe_x %orig_wipe_y; + } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": exit arrange process"); continue; } @@ -4114,9 +4612,10 @@ int CLI::run(int argc, char **argv) // loop through action options 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 export_3mf_file, load_slice_data_dir, export_slice_data_dir, export_stls_dir; std::vector calibration_thumbnails; - int max_slicing_time_per_plate = 0, max_triangle_count_per_plate = 0; + std::vector plate_object_count(partplate_list.get_plate_count(), 0); + int max_slicing_time_per_plate = 0, max_triangle_count_per_plate = 0, sliced_plate = -1; std::vector plate_has_skips(partplate_list.get_plate_count(), false); std::vector> plate_skipped_objects(partplate_list.get_plate_count()); @@ -4147,9 +4646,9 @@ int CLI::run(int argc, char **argv) record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); flush_and_exit(CLI_INVALID_PARAMS); } - else if (shrink_to_new_bed) + else if (shrink_to_new_bed > 0) { - BOOST_LOG_TRIVIAL(warning) << "use load_slicedata when shrink_to_new_bed(switch printer from small to bigger." << std::endl; + BOOST_LOG_TRIVIAL(warning) << "use load_slicedata when shrink_to_new_bed." << std::endl; //record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); //flush_and_exit(CLI_INVALID_PARAMS); } @@ -4181,6 +4680,14 @@ int CLI::run(int argc, char **argv) record_exit_reson(outfile_dir, CLI_EXPORT_STL_ERROR, 0, cli_errors[CLI_EXPORT_STL_ERROR], sliced_info); flush_and_exit(CLI_EXPORT_STL_ERROR); } + } else if (opt_key == "export_stls") { + export_stls_dir = m_config.opt_string(opt_key); + for (auto &model : m_models) + model.add_default_instances(); + if (! this->export_models(IO::STL, export_stls_dir)) { + record_exit_reson(outfile_dir, CLI_EXPORT_STL_ERROR, 0, cli_errors[CLI_EXPORT_STL_ERROR], sliced_info); + flush_and_exit(CLI_EXPORT_STL_ERROR); + } } else if (opt_key == "export_obj") { for (auto &model : m_models) model.add_default_instances(); @@ -4210,6 +4717,7 @@ int CLI::run(int argc, char **argv) } else if (opt_key == "slice") { //BBS: slice 0 means all plates, i means plate i; plate_to_slice = m_config.option("slice")->value; + sliced_plate = plate_to_slice; bool pre_check = (plate_to_slice == 0)?true:false; bool finished = false; @@ -4320,6 +4828,10 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded thumbnail %2%.")%(index+1)%plate_data_src[index]->thumbnail_file; plate_data_src[index]->thumbnail_file.clear(); } + if (!plate_data_src[index]->no_light_thumbnail_file.empty()) { + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded no_light_thumbnail %2%.")%(index+1)%plate_data_src[index]->no_light_thumbnail_file; + plate_data_src[index]->no_light_thumbnail_file.clear(); + } if (!plate_data_src[index]->top_file.empty()) { BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded top_thumbnail %2%.")%(index+1)%plate_data_src[index]->top_file; plate_data_src[index]->top_file.clear(); @@ -4346,7 +4858,7 @@ int CLI::run(int argc, char **argv) if (vol->is_model_part()) { size_t volume_triangle_count = vol->mesh().facets_count(); triangle_count += volume_triangle_count; - BOOST_LOG_TRIVIAL(info) << boost::format("volume triangle count %1%, total %2%")%volume_triangle_count %triangle_count; + BOOST_LOG_TRIVIAL(debug) << boost::format("volume triangle count %1%, total %2%")%volume_triangle_count %triangle_count; if ((max_triangle_count_per_plate != 0) && (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; @@ -4368,6 +4880,7 @@ int CLI::run(int argc, char **argv) } plate_triangle_counts[index] = triangle_count; + plate_object_count[index] = printable_instances; BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": load cached data success, go on."; } // BBS: TODO @@ -4670,11 +5183,33 @@ int CLI::run(int argc, char **argv) global_begin_time = (long long)Slic3r::Utils::get_current_time_utc(); if (export_to_3mf) { //BBS: export as bbl 3mf - std::vector thumbnails, top_thumbnails, pick_thumbnails; + std::vector thumbnails, no_light_thumbnails, top_thumbnails, pick_thumbnails; std::vector plate_bboxes; PlateDataPtrs plate_data_list; partplate_list.store_to_3mf_structure(plate_data_list); + if (sliced_plate == -1) { + for (int i = 0; i < plate_data_list.size(); i++) { + Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); + plate_object_count[i] = part_plate->printable_instance_size(); + } + } + else if (sliced_plate == 0){ + //slicing all + for (int i = 0; i < plate_data_list.size(); i++) { + if (skip_useless_pick && (plate_object_count[i] == 1)) { + BOOST_LOG_TRIVIAL(info) << boost::format("only has 1 object, set plate %1%'s is_label_object_enabled from %2% to false")%(i+1) % (plate_data_list[i]->is_label_object_enabled); + plate_data_list[i]->is_label_object_enabled = false; + } + } + } + else { + if (skip_useless_pick && (plate_object_count[sliced_plate - 1] == 1)) { + BOOST_LOG_TRIVIAL(info) << boost::format("only has 1 object, set plate %1%'s is_label_object_enabled from %2% to false")%sliced_plate % (plate_data_list[sliced_plate - 1]->is_label_object_enabled); + plate_data_list[sliced_plate - 1]->is_label_object_enabled = false; + } + } + if (!outfile_dir.empty()) { export_3mf_file = outfile_dir + "/"+export_3mf_file; } @@ -4687,13 +5222,14 @@ int CLI::run(int argc, char **argv) #endif bool need_regenerate_thumbnail = oriented_or_arranged || regenerate_thumbnails; + bool need_regenerate_no_light_thumbnail = oriented_or_arranged || regenerate_thumbnails; bool need_regenerate_top_thumbnail = oriented_or_arranged || regenerate_thumbnails; - bool need_create_thumbnail_group = false, need_create_top_group = false; + bool need_create_thumbnail_group = false, need_create_no_light_group = false, need_create_top_group = false; // get type and color for platedata auto* filament_types = dynamic_cast(m_print_config.option("filament_type")); const ConfigOptionStrings* filament_color = dynamic_cast(m_print_config.option("filament_colour")); - //auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); + auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); const ConfigOptionFloats* nozzle_diameter_option = dynamic_cast(m_print_config.option("nozzle_diameter")); std::string nozzle_diameter_str; if (nozzle_diameter_option) @@ -4710,10 +5246,10 @@ int CLI::run(int argc, char **argv) plate_data->nozzle_diameters = nozzle_diameter_str; 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; it->type = m_print_config.get_filament_type(display_filament_type, it->id); it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; + it->filament_id = filament_id?filament_id->get_at(it->id):""; } if (!plate_data->plate_thumbnail.is_valid()) { @@ -4745,6 +5281,27 @@ int CLI::run(int argc, char **argv) } } + if (plate_data->no_light_thumbnail_file.empty()) { + if (!regenerate_thumbnails && (plate_data_src.size() > i)) { + plate_data->no_light_thumbnail_file = plate_data_src[i]->no_light_thumbnail_file; + } + if (plate_data->no_light_thumbnail_file.empty() || (!boost::filesystem::exists(plate_data->no_light_thumbnail_file))) { + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s no_light_thumbnail_file %2% also not there, need to regenerate")%(i+1)%plate_data->no_light_thumbnail_file; + if (!skip_this_plate) { + need_regenerate_no_light_thumbnail = true; + need_create_no_light_group = true; + } + } + else { + if (regenerate_thumbnails) { + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s no_light_thumbnail file %2% cleared, need to regenerate")%(i+1) %plate_data->no_light_thumbnail_file; + plate_data->no_light_thumbnail_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s no_light_thumbnail file exists, no need to regenerate")%(i+1); + } + } + if (plate_data->top_file.empty() || plate_data->pick_file.empty()) { if (!regenerate_thumbnails && (plate_data_src.size() > i)) { plate_data->top_file = plate_data_src[i]->top_file; @@ -4770,7 +5327,7 @@ int CLI::run(int argc, char **argv) } } - if (need_regenerate_thumbnail || need_regenerate_top_thumbnail) { + if (need_regenerate_thumbnail || need_regenerate_no_light_thumbnail || need_regenerate_top_thumbnail) { std::vector colors; if (filament_color) { colors= filament_color->vserialize(); @@ -4881,6 +5438,7 @@ int CLI::run(int argc, char **argv) } } + ThumbnailsParams thumbnail_params; GLShaderProgram* shader = opengl_mgr.get_shader("thumbnail"); if (!shader) { BOOST_LOG_TRIVIAL(error) << boost::format("can not get shader for rendering thumbnail"); @@ -4957,6 +5515,60 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); } + //no light thumbnail + if (!plate_data->no_light_thumbnail_file.empty() && (boost::filesystem::exists(plate_data->no_light_thumbnail_file))) + { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s no_light_thumbnail_file path to empty.")%__LINE__%(i+1); + plate_data->no_light_thumbnail_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has valid no_light_thumbnail_file extracted from 3mf, directly using it")%(i+1); + } + else{ + ThumbnailData *no_light_thumbnail = &part_plate->no_light_thumbnail_data; + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); + part_plate->no_light_thumbnail_data.reset(); + plate_data->no_light_thumbnail_file.clear(); + } + else { + unsigned int thumbnail_width = 512, thumbnail_height = 512; + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s no_light_thumbnail_file missed, need to regenerate")%(i+1); + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*no_light_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, false, false, true); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*no_light_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, false, false, true); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + plate_data->no_light_thumbnail_file = "valid_no_light"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s no_light thumbnail,finished rendering")%(i+1); + } + } + + if (need_create_no_light_group) { + no_light_thumbnails.push_back(&part_plate->no_light_thumbnail_data); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data for no_light into group")%(i+1); + } + //top thumbnails /*if (part_plate->top_thumbnail_data.is_valid() && part_plate->pick_thumbnail_data.is_valid()) { if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { @@ -4998,39 +5610,49 @@ int CLI::run(int argc, char **argv) unsigned int thumbnail_width = 512, thumbnail_height = 512; const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate")%(i+1); - - switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate, objects count %2%, skip_useless_pick %3%")%(i+1) %plate_object_count[i] %skip_useless_pick; + if (skip_useless_pick && ((plate_object_count[i] <= 1) || (plate_object_count[i] > 64))) { - case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); - break; - } - case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); - break; - } - default: - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); - break; + //don't render pick and top + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + BOOST_LOG_TRIVIAL(info) << boost::format("skip rendering for top&&pick"); + } + else { + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + plate_data->top_file = "valid_top"; + plate_data->pick_file = "valid_pick"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); } - plate_data->top_file = "valid_top"; - plate_data->pick_file = "valid_pick"; - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); } } @@ -5057,6 +5679,9 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s all the thumbnails skipped, reset here")%(i+1); plate_data->plate_thumbnail.reset(); plate_data->thumbnail_file.clear(); + part_plate->no_light_thumbnail_data.reset(); + plate_data->no_light_thumbnail_file.clear(); + part_plate->top_thumbnail_data.reset(); part_plate->pick_thumbnail_data.reset(); plate_data->top_file.clear(); @@ -5086,6 +5711,11 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); } + if (need_create_no_light_group) { + no_light_thumbnails.push_back(&part_plate->no_light_thumbnail_data); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); + } + if (need_create_top_group) { top_thumbnails.push_back(&part_plate->top_thumbnail_data); pick_thumbnails.push_back(&part_plate->pick_thumbnail_data); @@ -5231,7 +5861,19 @@ int CLI::run(int argc, char **argv) model.mk_version = makerlab_version; BOOST_LOG_TRIVIAL(info) << boost::format("mk_name %1%, mk_version %2%")%makerlab_name %makerlab_version; } - if (! this->export_project(&m_models[0], export_3mf_file, plate_data_list, project_presets, thumbnails, top_thumbnails, pick_thumbnails, + + if (!metadata_name.empty()) { + Model &model = m_models[0]; + + model.md_value = metadata_value; + model.md_name = metadata_name; + for (unsigned int i = 0; i < metadata_name.size(); i++) + { + BOOST_LOG_TRIVIAL(info) << boost::format("index %1% metadata_name %2%, metadata_value %3%")%i %metadata_name[i] %metadata_value[i]; + } + } + + if (!this->export_project(&m_models[0], export_3mf_file, plate_data_list, project_presets, thumbnails, no_light_thumbnails, top_thumbnails, pick_thumbnails, calibration_thumbnails, plate_bboxes, &m_print_config, minimum_save, plate_to_slice - 1)) { release_PlateData_list(plate_data_list); @@ -5241,6 +5883,8 @@ int CLI::run(int argc, char **argv) for (unsigned int i = 0; i < thumbnails.size(); i++) thumbnails[i]->reset(); + for (unsigned int i = 0; i < no_light_thumbnails.size(); i++) + no_light_thumbnails[i]->reset(); for (unsigned int i = 0; i < top_thumbnails.size(); i++) top_thumbnails[i]->reset(); for (unsigned int i = 0; i < pick_thumbnails.size(); i++) @@ -5414,7 +6058,7 @@ void CLI::print_help(bool include_print_options, PrinterTechnology printer_techn }*/ } -bool CLI::export_models(IO::ExportFormat format) +bool CLI::export_models(IO::ExportFormat format, std::string path_dir) { for (Model &model : m_models) { const std::string path = this->output_filepath(model, format); @@ -5435,7 +6079,7 @@ bool CLI::export_models(IO::ExportFormat format) unsigned int index = 1; for (ModelObject* model_object : model.objects) { - const std::string path = this->output_filepath(*model_object, index++, format); + const std::string path = this->output_filepath(*model_object, index++, format, path_dir); success = Slic3r::store_stl(path.c_str(), model_object, true); if (success) BOOST_LOG_TRIVIAL(info) << "Model successfully exported to " << path << std::endl; @@ -5456,7 +6100,11 @@ bool CLI::export_models(IO::ExportFormat format) //BBS: add export_project function bool CLI::export_project(Model *model, std::string& path, PlateDataPtrs &partplate_data, - std::vector& project_presets, std::vector& thumbnails, std::vector& top_thumbnails, std::vector& pick_thumbnails, + std::vector & project_presets, + std::vector &thumbnails, + std::vector &no_light_thumbnails, + std::vector &top_thumbnails, + std::vector &pick_thumbnails, std::vector& calibration_thumbnails, std::vector& plate_bboxes, const DynamicPrintConfig* config, bool minimum_save, int plate_to_export) { //const std::string path = this->output_filepath(*model, IO::TMF); @@ -5469,6 +6117,7 @@ bool CLI::export_project(Model *model, std::string& path, PlateDataPtrs &partpla store_params.project_presets = project_presets; store_params.config = (DynamicPrintConfig*)config; store_params.thumbnail_data = thumbnails; + store_params.no_light_thumbnail_data = no_light_thumbnails; store_params.top_thumbnail_data = top_thumbnails; store_params.pick_thumbnail_data = pick_thumbnails; store_params.calibration_thumbnail_data = calibration_thumbnails; @@ -5513,7 +6162,7 @@ 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 CLI::output_filepath(const ModelObject &object, unsigned int index, IO::ExportFormat format, std::string path_dir) const { std::string ext, subdir, file_name, output_path; switch (format) { @@ -5542,10 +6191,15 @@ std::string CLI::output_filepath(const ModelObject &object, unsigned int index, if (pos != ext_pos) file_name += ext; - BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": file_name="< range_params; +}height_range_info_t; + +typedef struct _assembled_param_info { + std::map print_params; + std::vector height_ranges; +}assembled_param_info_t; + typedef struct _assemble_object_info { std::string path; int count; @@ -42,6 +60,7 @@ typedef struct _assemble_object_info { std::vector pos_y; std::vector pos_z; std::map print_params; + std::vector height_ranges; }assemble_object_info_t; typedef struct _assemble_plate_info { @@ -52,9 +71,32 @@ typedef struct _assemble_plate_info { std::map plate_params; std::vector assemble_obj_list; std::vector loaded_obj_list; + std::map assembled_param_list; }assemble_plate_info_t; +typedef struct _printer_plate_info { + std::string printer_name; + int printable_width{0}; + int printable_depth{0}; + int printable_height{0}; + + int exclude_width{0}; + int exclude_depth{0}; + int exclude_x{0}; + int exclude_y{0}; +}printer_plate_info_t; + +typedef struct _plate_obj_size_info { + bool has_wipe_tower{false}; + float wipe_x{0.f}; + float wipe_y{0.f}; + float wipe_width{0.f}; + float wipe_depth{0.f}; + BoundingBoxf3 obj_bbox; +}plate_obj_size_info_t; + + class CLI { public: int run(int argc, char **argv); @@ -74,17 +116,20 @@ private: void print_help(bool include_print_options = false, PrinterTechnology printer_technology = ptAny) const; /// Exports loaded models to a file of the specified format, according to the options affecting output filename. - bool export_models(IO::ExportFormat format); + bool export_models(IO::ExportFormat format, std::string path = std::string()); //BBS: add export_project function bool export_project(Model *model, std::string& path, PlateDataPtrs &partplate_data, std::vector& project_presets, - std::vector& thumbnails, std::vector& top_thumbnails, std::vector& pick_thumbnails, + std::vector &thumbnails, + std::vector &no_light_thumbnails, + std::vector &top_thumbnails, + std::vector &pick_thumbnails, std::vector& calibration_thumbnails, std::vector& plate_bboxes, const DynamicPrintConfig* config, bool minimum_save, int plate_to_export = -1); 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; + std::string output_filepath(const ModelObject &object, unsigned int index, IO::ExportFormat format, std::string path_dir) const; }; } diff --git a/src/admesh/connect.cpp b/src/admesh/connect.cpp index 8a4f5090db..30a199120d 100644 --- a/src/admesh/connect.cpp +++ b/src/admesh/connect.cpp @@ -87,10 +87,10 @@ struct HashEdge { bool load_nearby(const stl_file *stl, const stl_vertex &a, const stl_vertex &b, float tolerance) { // Index of a grid cell spaced by tolerance. - typedef Eigen::Matrix Vec3i; - Vec3i vertex1 = ((a - stl->stats.min) / tolerance).cast(); - Vec3i vertex2 = ((b - stl->stats.min) / tolerance).cast(); - static_assert(sizeof(Vec3i) == 12, "size of Vec3i incorrect"); + typedef Eigen::Matrix Vec3i32; + Vec3i32 vertex1 = ((a - stl->stats.min) / tolerance).cast(); + Vec3i32 vertex2 = ((b - stl->stats.min) / tolerance).cast(); + static_assert(sizeof(Vec3i32) == 12, "size of Vec3i32 incorrect"); if (vertex1 == vertex2) // Both vertices hash to the same value diff --git a/src/admesh/stl.h b/src/admesh/stl.h index 2593777969..0f1a0cec88 100644 --- a/src/admesh/stl.h +++ b/src/admesh/stl.h @@ -45,7 +45,7 @@ typedef Eigen::Matrix stl_triangle_vertex_indices static_assert(sizeof(stl_vertex) == 12, "size of stl_vertex incorrect"); static_assert(sizeof(stl_normal) == 12, "size of stl_normal incorrect"); -typedef std::function ImportstlProgressFn; +typedef std::function ImportstlProgressFn; typedef enum { eNormal, // normal face @@ -98,8 +98,12 @@ struct stl_neighbors { }; struct stl_stats { - stl_stats() { memset(&header, 0, 81); } - char header[81]; + stl_stats() {} + void reset_header(int size) { + header.clear(); + header.resize(size +1); + } + std::vector header; stl_type type = (stl_type)0; // Should always match the number of facets stored inside stl_file::facet_start. uint32_t number_of_facets = 0; @@ -247,7 +251,7 @@ struct indexed_triangle_set } }; -extern bool stl_open(stl_file *stl, const char *file, ImportstlProgressFn stlFn = nullptr); +extern bool stl_open(stl_file *stl, const char *file, ImportstlProgressFn stlFn = nullptr,int custom_header_length = 80); extern void stl_stats_out(stl_file *stl, FILE *file, char *input_file); extern bool stl_print_neighbors(stl_file *stl, char *file); extern bool stl_write_ascii(stl_file *stl, const char *file, const char *label); diff --git a/src/admesh/stl_io.cpp b/src/admesh/stl_io.cpp index 26f5dc3212..221572bca6 100644 --- a/src/admesh/stl_io.cpp +++ b/src/admesh/stl_io.cpp @@ -41,7 +41,7 @@ void stl_stats_out(stl_file *stl, FILE *file, char *input_file) fprintf(file, "File type : Binary STL file\n"); else fprintf(file, "File type : ASCII STL file\n"); - fprintf(file, "Header : %s\n", stl->stats.header); + fprintf(file, "Header : %s\n", stl->stats.header.data()); fprintf(file, "============== Size ==============\n"); fprintf(file, "Min X = % f, Max X = % f\n", stl->stats.min(0), stl->stats.max(0)); fprintf(file, "Min Y = % f, Max Y = % f\n", stl->stats.min(1), stl->stats.max(1)); diff --git a/src/admesh/stlinit.cpp b/src/admesh/stlinit.cpp index ec044f87e5..8196bf10cb 100644 --- a/src/admesh/stlinit.cpp +++ b/src/admesh/stlinit.cpp @@ -45,8 +45,9 @@ extern void stl_internal_reverse_quads(char *buf, size_t cnt); const int LOAD_STL_UNIT_NUM = 5; static std::string model_id = ""; +static std::string country_code = ""; -static FILE* stl_open_count_facets(stl_file *stl, const char *file) +static FILE *stl_open_count_facets(stl_file *stl, const char *file, unsigned int custom_header_length) { // Open the file in binary mode first. FILE *fp = boost::nowide::fopen(file, "rb"); @@ -59,7 +60,8 @@ static FILE* stl_open_count_facets(stl_file *stl, const char *file) long file_size = ftell(fp); // Check for binary or ASCII file. - fseek(fp, HEADER_SIZE, SEEK_SET); + int header_size = custom_header_length + NUM_FACET_SIZE; + fseek(fp, header_size, SEEK_SET); unsigned char chtest[128]; if (! fread(chtest, sizeof(chtest), 1, fp)) { BOOST_LOG_TRIVIAL(error) << "stl_open_count_facets: The input is an empty file: " << file; @@ -81,16 +83,16 @@ static FILE* stl_open_count_facets(stl_file *stl, const char *file) // If the .STL file is binary, then do the following: if (stl->stats.type == binary) { // Test if the STL file has the right size. - if (((file_size - HEADER_SIZE) % SIZEOF_STL_FACET != 0) || (file_size < STL_MIN_FILE_SIZE)) { + if (((file_size - header_size) % SIZEOF_STL_FACET != 0) || (file_size < STL_MIN_FILE_SIZE)) { BOOST_LOG_TRIVIAL(error) << "stl_open_count_facets: The file " << file << " has the wrong size."; fclose(fp); return nullptr; } - num_facets = (file_size - HEADER_SIZE) / SIZEOF_STL_FACET; + num_facets = (file_size - header_size) / SIZEOF_STL_FACET; // Read the header. - if (fread(stl->stats.header, LABEL_SIZE, 1, fp) > 79) - stl->stats.header[80] = '\0'; + if (fread(stl->stats.header.data(), custom_header_length, 1, fp) > custom_header_length -1) + stl->stats.header[custom_header_length] = '\0'; // Read the int following the header. This should contain # of facets. uint32_t header_num_facets; @@ -134,9 +136,9 @@ static FILE* stl_open_count_facets(stl_file *stl, const char *file) // Get the header. int i = 0; - for (; i < 80 && (stl->stats.header[i] = getc(fp)) != '\n'; ++ i) ; + for (; i < custom_header_length && (stl->stats.header[i] = getc(fp)) != '\n'; ++ i) ; stl->stats.header[i] = '\0'; // Lose the '\n' - stl->stats.header[80] = '\0'; + stl->stats.header[custom_header_length] = '\0'; num_facets = num_lines / ASCII_LINES_PER_FACET; } @@ -149,10 +151,13 @@ static FILE* stl_open_count_facets(stl_file *stl, const char *file) /* Reads the contents of the file pointed to by fp into the stl structure, starting at facet first_facet. The second argument says if it's our first time running this for the stl and therefore we should reset our max and min stats. */ -static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, ImportstlProgressFn stlFn) +static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, ImportstlProgressFn stlFn, int custom_header_length) { if (stl->stats.type == binary) { - fseek(fp, HEADER_SIZE, SEEK_SET); + int header_size = custom_header_length + NUM_FACET_SIZE; + fseek(fp, header_size, SEEK_SET); + model_id = ""; + country_code = ""; } else { rewind(fp); @@ -165,18 +170,22 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor // Extract the value after "MW" char version_str[16]; char model_id_str[128]; - int num_values = sscanf(mw_position + 3, "%s %s", version_str, model_id_str); - if (num_values == 2) { + char country_code_str[16]; + int num_values = sscanf(mw_position + 3, "%s %s %s", version_str, model_id_str, country_code_str); + if (num_values == 3) { if (strcmp(version_str, "1.0") == 0) { model_id = model_id_str; + country_code = country_code_str; } } else { model_id = ""; + country_code = ""; } } else { model_id = ""; // No MW format found + country_code = ""; } } } @@ -195,7 +204,7 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor if ((i % unit) == 0) { bool cb_cancel = false; if (stlFn) { - stlFn(i, facets_num, cb_cancel, model_id); + stlFn(i, facets_num, cb_cancel, model_id, country_code); if (cb_cancel) return false; } @@ -293,20 +302,24 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor return true; } -bool stl_open(stl_file *stl, const char *file, ImportstlProgressFn stlFn) +bool stl_open(stl_file *stl, const char *file, ImportstlProgressFn stlFn, int custom_header_length) { + if (custom_header_length < LABEL_SIZE) { + custom_header_length = LABEL_SIZE; + } Slic3r::CNumericLocalesSetter locales_setter; stl->clear(); - FILE *fp = stl_open_count_facets(stl, file); + stl->stats.reset_header(custom_header_length); + FILE *fp = stl_open_count_facets(stl, file, custom_header_length); if (fp == nullptr) return false; stl_allocate(stl); - bool result = stl_read(stl, fp, 0, true, stlFn); + bool result = stl_read(stl, fp, 0, true, stlFn, custom_header_length); fclose(fp); return result; } -void stl_allocate(stl_file *stl) +void stl_allocate(stl_file *stl) { // Allocate memory for the entire .STL file. stl->facet_start.assign(stl->stats.number_of_facets, stl_facet()); @@ -314,7 +327,7 @@ void stl_allocate(stl_file *stl) stl->neighbors_start.assign(stl->stats.number_of_facets, stl_neighbors()); } -void stl_reallocate(stl_file *stl) +void stl_reallocate(stl_file *stl) { stl->facet_start.resize(stl->stats.number_of_facets); stl->neighbors_start.resize(stl->stats.number_of_facets); diff --git a/src/clipper/clipper.hpp b/src/clipper/clipper.hpp index ea7ded26e8..aee1a02f8f 100644 --- a/src/clipper/clipper.hpp +++ b/src/clipper/clipper.hpp @@ -80,7 +80,7 @@ enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; // If defined, Clipper will work with 32bit signed int coordinates to reduce memory // consumption and to speed up exact orientation predicate calculation. // In that case, coordinates and their differences (vectors of the coordinates) have to fit int32_t. -#define CLIPPERLIB_INT32 +// #define CLIPPERLIB_INT32 // Point coordinate type #ifdef CLIPPERLIB_INT32 diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index aa8a061bf8..b230fa718c 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -201,15 +201,29 @@ namespace ImGui const wchar_t BlockNotifErrorIcon = 0x0835; const wchar_t ClipboardBtnDarkIcon = 0x0836; - const wchar_t PrevArrowBtnIcon = 0x0836; - const wchar_t PrevArrowHoverBtnIcon = 0x0837; - const wchar_t NextArrowBtnIcon = 0x0838; - const wchar_t NextArrowHoverBtnIcon = 0x0839; - const wchar_t OpenArrowIcon = 0x0840; - const wchar_t CollapseArrowIcon = 0x0841; - const wchar_t ExpandArrowIcon = 0x0842; - const wchar_t CompleteIcon = 0x0843; + const wchar_t PrevArrowBtnIcon = 0x0837; + const wchar_t PrevArrowHoverBtnIcon = 0x0838; + const wchar_t NextArrowBtnIcon = 0x0839; + const wchar_t NextArrowHoverBtnIcon = 0x0840; + const wchar_t OpenArrowIcon = 0x0841; + const wchar_t CollapseArrowIcon = 0x0842; + const wchar_t ExpandArrowIcon = 0x0843; + const wchar_t CompleteIcon = 0x0844; -// void MyFunction(const char* name, const MyMatrix44& v); + // Orca + const wchar_t PlayButton = 0x0850; + const wchar_t PlayDarkButton = 0x0851; + const wchar_t PlayHoverButton = 0x0852; + const wchar_t PlayHoverDarkButton = 0x0853; + const wchar_t PauseButton = 0x0854; + const wchar_t PauseDarkButton = 0x0855; + const wchar_t PauseHoverButton = 0x0856; + const wchar_t PauseHoverDarkButton = 0x0857; + const wchar_t OpenButton = 0x0858; + const wchar_t OpenDarkButton = 0x0859; + const wchar_t OpenHoverButton = 0x085A; + const wchar_t OpenHoverDarkButton = 0x085B; + + // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/imguizmo/ImGuizmo.cpp b/src/imguizmo/ImGuizmo.cpp index 20ec388cb6..1acf8b63e4 100644 --- a/src/imguizmo/ImGuizmo.cpp +++ b/src/imguizmo/ImGuizmo.cpp @@ -662,10 +662,18 @@ namespace IMGUIZMO_NAMESPACE Colors[HATCHED_AXIS_LINES] = ImVec4(0.000f, 0.000f, 0.000f, 0.500f); Colors[TEXT] = ImVec4(1.000f, 1.000f, 1.000f, 1.000f); Colors[TEXT_SHADOW] = ImVec4(0.000f, 0.000f, 0.000f, 1.000f); + Colors[FACE] = ImVec4(0.776f, 0.804f, 0.839f, 1.000f); strcpy(AxisLabels[Axis_X], "x"); strcpy(AxisLabels[Axis_Y], "y"); strcpy(AxisLabels[Axis_Z], "z"); + + strcpy(FaceLabels[FACE_BACK], "back"); + strcpy(FaceLabels[FACE_TOP], "top"); + strcpy(FaceLabels[FACE_RIGHT], "right"); + strcpy(FaceLabels[FACE_FRONT], "front"); + strcpy(FaceLabels[FACE_BOTTOM], "bottom"); + strcpy(FaceLabels[FACE_LEFT], "left"); } struct Context @@ -2885,6 +2893,7 @@ namespace IMGUIZMO_NAMESPACE const vec_t dx = directionUnary[perpXIndex]; const vec_t dy = directionUnary[perpYIndex]; const vec_t origin = directionUnary[normalIndex] - dx - dy; + ImU32 faceColor = GetColorU32(FACE); for (int iPanel = 0; iPanel < 9; iPanel++) { vec_t boxCoord = boxOrigin + indexVectorX * float(iPanel % 3) + indexVectorY * float(iPanel / 3) + makeVect(1.f, 1.f, 1.f); @@ -2910,8 +2919,7 @@ namespace IMGUIZMO_NAMESPACE // draw face with lighter color if (iPass) { - ImU32 directionColor = GetColorU32(DIRECTION_X + normalIndex); - gContext.mDrawList->AddConvexPolyFilled(faceCoordsScreen, 4, (directionColor | IM_COL32(0x80, 0x80, 0x80, 0x80)) | (isInside ? IM_COL32(0x08, 0x08, 0x08, 0) : 0)); + gContext.mDrawList->AddConvexPolyFilled(faceCoordsScreen, 4, faceColor); if (boxes[boxCoordInt]) { gContext.mDrawList->AddConvexPolyFilled(faceCoordsScreen, 4, IM_COL32(0xF0, 0xA0, 0x60, 0x80)); @@ -2929,6 +2937,53 @@ namespace IMGUIZMO_NAMESPACE } } } + + if (iPass) { + // Draw face label + ImDrawList* drawList = gContext.mDrawList; + int vtx_write_start = drawList->VtxBuffer.Size; + + const auto label = gContext.mStyle.FaceLabels[iFace]; + ImVec2 labelSize = ImGui::CalcTextSize(label); + float scaleFactor = 2 / size.y; + auto labelOrigin = labelSize * 0.5; + + drawList->AddText(ImVec2(0, 0), GetColorU32(TEXT), label); + ImDrawVert* vtx_write_end = drawList->_VtxWritePtr; + + vec_t tdx = directionUnary[perpXIndex]; + vec_t tdy = directionUnary[perpYIndex]; + ImVec2 invert2 = {1, 1}; + switch (iFace) { + case 0: // Back + tdx = directionUnary[2]; + tdy = directionUnary[1]; + invert2 = {-1, - 1}; + break; + case 3: // Front + tdx = directionUnary[2]; + tdy = directionUnary[1]; + invert2.x = -1; + break; + case 1: // Top + invert2.y = -1; + break; + case 4: // Bottom + invert2 = {-1, -1}; + break; + case 2: // Right + invert2.y = -1; + break; + case 5: // Left + break; + } + + for (auto v = (drawList->VtxBuffer.Data + vtx_write_start); v < vtx_write_end; v++) { + auto pp = ((v->pos - labelOrigin) * scaleFactor * invert2 + ImVec2{0.5, 0.5}) * 2.f; + vec_t pt = tdx * pp.x + tdy * pp.y; + v->pos = worldToPos((pt + origin) * 0.5 * invert, res, position, size); + } + } } } @@ -2962,7 +3017,7 @@ namespace IMGUIZMO_NAMESPACE if (!visible) { directionColorV.w *= 0.3f; } - ImU32 directionColor = ImGui::ColorConvertFloat4ToU32(directionColorV); + ImU32 directionColor = ImGui::ColorConvertFloat4ToU32(directionColorV) | IM_COL32(0x80, 0x80, 0x80, 0x00); drawList->AddLine(baseSSpace, worldDirSSpace, directionColor, gContext.mStyle.TranslationLineThickness); // Arrow head begin diff --git a/src/imguizmo/ImGuizmo.h b/src/imguizmo/ImGuizmo.h index 493cd7ce6d..7f20bc13c2 100644 --- a/src/imguizmo/ImGuizmo.h +++ b/src/imguizmo/ImGuizmo.h @@ -249,6 +249,7 @@ namespace IMGUIZMO_NAMESPACE HATCHED_AXIS_LINES, TEXT, TEXT_SHADOW, + FACE, COUNT }; @@ -260,6 +261,17 @@ namespace IMGUIZMO_NAMESPACE Axis_COUNT, }; + enum FACES + { + FACE_BACK, + FACE_TOP, + FACE_RIGHT, + FACE_FRONT, + FACE_BOTTOM, + FACE_LEFT, + FACES_COUNT + }; + struct Style { IMGUI_API Style(); @@ -276,6 +288,7 @@ namespace IMGUIZMO_NAMESPACE ImVec4 Colors[COLOR::COUNT]; char AxisLabels[Axis::Axis_COUNT][32]; + char FaceLabels[FACES::FACES_COUNT][32]; }; IMGUI_API Style& GetStyle(); diff --git a/src/libnest2d/include/libnest2d/selections/firstfit.hpp b/src/libnest2d/include/libnest2d/selections/firstfit.hpp index bb7f4b45c0..c3af682d22 100644 --- a/src/libnest2d/include/libnest2d/selections/firstfit.hpp +++ b/src/libnest2d/include/libnest2d/selections/firstfit.hpp @@ -119,9 +119,9 @@ public: for(; j < placers.size() && !was_packed && !cancelled(); j++) { result = placers[j].pack(*it, rem(it, store_)); score = result.score(); - score_all_plates = std::accumulate(placers.begin(), placers.begin() + j, score, - [](double sum, const Placer& elem) { return sum + elem.score(); }); - if (this->unfitindicator_) this->unfitindicator_(it->get().name + " bed_id="+std::to_string(j) + ",score=" + std::to_string(score)); + score_all_plates = score; + for (int i = 0; i < placers.size(); i++) { score_all_plates += placers[i].score();} + if (this->unfitindicator_) this->unfitindicator_(it->get().name + " bed_id="+std::to_string(j) + ",score=" + std::to_string(score)+", score_all_plates="+std::to_string(score_all_plates)); if(score >= 0 && score < LARGE_COST_TO_REJECT) { if (bed_id_firstfit == -1) { diff --git a/src/libslic3r/AABBMesh.cpp b/src/libslic3r/AABBMesh.cpp index ca7042c601..3159667f09 100644 --- a/src/libslic3r/AABBMesh.cpp +++ b/src/libslic3r/AABBMesh.cpp @@ -122,7 +122,7 @@ const std::vector& AABBMesh::vertices() const -const std::vector& AABBMesh::indices() const +const std::vector& AABBMesh::indices() const { return m_tm->indices; } @@ -136,7 +136,7 @@ const Vec3f& AABBMesh::vertices(size_t idx) const -const Vec3i& AABBMesh::indices(size_t idx) const +const Vec3i32& AABBMesh::indices(size_t idx) const { return m_tm->indices[idx]; } diff --git a/src/libslic3r/AABBMesh.hpp b/src/libslic3r/AABBMesh.hpp index 3ef25977b4..9998f504b5 100644 --- a/src/libslic3r/AABBMesh.hpp +++ b/src/libslic3r/AABBMesh.hpp @@ -31,7 +31,7 @@ class AABBMesh { std::unique_ptr m_aabb; VertexFaceIndex m_vfidx; // vertex-face index - std::vector m_fnidx; // face-neighbor index + std::vector m_fnidx; // face-neighbor index #ifdef SLIC3R_HOLE_RAYCASTER // This holds a copy of holes in the mesh. Initialized externally @@ -57,9 +57,9 @@ public: ~AABBMesh(); const std::vector& vertices() const; - const std::vector& indices() const; + const std::vector& indices() const; const Vec3f& vertices(size_t idx) const; - const Vec3i& indices(size_t idx) const; + const Vec3i32& indices(size_t idx) const; // Result of a raycast class hit_result { @@ -133,7 +133,7 @@ public: const indexed_triangle_set * get_triangle_mesh() const { return m_tm; } const VertexFaceIndex &vertex_face_index() const { return m_vfidx; } - const std::vector &face_neighbor_index() const { return m_fnidx; } + const std::vector &face_neighbor_index() const { return m_fnidx; } }; diff --git a/src/libslic3r/AABBTreeIndirect.hpp b/src/libslic3r/AABBTreeIndirect.hpp index 6d6479508f..94c2425380 100644 --- a/src/libslic3r/AABBTreeIndirect.hpp +++ b/src/libslic3r/AABBTreeIndirect.hpp @@ -229,7 +229,7 @@ public: m_bbox(bbox.min - Point(SCALED_EPSILON, SCALED_EPSILON), bbox.max + Point(SCALED_EPSILON, SCALED_EPSILON)) {} size_t idx() const { return m_idx; } const BoundingBox& bbox() const { return m_bbox; } - Point centroid() const { return ((m_bbox.min().cast() + m_bbox.max().cast()) / 2).cast(); } + Point centroid() const { return (m_bbox.min() + m_bbox.max() / 2); } private: size_t m_idx; BoundingBox m_bbox; diff --git a/src/libslic3r/Algorithm/PathSorting.hpp b/src/libslic3r/Algorithm/PathSorting.hpp index da35f93786..ab44627281 100644 --- a/src/libslic3r/Algorithm/PathSorting.hpp +++ b/src/libslic3r/Algorithm/PathSorting.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Pavel Mikuš @Godrak -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef SRC_LIBSLIC3R_PATH_SORTING_HPP_ #define SRC_LIBSLIC3R_PATH_SORTING_HPP_ diff --git a/src/libslic3r/Algorithm/RegionExpansion.cpp b/src/libslic3r/Algorithm/RegionExpansion.cpp index 17e8bd9a72..ee2a5aaf2a 100644 --- a/src/libslic3r/Algorithm/RegionExpansion.cpp +++ b/src/libslic3r/Algorithm/RegionExpansion.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "RegionExpansion.hpp" #include diff --git a/src/libslic3r/Algorithm/RegionExpansion.hpp b/src/libslic3r/Algorithm/RegionExpansion.hpp index 62e32526aa..eb99674902 100644 --- a/src/libslic3r/Algorithm/RegionExpansion.hpp +++ b/src/libslic3r/Algorithm/RegionExpansion.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef SRC_LIBSLIC3R_ALGORITHM_REGION_EXPANSION_HPP_ #define SRC_LIBSLIC3R_ALGORITHM_REGION_EXPANSION_HPP_ diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 449beb252d..51b7a10372 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2017 - 2023 Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, David Kocík @kocikdav, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" #include "AppConfig.hpp" @@ -186,6 +182,8 @@ void AppConfig::set_defaults() if (get("show_hints").empty()) set_bool("show_hints", true); //#endif + if (get("enable_multi_machine").empty()) + set_bool("enable_multi_machine", false); if (get("show_gcode_window").empty()) set_bool("show_gcode_window", true); @@ -275,6 +273,14 @@ void AppConfig::set_defaults() set_bool("auto_calculate", true); } + if (get("remember_printer_config").empty()) { + set_bool("remember_printer_config", true); + } + + if (get("auto_calculate_when_filament_change").empty()){ + set_bool("auto_calculate_when_filament_change", true); + } + if (get("show_home_page").empty()) { set_bool("show_home_page", true); } @@ -351,6 +357,14 @@ void AppConfig::set_defaults() set("curr_bed_type", "1"); } + if (get("sending_interval").empty()) { + set("sending_interval", "5"); + } + + if (get("max_send").empty()) { + set("max_send", "3"); + } + // #if BBL_RELEASE_TO_PUBLIC if (get("iot_environment").empty()) { set("iot_environment", "3"); @@ -558,6 +572,8 @@ std::string AppConfig::load() 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("cache_flow_rate_calibration_type")) + cali_info.cache_flow_rate_calibration_type = static_cast(calis_j["cache_flow_rate_calibration_type"].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++) { @@ -680,6 +696,7 @@ void AppConfig::save() 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; + cali_json["cache_flow_rate_calibration_type"] = static_cast(cali_info.cache_flow_rate_calibration_type); for (auto filament_preset : cali_info.selected_presets) { json preset_json; preset_json["tray_id"] = filament_preset.tray_id; @@ -1032,6 +1049,7 @@ void AppConfig::save_printer_cali_infos(const PrinterCaliInfo &cali_info, bool n } (*iter).cache_flow_ratio = cali_info.cache_flow_ratio; (*iter).selected_presets = cali_info.selected_presets; + (*iter).cache_flow_rate_calibration_type = cali_info.cache_flow_rate_calibration_type; } m_dirty = true; } @@ -1234,6 +1252,38 @@ bool AppConfig::is_engineering_region(){ return false; } +void AppConfig::save_custom_color_to_config(const std::vector &colors) +{ + auto set_colors = [](std::map &data, const std::vector &colors) { + for (size_t i = 0; i < colors.size(); i++) { + data[std::to_string(10 + i)] = colors[i]; // for map sort:10 begin + } + }; + if (colors.size() > 0) { + if (!has_section("custom_color_list")) { + std::map data; + set_colors(data, colors); + set_section("custom_color_list", data); + } else { + auto data = get_section("custom_color_list"); + auto data_modify = const_cast *>(&data); + set_colors(*data_modify, colors); + set_section("custom_color_list", *data_modify); + } + } +} + +std::vector AppConfig::get_custom_color_from_config() +{ + std::vector colors; + if (has_section("custom_color_list")) { + auto data = get_section("custom_color_list"); + for (auto iter : data) { + colors.push_back(iter.second); + } + } + return colors; +} void AppConfig::reset_selections() { diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 49f33bcddd..f58cfedb65 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2017 - 2023 Vojtěch Bubník @bubnikv, David Kocík @kocikdav, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_AppConfig_hpp_ #define slic3r_AppConfig_hpp_ @@ -233,7 +229,9 @@ public: std::string get_country_code(); bool is_engineering_region(); - // reset the current print / filament / printer selections, so that + void save_custom_color_to_config(const std::vector &colors); + std::vector get_custom_color_from_config(); + // reset the current print / filament / printer selections, so that // the PresetBundle::load_selections(const AppConfig &config) call will select // the first non-default preset when called. void reset_selections(); diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index b7e0ea61e9..19d49c3e12 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -10,37 +10,17 @@ #include #include -#include "utils/VoronoiUtils.hpp" - #include "utils/linearAlg2D.hpp" #include "Utils.hpp" #include "SVG.hpp" #include "Geometry/VoronoiVisualUtils.hpp" #include "Geometry/VoronoiUtilsCgal.hpp" #include "../EdgeGrid.hpp" -#include "ankerl/unordered_dense.h" + +#include "Geometry/VoronoiUtils.hpp" #define SKELETAL_TRAPEZOIDATION_BEAD_SEARCH_MAX 1000 //A limit to how long it'll keep searching for adjacent beads. Increasing will re-use beadings more often (saving performance), but search longer for beading (costing performance). -namespace boost::polygon { - -template<> struct geometry_concept -{ - typedef segment_concept type; -}; - -template<> struct segment_traits -{ - typedef coord_t coordinate_type; - typedef Slic3r::Point point_type; - static inline point_type get(const Slic3r::Arachne::PolygonsSegmentIndex &CSegment, direction_1d dir) - { - return dir.to_int() ? CSegment.p() : CSegment.next().p(); - } -}; - -} // namespace boost::polygon - namespace Slic3r::Arachne { @@ -109,8 +89,7 @@ static void export_graph_to_svg(const std::string } #endif -SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_type& vd_node, Point p) -{ +SkeletalTrapezoidation::node_t &SkeletalTrapezoidation::makeNode(const VD::vertex_type &vd_node, Point p) { auto he_node_it = vd_node_to_he_node.find(&vd_node); if (he_node_it == vd_node_to_he_node.end()) { @@ -125,8 +104,7 @@ SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_ty } } -void SkeletalTrapezoidation::transferEdge(Point from, Point to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, Point& start_source_point, Point& end_source_point, const std::vector& segments) -{ +void SkeletalTrapezoidation::transferEdge(Point from, Point to, const VD::edge_type &vd_edge, edge_t *&prev_edge, Point &start_source_point, Point &end_source_point, const std::vector &segments) { auto he_edge_it = vd_edge_to_he_edge.find(vd_edge.twin()); if (he_edge_it != vd_edge_to_he_edge.end()) { // Twin segment(s) have already been made @@ -181,7 +159,7 @@ void SkeletalTrapezoidation::transferEdge(Point from, Point to, vd_t::edge_type& } else { - std::vector discretized = discretize(vd_edge, segments); + Points discretized = discretize(vd_edge, segments); assert(discretized.size() >= 2); if(discretized.size() < 2) { @@ -236,45 +214,42 @@ void SkeletalTrapezoidation::transferEdge(Point from, Point to, vd_t::edge_type& } } -std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_edge, const std::vector& segments) +Points SkeletalTrapezoidation::discretize(const VD::edge_type& vd_edge, const std::vector& segments) { + assert(Geometry::VoronoiUtils::is_in_range(vd_edge)); + /*Terminology in this function assumes that the edge moves horizontally from left to right. This is not necessarily the case; the edge can go in any direction, but it helps to picture it in a certain direction in your head.*/ - const vd_t::cell_type* left_cell = vd_edge.cell(); - const vd_t::cell_type* right_cell = vd_edge.twin()->cell(); + const VD::cell_type *left_cell = vd_edge.cell(); + const VD::cell_type *right_cell = vd_edge.twin()->cell(); - assert(VoronoiUtils::p(vd_edge.vertex0()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex0()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge.vertex0()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex0()).y() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge.vertex1()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex1()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge.vertex1()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex1()).y() >= std::numeric_limits::lowest()); + Point start = Geometry::VoronoiUtils::to_point(vd_edge.vertex0()).cast(); + Point end = Geometry::VoronoiUtils::to_point(vd_edge.vertex1()).cast(); - Point start = VoronoiUtils::p(vd_edge.vertex0()).cast(); - Point end = VoronoiUtils::p(vd_edge.vertex1()).cast(); - bool point_left = left_cell->contains_point(); bool point_right = right_cell->contains_point(); if ((!point_left && !point_right) || vd_edge.is_secondary()) // Source vert is directly connected to source segment { - return std::vector({ start, end }); + return Points({ start, end }); } else if (point_left != point_right) //This is a parabolic edge between a point and a line. { - Point p = VoronoiUtils::getSourcePoint(*(point_left ? left_cell : right_cell), segments); - const Segment& s = VoronoiUtils::getSourceSegment(*(point_left ? right_cell : left_cell), segments); - return VoronoiUtils::discretizeParabola(p, s, start, end, discretization_step_size, transitioning_angle); + Point p = Geometry::VoronoiUtils::get_source_point(*(point_left ? left_cell : right_cell), segments.begin(), segments.end()); + const Segment& s = Geometry::VoronoiUtils::get_source_segment(*(point_left ? right_cell : left_cell), segments.begin(), segments.end()); + return Geometry::VoronoiUtils::discretize_parabola(p, s, start, end, discretization_step_size, transitioning_angle); } else //This is a straight edge between two points. { /*While the edge is straight, it is still discretized since the part becomes narrower between the two points. As such it may need different beadings along the way.*/ - Point left_point = VoronoiUtils::getSourcePoint(*left_cell, segments); - Point right_point = VoronoiUtils::getSourcePoint(*right_cell, segments); - coord_t d = (right_point - left_point).cast().norm(); - Point middle = (left_point + right_point) / 2; - Point x_axis_dir = Point(right_point - left_point).rotate_90_degree_ccw(); + Point left_point = Geometry::VoronoiUtils::get_source_point(*left_cell, segments.begin(), segments.end()); + Point right_point = Geometry::VoronoiUtils::get_source_point(*right_cell, segments.begin(), segments.end()); + coord_t d = (right_point - left_point).cast().norm(); + Point middle = (left_point + right_point) / 2; + Point x_axis_dir = perp(Point(right_point - left_point)); coord_t x_axis_length = x_axis_dir.cast().norm(); const auto projected_x = [x_axis_dir, x_axis_length, middle](Point from) //Project a point on the edge. @@ -311,7 +286,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ //Start generating points along the edge. Point a = start; Point b = end; - std::vector ret; + Points ret; ret.emplace_back(a); //Introduce an extra edge at the borders of the markings? @@ -351,8 +326,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ } } -bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments) -{ +bool SkeletalTrapezoidation::computePointCellRange(const VD::cell_type &cell, Point &start_source_point, Point &end_source_point, const VD::edge_type *&starting_vd_edge, const VD::edge_type *&ending_vd_edge, const std::vector &segments) { if (cell.incident_edge()->is_infinite()) return false; //Infinite edges only occur outside of the polygon. Don't copy any part of this cell. @@ -360,16 +334,16 @@ bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& // Copy whole cell into graph or not at all // If the cell.incident_edge()->vertex0() is far away so much that it doesn't even fit into Vec2i64, then there is no way that it will be inside the input polygon. - if (const vd_t::vertex_type &vert = *cell.incident_edge()->vertex0(); + if (const VD::vertex_type &vert = *cell.incident_edge()->vertex0(); vert.x() >= double(std::numeric_limits::max()) || vert.x() <= double(std::numeric_limits::lowest()) || vert.y() >= double(std::numeric_limits::max()) || vert.y() <= double(std::numeric_limits::lowest())) return false; // Don't copy any part of this cell - const Point source_point = VoronoiUtils::getSourcePoint(cell, segments); - const PolygonsPointIndex source_point_index = VoronoiUtils::getSourcePointIndex(cell, segments); - Vec2i64 some_point = VoronoiUtils::p(cell.incident_edge()->vertex0()); + const Point source_point = Geometry::VoronoiUtils::get_source_point(cell, segments.begin(), segments.end()); + const PolygonsPointIndex source_point_index = Geometry::VoronoiUtils::get_source_point_index(cell, segments.begin(), segments.end()); + Vec2i64 some_point = Geometry::VoronoiUtils::to_point(cell.incident_edge()->vertex0()); if (some_point == source_point.cast()) - some_point = VoronoiUtils::p(cell.incident_edge()->vertex1()); + some_point = Geometry::VoronoiUtils::to_point(cell.incident_edge()->vertex1()); //Test if the some_point is even inside the polygon. //The edge leading out of a polygon must have an endpoint that's not in the corner following the contour of the polygon at that vertex. @@ -378,16 +352,16 @@ bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& if (!LinearAlg2D::isInsideCorner(source_point_index.prev().p(), source_point_index.p(), source_point_index.next().p(), some_point)) return false; // Don't copy any part of this cell - vd_t::edge_type* vd_edge = cell.incident_edge(); + const VD::edge_type* vd_edge = cell.incident_edge(); do { assert(vd_edge->is_finite()); - if (Vec2i64 p1 = VoronoiUtils::p(vd_edge->vertex1()); p1 == source_point.cast()) { + if (Vec2i64 p1 = Geometry::VoronoiUtils::to_point(vd_edge->vertex1()); p1 == source_point.cast()) { start_source_point = source_point; end_source_point = source_point; starting_vd_edge = vd_edge->next(); ending_vd_edge = vd_edge; } else { - assert((VoronoiUtils::p(vd_edge->vertex0()) == source_point.cast() || !vd_edge->is_secondary()) && "point cells must end in the point! They cannot cross the point with an edge, because collinear edges are not allowed in the input."); + assert((Geometry::VoronoiUtils::to_point(vd_edge->vertex0()) == source_point.cast() || !vd_edge->is_secondary()) && "point cells must end in the point! They cannot cross the point with an edge, because collinear edges are not allowed in the input."); } } while (vd_edge = vd_edge->next(), vd_edge != cell.incident_edge()); @@ -396,47 +370,6 @@ bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& return true; } -void SkeletalTrapezoidation::computeSegmentCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments) -{ - const Segment &source_segment = VoronoiUtils::getSourceSegment(cell, segments); - const Point from = source_segment.from(); - const Point to = source_segment.to(); - - // Find starting edge - // Find end edge - bool seen_possible_start = false; - bool after_start = false; - bool ending_edge_is_set_before_start = false; - vd_t::edge_type* edge = cell.incident_edge(); - do { - if (edge->is_infinite()) - continue; - - Vec2i64 v0 = VoronoiUtils::p(edge->vertex0()); - Vec2i64 v1 = VoronoiUtils::p(edge->vertex1()); - - assert(!(v0 == to.cast() && v1 == from.cast() )); - if (v0 == to.cast() && !after_start) { // Use the last edge which starts in source_segment.to - starting_vd_edge = edge; - seen_possible_start = true; - } - else if (seen_possible_start) { - after_start = true; - } - - if (v1 == from.cast() && (!ending_vd_edge || ending_edge_is_set_before_start)) { - ending_edge_is_set_before_start = !after_start; - ending_vd_edge = edge; - } - } while (edge = edge->next(), edge != cell.incident_edge()); - - assert(starting_vd_edge && ending_vd_edge); - assert(starting_vd_edge != ending_vd_edge); - - start_source_point = source_segment.to(); - end_source_point = source_segment.from(); -} - SkeletalTrapezoidation::SkeletalTrapezoidation(const Polygons& polys, const BeadingStrategy& beading_strategy, double transitioning_angle, coord_t discretization_step_size, coord_t transition_filter_dist, coord_t allowed_filter_deviation, @@ -451,128 +384,6 @@ SkeletalTrapezoidation::SkeletalTrapezoidation(const Polygons& polys, const Bead constructFromPolygons(polys); } -static bool has_finite_edge_with_non_finite_vertex(const Geometry::VoronoiDiagram &voronoi_diagram) -{ - for (const VoronoiUtils::vd_t::edge_type &edge : voronoi_diagram.edges()) { - if (edge.is_finite()) { - assert(edge.vertex0() != nullptr && edge.vertex1() != nullptr); - if (edge.vertex0() == nullptr || edge.vertex1() == nullptr || !VoronoiUtils::is_finite(*edge.vertex0()) || - !VoronoiUtils::is_finite(*edge.vertex1())) - return true; - } - } - return false; -} - -static bool detect_missing_voronoi_vertex(const Geometry::VoronoiDiagram &voronoi_diagram, const std::vector &segments) { - if (has_finite_edge_with_non_finite_vertex(voronoi_diagram)) - return true; - - for (VoronoiUtils::vd_t::cell_type cell : voronoi_diagram.cells()) { - if (!cell.incident_edge()) - continue; // There is no spoon - - if (cell.contains_segment()) { - const SkeletalTrapezoidation::Segment &source_segment = VoronoiUtils::getSourceSegment(cell, segments); - const Point from = source_segment.from(); - const Point to = source_segment.to(); - - // Find starting edge - // Find end edge - bool seen_possible_start = false; - bool after_start = false; - bool ending_edge_is_set_before_start = false; - VoronoiUtils::vd_t::edge_type *starting_vd_edge = nullptr; - VoronoiUtils::vd_t::edge_type *ending_vd_edge = nullptr; - VoronoiUtils::vd_t::edge_type *edge = cell.incident_edge(); - do { - if (edge->is_infinite() || edge->vertex0() == nullptr || edge->vertex1() == nullptr || !VoronoiUtils::is_finite(*edge->vertex0()) || !VoronoiUtils::is_finite(*edge->vertex1())) - continue; - - Vec2i64 v0 = VoronoiUtils::p(edge->vertex0()); - Vec2i64 v1 = VoronoiUtils::p(edge->vertex1()); - - assert(!(v0 == to.cast() && v1 == from.cast())); - if (v0 == to.cast() && !after_start) { // Use the last edge which starts in source_segment.to - starting_vd_edge = edge; - seen_possible_start = true; - } else if (seen_possible_start) { - after_start = true; - } - - if (v1 == from.cast() && (!ending_vd_edge || ending_edge_is_set_before_start)) { - ending_edge_is_set_before_start = !after_start; - ending_vd_edge = edge; - } - } while (edge = edge->next(), edge != cell.incident_edge()); - - if (!starting_vd_edge || !ending_vd_edge || starting_vd_edge == ending_vd_edge) - return true; - } - } - - return false; -} - -static bool has_missing_twin_edge(const SkeletalTrapezoidationGraph &graph) -{ - for (const auto &edge : graph.edges) - if (edge.twin == nullptr) - return true; - return false; -} - -inline static ankerl::unordered_dense::map try_to_fix_degenerated_voronoi_diagram_by_rotation( - Geometry::VoronoiDiagram &voronoi_diagram, - const Polygons &polys, - Polygons &polys_rotated, - std::vector &segments, - const double fix_angle) -{ - ankerl::unordered_dense::map vertex_mapping; - for (Polygon &poly : polys_rotated) - poly.rotate(fix_angle); - - assert(polys_rotated.size() == polys.size()); - for (size_t poly_idx = 0; poly_idx < polys.size(); ++poly_idx) { - assert(polys_rotated[poly_idx].size() == polys[poly_idx].size()); - for (size_t point_idx = 0; point_idx < polys[poly_idx].size(); ++point_idx) - vertex_mapping.insert({polys_rotated[poly_idx][point_idx], polys[poly_idx][point_idx]}); - } - - segments.clear(); - for (size_t poly_idx = 0; poly_idx < polys_rotated.size(); poly_idx++) - for (size_t point_idx = 0; point_idx < polys_rotated[poly_idx].size(); point_idx++) - segments.emplace_back(&polys_rotated, poly_idx, point_idx); - - voronoi_diagram.clear(); - construct_voronoi(segments.begin(), segments.end(), &voronoi_diagram); - -#ifdef ARACHNE_DEBUG_VORONOI - { - static int iRun = 0; - dump_voronoi_to_svg(debug_out_path("arachne_voronoi-diagram-rotated-%d.svg", iRun++).c_str(), voronoi_diagram, to_points(polys), to_lines(polys)); - } -#endif - - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); - - return vertex_mapping; -} - -inline static void rotate_back_skeletal_trapezoidation_graph_after_fix(SkeletalTrapezoidationGraph &graph, - const double fix_angle, - const ankerl::unordered_dense::map &vertex_mapping) -{ - for (STHalfEdgeNode &node : graph.nodes) { - // If a mapping exists between a rotated point and an original point, use this mapping. Otherwise, rotate a point in the opposite direction. - if (auto node_it = vertex_mapping.find(node.p); node_it != vertex_mapping.end()) - node.p = node_it->second; - else - node.p.rotate(-fix_angle); - } -} - void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) { #ifdef ARACHNE_DEBUG @@ -604,8 +415,8 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) } #endif - Geometry::VoronoiDiagram voronoi_diagram; - construct_voronoi(segments.begin(), segments.end(), &voronoi_diagram); + VD voronoi_diagram; + voronoi_diagram.construct_voronoi(segments.cbegin(), segments.cend()); #ifdef ARACHNE_DEBUG_VORONOI { @@ -614,126 +425,59 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) } #endif - // Try to detect cases when some Voronoi vertex is missing and when - // the Voronoi diagram is not planar. - // When any Voronoi vertex is missing, or the Voronoi diagram is not - // planar, rotate the input polygon and try again. - const bool has_missing_voronoi_vertex = detect_missing_voronoi_vertex(voronoi_diagram, segments); - // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. - const bool is_voronoi_diagram_planar = Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram); - const double fix_angle = PI / 6; - - ankerl::unordered_dense::map vertex_mapping; - // polys_copy is referenced through items stored in the std::vector segments. - Polygons polys_copy = polys; - if (has_missing_voronoi_vertex || !is_voronoi_diagram_planar) { - if (has_missing_voronoi_vertex) - BOOST_LOG_TRIVIAL(warning) << "Detected missing Voronoi vertex, input polygons will be rotated back and forth."; - else if (!is_voronoi_diagram_planar) - BOOST_LOG_TRIVIAL(warning) << "Detected non-planar Voronoi diagram, input polygons will be rotated back and forth."; - - vertex_mapping = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angle); - - assert(!detect_missing_voronoi_vertex(voronoi_diagram, segments)); - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram)); - if (detect_missing_voronoi_vertex(voronoi_diagram, segments)) - BOOST_LOG_TRIVIAL(error) << "Detected missing Voronoi vertex even after the rotation of input."; - else if (!Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram)) - BOOST_LOG_TRIVIAL(error) << "Detected non-planar Voronoi diagram even after the rotation of input."; - } - - bool degenerated_voronoi_diagram = has_missing_voronoi_vertex || !is_voronoi_diagram_planar; - -process_voronoi_diagram: assert(this->graph.edges.empty() && this->graph.nodes.empty() && this->vd_edge_to_he_edge.empty() && this->vd_node_to_he_node.empty()); - for (vd_t::cell_type cell : voronoi_diagram.cells()) { + for (const VD::cell_type &cell : voronoi_diagram.cells()) { if (!cell.incident_edge()) continue; // There is no spoon - Point start_source_point; - Point end_source_point; - vd_t::edge_type* starting_vonoroi_edge = nullptr; - vd_t::edge_type* ending_vonoroi_edge = nullptr; + Point start_source_point; + Point end_source_point; + const VD::edge_type *starting_voronoi_edge = nullptr; + const VD::edge_type *ending_voronoi_edge = nullptr; // Compute and store result in above variables - + if (cell.contains_point()) { - const bool keep_going = computePointCellRange(cell, start_source_point, end_source_point, starting_vonoroi_edge, ending_vonoroi_edge, segments); + const bool keep_going = computePointCellRange(cell, start_source_point, end_source_point, starting_voronoi_edge, ending_voronoi_edge, segments); if (!keep_going) continue; } else { assert(cell.contains_segment()); - computeSegmentCellRange(cell, start_source_point, end_source_point, starting_vonoroi_edge, ending_vonoroi_edge, segments); + Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, segments.cbegin(), segments.cend()); + assert(cell_range.is_valid()); + start_source_point = cell_range.segment_start_point; + end_source_point = cell_range.segment_end_point; + starting_voronoi_edge = cell_range.edge_begin; + ending_voronoi_edge = cell_range.edge_end; } - - if (!starting_vonoroi_edge || !ending_vonoroi_edge) { + + if (!starting_voronoi_edge || !ending_voronoi_edge) { assert(false && "Each cell should start / end in a polygon vertex"); continue; } - + // Copy start to end edge to graph - edge_t* prev_edge = nullptr; - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex1()).x() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex1()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex1()).y() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex1()).y() >= std::numeric_limits::lowest()); - transferEdge(start_source_point, VoronoiUtils::p(starting_vonoroi_edge->vertex1()).cast(), *starting_vonoroi_edge, prev_edge, start_source_point, end_source_point, segments); - node_t* starting_node = vd_node_to_he_node[starting_vonoroi_edge->vertex0()]; + assert(Geometry::VoronoiUtils::is_in_range(*starting_voronoi_edge)); + edge_t *prev_edge = nullptr; + transferEdge(start_source_point, Geometry::VoronoiUtils::to_point(starting_voronoi_edge->vertex1()).cast(), *starting_voronoi_edge, prev_edge, start_source_point, end_source_point, segments); + node_t *starting_node = vd_node_to_he_node[starting_voronoi_edge->vertex0()]; starting_node->data.distance_to_boundary = 0; constexpr bool is_next_to_start_or_end = true; graph.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); - for (vd_t::edge_type* vd_edge = starting_vonoroi_edge->next(); vd_edge != ending_vonoroi_edge; vd_edge = vd_edge->next()) { + for (const VD::edge_type* vd_edge = starting_voronoi_edge->next(); vd_edge != ending_voronoi_edge; vd_edge = vd_edge->next()) { assert(vd_edge->is_finite()); + assert(Geometry::VoronoiUtils::is_in_range(*vd_edge)); - assert(VoronoiUtils::p(vd_edge->vertex0()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex0()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge->vertex0()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex0()).y() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge->vertex1()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex1()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge->vertex1()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex1()).y() >= std::numeric_limits::lowest()); - - Point v1 = VoronoiUtils::p(vd_edge->vertex0()).cast(); - Point v2 = VoronoiUtils::p(vd_edge->vertex1()).cast(); + Point v1 = Geometry::VoronoiUtils::to_point(vd_edge->vertex0()).cast(); + Point v2 = Geometry::VoronoiUtils::to_point(vd_edge->vertex1()).cast(); transferEdge(v1, v2, *vd_edge, prev_edge, start_source_point, end_source_point, segments); - - graph.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_vonoroi_edge); + graph.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_voronoi_edge); } - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex0()).x() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex0()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex0()).y() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex0()).y() >= std::numeric_limits::lowest()); - transferEdge(VoronoiUtils::p(ending_vonoroi_edge->vertex0()).cast(), end_source_point, *ending_vonoroi_edge, prev_edge, start_source_point, end_source_point, segments); + transferEdge(Geometry::VoronoiUtils::to_point(ending_voronoi_edge->vertex0()).cast(), end_source_point, *ending_voronoi_edge, prev_edge, start_source_point, end_source_point, segments); prev_edge->to->data.distance_to_boundary = 0; } - // For some input polygons, as in GH issues #8474 and #8514 resulting Voronoi diagram is degenerated because it is not planar. - // When this degenerated Voronoi diagram is processed, the resulting half-edge structure contains some edges that don't have - // a twin edge. Based on this, we created a fast mechanism that detects those causes and tries to recompute the Voronoi - // diagram on slightly rotated input polygons that usually make the Voronoi generator generate a non-degenerated Voronoi diagram. - if (!degenerated_voronoi_diagram && has_missing_twin_edge(this->graph)) { - BOOST_LOG_TRIVIAL(warning) << "Detected degenerated Voronoi diagram, input polygons will be rotated back and forth."; - degenerated_voronoi_diagram = true; - vertex_mapping = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angle); - - assert(!detect_missing_voronoi_vertex(voronoi_diagram, segments)); - if (detect_missing_voronoi_vertex(voronoi_diagram, segments)) - BOOST_LOG_TRIVIAL(error) << "Detected missing Voronoi vertex after the rotation of input."; - - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); - - this->graph.edges.clear(); - this->graph.nodes.clear(); - this->vd_edge_to_he_edge.clear(); - this->vd_node_to_he_node.clear(); - - goto process_voronoi_diagram; - } - - if (degenerated_voronoi_diagram) { - assert(!has_missing_twin_edge(this->graph)); - - if (has_missing_twin_edge(this->graph)) - BOOST_LOG_TRIVIAL(error) << "Detected degenerated Voronoi diagram even after the rotation of input."; - } - - if (degenerated_voronoi_diagram) - rotate_back_skeletal_trapezoidation_graph_after_fix(this->graph, fix_angle, vertex_mapping); - #ifdef ARACHNE_DEBUG assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); #endif @@ -742,7 +486,7 @@ process_voronoi_diagram: graph.collapseSmallEdges(); - // Set [incident_edge] the the first possible edge that way we can iterate over all reachable edges from node.incident_edge, + // Set [incident_edge] the first possible edge that way we can iterate over all reachable edges from node.incident_edge, // without needing to iterate backward for (edge_t& edge : graph.edges) if (!edge.prev) @@ -751,7 +495,7 @@ process_voronoi_diagram: void SkeletalTrapezoidation::separatePointyQuadEndNodes() { - ankerl::unordered_dense::set visited_nodes; + NodeSet visited_nodes; for (edge_t& edge : graph.edges) { if (edge.prev) @@ -798,7 +542,7 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector & export_graph_to_svg(debug_out_path("ST-updateIsCentral-final-%d.svg", iRun), this->graph, this->outline); #endif - filterCentral(central_filter_dist); + filterCentral(central_filter_dist()); #ifdef ARACHNE_DEBUG export_graph_to_svg(debug_out_path("ST-filterCentral-final-%d.svg", iRun), this->graph, this->outline); @@ -985,7 +729,7 @@ void SkeletalTrapezoidation::filterNoncentralRegions() BOOST_LOG_TRIVIAL(warning) << "Encountered an uninitialized bead at the boundary!"; } assert(edge.to->data.bead_count >= 0 || edge.to->data.distance_to_boundary == 0); - constexpr coord_t max_dist = scaled(0.4); + const coord_t max_dist = scaled(0.4); filterNoncentralRegions(&edge, edge.to->data.bead_count, 0, max_dist); } } @@ -1559,6 +1303,7 @@ static inline Point normal(const Point& p0, coord_t len) void SkeletalTrapezoidation::applyTransitions(ptr_vector_t>& edge_transition_ends) { + const auto _snap_dist = snap_dist(); for (edge_t& edge : graph.edges) { if (edge.twin->data.hasTransitionEnds()) @@ -1604,7 +1349,7 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_t ab_size - snap_dist) + if ((end_pos < _snap_dist || end_pos > ab_size - _snap_dist) && close_node->data.bead_count == new_node_bead_count ) { @@ -1646,6 +1391,7 @@ bool SkeletalTrapezoidation::isEndOfCentral(const edge_t& edge_to) const void SkeletalTrapezoidation::generateExtraRibs() { + const auto _snap_dist = snap_dist(); for (auto edge_it = graph.edges.begin(); edge_it != graph.edges.end(); ++edge_it) { edge_t& edge = *edge_it; @@ -1689,7 +1435,7 @@ void SkeletalTrapezoidation::generateExtraRibs() assert(end_pos > 0); assert(end_pos < ab_size); node_t* close_node = (end_pos < ab_size / 2)? from : to; - if ((end_pos < snap_dist || end_pos > ab_size - snap_dist) + if ((end_pos < _snap_dist || end_pos > ab_size - _snap_dist) && close_node->data.bead_count == new_node_bead_count ) { @@ -1849,6 +1595,7 @@ SkeletalTrapezoidation::edge_t* SkeletalTrapezoidation::getQuadMaxRedgeTo(edge_t void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upward_quad_mids, ptr_vector_t& node_beadings) { + const auto _central_filter_dist = central_filter_dist(); for (auto upward_quad_mids_it = upward_quad_mids.rbegin(); upward_quad_mids_it != upward_quad_mids.rend(); ++upward_quad_mids_it) { edge_t* upward_edge = *upward_quad_mids_it; @@ -1865,7 +1612,7 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar { // Only propagate to places where there is place continue; } - assert((upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary || shorter_then(upward_edge->to->p - upward_edge->from->p, central_filter_dist)) && "zero difference R edges should always be central"); + assert((upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary || shorter_then(upward_edge->to->p - upward_edge->from->p, _central_filter_dist)) && "zero difference R edges should always be central"); coord_t length = (upward_edge->to->p - upward_edge->from->p).cast().norm(); BeadingPropagation upper_beading = lower_beading; upper_beading.dist_to_bottom_source += length; @@ -2095,7 +1842,7 @@ std::shared_ptr SkeletalTrapezo { if (node->data.bead_count == -1) { // This bug is due to too small central edges - constexpr coord_t nearby_dist = scaled(0.1); + const coord_t nearby_dist = scaled(0.1); auto nearest_beading = getNearestBeading(node, nearby_dist); if (nearest_beading) { @@ -2221,16 +1968,16 @@ void SkeletalTrapezoidation::addToolpathSegment(const ExtrusionJunction& from, c void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_junctions) { - ankerl::unordered_dense::set unprocessed_quad_starts(graph.edges.size() * 5 / 2); + EdgeSet unprocessed_quad_starts(graph.edges.size() * 5 / 2); for (edge_t& edge : graph.edges) { if (!edge.prev) { - unprocessed_quad_starts.insert(&edge); + unprocessed_quad_starts.emplace(&edge); } } - ankerl::unordered_dense::set passed_odd_edges; + EdgeSet passed_odd_edges; while (!unprocessed_quad_starts.empty()) { diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp index 225bf53861..ca8e13473f 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.hpp @@ -7,9 +7,10 @@ #include #include // smart pointers -#include #include // pair +#include + #include "utils/HalfEdgeGraph.hpp" #include "utils/PolygonsSegmentIndex.hpp" #include "utils/ExtrusionJunction.hpp" @@ -23,8 +24,9 @@ //#define ARACHNE_DEBUG //#define ARACHNE_DEBUG_VORONOI -namespace Slic3r::Arachne -{ +namespace Slic3r::Arachne { + +using VD = Slic3r::Geometry::VoronoiDiagram; /*! * Main class of the dynamic beading strategies. @@ -47,8 +49,6 @@ deposition modeling" by Kuipers et al. */ class SkeletalTrapezoidation { - using pos_t = double; - using vd_t = boost::polygon::voronoi_diagram; using graph_t = SkeletalTrapezoidationGraph; using edge_t = STHalfEdge; using node_t = STHalfEdgeNode; @@ -65,8 +65,10 @@ class SkeletalTrapezoidation coord_t transition_filter_dist; //!< Filter transition mids (i.e. anchors) closer together than this coord_t allowed_filter_deviation; //!< The allowed line width deviation induced by filtering coord_t beading_propagation_transition_dist; //!< When there are different beadings propagated from below and from above, use this transitioning distance - static constexpr coord_t central_filter_dist = scaled(0.02); //!< Filter areas marked as 'central' smaller than this - static constexpr coord_t snap_dist = scaled(0.02); //!< Generic arithmatic inaccuracy. Only used to determine whether a transition really needs to insert an extra edge. + //!< Filter areas marked as 'central' smaller than this + inline coord_t central_filter_dist() { return scaled(0.02); } + //!< Generic arithmatic inaccuracy. Only used to determine whether a transition really needs to insert an extra edge. + inline coord_t snap_dist() { return scaled(0.02); } /*! * The strategy to use to fill a certain shape with lines. @@ -79,7 +81,11 @@ class SkeletalTrapezoidation const BeadingStrategy& beading_strategy; public: - using Segment = PolygonsSegmentIndex; + using Segment = PolygonsSegmentIndex; + using NodeSet = ankerl::unordered_dense::set; + using EdgeSet = ankerl::unordered_dense::set; + using EdgeMap = ankerl::unordered_dense::map; + using NodeMap = ankerl::unordered_dense::map; /*! * Construct a new trapezoidation problem to solve. @@ -163,9 +169,9 @@ protected: * mapping each voronoi VD edge to the corresponding halfedge HE edge * In case the result segment is discretized, we map the VD edge to the *last* HE edge */ - ankerl::unordered_dense::map vd_edge_to_he_edge; - ankerl::unordered_dense::map vd_node_to_he_node; - node_t& makeNode(vd_t::vertex_type& vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. + EdgeMap vd_edge_to_he_edge; + NodeMap vd_node_to_he_node; + node_t &makeNode(const VD::vertex_type &vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. /*! * (Eventual) returned 'polylines per index' result (from generateToolpaths): @@ -176,7 +182,7 @@ protected: * Transfer an edge from the VD to the HE and perform discretization of parabolic edges (and vertex-vertex edges) * \p prev_edge serves as input and output. May be null as input. */ - void transferEdge(Point from, Point to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, Point& start_source_point, Point& end_source_point, const std::vector& segments); + void transferEdge(Point from, Point to, const VD::edge_type &vd_edge, edge_t *&prev_edge, Point &start_source_point, Point &end_source_point, const std::vector &segments); /*! * Discretize a Voronoi edge that represents the medial axis of a vertex- @@ -203,7 +209,7 @@ protected: * \return A number of coordinates along the edge where the edge is broken * up into discrete pieces. */ - std::vector discretize(const vd_t::edge_type& segment, const std::vector& segments); + Points discretize(const VD::edge_type& segment, const std::vector& segments); /*! * Compute the range of line segments that surround a cell of the skeletal @@ -229,33 +235,7 @@ protected: * /return Whether the cell is inside of the polygon. If it's outside of the * polygon we should skip processing it altogether. */ - bool computePointCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments); - - /*! - * Compute the range of line segments that surround a cell of the skeletal - * graph that belongs to a line segment of the medial axis. - * - * This should only be used on cells that belong to a central line segment - * of the skeletal graph, e.g. trapezoid cells, not triangular cells. - * - * The resulting line segments is just the first and the last segment. They - * are linked to the neighboring segments, so you can iterate over the - * segments until you reach the last segment. - * \param cell The cell to compute the range of line segments for. - * \param[out] start_source_point The start point of the source segment of - * this cell. - * \param[out] end_source_point The end point of the source segment of this - * cell. - * \param[out] starting_vd_edge The edge of the Voronoi diagram where the - * loop around the cell starts. - * \param[out] ending_vd_edge The edge of the Voronoi diagram where the loop - * around the cell ends. - * \param points All vertices of the input Polygons. - * \param segments All edges of the input Polygons. - * /return Whether the cell is inside of the polygon. If it's outside of the - * polygon we should skip processing it altogether. - */ - void computeSegmentCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments); + static bool computePointCellRange(const VD::cell_type &cell, Point &start_source_point, Point &end_source_point, const VD::edge_type *&starting_vd_edge, const VD::edge_type *&ending_vd_edge, const std::vector &segments); /*! * For VD cells associated with an input polygon vertex, we need to separate the node at the end and start of the cell into two diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp index bb01050c10..20e9a4f597 100644 --- a/src/libslic3r/Arachne/WallToolPaths.cpp +++ b/src/libslic3r/Arachne/WallToolPaths.cpp @@ -261,7 +261,7 @@ void fixSelfIntersections(const coord_t epsilon, Polygons &thiss) // Points too close to line segments should be moved a little away from those line segments, but less than epsilon, // so at least half-epsilon distance between points can still be guaranteed. - constexpr coord_t grid_size = scaled(2.); + const coord_t grid_size = scaled(2.); auto query_grid = createLocToLineGrid(thiss, grid_size); const auto move_dist = std::max(2L, half_epsilon - 2); @@ -473,11 +473,11 @@ const std::vector &WallToolPaths::generate() if (this->inset_count < 1) return toolpaths; - const coord_t smallest_segment = Slic3r::Arachne::meshfix_maximum_resolution; - const coord_t allowed_distance = Slic3r::Arachne::meshfix_maximum_deviation; + const coord_t smallest_segment = Slic3r::Arachne::meshfix_maximum_resolution(); + const coord_t allowed_distance = Slic3r::Arachne::meshfix_maximum_deviation(); const coord_t epsilon_offset = (allowed_distance / 2) - 1; const double transitioning_angle = Geometry::deg2rad(m_params.wall_transition_angle); - constexpr coord_t discretization_step_size = scaled(0.8); + const coord_t discretization_step_size = scaled(0.8); // Simplify outline for boost::voronoi consumption. Absolutely no self intersections or near-self intersections allowed: // TODO: Open question: Does this indeed fix all (or all-but-one-in-a-million) cases for manifold but otherwise possibly complex polygons? @@ -692,9 +692,9 @@ void WallToolPaths::simplifyToolPaths(std::vector &toolpaths { for (size_t toolpaths_idx = 0; toolpaths_idx < toolpaths.size(); ++toolpaths_idx) { - const int64_t maximum_resolution = Slic3r::Arachne::meshfix_maximum_resolution; - const int64_t maximum_deviation = Slic3r::Arachne::meshfix_maximum_deviation; - const int64_t maximum_extrusion_area_deviation = Slic3r::Arachne::meshfix_maximum_extrusion_area_deviation; // unit: μm² + const int64_t maximum_resolution = Slic3r::Arachne::meshfix_maximum_resolution(); + const int64_t maximum_deviation = Slic3r::Arachne::meshfix_maximum_deviation(); + const int64_t maximum_extrusion_area_deviation = Slic3r::Arachne::meshfix_maximum_extrusion_area_deviation(); // unit: μm² for (auto& line : toolpaths[toolpaths_idx]) { line.simplify(maximum_resolution * maximum_resolution, maximum_deviation * maximum_deviation, maximum_extrusion_area_deviation); diff --git a/src/libslic3r/Arachne/WallToolPaths.hpp b/src/libslic3r/Arachne/WallToolPaths.hpp index 09e2ae5508..457f7e7149 100644 --- a/src/libslic3r/Arachne/WallToolPaths.hpp +++ b/src/libslic3r/Arachne/WallToolPaths.hpp @@ -16,9 +16,9 @@ namespace Slic3r::Arachne { constexpr bool fill_outline_gaps = true; -constexpr coord_t meshfix_maximum_resolution = scaled(0.5); -constexpr coord_t meshfix_maximum_deviation = scaled(0.025); -constexpr coord_t meshfix_maximum_extrusion_area_deviation = scaled(2.); +inline coord_t meshfix_maximum_resolution() { return scaled(0.5); } +inline coord_t meshfix_maximum_deviation() { return scaled(0.025); } +inline coord_t meshfix_maximum_extrusion_area_deviation() { return scaled(2.); } class WallToolPathsParams { diff --git a/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp b/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp index 6eff3d62ee..3258b41c7d 100644 --- a/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp +++ b/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp @@ -27,5 +27,24 @@ public: } // namespace Slic3r::Arachne +namespace boost::polygon { + +template<> struct geometry_concept +{ + typedef segment_concept type; +}; + +template<> struct segment_traits +{ + typedef coord_t coordinate_type; + typedef Slic3r::Point point_type; + + static inline point_type get(const Slic3r::Arachne::PolygonsSegmentIndex &CSegment, direction_1d dir) + { + return dir.to_int() ? CSegment.to() : CSegment.from(); + } +}; + +} // namespace boost::polygon #endif//UTILS_POLYGONS_SEGMENT_INDEX_H diff --git a/src/libslic3r/Arachne/utils/VoronoiUtils.cpp b/src/libslic3r/Arachne/utils/VoronoiUtils.cpp deleted file mode 100644 index 82bd79523f..0000000000 --- a/src/libslic3r/Arachne/utils/VoronoiUtils.cpp +++ /dev/null @@ -1,251 +0,0 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#include -#include -#include - -#include "linearAlg2D.hpp" -#include "VoronoiUtils.hpp" - -namespace Slic3r::Arachne -{ - -Vec2i64 VoronoiUtils::p(const vd_t::vertex_type *node) -{ - const double x = node->x(); - const double y = node->y(); - assert(std::isfinite(x) && std::isfinite(y)); - assert(x <= double(std::numeric_limits::max()) && x >= std::numeric_limits::lowest()); - assert(y <= double(std::numeric_limits::max()) && y >= std::numeric_limits::lowest()); - return {int64_t(x + 0.5 - (x < 0)), int64_t(y + 0.5 - (y < 0))}; // Round to the nearest integer coordinates. -} - -Point VoronoiUtils::getSourcePoint(const vd_t::cell_type& cell, const std::vector& segments) -{ - assert(cell.contains_point()); - if(!cell.contains_point()) - BOOST_LOG_TRIVIAL(debug) << "Voronoi cell doesn't contain a source point!"; - - switch (cell.source_category()) { - case boost::polygon::SOURCE_CATEGORY_SINGLE_POINT: - assert(false && "Voronoi diagram is always constructed using segments, so cell.source_category() shouldn't be SOURCE_CATEGORY_SINGLE_POINT!\n"); - BOOST_LOG_TRIVIAL(error) << "Voronoi diagram is always constructed using segments, so cell.source_category() shouldn't be SOURCE_CATEGORY_SINGLE_POINT!"; - break; - case boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT: - assert(cell.source_index() < segments.size()); - return segments[cell.source_index()].to(); - break; - case boost::polygon::SOURCE_CATEGORY_SEGMENT_END_POINT: - assert(cell.source_index() < segments.size()); - return segments[cell.source_index()].from(); - break; - default: - assert(false && "getSourcePoint should only be called on point cells!\n"); - break; - } - - assert(false && "cell.source_category() is equal to an invalid value!\n"); - BOOST_LOG_TRIVIAL(error) << "cell.source_category() is equal to an invalid value!"; - return {}; -} - -PolygonsPointIndex VoronoiUtils::getSourcePointIndex(const vd_t::cell_type& cell, const std::vector& segments) -{ - assert(cell.contains_point()); - if(!cell.contains_point()) - BOOST_LOG_TRIVIAL(debug) << "Voronoi cell doesn't contain a source point!"; - - assert(cell.source_category() != boost::polygon::SOURCE_CATEGORY_SINGLE_POINT); - switch (cell.source_category()) { - case boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT: { - assert(cell.source_index() < segments.size()); - PolygonsPointIndex ret = segments[cell.source_index()]; - ++ret; - return ret; - break; - } - case boost::polygon::SOURCE_CATEGORY_SEGMENT_END_POINT: { - assert(cell.source_index() < segments.size()); - return segments[cell.source_index()]; - break; - } - default: - assert(false && "getSourcePoint should only be called on point cells!\n"); - break; - } - PolygonsPointIndex ret = segments[cell.source_index()]; - return ++ret; -} - -const VoronoiUtils::Segment &VoronoiUtils::getSourceSegment(const vd_t::cell_type &cell, const std::vector &segments) -{ - assert(cell.contains_segment()); - if (!cell.contains_segment()) - BOOST_LOG_TRIVIAL(debug) << "Voronoi cell doesn't contain a source segment!"; - - return segments[cell.source_index()]; -} - -class PointMatrix -{ -public: - double matrix[4]; - - PointMatrix() - { - matrix[0] = 1; - matrix[1] = 0; - matrix[2] = 0; - matrix[3] = 1; - } - - PointMatrix(double rotation) - { - rotation = rotation / 180 * M_PI; - matrix[0] = cos(rotation); - matrix[1] = -sin(rotation); - matrix[2] = -matrix[1]; - matrix[3] = matrix[0]; - } - - PointMatrix(const Point p) - { - matrix[0] = p.x(); - matrix[1] = p.y(); - double f = sqrt((matrix[0] * matrix[0]) + (matrix[1] * matrix[1])); - matrix[0] /= f; - matrix[1] /= f; - matrix[2] = -matrix[1]; - matrix[3] = matrix[0]; - } - - static PointMatrix scale(double s) - { - PointMatrix ret; - ret.matrix[0] = s; - ret.matrix[3] = s; - return ret; - } - - Point apply(const Point p) const - { - return Point(coord_t(p.x() * matrix[0] + p.y() * matrix[1]), coord_t(p.x() * matrix[2] + p.y() * matrix[3])); - } - - Point unapply(const Point p) const - { - return Point(coord_t(p.x() * matrix[0] + p.y() * matrix[2]), coord_t(p.x() * matrix[1] + p.y() * matrix[3])); - } -}; -std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segment& segment, Point s, Point e, coord_t approximate_step_size, float transitioning_angle) -{ - std::vector discretized; - // x is distance of point projected on the segment ab - // xx is point projected on the segment ab - const Point a = segment.from(); - const Point b = segment.to(); - const Point ab = b - a; - const Point as = s - a; - const Point ae = e - a; - const coord_t ab_size = ab.cast().norm(); - const coord_t sx = as.cast().dot(ab.cast()) / ab_size; - const coord_t ex = ae.cast().dot(ab.cast()) / ab_size; - const coord_t sxex = ex - sx; - - assert((as.cast().dot(ab.cast()) / int64_t(ab_size)) <= std::numeric_limits::max()); - assert((ae.cast().dot(ab.cast()) / int64_t(ab_size)) <= std::numeric_limits::max()); - - const Point ap = p - a; - const coord_t px = ap.cast().dot(ab.cast()) / ab_size; - - assert((ap.cast().dot(ab.cast()) / int64_t(ab_size)) <= std::numeric_limits::max()); - - Point pxx; - Line(a, b).distance_to_infinite_squared(p, &pxx); - const Point ppxx = pxx - p; - const coord_t d = ppxx.cast().norm(); - const PointMatrix rot = PointMatrix(ppxx.rotate_90_degree_ccw()); - - if (d == 0) - { - discretized.emplace_back(s); - discretized.emplace_back(e); - return discretized; - } - - const float marking_bound = atan(transitioning_angle * 0.5); - int64_t msx = - marking_bound * int64_t(d); // projected marking_start - int64_t mex = marking_bound * int64_t(d); // projected marking_end - - assert(msx <= std::numeric_limits::max()); - assert(double(msx) * double(msx) <= double(std::numeric_limits::max())); - assert(mex <= std::numeric_limits::max()); - assert(double(msx) * double(msx) / double(2 * d) + double(d / 2) <= std::numeric_limits::max()); - - const coord_t marking_start_end_h = msx * msx / (2 * d) + d / 2; - Point marking_start = rot.unapply(Point(coord_t(msx), marking_start_end_h)) + pxx; - Point marking_end = rot.unapply(Point(coord_t(mex), marking_start_end_h)) + pxx; - const int dir = (sx > ex) ? -1 : 1; - if (dir < 0) - { - std::swap(marking_start, marking_end); - std::swap(msx, mex); - } - - bool add_marking_start = msx * int64_t(dir) > int64_t(sx - px) * int64_t(dir) && msx * int64_t(dir) < int64_t(ex - px) * int64_t(dir); - bool add_marking_end = mex * int64_t(dir) > int64_t(sx - px) * int64_t(dir) && mex * int64_t(dir) < int64_t(ex - px) * int64_t(dir); - - const Point apex = rot.unapply(Point(0, d / 2)) + pxx; - bool add_apex = int64_t(sx - px) * int64_t(dir) < 0 && int64_t(ex - px) * int64_t(dir) > 0; - - assert(!(add_marking_start && add_marking_end) || add_apex); - if(add_marking_start && add_marking_end && !add_apex) - { - BOOST_LOG_TRIVIAL(warning) << "Failing to discretize parabola! Must add an apex or one of the endpoints."; - } - - const coord_t step_count = static_cast(static_cast(std::abs(ex - sx)) / approximate_step_size + 0.5); - - discretized.emplace_back(s); - for (coord_t step = 1; step < step_count; step++) - { - assert(double(sxex) * double(step) <= double(std::numeric_limits::max())); - const int64_t x = int64_t(sx) + int64_t(sxex) * int64_t(step) / int64_t(step_count) - int64_t(px); - assert(double(x) * double(x) <= double(std::numeric_limits::max())); - assert(double(x) * double(x) / double(2 * d) + double(d / 2) <= double(std::numeric_limits::max())); - const int64_t y = int64_t(x) * int64_t(x) / int64_t(2 * d) + int64_t(d / 2); - - if (add_marking_start && msx * int64_t(dir) < int64_t(x) * int64_t(dir)) - { - discretized.emplace_back(marking_start); - add_marking_start = false; - } - if (add_apex && int64_t(x) * int64_t(dir) > 0) - { - discretized.emplace_back(apex); - add_apex = false; // only add the apex just before the - } - if (add_marking_end && mex * int64_t(dir) < int64_t(x) * int64_t(dir)) - { - discretized.emplace_back(marking_end); - add_marking_end = false; - } - assert(x <= std::numeric_limits::max() && x >= std::numeric_limits::lowest()); - assert(y <= std::numeric_limits::max() && y >= std::numeric_limits::lowest()); - const Point result = rot.unapply(Point(x, y)) + pxx; - discretized.emplace_back(result); - } - if (add_apex) - { - discretized.emplace_back(apex); - } - if (add_marking_end) - { - discretized.emplace_back(marking_end); - } - discretized.emplace_back(e); - return discretized; -} - -}//namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/utils/VoronoiUtils.hpp b/src/libslic3r/Arachne/utils/VoronoiUtils.hpp deleted file mode 100644 index aa46936437..0000000000 --- a/src/libslic3r/Arachne/utils/VoronoiUtils.hpp +++ /dev/null @@ -1,47 +0,0 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - - -#ifndef UTILS_VORONOI_UTILS_H -#define UTILS_VORONOI_UTILS_H - -#include - - -#include - -#include "PolygonsSegmentIndex.hpp" - -namespace Slic3r::Arachne -{ - -/*! - */ -class VoronoiUtils -{ -public: - using Segment = PolygonsSegmentIndex; - using voronoi_data_t = double; - using vd_t = boost::polygon::voronoi_diagram; - - static Point getSourcePoint(const vd_t::cell_type &cell, const std::vector &segments); - static const Segment &getSourceSegment(const vd_t::cell_type &cell, const std::vector &segments); - static PolygonsPointIndex getSourcePointIndex(const vd_t::cell_type &cell, const std::vector &segments); - - static Vec2i64 p(const vd_t::vertex_type *node); - - /*! - * Discretize a parabola based on (approximate) step size. - * The \p approximate_step_size is measured parallel to the \p source_segment, not along the parabola. - */ - static std::vector discretizeParabola(const Point &source_point, const Segment &source_segment, Point start, Point end, coord_t approximate_step_size, float transitioning_angle); - - static inline bool is_finite(const VoronoiUtils::vd_t::vertex_type &vertex) - { - return std::isfinite(vertex.x()) && std::isfinite(vertex.y()); - } -}; - -} // namespace Slic3r::Arachne - -#endif // UTILS_VORONOI_UTILS_H diff --git a/src/libslic3r/Arachne/utils/linearAlg2D.hpp b/src/libslic3r/Arachne/utils/linearAlg2D.hpp index 797bae0b97..1db85c268b 100644 --- a/src/libslic3r/Arachne/utils/linearAlg2D.hpp +++ b/src/libslic3r/Arachne/utils/linearAlg2D.hpp @@ -32,7 +32,7 @@ inline static bool isInsideCorner(const Point &a, const Point &b, const Point &c // auto normal = [](const Point &p0, coord_t len) -> Point { - int64_t _len = p0.cast().norm(); + int64_t _len = p0.norm(); if (_len < 1) return {len, 0}; return (p0.cast() * int64_t(len) / _len).cast(); diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 2631b936ed..d82997aaa9 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -1,6 +1,7 @@ #include "Arrange.hpp" #include "Print.hpp" #include "BoundingBox.hpp" +#include "libslic3r.h" #include #include @@ -101,8 +102,14 @@ void update_selected_items_inflation(ArrangePolygons& selected, const DynamicPri Points bedpts = get_shrink_bedpts(print_cfg, params); BoundingBox bedbb = Polygon(bedpts).bounding_box(); // set obj distance for auto seq_print - if (params.min_obj_distance == 0 && params.is_seq_print) - params.min_obj_distance = scaled(params.cleareance_radius + 0.001); + if (params.is_seq_print) { + bool all_objects_are_short = std::all_of(selected.begin(), selected.end(), [&](ArrangePolygon& ap) { return ap.height < params.nozzle_height; }); + if (all_objects_are_short) { + params.min_obj_distance = std::max(params.min_obj_distance, scaled(double(MAX_OUTER_NOZZLE_DIAMETER)/2+0.001)); + } + else + params.min_obj_distance = std::max(params.min_obj_distance, scaled(params.cleareance_radius + 0.001)); // +0.001mm to avoid clearance check fail due to rounding error + } double brim_max = 0; bool plate_has_tree_support = false; std::for_each(selected.begin(), selected.end(), [&](ArrangePolygon& ap) { @@ -331,8 +338,8 @@ static double fixed_overfit_topright_sliding(const std::tuple &resu Box pilebb = std::get<1>(result); auto shift = binbb.maxCorner() - pilebb.maxCorner(); - shift.x() = std::max(0, shift.x()); // do not allow left shift - shift.y() = std::max(0, shift.y()); // do not allow bottom shift + shift.x() = std::max((coord_t)0, shift.x()); // do not allow left shift + shift.y() = std::max((coord_t)0, shift.y()); // do not allow bottom shift pilebb.minCorner() += shift; pilebb.maxCorner() += shift; @@ -633,27 +640,24 @@ protected: score += lambda4 * hasRowHeightConflict + lambda4 * hasLidHeightConflict; } else { + int valid_items_cnt = 0; + double height_score = 0; for (int i = 0; i < m_items.size(); i++) { Item& p = m_items[i]; - if (p.is_virt_object) { - // Better not put items above wipe tower - if (p.is_wipe_tower) { - if (ibb.maxCorner().y() > p.boundingBox().maxCorner().y()) - score += 1; - else if(m_pilebb.defined) - score += norm(pl::distance(ibb.center(), m_pilebb.center())); - } - else - continue; - } else { + if (!p.is_virt_object) { + valid_items_cnt++; // 高度接近的件尽量摆到一起 - score += (1- std::abs(item.height - p.height) / params.printable_height) + height_score += (1- std::abs(item.height - p.height) / params.printable_height) * norm(pl::distance(ibb.center(), p.boundingBox().center())); //score += LARGE_COST_TO_REJECT * (item.bed_temp - p.bed_temp != 0); - if (!Print::is_filaments_compatible({ item.filament_temp_type,p.filament_temp_type })) + if (!Print::is_filaments_compatible({ item.filament_temp_type,p.filament_temp_type })) { score += LARGE_COST_TO_REJECT; + break; + } } } + if (valid_items_cnt > 0) + score += height_score / valid_items_cnt; } std::set extruder_ids; @@ -675,9 +679,11 @@ protected: } // for layered printing, we want extruder change as few as possible // this has very weak effect, CAN NOT use a large weight + int last_extruder_cnt = extruder_ids.size(); extruder_ids.insert(item.extrude_ids.begin(), item.extrude_ids.end()); + int new_extruder_cnt= extruder_ids.size(); if (!params.is_seq_print) { - score += 1 * std::max(0, ((int) extruder_ids.size() - 1)); + score += 1 * (new_extruder_cnt-last_extruder_cnt); } return std::make_tuple(score, fullbb); @@ -936,8 +942,15 @@ template void remove_large_items(std::vector &items, Bin &&bin) template Radians min_area_boundingbox_rotation(const S &sh) { - return minAreaBoundingBox, boost::rational>(sh) - .angleToX(); + try { + return minAreaBoundingBox, boost::rational>(sh) + .angleToX(); + } + catch (const std::exception& e) { + // min_area_boundingbox_rotation may throw exception of dividing 0 if the object is already perfectly aligned to X + BOOST_LOG_TRIVIAL(error) << "arranging min_area_boundingbox_rotation fails, msg=" << e.what(); + return 0.0; + } } template @@ -981,7 +994,7 @@ void _arrange( // polygon nesting, a convex hull needs to be calculated. if (params.allow_rotations) { for (auto &itm : shapes) { - itm.rotation(min_area_boundingbox_rotation(itm.rawShape())); + itm.rotation(min_area_boundingbox_rotation(itm.transformedShape())); // If the item is too big, try to find a rotation that makes it fit if constexpr (std::is_same_v) { diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index bf9815be6b..fd53420414 100644 --- a/src/libslic3r/Arrange.hpp +++ b/src/libslic3r/Arrange.hpp @@ -132,6 +132,7 @@ struct ArrangeParams { float clearance_height_to_rod = 0; float clearance_height_to_lid = 0; float cleareance_radius = 0; + float nozzle_height = 0; float printable_height = 256.0; Vec2d align_center{ 0.5,0.5 }; diff --git a/src/libslic3r/BoundingBox.hpp b/src/libslic3r/BoundingBox.hpp index 8654669eb3..64f9725218 100644 --- a/src/libslic3r/BoundingBox.hpp +++ b/src/libslic3r/BoundingBox.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2014 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_BoundingBox_hpp_ #define slic3r_BoundingBox_hpp_ diff --git a/src/libslic3r/BridgeDetector.hpp b/src/libslic3r/BridgeDetector.hpp index 6025f9d3e0..1e5bb1a101 100644 --- a/src/libslic3r/BridgeDetector.hpp +++ b/src/libslic3r/BridgeDetector.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Pavel Mikuš @Godrak, Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2014 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_BridgeDetector_hpp_ #define slic3r_BridgeDetector_hpp_ diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index 940e5e1ee6..fe8f778647 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "clipper/clipper_z.hpp" #include "ClipperUtils.hpp" @@ -595,7 +590,8 @@ double getadhesionCoeff(const PrintObject* printObject) for (auto iter = extrudersFirstLayer.begin(); iter != extrudersFirstLayer.end(); iter++) if (modelVolume->extruder_id() == *iter) { if (Model::extruderParamsMap.find(modelVolume->extruder_id()) != Model::extruderParamsMap.end()) - if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG") { + if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG" || + Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PCTG") { adhesionCoeff = 2; } else if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "TPU") { diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index ebabfab426..38a1b24996 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -1,10 +1,3 @@ -#/|/ Copyright (c) Prusa Research 2018 - 2023 Tomáš Mészáros @tamasmeszaros, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Hejl @hejllukas, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, David Kocík @kocikdav, Vojtěch Král @vojtechkral -#/|/ Copyright (c) BambuStudio 2023 manch1n @manch1n -#/|/ Copyright (c) 2023 Mimoja @Mimoja -#/|/ Copyright (c) 2022 ole00 @ole00 -#/|/ -#/|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -#/|/ cmake_minimum_required(VERSION 3.13) project(libslic3r) @@ -100,6 +93,8 @@ set(lisbslic3r_sources Fill/FillConcentric.hpp Fill/FillConcentricInternal.cpp Fill/FillConcentricInternal.hpp + Fill/FillCrossHatch.cpp + Fill/FillCrossHatch.hpp Fill/FillHoneycomb.cpp Fill/FillHoneycomb.hpp Fill/FillGyroid.cpp @@ -143,6 +138,8 @@ set(lisbslic3r_sources Format/SL1.cpp Format/svg.hpp Format/svg.cpp + Format/ZipperArchiveImport.hpp + Format/ZipperArchiveImport.cpp GCode/ThumbnailData.cpp GCode/ThumbnailData.hpp GCode/CoolingBuffer.cpp @@ -194,9 +191,12 @@ set(lisbslic3r_sources Geometry/Curves.hpp Geometry/MedialAxis.cpp Geometry/MedialAxis.hpp + Geometry/Voronoi.cpp Geometry/Voronoi.hpp Geometry/VoronoiOffset.cpp Geometry/VoronoiOffset.hpp + Geometry/VoronoiUtils.hpp + Geometry/VoronoiUtils.cpp Geometry/VoronoiUtilsCgal.cpp Geometry/VoronoiUtilsCgal.hpp Geometry/VoronoiVisualUtils.hpp @@ -206,6 +206,7 @@ set(lisbslic3r_sources Layer.hpp LayerRegion.cpp libslic3r.h + libslic3r.cpp Line.cpp Line.hpp BlacklistedLibraryCheck.cpp @@ -229,6 +230,7 @@ set(lisbslic3r_sources Arrange.cpp NormalUtils.cpp NormalUtils.hpp + ObjColorUtils.hpp Orient.hpp Orient.cpp MultiPoint.cpp @@ -238,6 +240,8 @@ set(lisbslic3r_sources NSVGUtils.hpp ObjectID.cpp ObjectID.hpp + ParameterUtils.cpp + ParameterUtils.hpp PerimeterGenerator.cpp PerimeterGenerator.hpp PlaceholderParser.cpp @@ -431,8 +435,6 @@ set(lisbslic3r_sources Arachne/utils/PolygonsSegmentIndex.hpp Arachne/utils/PolylineStitcher.hpp Arachne/utils/PolylineStitcher.cpp - Arachne/utils/VoronoiUtils.hpp - Arachne/utils/VoronoiUtils.cpp Arachne/SkeletalTrapezoidation.hpp Arachne/SkeletalTrapezoidation.cpp Arachne/SkeletalTrapezoidationEdge.hpp @@ -470,6 +472,7 @@ set(CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE ON CACHE BOOL "" FORCE) cmake_policy(PUSH) cmake_policy(SET CMP0011 NEW) find_package(CGAL REQUIRED) +find_package(OpenCV REQUIRED core) cmake_policy(POP) add_library(libslic3r_cgal STATIC @@ -570,6 +573,7 @@ target_link_libraries(libslic3r mcut JPEG::JPEG qoi + opencv_world ) if(NOT WIN32) diff --git a/src/libslic3r/CSGMesh/CSGMesh.hpp b/src/libslic3r/CSGMesh/CSGMesh.hpp index d14ed76595..177d343296 100644 --- a/src/libslic3r/CSGMesh/CSGMesh.hpp +++ b/src/libslic3r/CSGMesh/CSGMesh.hpp @@ -70,6 +70,7 @@ struct CSGPart { Transform3f trafo; CSGType operation; CSGStackOp stack_operation; + std::string name; CSGPart(AnyPtr ptr = {}, CSGType op = CSGType::Union, diff --git a/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp b/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp index 446326dc88..5963b29109 100644 --- a/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp +++ b/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp @@ -64,7 +64,7 @@ bool model_to_csgmesh(const ModelObject &mo, CSGPart part{&(vol->mesh().its), vol->is_model_part() ? CSGType::Union : CSGType::Difference, (trafo * vol->get_matrix()).cast()}; - + part.name = vol->name; *out = std::move(part); ++out; } diff --git a/src/libslic3r/CSGMesh/PerformCSGMeshBooleans.hpp b/src/libslic3r/CSGMesh/PerformCSGMeshBooleans.hpp index e989033782..a9a48b48c0 100644 --- a/src/libslic3r/CSGMesh/PerformCSGMeshBooleans.hpp +++ b/src/libslic3r/CSGMesh/PerformCSGMeshBooleans.hpp @@ -11,6 +11,7 @@ #include "libslic3r/MeshBoolean.hpp" namespace Slic3r { namespace csg { + enum class BooleanFailReason { OK, MeshEmpty, NotBoundAVolume, SelfIntersect, NoIntersection}; // This method can be overriden when a specific CSGPart type supports caching // of the voxel grid @@ -256,12 +257,13 @@ void perform_csgmesh_booleans_mcut(MeshBoolean::mcut::McutMeshPtr& mcutm, template -It check_csgmesh_booleans(const Range &csgrange, Visitor &&vfn) +std::tuple check_csgmesh_booleans(const Range &csgrange, Visitor &&vfn) { using namespace detail_cgal; - + BooleanFailReason fail_reason = BooleanFailReason::OK; + std::string fail_part_name; std::vector cgalmeshes(csgrange.size()); - auto check_part = [&csgrange, &cgalmeshes](size_t i) + auto check_part = [&csgrange, &cgalmeshes,&fail_reason,&fail_part_name](size_t i) { auto it = csgrange.begin(); std::advance(it, i); @@ -275,14 +277,26 @@ It check_csgmesh_booleans(const Range &csgrange, Visitor &&vfn) } try { - if (!m || MeshBoolean::cgal::empty(*m)) + if (!m || MeshBoolean::cgal::empty(*m)) { + BOOST_LOG_TRIVIAL(info) << "check_csgmesh_booleans fails! mesh " << i << "/" << csgrange.size() << " is empty, cannot do boolean!"; + fail_reason= BooleanFailReason::MeshEmpty; + fail_part_name = csgpart.name; return; + } - if (!MeshBoolean::cgal::does_bound_a_volume(*m)) + if (!MeshBoolean::cgal::does_bound_a_volume(*m)) { + BOOST_LOG_TRIVIAL(info) << "check_csgmesh_booleans fails! mesh "< &csgrange, Visitor &&vfn) }; execution::for_each(ex_tbb, size_t(0), csgrange.size(), check_part); - It ret = csgrange.end(); - for (size_t i = 0; i < csgrange.size(); ++i) { - if (!cgalmeshes[i]) { - auto it = csgrange.begin(); - std::advance(it, i); - vfn(it); + //It ret = csgrange.end(); + //for (size_t i = 0; i < csgrange.size(); ++i) { + // if (!cgalmeshes[i]) { + // auto it = csgrange.begin(); + // std::advance(it, i); + // vfn(it); - if (ret == csgrange.end()) - ret = it; - } - } + // if (ret == csgrange.end()) + // ret = it; + // } + //} - return ret; + return { fail_reason,fail_part_name }; } template -It check_csgmesh_booleans(const Range &csgrange, bool use_mcut=false) +std::tuple check_csgmesh_booleans(const Range &csgrange, bool use_mcut=false) { if(!use_mcut) return check_csgmesh_booleans(csgrange, [](auto &) {}); else { using namespace detail_mcut; + BooleanFailReason fail_reason = BooleanFailReason::OK; + std::string fail_part_name; std::vector McutMeshes(csgrange.size()); - auto check_part = [&csgrange, &McutMeshes](size_t i) { + auto check_part = [&csgrange, &McutMeshes,&fail_reason,&fail_part_name](size_t i) { auto it = csgrange.begin(); std::advance(it, i); auto& csgpart = *it; @@ -327,27 +343,18 @@ It check_csgmesh_booleans(const Range &csgrange, bool use_mcut=false) } try { - if (!m || MeshBoolean::mcut::empty(*m)) + if (!m || MeshBoolean::mcut::empty(*m)) { + fail_reason=BooleanFailReason::MeshEmpty; + fail_part_name = csgpart.name; return; + } } catch (...) { return; } McutMeshes[i] = std::move(m); }; execution::for_each(ex_tbb, size_t(0), csgrange.size(), check_part); - - It ret = csgrange.end(); - for (size_t i = 0; i < csgrange.size(); ++i) { - if (!McutMeshes[i]) { - auto it = csgrange.begin(); - std::advance(it, i); - - if (ret == csgrange.end()) - ret = it; - } - } - - return ret; + return { fail_reason,fail_part_name }; } } diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index eeb43f6f02..4c73ac87ee 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Filip Sykala @Jony01 -///|/ Copyright (c) Slic3r 2013 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ -///|/ ported from lib/Slic3r/Geometry/Clipper.pm: -///|/ Copyright (c) Prusa Research 2016 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 - 2013 Mike Sheldrake @mesheldrake -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "ClipperUtils.hpp" #include "Geometry.hpp" #include "ShortestPath.hpp" diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index 3607b0a69d..05c3eb4a57 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Filip Sykala @Jony01 -///|/ Copyright (c) Slic3r 2013 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_ClipperUtils_hpp_ #define slic3r_ClipperUtils_hpp_ diff --git a/src/libslic3r/ClipperZUtils.hpp b/src/libslic3r/ClipperZUtils.hpp index f6b249b47f..001a3f2daa 100644 --- a/src/libslic3r/ClipperZUtils.hpp +++ b/src/libslic3r/ClipperZUtils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_ClipperZUtils_hpp_ #define slic3r_ClipperZUtils_hpp_ diff --git a/src/libslic3r/Color.cpp b/src/libslic3r/Color.cpp index c282e307ed..2f593538ac 100644 --- a/src/libslic3r/Color.cpp +++ b/src/libslic3r/Color.cpp @@ -6,7 +6,15 @@ static const float INV_255 = 1.0f / 255.0f; namespace Slic3r { - +bool color_is_equal(const RGBA a, const RGBA& b) +{ + for (size_t i = 0; i < 4; i++) { + if (abs(a[i] - b[i]) > 0.01) { + return false; + } + } + return true; +} // Conversion from RGB to HSV color space // The input RGB values are in the range [0, 1] // The output HSV values are in the ranges h = [0, 360], and s, v = [0, 1] diff --git a/src/libslic3r/Color.hpp b/src/libslic3r/Color.hpp index c13f0bd2c4..ad119d3c56 100644 --- a/src/libslic3r/Color.hpp +++ b/src/libslic3r/Color.hpp @@ -7,7 +7,10 @@ #include namespace Slic3r { - +using RGB = std::array; +using RGBA = std::array; +const RGBA UNDEFINE_COLOR = {0,0,0,0}; +bool color_is_equal(const RGBA a, const RGBA &b); class ColorRGB { std::array m_data{1.0f, 1.0f, 1.0f}; @@ -82,12 +85,16 @@ public: ColorRGBA& operator = (const ColorRGBA& other) { m_data = other.m_data; return *this; } - bool operator == (const ColorRGBA& other) const { return m_data == other.m_data; } + bool operator==(const ColorRGBA &other) const{ + return color_is_equal(m_data, other.m_data); + } bool operator != (const ColorRGBA& other) const { return !operator==(other); } bool operator < (const ColorRGBA& other) const; bool operator > (const ColorRGBA& other) const; + float operator[](int i) const { return m_data[i]; } + float& operator[](int i) { return m_data[i]; } - ColorRGBA operator + (const ColorRGBA& other) const; + ColorRGBA operator + (const ColorRGBA& other) const; ColorRGBA operator * (float value) const; const float* const data() const { return m_data.data(); } diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index e37faf8854..e826bb4c5b 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -831,6 +831,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex else if (boost::iequals(it.key(), BBL_JSON_KEY_FROM)) { key_values.emplace(BBL_JSON_KEY_FROM, it.value()); } + else if (boost::iequals(it.key(), BBL_JSON_KEY_DESCRIPTION)) { + key_values.emplace(BBL_JSON_KEY_DESCRIPTION, it.value()); + } else if (boost::iequals(it.key(), BBL_JSON_KEY_INSTANTIATION)) { key_values.emplace(BBL_JSON_KEY_INSTANTIATION, it.value()); } @@ -1011,6 +1014,10 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex } } } + + // Do legacy conversion on a completely loaded dictionary. + // Perform composite conversions, for example merging multiple keys into one key. + this->handle_legacy_composite(); return 0; } catch (const std::ifstream::failure &err) { @@ -1100,6 +1107,9 @@ ConfigSubstitutions ConfigBase::load(const boost::property_tree::ptree &tree, Fo // ignore } } + // Do legacy conversion on a completely loaded dictionary. + // Perform composite conversions, for example merging multiple keys into one key. + this->handle_legacy_composite(); return std::move(substitutions_ctxt.substitutions); } @@ -1186,7 +1196,10 @@ size_t ConfigBase::load_from_gcode_string_legacy(ConfigBase& config, const char* end = start; } - // BBS + // Do legacy conversion on a completely loaded dictionary. + // Perform composite conversions, for example merging multiple keys into one key. + config.handle_legacy_composite(); + free(result); return num_key_value_pairs; } @@ -1365,6 +1378,10 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo throw Slic3r::RuntimeError(format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs)); } + // Do legacy conversion on a completely loaded dictionary. + // Perform composite conversions, for example merging multiple keys into one key. + this->handle_legacy_composite(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": finished to parse_file %1%") % file.c_str(); return std::move(substitutions_ctxt.substitutions); } diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index a9973b4682..3ce062ac39 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -2057,6 +2057,10 @@ protected: // If the opt_key is no more valid in this version of Slic3r, opt_key is cleared by handle_legacy(). // handle_legacy() is called internally by set_deserialize(). virtual void handle_legacy(t_config_option_key &/*opt_key*/, std::string &/*value*/) const {} + // Called after a config is loaded as a whole. + // Perform composite conversions, for example merging multiple keys into one key. + // For conversion of single options, the handle_legacy() method above is called. + virtual void handle_legacy_composite() {} public: using ConfigOptionResolver::option; diff --git a/src/libslic3r/CutSurface.cpp b/src/libslic3r/CutSurface.cpp index 060bed62e1..619e5e9f72 100644 --- a/src/libslic3r/CutSurface.cpp +++ b/src/libslic3r/CutSurface.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "CutSurface.hpp" /// models_input.obj - Check transormation of model to each others @@ -706,7 +702,7 @@ using IsOnSides = std::vector>; /// Triangle /// Flag is vertex index out of plane /// True when triangle is out of one of plane -bool is_all_on_one_side(const Vec3i &t, const IsOnSides& is_on_sides); +bool is_all_on_one_side(const Vec3i32 &t, const IsOnSides& is_on_sides); } // namespace priv @@ -718,7 +714,7 @@ bool priv::is_out_of(const Vec3d &v, const PointNormal &point_normal) return signed_distance > 1e-5; }; -bool priv::is_all_on_one_side(const Vec3i &t, const IsOnSides& is_on_sides) { +bool priv::is_all_on_one_side(const Vec3i32 &t, const IsOnSides& is_on_sides) { for (size_t side = 0; side < 4; side++) { bool result = true; for (auto vi : t) { @@ -1891,7 +1887,7 @@ uint32_t priv::get_closest_point_index(const SearchData &sd, const Polygon &poly = (id.polygon_index == 0) ? shape.contour : shape.holes[id.polygon_index - 1]; - Vec2i p_ = p.cast(); + auto p_ = p.cast(); return p_ == poly[id.point_index]; }; @@ -3559,7 +3555,7 @@ SurfaceCut priv::patch2cut(SurfacePatch &patch) assert(mesh.next(mesh.next(mesh.next(hi))) == hi); // triangle indicies - Vec3i ti; + Vec3i32 ti; size_t i = 0; for (VI vi : { mesh.source(hi), mesh.target(hi), @@ -3742,7 +3738,7 @@ indexed_triangle_set priv::create_indexed_triangle_set( HI hi_end = hi; int ti = 0; - Vec3i t; + Vec3i32 t; do { VI vi = mesh.source(hi); @@ -3802,8 +3798,8 @@ void priv::store(const CutAOIs &aois, const CutMesh &mesh, const std::string &di size_t bi2 = its.vertices.size(); its.vertices.push_back(b + dir); - its.indices.push_back(Vec3i(ai, ai2, bi)); - its.indices.push_back(Vec3i(ai2, bi2, bi)); + its.indices.push_back(Vec3i32(ai, ai2, bi)); + its.indices.push_back(Vec3i32(ai2, bi2, bi)); } return its; }; @@ -4002,8 +3998,8 @@ indexed_triangle_set priv::create_contour_its( size_t bi2 = result.vertices.size(); result.vertices.push_back(b + dir); - result.indices.push_back(Vec3i(ai, bi, ai2)); - result.indices.push_back(Vec3i(ai2, bi, bi2)); + result.indices.push_back(Vec3i32(ai, bi, ai2)); + result.indices.push_back(Vec3i32(ai2, bi, bi2)); prev_vi = vi; } return result; diff --git a/src/libslic3r/CutSurface.hpp b/src/libslic3r/CutSurface.hpp index f5b41cdaeb..9f4e3159cf 100644 --- a/src/libslic3r/CutSurface.hpp +++ b/src/libslic3r/CutSurface.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_CutSurface_hpp_ #define slic3r_CutSurface_hpp_ diff --git a/src/libslic3r/CutUtils.cpp b/src/libslic3r/CutUtils.cpp index 9f4dbdaacc..8611ec302d 100644 --- a/src/libslic3r/CutUtils.cpp +++ b/src/libslic3r/CutUtils.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Oleksandra Iushchenko @YuSanka -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "CutUtils.hpp" #include "Geometry.hpp" diff --git a/src/libslic3r/CutUtils.hpp b/src/libslic3r/CutUtils.hpp index 5067aaaff1..2c477a3e2b 100644 --- a/src/libslic3r/CutUtils.hpp +++ b/src/libslic3r/CutUtils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Oleksandra Iushchenko @YuSanka -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_CutUtils_hpp_ #define slic3r_CutUtils_hpp_ diff --git a/src/libslic3r/EdgeGrid.cpp b/src/libslic3r/EdgeGrid.cpp index 4985b788e4..c1c8fbcd98 100644 --- a/src/libslic3r/EdgeGrid.cpp +++ b/src/libslic3r/EdgeGrid.cpp @@ -1307,9 +1307,9 @@ Polygons EdgeGrid::Grid::contours_simplified(coord_t offset, bool fill_holes) co // 1) Collect the lines. std::vector lines; EndPointMapType start_point_to_line_idx; - for (int r = 0; r <= int(m_rows); ++ r) { - for (int c = 0; c <= int(m_cols); ++ c) { - int addr = (r + 1) * cell_cols + c + 1; + for (coord_t r = 0; r <= coord_t(m_rows); ++ r) { + for (coord_t c = 0; c <= coord_t(m_cols); ++ c) { + size_t addr = (r + 1) * cell_cols + c + 1; bool left = cell_inside[addr - 1]; bool top = cell_inside[addr - cell_cols]; bool current = cell_inside[addr]; diff --git a/src/libslic3r/Emboss.cpp b/src/libslic3r/Emboss.cpp index 6af848f465..13d494d949 100644 --- a/src/libslic3r/Emboss.cpp +++ b/src/libslic3r/Emboss.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include "Emboss.hpp" #include @@ -1504,7 +1500,7 @@ indexed_triangle_set polygons2model_unique( const Points &points) { // CW order of triangle indices - std::vector shape_triangles=Triangulation::triangulate(shape2d, points); + std::vector shape_triangles=Triangulation::triangulate(shape2d, points); uint32_t count_point = points.size(); indexed_triangle_set result; @@ -1525,10 +1521,10 @@ indexed_triangle_set polygons2model_unique( std::make_move_iterator(back_points.end())); result.indices.reserve(shape_triangles.size() * 2 + points.size() * 2); // top triangles - change to CCW - for (const Vec3i &t : shape_triangles) + for (const Vec3i32 &t : shape_triangles) result.indices.emplace_back(t.x(), t.z(), t.y()); // bottom triangles - use CW - for (const Vec3i &t : shape_triangles) + for (const Vec3i32 &t : shape_triangles) result.indices.emplace_back(t.x() + count_point, t.y() + count_point, t.z() + count_point); @@ -1564,7 +1560,7 @@ indexed_triangle_set polygons2model_duplicit( { // CW order of triangle indices std::vector changes = Triangulation::create_changes(points, duplicits); - std::vector shape_triangles = Triangulation::triangulate(shape2d, points, changes); + std::vector shape_triangles = Triangulation::triangulate(shape2d, points, changes); uint32_t count_point = *std::max_element(changes.begin(), changes.end()) + 1; indexed_triangle_set result; @@ -1596,10 +1592,10 @@ indexed_triangle_set polygons2model_duplicit( result.indices.reserve(shape_triangles.size() * 2 + points.size() * 2); // top triangles - change to CCW - for (const Vec3i &t : shape_triangles) + for (const Vec3i32 &t : shape_triangles) result.indices.emplace_back(t.x(), t.z(), t.y()); // bottom triangles - use CW - for (const Vec3i &t : shape_triangles) + for (const Vec3i32 &t : shape_triangles) result.indices.emplace_back(t.x() + count_point, t.y() + count_point, t.z() + count_point); diff --git a/src/libslic3r/Emboss.hpp b/src/libslic3r/Emboss.hpp index ded2196a7a..15f0316327 100644 --- a/src/libslic3r/Emboss.hpp +++ b/src/libslic3r/Emboss.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Emboss_hpp_ #define slic3r_Emboss_hpp_ diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp index dee115194b..364d2a6126 100644 --- a/src/libslic3r/ExPolygon.cpp +++ b/src/libslic3r/ExPolygon.cpp @@ -1,15 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ -///|/ ported from lib/Slic3r/ExPolygon.pm: -///|/ Copyright (c) Prusa Research 2017 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "BoundingBox.hpp" #include "ExPolygon.hpp" #include "Exception.hpp" diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp index 39974ab7af..d72fdf3389 100644 --- a/src/libslic3r/ExPolygon.hpp +++ b/src/libslic3r/ExPolygon.hpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Pavel Mikuš @Godrak, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) 2016 Sakari Kapanen @Flannelhead -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/ExPolygon.pm: -///|/ Copyright (c) Prusa Research 2017 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_ExPolygon_hpp_ #define slic3r_ExPolygon_hpp_ diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index dee7477939..942a5d07b0 100644 --- a/src/libslic3r/ExtrusionEntity.cpp +++ b/src/libslic3r/ExtrusionEntity.cpp @@ -13,6 +13,8 @@ namespace Slic3r { +static const double slope_inner_outer_wall_gap = 0.4; + void ExtrusionPath::intersect_expolygons(const ExPolygons &collection, ExtrusionEntityCollection* retval) const { this->_inflate_collection(intersection_pl(Polylines{ polyline }, collection), retval); @@ -409,11 +411,8 @@ ExtrusionLoopSloped::ExtrusionLoopSloped(ExtrusionPaths& original_paths, : ExtrusionLoop(role) { // create slopes - const auto add_slop = [this, slope_max_segment_length, seam_gap](const ExtrusionPath& path, const Polyline& poly, - double ratio_begin, double ratio_end) { - if (poly.empty()) { - return; - } + const auto add_slop = [this, slope_max_segment_length, seam_gap](const ExtrusionPath &path, const Polyline &poly, double ratio_begin, double ratio_end) { + if (poly.empty()) { return; } // Ensure `slope_max_segment_length` Polyline detailed_poly; @@ -421,7 +420,7 @@ ExtrusionLoopSloped::ExtrusionLoopSloped(ExtrusionPaths& original_paths, detailed_poly.append(poly.first_point()); // Recursively split the line into half until no longer than `slope_max_segment_length` - const std::function handle_line = [slope_max_segment_length, &detailed_poly, &handle_line](const Line& line) { + const std::function handle_line = [slope_max_segment_length, &detailed_poly, &handle_line](const Line &line) { if (line.length() <= slope_max_segment_length) { detailed_poly.append(line.b); } else { @@ -432,13 +431,10 @@ ExtrusionLoopSloped::ExtrusionLoopSloped(ExtrusionPaths& original_paths, } }; - for (const auto& l : poly.lines()) { - handle_line(l); - } + for (const auto &l : poly.lines()) { handle_line(l); } } - starts.emplace_back(detailed_poly, path, ExtrusionPathSloped::Slope{ratio_begin, ratio_begin}, - ExtrusionPathSloped::Slope{ratio_end, ratio_end}); + starts.emplace_back(detailed_poly, path, ExtrusionPathSloped::Slope{ratio_begin, ratio_begin}, ExtrusionPathSloped::Slope{ratio_end, ratio_end}); if (is_approx(ratio_end, 1.) && seam_gap > 0) { // Remove the segments that has no extrusion @@ -456,10 +452,8 @@ ExtrusionLoopSloped::ExtrusionLoopSloped(ExtrusionPaths& original_paths, detailed_poly.clear(); } } - if (!detailed_poly.empty()) { - ends.emplace_back(detailed_poly, path, ExtrusionPathSloped::Slope{1., 1. - ratio_begin}, - ExtrusionPathSloped::Slope{1., 1. - ratio_end}); - } + if (!detailed_poly.empty()) { ends.emplace_back(detailed_poly, path, ExtrusionPathSloped::Slope{1., 1. - ratio_begin}, ExtrusionPathSloped::Slope{1., 1. - ratio_end}); } + }; double remaining_length = slope_min_length; @@ -509,6 +503,61 @@ std::vector ExtrusionLoopSloped::get_all_paths() const { return r; } +void ExtrusionLoopSloped::clip_slope(double distance, bool inter_perimeter) +{ + + this->clip_end(distance); + this->clip_front(distance*2); +} + +void ExtrusionLoopSloped::clip_end(const double distance) +{ + double clip_dist = distance; + std::vector &ends_slope = this->ends; + while (clip_dist > 0 && !ends_slope.empty()) { + ExtrusionPathSloped &last_path = ends_slope.back(); + double len = last_path.length(); + if (len <= clip_dist) { + ends_slope.pop_back(); + clip_dist -= len; + } else { + last_path.polyline.clip_end(clip_dist); + break; + } + } +} + +void ExtrusionLoopSloped::clip_front(const double distance) +{ + double clip_dist = distance; + if (this->role() == erPerimeter) + clip_dist = scale_(this->slope_path_length()) * slope_inner_outer_wall_gap; + + std::vector &start_slope = this->starts; + + Polyline front_inward; + while (distance > 0 && !start_slope.empty()) { + ExtrusionPathSloped &first_path = start_slope.front(); + double len = first_path.length(); + if (len <= clip_dist) { + start_slope.erase(start_slope.begin()); + clip_dist -= len; + } else { + first_path.polyline.reverse(); + first_path.polyline.clip_end(clip_dist); + first_path.polyline.reverse(); + break; + } + } +} + +double ExtrusionLoopSloped::slope_path_length() { + double total_length = 0.0; + for (ExtrusionPathSloped start_ep : this->starts) { + total_length += unscale_(start_ep.length()); + } + return total_length; +} std::string ExtrusionEntity::role_to_string(ExtrusionRole role) { diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 0f6a37779a..4394d00264 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -151,7 +151,7 @@ class ExtrusionPath : public ExtrusionEntity { public: Polyline polyline; - int overhang_degree = 0; + double overhang_degree = 0; int curve_degree = 0; // Volumetric velocity. mm^3 of plastic per mm of linear head motion. Used by the G-code generator. double mm3_per_mm; @@ -163,7 +163,8 @@ public: ExtrusionPath() : mm3_per_mm(-1), width(-1), height(-1), m_role(erNone), m_no_extrusion(false) {} ExtrusionPath(ExtrusionRole role) : mm3_per_mm(-1), width(-1), height(-1), m_role(role), m_no_extrusion(false) {} ExtrusionPath(ExtrusionRole role, double mm3_per_mm, float width, float height, bool no_extrusion = false) : mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role), m_no_extrusion(no_extrusion) {} - ExtrusionPath(int overhang_degree, int curve_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) : overhang_degree(overhang_degree), curve_degree(curve_degree), mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {} + ExtrusionPath(double overhang_degree, int curve_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) : overhang_degree(overhang_degree), curve_degree(curve_degree), mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {} + ExtrusionPath(const ExtrusionPath &rhs) : polyline(rhs.polyline) , overhang_degree(rhs.overhang_degree) @@ -277,8 +278,8 @@ public: }; int get_overhang_degree() const { // only perimeter has overhang degree. Other return 0; - if (is_perimeter(m_role) || is_bridge(m_role)) - return overhang_degree; + if (is_perimeter(m_role)) + return (int)overhang_degree; return 0; }; void set_curve_degree(int curve) { @@ -513,6 +514,10 @@ public: ExtrusionLoopRole role = elrDefault); [[nodiscard]] std::vector get_all_paths() const; + void clip_slope(double distance, bool inter_perimeter = false ); + void clip_end(const double distance); + void clip_front(const double distance); + double slope_path_length(); }; inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height) @@ -525,7 +530,7 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, Ex } } -inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, int overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) { dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) @@ -546,7 +551,7 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, E polylines.clear(); } -inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, int overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) { dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) @@ -557,6 +562,16 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, i polylines.clear(); } +inline void extrusion_paths_append(ExtrusionPaths &dst, Polyline &&polyline, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +{ + dst.reserve(dst.size() + 1); + if (polyline.is_valid()) { + dst.push_back(ExtrusionPath(overhang_degree, curva_degree, role, mm3_per_mm, width, height)); + dst.back().polyline = std::move(polyline); + } + polyline.clear(); +} + inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height, bool can_reverse = true) { dst.reserve(dst.size() + polylines.size()); diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index d68c14ce51..6e3886d6db 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -1,12 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Hejl @hejllukas -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ Copyright (c) 2016 Sakari Kapanen @Flannelhead -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2013 Mark Hindess -///|/ Copyright (c) 2011 Michael Moon -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include #include @@ -18,11 +9,13 @@ #include "../PrintConfig.hpp" #include "../Surface.hpp" +#include "ExtrusionEntity.hpp" #include "FillBase.hpp" #include "FillRectilinear.hpp" #include "FillLightning.hpp" #include "FillConcentricInternal.hpp" #include "FillConcentric.hpp" +#include "libslic3r.h" namespace Slic3r { @@ -40,6 +33,7 @@ struct SurfaceFillParams coordf_t overlap = 0.; // Angle as provided by the region config, in radians. float angle = 0.f; + bool rotate_angle = true; // Is bridging used for this fill? Bridging parameters may be used even if this->flow.bridge() is not set. bool bridge; // Non-negative for a bridge. @@ -65,14 +59,17 @@ struct SurfaceFillParams // Index of this entry in a linear vector. size_t idx = 0; - + // infill speed settings + float sparse_infill_speed = 0; + float top_surface_speed = 0; + float solid_infill_speed = 0; bool operator<(const SurfaceFillParams &rhs) const { #define RETURN_COMPARE_NON_EQUAL(KEY) if (this->KEY < rhs.KEY) return true; if (this->KEY > rhs.KEY) return false; #define RETURN_COMPARE_NON_EQUAL_TYPED(TYPE, KEY) if (TYPE(this->KEY) < TYPE(rhs.KEY)) return true; if (TYPE(this->KEY) > TYPE(rhs.KEY)) return false; // Sort first by decreasing bridging angle, so that the bridges are processed with priority when trimming one layer by the other. - if (this->bridge_angle > rhs.bridge_angle) return true; + if (this->bridge_angle > rhs.bridge_angle) return true; if (this->bridge_angle < rhs.bridge_angle) return false; RETURN_COMPARE_NON_EQUAL(extruder); @@ -80,6 +77,7 @@ struct SurfaceFillParams RETURN_COMPARE_NON_EQUAL(spacing); RETURN_COMPARE_NON_EQUAL(overlap); RETURN_COMPARE_NON_EQUAL(angle); + RETURN_COMPARE_NON_EQUAL(rotate_angle); RETURN_COMPARE_NON_EQUAL(density); // RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_adjust); RETURN_COMPARE_NON_EQUAL(anchor_length); @@ -89,6 +87,10 @@ struct SurfaceFillParams RETURN_COMPARE_NON_EQUAL(flow.nozzle_diameter()); RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, bridge); RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, extrusion_role); + RETURN_COMPARE_NON_EQUAL(sparse_infill_speed); + RETURN_COMPARE_NON_EQUAL(top_surface_speed); + RETURN_COMPARE_NON_EQUAL(solid_infill_speed); + return false; } @@ -98,6 +100,7 @@ struct SurfaceFillParams this->spacing == rhs.spacing && this->overlap == rhs.overlap && this->angle == rhs.angle && + this->rotate_angle == rhs.rotate_angle && this->bridge == rhs.bridge && this->bridge_angle == rhs.bridge_angle && this->density == rhs.density && @@ -105,7 +108,10 @@ struct SurfaceFillParams this->anchor_length == rhs.anchor_length && this->anchor_length_max == rhs.anchor_length_max && this->flow == rhs.flow && - this->extrusion_role == rhs.extrusion_role; + this->extrusion_role == rhs.extrusion_role && + this->sparse_infill_speed == rhs.sparse_infill_speed && + this->top_surface_speed == rhs.top_surface_speed && + this->solid_infill_speed == rhs.solid_infill_speed; } }; @@ -171,9 +177,9 @@ void split_solid_surface(size_t layer_id, const SurfaceFill &fill, ExPolygons &n Polygons inner_area = intersection(filled_area, opening(filled_area, 2 * scaled_spacing, 3 * scaled_spacing)); inner_area = shrink(inner_area, scaled_spacing * 0.5 - scaled(fill.params.overlap)); - + AABBTreeLines::LinesDistancer area_walls{to_lines(inner_area)}; - + const size_t n_vlines = (bb.max.x() - bb.min.x() + scaled_spacing - 1) / scaled_spacing; std::vector vertical_lines(n_vlines); coord_t y_min = bb.min.y(); @@ -188,7 +194,7 @@ void split_solid_surface(size_t layer_id, const SurfaceFill &fill, ExPolygons &n vertical_lines.back().a = Point{coord_t(bb.min.x() + n_vlines * double(scaled_spacing) + scaled_spacing * 0.5), y_min}; vertical_lines.back().b = Point{vertical_lines.back().a.x(), y_max}; } - + std::vector> polygon_sections(n_vlines); for (size_t i = 0; i < n_vlines; i++) { @@ -213,7 +219,7 @@ void split_solid_surface(size_t layer_id, const SurfaceFill &fill, ExPolygons &n bool neighbours_explored = false; std::vector> neighbours{}; }; - + coord_t length_filter = scale_(4); size_t skips_allowed = 2; size_t min_removal_conut = 5; @@ -286,7 +292,7 @@ void split_solid_surface(size_t layer_id, const SurfaceFill &fill, ExPolygons &n std::sort(polygon_sections[section_idx].begin(), polygon_sections[section_idx].end(), [](const Line &a, const Line &b) { return a.a.y() < b.b.y(); }); } - + Polygons reconstructed_area{}; // reconstruct polygon from polygon sections { @@ -322,7 +328,7 @@ void split_solid_surface(size_t layer_id, const SurfaceFill &fill, ExPolygons &n squared_distance_limit_reconnection) { traced_poly.lows.push_back(candidates_begin->a); } else { - traced_poly.lows.push_back(traced_poly.lows.back() + Point{scaled_spacing / 2, 0}); + traced_poly.lows.push_back(traced_poly.lows.back() + Point{scaled_spacing / 2, coord_t(0)}); traced_poly.lows.push_back(candidates_begin->a - Point{scaled_spacing / 2, 0}); traced_poly.lows.push_back(candidates_begin->a); } @@ -481,16 +487,30 @@ std::vector group_fills(const Layer &layer) } } 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. + if (params.extrusion_role == erInternalInfill) { + params.angle = float(Geometry::deg2rad(region_config.infill_direction.value)); + params.rotate_angle = (params.pattern == ipRectilinear || params.pattern == ipLine); + } else { + params.angle = float(Geometry::deg2rad(region_config.solid_infill_direction.value)); + params.rotate_angle = region_config.rotate_solid_infill_direction; + } + + // Calculate the actual flow we'll be using for this infill. params.bridge = is_bridge || Fill::use_bridge_flow(params.pattern); const bool is_thick_bridge = surface.is_bridge() && (surface.is_internal_bridge() ? object_config.thick_internal_bridges : object_config.thick_bridges); params.flow = params.bridge ? //Orca: enable thick bridge based on config layerm.bridging_flow(extrusion_role, is_thick_bridge) : layerm.flow(extrusion_role, (surface.thickness == -1) ? layer.height : surface.thickness); - + // record speed params + if (!params.bridge) { + if (params.extrusion_role == erInternalInfill) + params.sparse_infill_speed = region_config.sparse_infill_speed; + else if (params.extrusion_role == erTopSolidInfill) + params.top_surface_speed = region_config.top_surface_speed; + else if (params.extrusion_role == erSolidInfill) + params.solid_infill_speed = region_config.internal_solid_infill_speed; + } // Calculate flow spacing for infill pattern generation. if (surface.is_solid() || is_bridge) { params.spacing = params.flow.spacing(); @@ -629,11 +649,12 @@ std::vector group_fills(const Layer &layer) else params.pattern = ipRectilinear; params.density = 100.f; - params.extrusion_role = erInternalInfill; - params.angle = float(Geometry::deg2rad(layerm.region().config().infill_direction.value)); + params.extrusion_role = erSolidInfill; + params.angle = float(Geometry::deg2rad(layerm.region().config().solid_infill_direction.value)); + params.rotate_angle = layerm.region().config().rotate_solid_infill_direction; // calculate the actual flow we'll be using for this infill params.flow = layerm.flow(frSolidInfill); - params.spacing = params.flow.spacing(); + params.spacing = params.flow.spacing(); surface_fills.emplace_back(params); surface_fills.back().surface.surface_type = stInternalSolid; surface_fills.back().surface.thickness = layer.height; @@ -701,7 +722,7 @@ void export_group_fills_to_svg(const char *path, const std::vector for (const auto &expoly : fill.expolygons) svg.draw(expoly, surface_type_to_color_name(fill.surface.surface_type), transparency); export_surface_type_legend_to_svg(svg, legend_pos); - svg.Close(); + svg.Close(); } #endif @@ -734,6 +755,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: f->layer_id = this->id(); f->z = this->print_z; f->angle = surface_fill.params.angle; + f->rotate_angle = surface_fill.params.rotate_angle; f->adapt_fill_octree = (surface_fill.params.pattern == ipSupportCubic) ? support_fill_octree : adaptive_fill_octree; f->print_config = &this->object()->print()->config(); f->print_object_config = &this->object()->config(); @@ -966,7 +988,7 @@ void Layer::make_ironing() // ironing flowrate (5% percent) // ironing speed (10 mm/sec) - // Kisslicer: + // Kisslicer: // iron off, Sweep, Group // ironing speed: 15 mm/sec @@ -986,7 +1008,7 @@ void Layer::make_ironing() const PrintRegionConfig &config = layerm->region().config(); if (config.ironing_type != IroningType::NoIroning && (config.ironing_type == IroningType::AllSolid || - (config.top_shell_layers > 0 && + (config.top_shell_layers > 0 && (config.ironing_type == IroningType::TopSurfaces || (config.ironing_type == IroningType::TopmostOnly && layerm->layer()->upper_layer == nullptr))))) { if (config.wall_filament == config.solid_infill_filament || config.wall_loops == 0) { diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp index 6c8c099c4c..7b7a3b8878 100644 --- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp +++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp @@ -186,15 +186,18 @@ static Polylines makeGrid(coordf_t z, coordf_t gridSize, coordf_t boundWidth, co // dont_adjust [avoid filling space evenly] // monotonic [fill strictly left to right] // complete [complete each loop] - + void Fill3DHoneycomb::_fill_surface_single( - const FillParams ¶ms, + const FillParams ¶ms, unsigned int thickness_layers, - const std::pair &direction, + const std::pair &direction, ExPolygon expolygon, Polylines &polylines_out) { // no rotation is supported for this infill pattern + // Support infill angle + auto infill_angle = float(this->angle); + if (std::abs(infill_angle) >= EPSILON) expolygon.rotate(-infill_angle); BoundingBox bb = expolygon.contour.bounding_box(); // Note: with equally-scaled X/Y/Z, the pattern will create a vertically-stretched @@ -216,7 +219,7 @@ void Fill3DHoneycomb::_fill_surface_single( // Z scale is adjusted to make the layer patterns consistent / symmetric // This means that the resultant infill won't be an ideal truncated octahedron, // but it should look better than the equivalent quantised version - + coordf_t layerHeight = scale_(thickness_layers); // ceiling to an integer value of layers per Z // (with a little nudge in case it's close to perfect) @@ -248,7 +251,7 @@ void Fill3DHoneycomb::_fill_surface_single( // (a module is 2*$gridSize since one $gridSize half-module is // growing while the other $gridSize half-module is shrinking) bb.merge(align_to_grid(bb.min, Point(gridSize*4, gridSize*4))); - + // generate pattern Polylines polylines = makeGrid( @@ -257,7 +260,7 @@ void Fill3DHoneycomb::_fill_surface_single( bb.size()(0), bb.size()(1), !params.dont_adjust); - + // move pattern in place for (Polyline &pl : polylines){ pl.translate(bb.min); @@ -266,11 +269,21 @@ void Fill3DHoneycomb::_fill_surface_single( // clip pattern to boundaries, chain the clipped polylines polylines = intersection_pl(polylines, to_polygons(expolygon)); - // connect lines if needed - if (params.dont_connect() || polylines.size() <= 1) + // copy from fliplines + if (!polylines.empty()) { + int infill_start_idx = polylines_out.size(); // only rotate what belongs to us. + // connect lines + if (params.dont_connect() || polylines.size() <= 1) append(polylines_out, chain_polylines(std::move(polylines))); - else + else this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params); + + // rotate back + if (std::abs(infill_angle) >= EPSILON) { + for (auto it = polylines_out.begin() + infill_start_idx; it != polylines_out.end(); ++it) + it->rotate(infill_angle); + } + } } } // namespace Slic3r \ No newline at end of file diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 772395f9bc..6225987486 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -1,12 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena -///|/ Copyright (c) SuperSlicer 2018 - 2019 Remi Durand @supermerill -///|/ -///|/ ported from lib/Slic3r/Fill/Base.pm: -///|/ Copyright (c) Prusa Research 2016 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include @@ -32,6 +23,7 @@ #include "FillLightning.hpp" // BBS: new infill pattern header #include "FillConcentricInternal.hpp" +#include "FillCrossHatch.hpp" // #define INFILL_DEBUG_OUTPUT @@ -51,6 +43,7 @@ Fill* Fill::new_from_type(const InfillPattern type) case ipGyroid: return new FillGyroid(); case ipRectilinear: return new FillRectilinear(); case ipAlignedRectilinear: return new FillAlignedRectilinear(); + case ipCrossHatch: return new FillCrossHatch(); case ipMonotonic: return new FillMonotonic(); case ipLine: return new FillLine(); case ipGrid: return new FillGrid(); diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 38f8c722b5..4812fcd5eb 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -94,6 +94,8 @@ public: coordf_t overlap; // in radians, ccw, 0 = East float angle; + // Orca: enable angle shifting for layer change + bool rotate_angle{ true }; // In scaled coordinates. Maximum lenght of a perimeter segment connecting two infill lines. // Used by the FillRectilinear2, FillGrid2, FillTriangles, FillStars and FillCubic. // If left to zero, the links will not be limited. @@ -150,6 +152,7 @@ protected: overlap(0.), // Initial angle is undefined. angle(FLT_MAX), + rotate_angle(true), link_max_length(0), loop_clipping(0), // The initial bounding box is empty, therefore undefined. @@ -171,7 +174,7 @@ protected: ExPolygon expolygon, ThickPolylines& thick_polylines_out) {} - virtual float _layer_angle(size_t idx) const { return (idx & 1) ? float(M_PI/2.) : 0; } + virtual float _layer_angle(size_t idx) const { return (rotate_angle && (idx & 1)) ? float(M_PI/2.) : 0; } virtual std::pair _infill_direction(const Surface *surface) const; diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp index ed9c070437..93a54a0739 100644 --- a/src/libslic3r/Fill/FillConcentric.cpp +++ b/src/libslic3r/Fill/FillConcentric.cpp @@ -1,12 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas -///|/ -///|/ ported from lib/Slic3r/Fill/Concentric.pm: -///|/ Copyright (c) Prusa Research 2016 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "../ClipperUtils.hpp" #include "../ExPolygon.hpp" #include "../Surface.hpp" diff --git a/src/libslic3r/Fill/FillConcentric.hpp b/src/libslic3r/Fill/FillConcentric.hpp index 4902c43b30..476c9b8757 100644 --- a/src/libslic3r/Fill/FillConcentric.hpp +++ b/src/libslic3r/Fill/FillConcentric.hpp @@ -1,13 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas -///|/ Copyright (c) Slic3r 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/Fill/Concentric.pm: -///|/ Copyright (c) Prusa Research 2016 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_FillConcentric_hpp_ #define slic3r_FillConcentric_hpp_ diff --git a/src/libslic3r/Fill/FillCrossHatch.cpp b/src/libslic3r/Fill/FillCrossHatch.cpp new file mode 100644 index 0000000000..10f421bef3 --- /dev/null +++ b/src/libslic3r/Fill/FillCrossHatch.cpp @@ -0,0 +1,233 @@ +#include "../ClipperUtils.hpp" +#include "../ShortestPath.hpp" +#include "../Surface.hpp" +#include + +#include "FillCrossHatch.hpp" + +namespace Slic3r { + +// CrossHatch Infill: Enhances 3D Printing Speed & Reduces Noise +// CrossHatch, as its name hints, alternates line direction by 90 degrees every few layers to improve adhesion. +// It introduces transform layers between direction shifts for better line cohesion, which fixes the weakness of line infill. +// The transform technique is inspired by David Eccles, improved 3D honeycomb but we made a more flexible implementation. +// This method notably increases printing speed, meeting the demands of modern high-speed 3D printers, and reduces noise for most layers. +// By Bambu Lab + +// graph credits: David Eccles (gringer). +// But we made a different definition for points. +/* o---o + * / \ + * / \ + * \ / + * \ / + * o---o + * p1 p2 p3 p4 + */ + +static Pointfs generate_one_cycle(double progress, coordf_t period) +{ + Pointfs out; + double offset = progress * 1. / 8. * period; + out.reserve(4); + out.push_back(Vec2d(0.25 * period - offset, offset)); + out.push_back(Vec2d(0.25 * period + offset, offset)); + out.push_back(Vec2d(0.75 * period - offset, -offset)); + out.push_back(Vec2d(0.75 * period + offset, -offset)); + return out; +} + +static Polylines generate_transform_pattern(double inprogress, int direction, coordf_t ingrid_size, coordf_t inwidth, coordf_t inheight) +{ + coordf_t width = inwidth; + coordf_t height = inheight; + coordf_t grid_size = ingrid_size * 2; // we due with odd and even saparately. + double progress = inprogress; + Polylines out_polylines; + + // generate template patterns; + Pointfs one_cycle_points = generate_one_cycle(progress, grid_size); + + Polyline one_cycle; + one_cycle.points.reserve(one_cycle_points.size()); + for (size_t i = 0; i < one_cycle_points.size(); i++) one_cycle.points.push_back(Point(one_cycle_points[i])); + + // swap if vertical + if (direction < 0) { + width = height; + height = inwidth; + } + + // replicate polylines; + Polylines odd_polylines; + Polyline odd_poly; + int num_of_cycle = width / grid_size + 2; + odd_poly.points.reserve(num_of_cycle * one_cycle.size()); + + // replicate to odd line + Point translate = Point(0, 0); + for (size_t i = 0; i < num_of_cycle; i++) { + Polyline odd_points; + odd_points = Polyline(one_cycle); + odd_points.translate(Point(i * grid_size, 0.0)); + odd_poly.points.insert(odd_poly.points.end(), odd_points.begin(), odd_points.end()); + } + + // fill the height + int num_of_lines = height / grid_size + 2; + odd_polylines.reserve(num_of_lines * odd_poly.size()); + for (size_t i = 0; i < num_of_lines; i++) { + Polyline poly = odd_poly; + poly.translate(Point(0.0, grid_size * i)); + odd_polylines.push_back(poly); + } + // save to output + out_polylines.insert(out_polylines.end(), odd_polylines.begin(), odd_polylines.end()); + + // replicate to even lines + Polylines even_polylines; + even_polylines.reserve(odd_polylines.size()); + for (size_t i = 0; i < odd_polylines.size(); i++) { + Polyline even = odd_poly; + even.translate(Point(-0.5 * grid_size, (i + 0.5) * grid_size)); + even_polylines.push_back(even); + } + + // save for output + out_polylines.insert(out_polylines.end(), even_polylines.begin(), even_polylines.end()); + + // change to vertical if need + if (direction < 0) { + // swap xy, see if we need better performance method + for (Polyline &poly : out_polylines) { + for (Point &p : poly) { std::swap(p.x(), p.y()); } + } + } + + return out_polylines; +} + +static Polylines generate_repeat_pattern(int direction, coordf_t grid_size, coordf_t inwidth, coordf_t inheight) +{ + coordf_t width = inwidth; + coordf_t height = inheight; + Polylines out_polylines; + + // swap if vertical + if (direction < 0) { + width = height; + height = inwidth; + } + + int num_of_lines = height / grid_size + 1; + out_polylines.reserve(num_of_lines); + + for (int i = 0; i < num_of_lines; i++) { + Polyline poly; + poly.points.reserve(2); + poly.append(Point(coordf_t(0), coordf_t(grid_size * i))); + poly.append(Point(width, coordf_t(grid_size * i))); + out_polylines.push_back(poly); + } + + // change to vertical if needed + if (direction < 0) { + // swap xy + for (Polyline &poly : out_polylines) { + for (Point &p : poly) { std::swap(p.x(), p.y()); } + } + } + + return out_polylines; +} + +// it makes the real patterns that overlap the bounding box +// repeat_ratio define the ratio between the height of repeat pattern and grid +static Polylines generate_infill_layers(coordf_t z_height, double repeat_ratio, coordf_t grid_size, coordf_t width, coordf_t height) +{ + Polylines result; + coordf_t trans_layer_size = grid_size * 0.4; // upper. + coordf_t repeat_layer_size = grid_size * repeat_ratio; // lower. + z_height += repeat_layer_size / 2 + trans_layer_size; // offset to improve first few layer strength and reduce the risk of warpping. + coordf_t period = trans_layer_size + repeat_layer_size; + coordf_t remains = z_height - std::floor(z_height / period) * period; + coordf_t trans_z = remains - repeat_layer_size; // put repeat layer first. + coordf_t repeat_z = remains; + + int phase = fmod(z_height, period * 2) - (period - 1); // add epsilon + int direction = phase <= 0 ? -1 : 1; + + // this is a repeat layer + if (trans_z < 0) { + result = generate_repeat_pattern(direction, grid_size, width, height); + } + // this is a transform layer + else { + double progress = fmod(trans_z, trans_layer_size) / trans_layer_size; + + // split the progress to forward and backward, with a opposite direction. + if (progress < 0.5) + result = generate_transform_pattern((progress + 0.1) * 2, direction, grid_size, width, height); // increase overlapping. + else + result = generate_transform_pattern((1.1 - progress) * 2, -1 * direction, grid_size, width, height); + } + + return result; +} + +void FillCrossHatch ::_fill_surface_single( + const FillParams ¶ms, unsigned int thickness_layers, const std::pair &direction, ExPolygon expolygon, Polylines &polylines_out) +{ + // rotate angle + auto infill_angle = float(this->angle); + if (std::abs(infill_angle) >= EPSILON) expolygon.rotate(-infill_angle); + + // get the rotated bounding box + BoundingBox bb = expolygon.contour.bounding_box(); + + // linespace modifier + coord_t line_spacing = coord_t(scale_(this->spacing) / params.density); + + // reduce density + if (params.density < 0.999) line_spacing *= 1.08; + + bb.merge(align_to_grid(bb.min, Point(line_spacing * 4, line_spacing * 4))); + + // generate pattern + //Orca: optimize the cross-hatch infill pattern to improve strength when low infill density is used. + double repeat_ratio = 1.0; + if (params.density < 0.3) + repeat_ratio = std::clamp(1.0 - std::exp(-5 * params.density), 0.2, 1.0); + + Polylines polylines = generate_infill_layers(scale_(this->z), repeat_ratio, line_spacing, bb.size()(0), bb.size()(1)); + + // shift the pattern to the actual space + for (Polyline &pl : polylines) { pl.translate(bb.min); } + + polylines = intersection_pl(polylines, to_polygons(expolygon)); + + // --- remove small remains from gyroid infill + if (!polylines.empty()) { + // Remove very small bits, but be careful to not remove infill lines connecting thin walls! + // The infill perimeter lines should be separated by around a single infill line width. + const double minlength = scale_(0.8 * this->spacing); + polylines.erase(std::remove_if(polylines.begin(), polylines.end(), [minlength](const Polyline &pl) + { return pl.length() < minlength; }), polylines.end()); + } + + if (!polylines.empty()) { + int infill_start_idx = polylines_out.size(); // only rotate what belongs to us. + // connect lines + if (params.dont_connect() || polylines.size() <= 1) + append(polylines_out, chain_polylines(std::move(polylines))); + else + this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params); + + // rotate back + if (std::abs(infill_angle) >= EPSILON) { + for (auto it = polylines_out.begin() + infill_start_idx; it != polylines_out.end(); ++it) it->rotate(infill_angle); + } + } +} + +} // namespace Slic3r \ No newline at end of file diff --git a/src/libslic3r/Fill/FillCrossHatch.hpp b/src/libslic3r/Fill/FillCrossHatch.hpp new file mode 100644 index 0000000000..859d5bd8b5 --- /dev/null +++ b/src/libslic3r/Fill/FillCrossHatch.hpp @@ -0,0 +1,29 @@ +#ifndef slic3r_FillCrossHatch_hpp_ +#define slic3r_FillCrossHatch_hpp_ + +#include + +#include "../libslic3r.h" + +#include "FillBase.hpp" + +namespace Slic3r { + +class FillCrossHatch : public Fill +{ +public: + Fill *clone() const override { return new FillCrossHatch(*this); }; + ~FillCrossHatch() override {} + +protected: + void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon expolygon, + Polylines &polylines_out) override; +}; + +} // namespace Slic3r + +#endif // slic3r_FillCrossHatch_hpp_ diff --git a/src/libslic3r/Fill/Lightning/Generator.cpp b/src/libslic3r/Fill/Lightning/Generator.cpp index 309b576e01..bf1142ee45 100644 --- a/src/libslic3r/Fill/Lightning/Generator.cpp +++ b/src/libslic3r/Fill/Lightning/Generator.cpp @@ -177,6 +177,7 @@ const Layer& Generator::getTreesForLayer(const size_t& layer_id) const void Generator::generateTrees(const PrintObject &print_object, const std::function &throw_on_cancel_callback) { + const auto _locator_cell_size = locator_cell_size(); m_lightning_layers.resize(print_object.layers().size()); bboxs.resize(print_object.layers().size()); std::vector infill_outlines(print_object.layers().size(), Polygons()); @@ -193,7 +194,7 @@ void Generator::generateTrees(const PrintObject &print_object, const std::functi // For various operations its beneficial to quickly locate nearby features on the polygon: const size_t top_layer_id = print_object.layers().size() - 1; EdgeGrid::Grid outlines_locator(get_extents(infill_outlines[top_layer_id]).inflated(SCALED_EPSILON)); - outlines_locator.create(infill_outlines[top_layer_id], locator_cell_size); + outlines_locator.create(infill_outlines[top_layer_id], _locator_cell_size); // For-each layer from top to bottom: for (int layer_id = int(top_layer_id); layer_id >= 0; layer_id--) { @@ -223,11 +224,11 @@ void Generator::generateTrees(const PrintObject &print_object, const std::functi below_outlines_bbox.merge(get_extents(current_lightning_layer.tree_roots).inflated(SCALED_EPSILON)); outlines_locator.set_bbox(below_outlines_bbox); - outlines_locator.create(below_outlines, locator_cell_size); + outlines_locator.create(below_outlines, _locator_cell_size); std::vector& lower_trees = m_lightning_layers[layer_id - 1].tree_roots; for (auto& tree : current_lightning_layer.tree_roots) - tree->propagateToNextLayer(lower_trees, below_outlines, outlines_locator, m_prune_length, m_straightening_max_distance, locator_cell_size / 2); + tree->propagateToNextLayer(lower_trees, below_outlines, outlines_locator, m_prune_length, m_straightening_max_distance, _locator_cell_size / 2); } } @@ -238,10 +239,11 @@ void Generator::generateTreesforSupport(std::vector& contours, const s m_lightning_layers.resize(contours.size()); bboxs.resize(contours.size()); + const auto _locator_cell_size = locator_cell_size(); // For various operations its beneficial to quickly locate nearby features on the polygon: const size_t top_layer_id = contours.size() - 1; EdgeGrid::Grid outlines_locator(get_extents(contours[top_layer_id]).inflated(SCALED_EPSILON)); - outlines_locator.create(contours[top_layer_id], locator_cell_size); + outlines_locator.create(contours[top_layer_id], _locator_cell_size); // For-each layer from top to bottom: for (int layer_id = int(top_layer_id); layer_id >= 0; layer_id--) { @@ -271,11 +273,11 @@ void Generator::generateTreesforSupport(std::vector& contours, const s below_outlines_bbox.merge(get_extents(current_lightning_layer.tree_roots).inflated(SCALED_EPSILON)); outlines_locator.set_bbox(below_outlines_bbox); - outlines_locator.create(below_outlines, locator_cell_size); + outlines_locator.create(below_outlines, _locator_cell_size); std::vector& lower_trees = m_lightning_layers[layer_id - 1].tree_roots; for (auto& tree : current_lightning_layer.tree_roots) - tree->propagateToNextLayer(lower_trees, below_outlines, outlines_locator, m_prune_length, m_straightening_max_distance, locator_cell_size / 2); + tree->propagateToNextLayer(lower_trees, below_outlines, outlines_locator, m_prune_length, m_straightening_max_distance, _locator_cell_size / 2); } } diff --git a/src/libslic3r/Fill/Lightning/Layer.cpp b/src/libslic3r/Fill/Lightning/Layer.cpp index 354623e519..4a30a95f45 100644 --- a/src/libslic3r/Fill/Lightning/Layer.cpp +++ b/src/libslic3r/Fill/Lightning/Layer.cpp @@ -29,7 +29,7 @@ Point GroundingLocation::p() const inline static Point to_grid_point(const Point &point, const BoundingBox &bbox) { - return (point - bbox.min) / locator_cell_size; + return (point - bbox.min) / locator_cell_size(); } void Layer::fillLocator(SparseNodeGrid &tree_node_locator, const BoundingBox& current_outlines_bbox) @@ -150,7 +150,7 @@ GroundingLocation Layer::getBestGroundingLocation coord_t current_dist = getWeightedDistance(node_location, unsupported_location); if (current_dist >= wall_supporting_radius) { // Only reconnect tree roots to other trees if they are not already close to the outlines. const coord_t search_radius = std::min(current_dist, within_dist); - BoundingBox region(unsupported_location - Point(search_radius, search_radius), unsupported_location + Point(search_radius + locator_cell_size, search_radius + locator_cell_size)); + BoundingBox region(unsupported_location - Point(search_radius, search_radius), unsupported_location + Point(search_radius + locator_cell_size(), search_radius + locator_cell_size())); region.min = to_grid_point(region.min, current_outlines_bbox); region.max = to_grid_point(region.max, current_outlines_bbox); diff --git a/src/libslic3r/Fill/Lightning/TreeNode.hpp b/src/libslic3r/Fill/Lightning/TreeNode.hpp index 8e0c029a95..14aa5e4888 100644 --- a/src/libslic3r/Fill/Lightning/TreeNode.hpp +++ b/src/libslic3r/Fill/Lightning/TreeNode.hpp @@ -18,7 +18,7 @@ namespace Slic3r::FillLightning { -constexpr auto locator_cell_size = scaled(4.); +inline coord_t locator_cell_size() { return scaled(4.); } class Node; diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 7feed1c724..894de0549b 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -413,7 +413,7 @@ ModelVolumeType type_from_string(const std::string &s) struct Geometry { std::vector vertices; - std::vector triangles; + std::vector triangles; std::vector custom_supports; std::vector custom_seam; std::vector mmu_segmentation; @@ -2107,7 +2107,7 @@ ModelVolumeType type_from_string(const std::string &s) { int min_id = its.indices.front()[0]; int max_id = min_id; - for (const Vec3i& face : its.indices) { + for (const Vec3i32& face : its.indices) { for (const int tri_id : face) { if (tri_id < 0 || tri_id >= int(geometry.vertices.size())) { add_error("Found invalid vertex id"); @@ -2120,7 +2120,7 @@ ModelVolumeType type_from_string(const std::string &s) its.vertices.assign(geometry.vertices.begin() + min_id, geometry.vertices.begin() + max_id + 1); // rebase indices to the current vertices list - for (Vec3i& face : its.indices) + for (Vec3i32& face : its.indices) for (int& tri_id : face) tri_id -= min_id; } @@ -2786,7 +2786,7 @@ ModelVolumeType type_from_string(const std::string &s) for (int i = 0; i < int(its.indices.size()); ++ i) { { - const Vec3i &idx = its.indices[i]; + const Vec3i32 &idx = its.indices[i]; char *ptr = buf; boost::spirit::karma::generate(ptr, boost::spirit::lit(" <") << TRIANGLE_TAG << " v1=\"" << boost::spirit::int_ << diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp index 1e0b6687d9..d13faa7a1f 100644 --- a/src/libslic3r/Format/AMF.cpp +++ b/src/libslic3r/Format/AMF.cpp @@ -248,7 +248,7 @@ struct AMFParserContext // Current volume allocated for an amf/object/mesh/volume subtree. ModelVolume *m_volume { nullptr }; // Faces collected for the current m_volume. - std::vector m_volume_facets; + std::vector m_volume_facets; // Transformation matrix of a volume mesh from its coordinate system to Object's coordinate system. Transform3d m_volume_transform; // Current material allocated for an amf/metadata subtree. @@ -632,7 +632,7 @@ void AMFParserContext::endElement(const char * /* name */) // Verify validity of face indices, find the vertex span. int min_id = m_volume_facets.front()[0]; int max_id = min_id; - for (const Vec3i& face : m_volume_facets) { + for (const Vec3i32& face : m_volume_facets) { for (const int tri_id : face) { if (tri_id < 0 || tri_id >= int(m_object_vertices.size())) { this->stop("Found a malformed triangle mesh"); @@ -644,8 +644,8 @@ void AMFParserContext::endElement(const char * /* name */) } // rebase indices to the current vertices list - for (Vec3i &face : m_volume_facets) - face -= Vec3i(min_id, min_id, min_id); + for (Vec3i32 &face : m_volume_facets) + face -= Vec3i32(min_id, min_id, min_id); indexed_triangle_set its { std::move(m_volume_facets), { m_object_vertices.begin() + min_id, m_object_vertices.begin() + max_id + 1 } }; its_compactify_vertices(its); diff --git a/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index 4e621e5f78..abaae3692b 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -21,19 +21,51 @@ namespace Slic3r { -bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) +bool load_obj(const char *path, TriangleMesh *meshptr, ObjInfo& obj_info, std::string &message) { if (meshptr == nullptr) return false; - // Parse the OBJ file. ObjParser::ObjData data; + ObjParser::MtlData mtl_data; if (! ObjParser::objparse(path, data)) { BOOST_LOG_TRIVIAL(error) << "load_obj: failed to parse " << path; message = _L("load_obj: failed to parse"); return false; } - + bool exist_mtl = false; + if (data.mtllibs.size() > 0) { // read mtl + for (auto mtl_name : data.mtllibs) { + if (mtl_name.size() == 0){ + continue; + } + exist_mtl = true; + bool mtl_name_is_path = false; + boost::filesystem::path mtl_abs_path(mtl_name); + if (boost::filesystem::exists(mtl_abs_path)) { + mtl_name_is_path = true; + } + boost::filesystem::path mtl_path; + if (!mtl_name_is_path) { + boost::filesystem::path full_path(path); + std::string dir = full_path.parent_path().string(); + auto mtl_file = dir + "/" + mtl_name; + boost::filesystem::path temp_mtl_path(mtl_file); + mtl_path = temp_mtl_path; + } + auto _mtl_path = mtl_name_is_path ? mtl_abs_path.string().c_str() : mtl_path.string().c_str(); + if (boost::filesystem::exists(mtl_name_is_path ? mtl_abs_path : mtl_path)) { + if (!ObjParser::mtlparse(_mtl_path, mtl_data)) { + BOOST_LOG_TRIVIAL(error) << "load_obj:load_mtl: failed to parse " << _mtl_path; + message = _L("load mtl in obj: failed to parse"); + return false; + } + } + else { + BOOST_LOG_TRIVIAL(error) << "load_obj: failed to load mtl_path:" << _mtl_path; + } + } + } // Count the faces and verify, that all faces are triangular. size_t num_faces = 0; size_t num_quads = 0; @@ -59,17 +91,27 @@ bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) i = j; } } - // Convert ObjData into indexed triangle set. indexed_triangle_set its; - size_t num_vertices = data.coordinates.size() / 4; + size_t num_vertices = data.coordinates.size() / OBJ_VERTEX_LENGTH; its.vertices.reserve(num_vertices); its.indices.reserve(num_faces + num_quads); - for (size_t i = 0; i < num_vertices; ++ i) { - size_t j = i << 2; - its.vertices.emplace_back(data.coordinates[j], data.coordinates[j + 1], data.coordinates[j + 2]); + if (exist_mtl) { + obj_info.is_single_mtl = data.usemtls.size() == 1 && mtl_data.new_mtl_unmap.size() == 1; + obj_info.face_colors.reserve(num_faces + num_quads); } - int indices[4]; + bool has_color = data.has_vertex_color; + for (size_t i = 0; i < num_vertices; ++ i) { + size_t j = i * OBJ_VERTEX_LENGTH; + its.vertices.emplace_back(data.coordinates[j], data.coordinates[j + 1], data.coordinates[j + 2]); + if (data.has_vertex_color) { + RGBA color{std::clamp(data.coordinates[j + 3], 0.f, 1.f), std::clamp(data.coordinates[j + 4], 0.f, 1.f), std::clamp(data.coordinates[j + 5], 0.f, 1.f), + std::clamp(data.coordinates[j + 6], 0.f, 1.f)}; + obj_info.vertex_colors.emplace_back(color); + } + } + int indices[ONE_FACE_SIZE]; + int uvs[ONE_FACE_SIZE]; for (size_t i = 0; i < data.vertices.size();) if (data.vertices[i].coordIdx == -1) ++ i; @@ -79,20 +121,79 @@ bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) if (const ObjParser::ObjVertex &vertex = data.vertices[i ++]; vertex.coordIdx == -1) { break; } else { - assert(cnt < 4); + assert(cnt < OBJ_VERTEX_LENGTH); if (vertex.coordIdx < 0 || vertex.coordIdx >= int(its.vertices.size())) { BOOST_LOG_TRIVIAL(error) << "load_obj: failed to parse " << path << ". The file contains invalid vertex index."; message = _L("The file contains invalid vertex index."); return false; } - indices[cnt ++] = vertex.coordIdx; + indices[cnt] = vertex.coordIdx; + uvs[cnt] = vertex.textureCoordIdx; + cnt++; } if (cnt) { assert(cnt == 3 || cnt == 4); // Insert one or two faces (triangulate a quad). its.indices.emplace_back(indices[0], indices[1], indices[2]); - if (cnt == 4) + int face_index =its.indices.size() - 1; + RGBA face_color; + auto set_face_color = [&uvs, &data, &mtl_data, &obj_info, &face_color](int face_index, const std::string mtl_name) { + if (mtl_data.new_mtl_unmap.find(mtl_name) != mtl_data.new_mtl_unmap.end()) { + bool is_merge_ka_kd = true; + for (size_t n = 0; n < 3; n++) { + if (float(mtl_data.new_mtl_unmap[mtl_name]->Ka[n] + mtl_data.new_mtl_unmap[mtl_name]->Kd[n]) > 1.0) { + is_merge_ka_kd=false; + break; + } + } + for (size_t n = 0; n < 3; n++) { + if (is_merge_ka_kd) { + face_color[n] = std::clamp(float(mtl_data.new_mtl_unmap[mtl_name]->Ka[n] + mtl_data.new_mtl_unmap[mtl_name]->Kd[n]), 0.f, 1.f); + } + else { + face_color[n] = std::clamp(float(mtl_data.new_mtl_unmap[mtl_name]->Kd[n]), 0.f, 1.f); + } + } + face_color[3] = mtl_data.new_mtl_unmap[mtl_name]->Tr; // alpha + if (mtl_data.new_mtl_unmap[mtl_name]->map_Kd.size() > 0) { + auto png_name = mtl_data.new_mtl_unmap[mtl_name]->map_Kd; + obj_info.has_uv_png = true; + if (obj_info.pngs.find(png_name) == obj_info.pngs.end()) { obj_info.pngs[png_name] = false; } + obj_info.uv_map_pngs[face_index] = png_name; + } + if (data.textureCoordinates.size() > 0) { + Vec2f uv0(data.textureCoordinates[uvs[0] * 2], data.textureCoordinates[uvs[0] * 2 + 1]); + Vec2f uv1(data.textureCoordinates[uvs[1] * 2], data.textureCoordinates[uvs[1] * 2 + 1]); + Vec2f uv2(data.textureCoordinates[uvs[2] * 2], data.textureCoordinates[uvs[2] * 2 + 1]); + std::array uv_array{uv0, uv1, uv2}; + obj_info.uvs.emplace_back(uv_array); + } + obj_info.face_colors.emplace_back(face_color); + } + }; + auto set_face_color_by_mtl = [&data, &set_face_color](int face_index) { + if (data.usemtls.size() == 1) { + set_face_color(face_index, data.usemtls[0].name); + } else { + for (size_t k = 0; k < data.usemtls.size(); k++) { + auto mtl = data.usemtls[k]; + if (face_index >= mtl.face_start && face_index <= mtl.face_end) { + set_face_color(face_index, data.usemtls[k].name); + break; + } + } + } + }; + if (exist_mtl) { + set_face_color_by_mtl(face_index); + } + if (cnt == 4) { its.indices.emplace_back(indices[0], indices[2], indices[3]); + int face_index = its.indices.size() - 1; + if (exist_mtl) { + set_face_color_by_mtl(face_index); + } + } } } @@ -107,12 +208,12 @@ bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) return true; } -bool load_obj(const char *path, Model *model, std::string &message, const char *object_name_in) +bool load_obj(const char *path, Model *model, ObjInfo& obj_info, std::string &message, const char *object_name_in) { TriangleMesh mesh; - - bool ret = load_obj(path, &mesh, message); - + + bool ret = load_obj(path, &mesh, obj_info, message); + if (ret) { std::string object_name; if (object_name_in == nullptr) { @@ -120,10 +221,9 @@ bool load_obj(const char *path, Model *model, std::string &message, const char * object_name.assign((last_slash == nullptr) ? path : last_slash + 1); } else object_name.assign(object_name_in); - model->add_object(object_name.c_str(), path, std::move(mesh)); } - + return ret; } diff --git a/src/libslic3r/Format/OBJ.hpp b/src/libslic3r/Format/OBJ.hpp index e9a3817e43..9b618bd27f 100644 --- a/src/libslic3r/Format/OBJ.hpp +++ b/src/libslic3r/Format/OBJ.hpp @@ -1,15 +1,27 @@ #ifndef slic3r_Format_OBJ_hpp_ #define slic3r_Format_OBJ_hpp_ - +#include "libslic3r/Color.hpp" +#include namespace Slic3r { class TriangleMesh; class Model; class ModelObject; - +typedef std::function &input_colors, bool is_single_color, std::vector &filament_ids, unsigned char &first_extruder_id)> ObjImportColorFn; // Load an OBJ file into a provided model. -extern bool load_obj(const char *path, TriangleMesh *mesh, std::string &message); -extern bool load_obj(const char *path, Model *model, std::string &message, const char *object_name = nullptr); +struct ObjInfo { + std::vector vertex_colors; + std::vector face_colors; + bool is_single_mtl{false}; + std::vector> uvs; + std::string obj_dircetory; + std::map pngs; + std::unordered_map uv_map_pngs; + bool has_uv_png{false}; + +}; +extern bool load_obj(const char *path, TriangleMesh *mesh, ObjInfo &vertex_colors, std::string &message); +extern bool load_obj(const char *path, Model *model, ObjInfo &vertex_colors, std::string &message, const char *object_name = nullptr); extern bool store_obj(const char *path, TriangleMesh *mesh); extern bool store_obj(const char *path, ModelObject *model); diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index 91aa7bbfcc..3973ab27af 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Tomáš Mészáros @tamasmeszaros, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "SL1.hpp" #include "GCode/ThumbnailData.hpp" #include "libslic3r/Time.hpp" @@ -303,7 +299,7 @@ ConfigSubstitutions import_sla_archive(const std::string &zipfname, DynamicPrint // function return if the archive did not contain any profile. ConfigSubstitutions import_sla_archive( const std::string & zipfname, - Vec2i windowsize, + Vec2i32 windowsize, indexed_triangle_set & out, DynamicPrintConfig & profile_out, std::function progr) diff --git a/src/libslic3r/Format/SL1.hpp b/src/libslic3r/Format/SL1.hpp index 46a82e1b85..6fb4405c90 100644 --- a/src/libslic3r/Format/SL1.hpp +++ b/src/libslic3r/Format/SL1.hpp @@ -42,14 +42,14 @@ ConfigSubstitutions import_sla_archive(const std::string &zipfname, DynamicPrint ConfigSubstitutions import_sla_archive( const std::string & zipfname, - Vec2i windowsize, + Vec2i32 windowsize, indexed_triangle_set & out, DynamicPrintConfig & profile, std::function progr = [](int) { return true; }); inline ConfigSubstitutions import_sla_archive( const std::string & zipfname, - Vec2i windowsize, + Vec2i32 windowsize, indexed_triangle_set & out, std::function progr = [](int) { return true; }) { diff --git a/src/libslic3r/Format/STL.cpp b/src/libslic3r/Format/STL.cpp index 133a7a5056..1888f5cd18 100644 --- a/src/libslic3r/Format/STL.cpp +++ b/src/libslic3r/Format/STL.cpp @@ -14,13 +14,13 @@ namespace Slic3r { -bool load_stl(const char *path, Model *model, const char *object_name_in, ImportstlProgressFn stlFn) +bool load_stl(const char *path, Model *model, const char *object_name_in, ImportstlProgressFn stlFn, int custom_header_length) { TriangleMesh mesh; std::string design_id; - if (! mesh.ReadSTLFile(path, true, stlFn)) { -// die "Failed to open $file\n" if !-e $path; + if (!mesh.ReadSTLFile(path, true, stlFn, custom_header_length)) { + // die "Failed to open $file\n" if !-e $path; return false; } if (mesh.empty()) { diff --git a/src/libslic3r/Format/STL.hpp b/src/libslic3r/Format/STL.hpp index 5f2f838bfe..e545e1c6d0 100644 --- a/src/libslic3r/Format/STL.hpp +++ b/src/libslic3r/Format/STL.hpp @@ -10,7 +10,7 @@ class TriangleMesh; class ModelObject; // Load an STL file into a provided model. -extern bool load_stl(const char *path, Model *model, const char *object_name = nullptr, ImportstlProgressFn stlFn = nullptr); +extern bool load_stl(const char *path, Model *model, const char *object_name = nullptr, ImportstlProgressFn stlFn = nullptr, int custom_header_length = 80); extern bool store_stl(const char *path, TriangleMesh *mesh, bool binary); extern bool store_stl(const char *path, ModelObject *model_object, bool binary); diff --git a/src/libslic3r/Format/ZipperArchiveImport.cpp b/src/libslic3r/Format/ZipperArchiveImport.cpp new file mode 100644 index 0000000000..657e420bbc --- /dev/null +++ b/src/libslic3r/Format/ZipperArchiveImport.cpp @@ -0,0 +1,143 @@ +#include "ZipperArchiveImport.hpp" + +#include "libslic3r/miniz_extension.hpp" +#include "libslic3r/Exception.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include +#include +#include + +namespace Slic3r { + +namespace { + +// Read an ini file into boost property tree +boost::property_tree::ptree read_ini(const mz_zip_archive_file_stat &entry, + MZ_Archive &zip) +{ + std::string buf(size_t(entry.m_uncomp_size), '\0'); + + if (!mz_zip_reader_extract_to_mem(&zip.arch, entry.m_file_index, + buf.data(), buf.size(), 0)) + throw Slic3r::FileIOError(zip.get_errorstr()); + + boost::property_tree::ptree tree; + std::stringstream ss(buf); + boost::property_tree::read_ini(ss, tree); + return tree; +} + +// Read an arbitrary file into EntryBuffer +EntryBuffer read_entry(const mz_zip_archive_file_stat &entry, + MZ_Archive &zip, + const std::string &name) +{ + std::vector buf(entry.m_uncomp_size); + + if (!mz_zip_reader_extract_to_mem(&zip.arch, entry.m_file_index, + buf.data(), buf.size(), 0)) + throw Slic3r::FileIOError(zip.get_errorstr()); + + return {std::move(buf), (name.empty() ? entry.m_filename : name)}; +} + +} // namespace + +ZipperArchive read_zipper_archive(const std::string &zipfname, + const std::vector &includes, + const std::vector &excludes) +{ + ZipperArchive arch; + + // Little RAII + struct Arch : public MZ_Archive + { + Arch(const std::string &fname) + { + if (!open_zip_reader(&arch, fname)) + throw Slic3r::FileIOError(get_errorstr()); + } + + ~Arch() { close_zip_reader(&arch); } + } zip(zipfname); + + mz_uint num_entries = mz_zip_reader_get_num_files(&zip.arch); + + for (mz_uint i = 0; i < num_entries; ++i) { + mz_zip_archive_file_stat entry; + + if (mz_zip_reader_file_stat(&zip.arch, i, &entry)) { + std::string name = entry.m_filename; + boost::algorithm::to_lower(name); + + if (!std::any_of(includes.begin(), includes.end(), + [&name](const std::string &incl) { + return boost::algorithm::contains(name, incl); + })) + continue; + + if (std::any_of(excludes.begin(), excludes.end(), + [&name](const std::string &excl) { + return boost::algorithm::contains(name, excl); + })) + continue; + + if (name == CONFIG_FNAME) { + arch.config = read_ini(entry, zip); + continue; + } + + if (name == PROFILE_FNAME) { + arch.profile = read_ini(entry, zip); + continue; + } + + auto it = std::lower_bound( + arch.entries.begin(), arch.entries.end(), + EntryBuffer{{}, name}, + [](const EntryBuffer &r1, const EntryBuffer &r2) { + return std::less()(r1.fname, r2.fname); + }); + + arch.entries.insert(it, read_entry(entry, zip, name)); + } + } + + return arch; +} + +std::pair extract_profile( + const ZipperArchive &arch, DynamicPrintConfig &profile_out) +{ + DynamicPrintConfig profile_in, profile_use; + ConfigSubstitutions config_substitutions = + profile_in.load(arch.profile, + ForwardCompatibilitySubstitutionRule::Enable); + + if (profile_in.empty()) { // missing profile... do guess work + // try to recover the layer height from the config.ini which was + // present in all versions of sl1 files. + if (auto lh_opt = arch.config.find("layerHeight"); + lh_opt != arch.config.not_found()) { + auto lh_str = lh_opt->second.data(); + + size_t pos = 0; + double lh = string_to_double_decimal_point(lh_str, &pos); + if (pos) { // TODO: verify that pos is 0 when parsing fails + profile_out.set("layer_height", lh); + profile_out.set("initial_layer_height", lh); + } + } + } + + // If the archive contains an empty profile, use the one that was passed + // as output argument then replace it with the readed profile to report + // that it was empty. + profile_use = profile_in.empty() ? profile_out : profile_in; + profile_out = profile_in; + + return {profile_use, std::move(config_substitutions)}; +} + +} // namespace Slic3r diff --git a/src/libslic3r/Format/ZipperArchiveImport.hpp b/src/libslic3r/Format/ZipperArchiveImport.hpp new file mode 100644 index 0000000000..adddcacd40 --- /dev/null +++ b/src/libslic3r/Format/ZipperArchiveImport.hpp @@ -0,0 +1,54 @@ +#ifndef ZIPPERARCHIVEIMPORT_HPP +#define ZIPPERARCHIVEIMPORT_HPP + +#include +#include +#include + +#include + +#include "libslic3r/PrintConfig.hpp" + +namespace Slic3r { + +// Buffer for arbitraryfiles inside a zipper archive. +struct EntryBuffer +{ + std::vector buf; + std::string fname; +}; + +// Structure holding the data read from a zipper archive. +struct ZipperArchive +{ + boost::property_tree::ptree profile, config; + std::vector entries; +}; + +// Names of the files containing metadata inside the archive. +const constexpr char *CONFIG_FNAME = "config.ini"; +const constexpr char *PROFILE_FNAME = "prusaslicer.ini"; + +// Read an archive that was written using the Zipper class. +// The includes parameter is a set of file name substrings that the entries +// must contain to be included in ZipperArchive. +// The excludes parameter may contain substrings that filenames must not +// contain. +// Every file in the archive is read into ZipperArchive::entries +// except the files CONFIG_FNAME, and PROFILE_FNAME which are read into +// ZipperArchive::config and ZipperArchive::profile structures. +ZipperArchive read_zipper_archive(const std::string &zipfname, + const std::vector &includes, + const std::vector &excludes); + +// Extract the print profile form the archive into 'out'. +// Returns a profile that has correct parameters to use for model reconstruction +// even if the needed parameters were not fully found in the archive's metadata. +// The inout argument shall be a usable fallback profile if the archive +// has totally corrupted metadata. +std::pair extract_profile( + const ZipperArchive &arch, DynamicPrintConfig &inout); + +} // namespace Slic3r + +#endif // ZIPPERARCHIVEIMPORT_HPP diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index a451c08492..7df4fbca49 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) 2020 Henner Zeller -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "../libslic3r.h" #include "../Exception.hpp" #include "../Model.hpp" @@ -213,6 +208,7 @@ static constexpr const char* FILAMENT_TYPE_TAG = "type"; static constexpr const char *FILAMENT_COLOR_TAG = "color"; static constexpr const char *FILAMENT_USED_M_TAG = "used_m"; static constexpr const char *FILAMENT_USED_G_TAG = "used_g"; +static constexpr const char *FILAMENT_TRAY_INFO_ID_TAG = "tray_info_idx"; static constexpr const char* CONFIG_TAG = "config"; @@ -291,9 +287,12 @@ static constexpr const char* LOCK_ATTR = "locked"; static constexpr const char* BED_TYPE_ATTR = "bed_type"; static constexpr const char* PRINT_SEQUENCE_ATTR = "print_sequence"; static constexpr const char* FIRST_LAYER_PRINT_SEQUENCE_ATTR = "first_layer_print_sequence"; +static constexpr const char* OTHER_LAYERS_PRINT_SEQUENCE_ATTR = "other_layers_print_sequence"; +static constexpr const char* OTHER_LAYERS_PRINT_SEQUENCE_NUMS_ATTR = "other_layers_print_sequence_nums"; static constexpr const char* SPIRAL_VASE_MODE = "spiral_mode"; static constexpr const char* GCODE_FILE_ATTR = "gcode_file"; static constexpr const char* THUMBNAIL_FILE_ATTR = "thumbnail_file"; +static constexpr const char* NO_LIGHT_THUMBNAIL_FILE_ATTR = "thumbnail_no_light_file"; static constexpr const char* TOP_FILE_ATTR = "top_file"; static constexpr const char* PICK_FILE_ATTR = "pick_file"; static constexpr const char* PATTERN_FILE_ATTR = "pattern_file"; @@ -584,21 +583,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return ret; }; - for (auto it = ps.volumes_per_extruder.begin(); it != ps.volumes_per_extruder.end(); it++) { + for (auto it = ps.total_volumes_per_extruder.begin(); it != ps.total_volumes_per_extruder.end(); it++) { double volume = it->second; auto [used_filament_m, used_filament_g] = get_used_filament_from_volume(volume, it->first); FilamentInfo info; info.id = it->first; - if (ps.flush_per_filament.find(it->first) != ps.flush_per_filament.end()) { - volume = ps.flush_per_filament.at(it->first); - auto [flushed_filament_m, flushed_filament_g] = get_used_filament_from_volume(volume, it->first); - info.used_m = used_filament_m + flushed_filament_m; - info.used_g = used_filament_g + flushed_filament_g; - } else { - info.used_m = used_filament_m; - info.used_g = used_filament_g; - } + info.used_g = used_filament_g; + info.used_m = used_filament_m; slice_filaments_info.push_back(info); } @@ -662,7 +654,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) struct Geometry { std::vector vertices; - std::vector triangles; + std::vector triangles; std::vector custom_supports; std::vector custom_seam; std::vector mmu_segmentation; @@ -1491,6 +1483,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) plate->is_label_object_enabled = it->second->is_label_object_enabled; plate->skipped_objects = it->second->skipped_objects; plate->slice_filaments_info = it->second->slice_filaments_info; + plate->printer_model_id = it->second->printer_model_id; + plate->nozzle_diameters = it->second->nozzle_diameters; plate->warnings = it->second->warnings; plate->thumbnail_file = it->second->thumbnail_file; if (plate->thumbnail_file.empty()) { @@ -1498,6 +1492,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) boost::algorithm::replace_all(plate->thumbnail_file, ".gcode", ".png"); } //plate->pattern_file = it->second->pattern_file; + plate->no_light_thumbnail_file = it->second->no_light_thumbnail_file; plate->top_file = it->second->top_file; plate->pick_file = it->second->pick_file.empty(); plate->pattern_bbox_file = it->second->pattern_bbox_file.empty(); @@ -1509,7 +1504,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return mz_zip_reader_extract_to_mem(&archive, stat.m_file_index, pixels.data(), pixels.size(), 0); }); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate %1%, thumbnail_file=%2%")%it->first %plate->thumbnail_file; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate %1%, thumbnail_file=%2%, no_light_thumbnail_file=%3%")%it->first %plate->thumbnail_file %plate->no_light_thumbnail_file; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", top_thumbnail_file=%1%, pick_thumbnail_file=%2%")%plate->top_file %plate->pick_file; it++; } @@ -2143,13 +2138,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) plate_data_list[it->first-1]->warnings = it->second->warnings; plate_data_list[it->first-1]->thumbnail_file = (m_load_restore || it->second->thumbnail_file.empty()) ? it->second->thumbnail_file : m_backup_path + "/" + it->second->thumbnail_file; //plate_data_list[it->first-1]->pattern_file = (m_load_restore || it->second->pattern_file.empty()) ? it->second->pattern_file : m_backup_path + "/" + it->second->pattern_file; + plate_data_list[it->first-1]->no_light_thumbnail_file = (m_load_restore || it->second->no_light_thumbnail_file.empty()) ? it->second->no_light_thumbnail_file : m_backup_path + "/" + it->second->no_light_thumbnail_file; plate_data_list[it->first-1]->top_file = (m_load_restore || it->second->top_file.empty()) ? it->second->top_file : m_backup_path + "/" + it->second->top_file; plate_data_list[it->first-1]->pick_file = (m_load_restore || it->second->pick_file.empty()) ? it->second->pick_file : m_backup_path + "/" + it->second->pick_file; plate_data_list[it->first-1]->pattern_bbox_file = (m_load_restore || it->second->pattern_bbox_file.empty()) ? it->second->pattern_bbox_file : m_backup_path + "/" + it->second->pattern_bbox_file; plate_data_list[it->first-1]->config = it->second->config; current_plate_data = plate_data_list[it->first - 1]; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate %1%, thumbnail_file=%2%")%it->first %plate_data_list[it->first-1]->thumbnail_file; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate %1%, thumbnail_file=%2%, no_light_thumbnail_file=%3%")%it->first %plate_data_list[it->first-1]->thumbnail_file %plate_data_list[it->first-1]->no_light_thumbnail_file; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", top_thumbnail_file=%1%, pick_thumbnail_file=%2%")%plate_data_list[it->first-1]->top_file %plate_data_list[it->first-1]->pick_file; it++; @@ -4096,6 +4092,19 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) }; m_curr_plater->config.set_key_value("first_layer_print_sequence", new ConfigOptionInts(get_vector_from_string(value))); } + else if (key == OTHER_LAYERS_PRINT_SEQUENCE_ATTR) { + auto get_vector_from_string = [](const std::string &str) -> std::vector { + std::stringstream stream(str); + int value; + std::vector results; + while (stream >> value) { results.push_back(value); } + return results; + }; + m_curr_plater->config.set_key_value("other_layers_print_sequence", new ConfigOptionInts(get_vector_from_string(value))); + } + else if (key == OTHER_LAYERS_PRINT_SEQUENCE_NUMS_ATTR) { + m_curr_plater->config.set_key_value("other_layers_print_sequence_nums", new ConfigOptionInt(stoi(value))); + } else if (key == SPIRAL_VASE_MODE) { bool spiral_mode = false; std::istringstream(value) >> std::boolalpha >> spiral_mode; @@ -4109,6 +4118,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { m_curr_plater->thumbnail_file = value; } + else if (key == NO_LIGHT_THUMBNAIL_FILE_ATTR) + { + m_curr_plater->no_light_thumbnail_file = value; + } else if (key == TOP_FILE_ATTR) { m_curr_plater->top_file = value; @@ -4185,6 +4198,16 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (m_curr_plater) std::istringstream(value) >> std::boolalpha >> m_curr_plater->is_label_object_enabled; } + else if (key == PRINTER_MODEL_ID_ATTR) + { + if (m_curr_plater) + m_curr_plater->printer_model_id = value; + } + else if (key == NOZZLE_DIAMETERS_ATTR) + { + if (m_curr_plater) + m_curr_plater->nozzle_diameters = value; + } } return true; @@ -4204,13 +4227,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::string color = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_COLOR_TAG); std::string used_m = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_USED_M_TAG); std::string used_g = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_USED_G_TAG); - + std::string filament_id = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_TRAY_INFO_ID_TAG); FilamentInfo filament_info; filament_info.id = atoi(id.c_str()) - 1; filament_info.type = type; filament_info.color = color; filament_info.used_m = atof(used_m.c_str()); filament_info.used_g = atof(used_g.c_str()); + filament_info.filament_id = filament_id; m_curr_plater->slice_filaments_info.push_back(filament_info); } return true; @@ -4586,7 +4610,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // add_error("found no trianges in the object " + std::to_string(sub_object->id)); // return false; //} - for (const Vec3i& face : its.indices) { + for (const Vec3i32& face : its.indices) { for (const int tri_id : face) { if (tri_id < 0 || tri_id >= int(sub_object->geometry.vertices.size())) { add_error("invalid vertex id in object " + std::to_string(sub_object->id)); @@ -4761,7 +4785,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { int min_id = its.indices.front()[0]; int max_id = min_id; - for (const Vec3i& face : its.indices) { + for (const Vec3i32& face : its.indices) { for (const int tri_id : face) { if (tri_id < 0 || tri_id >= int(geometry.vertices.size())) { add_error("Found invalid vertex id"); @@ -4781,7 +4805,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } // rebase indices to the current vertices list - for (Vec3i& face : its.indices) + for (Vec3i32& face : its.indices) for (int& tri_id : face) tri_id -= min_id; } @@ -5453,6 +5477,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector& project_presets, const DynamicPrintConfig* config, const std::vector& thumbnail_data, + const std::vector& no_light_thumbnail_data, const std::vector& top_thumbnail_data, const std::vector& pick_thumbnail_data, Export3mfProgressFn proFn, @@ -5539,7 +5564,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) boost::filesystem::remove(filename + ".tmp", ec); bool result = _save_model_to_file(filename + ".tmp", *store_params.model, store_params.plate_data_list, store_params.project_presets, store_params.config, - store_params.thumbnail_data, store_params.top_thumbnail_data, store_params.pick_thumbnail_data, store_params.proFn, + store_params.thumbnail_data, store_params.no_light_thumbnail_data, store_params.top_thumbnail_data, store_params.pick_thumbnail_data, + store_params.proFn, store_params.calibration_thumbnail_data, store_params.id_bboxes, store_params.project, store_params.export_plate_idx); if (result) { boost::filesystem::rename(filename + ".tmp", filename, ec); @@ -5615,6 +5641,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector& project_presets, const DynamicPrintConfig* config, const std::vector& thumbnail_data, + const std::vector& no_light_thumbnail_data, const std::vector& top_thumbnail_data, const std::vector& pick_thumbnail_data, Export3mfProgressFn proFn, @@ -5679,6 +5706,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //BBS: add thumbnail for each plate if (!m_skip_static) { std::vector thumbnail_status(plate_data_list.size(), false); + std::vector no_light_thumbnail_status(plate_data_list.size(), false); std::vector top_thumbnail_status(plate_data_list.size(), false); std::vector pick_thumbnail_status(plate_data_list.size(), false); @@ -5687,6 +5715,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) % thumbnail_data.size() %plate_data_list.size(); return false; } + if ((no_light_thumbnail_data.size() > 0) && (no_light_thumbnail_data.size() > plate_data_list.size())) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", no_light_thumbnail_data size %1% > plate count %2%") % + no_light_thumbnail_data.size() % plate_data_list.size(); + return false; + } if ((top_thumbnail_data.size() > 0)&&(top_thumbnail_data.size() > plate_data_list.size())) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", top_thumbnail_data size %1% > plate count %2%") % top_thumbnail_data.size() %plate_data_list.size(); @@ -5722,6 +5755,16 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } } + for (unsigned int index = 0; index < no_light_thumbnail_data.size(); index++) { + if (no_light_thumbnail_data[index]->is_valid()) { + if (!_add_thumbnail_file_to_archive(archive, *no_light_thumbnail_data[index], "Metadata/plate_no_light", index)) { + return false; + } + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(",add no light thumbnail %1%'s data into 3mf") % (index + 1); + thumbnail_status[index] = true; + } + } // Adds the file Metadata/top_i.png and Metadata/pick_i.png for (unsigned int index = 0; index < top_thumbnail_data.size(); index++) { @@ -5757,6 +5800,16 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } } + if (!no_light_thumbnail_status[i] && !plate_data->no_light_thumbnail_file.empty() && (boost::filesystem::exists(plate_data->no_light_thumbnail_file))){ + std::string dst_in_3mf = (boost::format("Metadata/plate_no_light_%1%.png") % (i + 1)).str(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", add no light thumbnail %1% from file %2%") % (i+1) %plate_data->no_light_thumbnail_file; + + if (!_add_file_to_archive(archive, dst_in_3mf, plate_data->no_light_thumbnail_file)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", add no light thumbnail %1% from file %2% failed\n") % (i+1) %plate_data->no_light_thumbnail_file; + return false; + } + } + if (!top_thumbnail_status[i] && !plate_data->top_file.empty() && (boost::filesystem::exists(plate_data->top_file))){ std::string dst_in_3mf = (boost::format("Metadata/top_%1%.png") % (i + 1)).str(); @@ -6397,6 +6450,13 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) metadata_item_map[BBL_MAKERLAB_VERSION_TAG] = xml_escape(model.mk_version); BOOST_LOG_TRIVIAL(info) << "saved mk_version " << model.mk_version; } + if (!model.md_name.empty()) { + for (unsigned int i = 0; i < model.md_name.size(); i++) + { + BOOST_LOG_TRIVIAL(info) << boost::format("saved metadata_name %1%, metadata_value %2%") %model.md_name[i] %model.md_value[i]; + metadata_item_map[model.md_name[i]] = xml_escape(model.md_value[i]); + } + } // store metadata info for (auto item : metadata_item_map) { @@ -6828,7 +6888,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) for (int i = 0; i < int(its.indices.size()); ++ i) { { - const Vec3i &idx = its.indices[i]; + const Vec3i32 &idx = its.indices[i]; char *ptr = buf; boost::spirit::karma::generate(ptr, boost::spirit::lit(" <") << TRIANGLE_TAG << " v1=\"" << boost::spirit::int_ << @@ -7415,6 +7475,24 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << "\"/>\n"; } + + ConfigOptionInts *other_layers_print_sequence_opt = plate_data->config.option("other_layers_print_sequence"); + if (other_layers_print_sequence_opt != nullptr) { + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << OTHER_LAYERS_PRINT_SEQUENCE_ATTR << "\" " << VALUE_ATTR << "=\""; + const std::vector &values = other_layers_print_sequence_opt->values; + for (int i = 0; i < values.size(); ++i) { + stream << values[i]; + if (i != (values.size() - 1)) + stream << " "; + } + stream << "\"/>\n"; + } + + const ConfigOptionInt *sequence_nums_opt = dynamic_cast(plate_data->config.option("other_layers_print_sequence_nums")); + if (sequence_nums_opt != nullptr) { + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << OTHER_LAYERS_PRINT_SEQUENCE_NUMS_ATTR << "\" " << VALUE_ATTR << "=\"" << sequence_nums_opt->getInt() << "\"/>\n"; + } + ConfigOption* spiral_mode_opt = plate_data->config.option("spiral_mode"); if (spiral_mode_opt) stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << SPIRAL_VASE_MODE << "\" " << VALUE_ATTR << "=\"" << spiral_mode_opt->getBool() << "\"/>\n"; @@ -7433,6 +7511,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << THUMBNAIL_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << thumbnail_file_in_3mf << "\"/>\n"; } + if (!plate_data->no_light_thumbnail_file.empty()){ + std::string no_light_thumbnail_file_in_3mf = (boost::format(NO_LIGHT_THUMBNAIL_FILE_FORMAT) % (plate_data->plate_index + 1)).str(); + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << NO_LIGHT_THUMBNAIL_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << no_light_thumbnail_file_in_3mf << "\"/>\n"; + } + if (!plate_data->top_file.empty()) { std::string top_file_in_3mf = (boost::format(TOP_FILE_FORMAT) % (plate_data->plate_index + 1)).str(); stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << TOP_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << top_file_in_3mf << "\"/>\n"; @@ -7614,6 +7697,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { stream << " <" << FILAMENT_TAG << " " << FILAMENT_ID_TAG << "=\"" << std::to_string(it->id + 1) << "\" " + << FILAMENT_TRAY_INFO_ID_TAG <<"=\""<< it->filament_id <<"\" " << FILAMENT_TYPE_TAG << "=\"" << it->type << "\" " << FILAMENT_COLOR_TAG << "=\"" << it->color << "\" " << FILAMENT_USED_M_TAG << "=\"" << it->used_m << "\" " @@ -7780,18 +7864,22 @@ bool _BBS_3MF_Exporter::_add_auxiliary_dir_to_archive(mz_zip_archive &archive, c int root_dir_len = dir.string().length() + 1; //boost file access while (!directories.empty()) { - boost::filesystem::directory_iterator iterator(directories.front()); + boost::system::error_code ec; + boost::filesystem::directory_iterator iterator(directories.front(), ec); directories.pop_front(); - for (auto &dir_entry : iterator) + if (ec) continue; + for (; iterator != end(iterator); iterator.increment(ec)) { + if (ec) break; + auto dir_entry = *iterator; std::string src_file; std::string dst_in_3mf; - if (boost::filesystem::is_directory(dir_entry.path())) + if (boost::filesystem::is_directory(dir_entry.path(), ec)) { directories.push_back(dir_entry.path()); continue; } - if (boost::filesystem::is_regular_file(dir_entry.path()) && !m_skip_auxiliary) + if (boost::filesystem::is_regular_file(dir_entry.path(), ec) && !m_skip_auxiliary) { src_file = dir_entry.path().string(); dst_in_3mf = dir_entry.path().string(); diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index d2f46be3e0..6d0c092b77 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -21,6 +21,7 @@ struct ThumbnailData; #define GCODE_FILE_FORMAT "Metadata/plate_%1%.gcode" #define THUMBNAIL_FILE_FORMAT "Metadata/plate_%1%.png" +#define NO_LIGHT_THUMBNAIL_FILE_FORMAT "Metadata/plate_no_light_%1%.png" #define TOP_FILE_FORMAT "Metadata/top_%1%.png" #define PICK_FILE_FORMAT "Metadata/pick_%1%.png" //#define PATTERN_FILE_FORMAT "Metadata/plate_%1%_pattern_layer_0.png" @@ -75,6 +76,7 @@ struct PlateData std::string gcode_file; std::string gcode_file_md5; std::string thumbnail_file; + std::string no_light_thumbnail_file; ThumbnailData plate_thumbnail; std::string top_file; std::string pick_file; @@ -213,6 +215,7 @@ struct StoreParams std::vector project_presets; DynamicPrintConfig* config; std::vector thumbnail_data; + std::vector no_light_thumbnail_data; std::vector top_thumbnail_data; std::vector pick_thumbnail_data; std::vector calibration_thumbnail_data; diff --git a/src/libslic3r/Format/objparser.cpp b/src/libslic3r/Format/objparser.cpp index 16a3f84ddb..82bf2b4963 100644 --- a/src/libslic3r/Format/objparser.cpp +++ b/src/libslic3r/Format/objparser.cpp @@ -9,16 +9,12 @@ #include "libslic3r/LocalesUtils.hpp" namespace ObjParser { - +#define EATWS() while (*line == ' ' || *line == '\t') ++line static bool obj_parseline(const char *line, ObjData &data) { -#define EATWS() while (*line == ' ' || *line == '\t') ++ line - if (*line == 0) return true; - assert(Slic3r::is_decimal_separator_point()); - // Ignore whitespaces at the beginning of the line. //FIXME is this a good idea? EATWS(); @@ -55,19 +51,19 @@ static bool obj_parseline(const char *line, ObjData &data) line = endptr; EATWS(); } - double w = 0; + /*double w = 0; if (*line != 0) { w = strtod(line, &endptr); if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; line = endptr; EATWS(); - } + }*/ if (*line != 0) return false; data.textureCoordinates.push_back((float)u); data.textureCoordinates.push_back((float)v); - data.textureCoordinates.push_back((float)w); + //data.textureCoordinates.push_back((float)w); break; } case 'n': @@ -156,23 +152,46 @@ static bool obj_parseline(const char *line, ObjData &data) return false; line = endptr; EATWS(); - double w = 1.0; - if (*line != 0) { - w = strtod(line, &endptr); - if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) - return false; - line = endptr; - EATWS(); + double color_x = 0.0, color_y = 0.0, color_z = 0.0, color_w = 0.0;//undefine color + if (*line != 0) { + if (!data.has_vertex_color) { + data.has_vertex_color = true; + } + color_x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) + return false; + line = endptr; + EATWS(); + color_y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) + return false; + line = endptr; + EATWS(); + color_z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) + return false; + line = endptr; + EATWS(); + color_w = 1.0;//default define alpha = 1.0 + if (*line != 0) { + color_w = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + } } // the following check is commented out because there may be obj files containing extra data, as those generated by Meshlab, // see https://dev.prusa3d.com/browse/SPE-1019 for an example, - // and this would lead to a crash because no vertex would be stored + // and this would lead to a crash because no vertex would be stored // if (*line != 0) // return false; data.coordinates.push_back((float)x); data.coordinates.push_back((float)y); data.coordinates.push_back((float)z); - data.coordinates.push_back((float)w); + data.coordinates.push_back((float) color_x); + data.coordinates.push_back((float) color_y); + data.coordinates.push_back((float) color_z); + data.coordinates.push_back((float) color_w); break; } } @@ -218,7 +237,7 @@ static bool obj_parseline(const char *line, ObjData &data) } } if (vertex.coordIdx < 0) - vertex.coordIdx += (int)data.coordinates.size() / 4; + vertex.coordIdx += (int) data.coordinates.size() / OBJ_VERTEX_LENGTH; else -- vertex.coordIdx; if (vertex.normalIdx < 0) @@ -232,6 +251,24 @@ static bool obj_parseline(const char *line, ObjData &data) data.vertices.push_back(vertex); EATWS(); } + if (data.usemtls.size() > 0) { + data.usemtls.back().vertexIdxEnd = (int) data.vertices.size(); + } + if (data.usemtls.size() > 0) { + int face_index_count = 0; + for (int i = data.vertices.size() - 1; i >= 0; i--) { + if (data.vertices[i].coordIdx == -1) { + break; + } + face_index_count++; + } + if (face_index_count == 3) {//tri + data.usemtls.back().face_end++; + } else if (face_index_count == 4) {//quad + data.usemtls.back().face_end++; + data.usemtls.back().face_end++; + } + } vertex.coordIdx = -1; vertex.normalIdx = -1; vertex.textureCoordIdx = -1; @@ -263,10 +300,23 @@ static bool obj_parseline(const char *line, ObjData &data) // usemtl [material name] // printf("usemtl %s\r\n", line); EATWS(); + if (data.usemtls.size()>0) { + data.usemtls.back().vertexIdxEnd = (int) data.vertices.size(); + } ObjUseMtl usemtl; usemtl.vertexIdxFirst = (int)data.vertices.size(); usemtl.name = line; data.usemtls.push_back(usemtl); + if (data.usemtls.size() == 1) { + data.usemtls.back().face_start = 0; + } + else {//>=2 + auto count = data.usemtls.size(); + auto& last_usemtl = data.usemtls[count-1]; + auto& last_last_usemtl = data.usemtls[count - 2]; + last_usemtl.face_start = last_last_usemtl.face_end + 1; + } + data.usemtls.back().face_end = data.usemtls.back().face_start - 1; break; } case 'o': @@ -323,6 +373,197 @@ static bool obj_parseline(const char *line, ObjData &data) return true; } +static std::string cur_mtl_name = ""; +static bool mtl_parseline(const char *line, MtlData &data) +{ + if (*line == 0) return true; + assert(Slic3r::is_decimal_separator_point()); + // Ignore whitespaces at the beginning of the line. + // FIXME is this a good idea? + EATWS(); + + char c1 = *line++; + switch (c1) { + case '#': {// Comment, ignore the rest of the line. + break; + } + case 'n': { + if (*(line++) != 'e' || *(line++) != 'w' || *(line++) != 'm' || *(line++) != 't' || *(line++) != 'l') + return false; + EATWS(); + ObjNewMtl new_mtl; + cur_mtl_name = line; + data.new_mtl_unmap[cur_mtl_name] = std::make_shared(); + break; + } + case 'm': { + if (*(line++) != 'a' || *(line++) != 'p' || *(line++) != '_' || *(line++) != 'K' || *(line++) != 'd') return false; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->map_Kd = line; + } + break; + } + case 'N': { + char cur_char = *(line++); + if (cur_char == 's') { + EATWS(); + char * endptr = 0; + double ns = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ns = (float) ns; + } + } else if (cur_char == 'i') { + EATWS(); + char * endptr = 0; + double ni = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ni = (float) ni; + } + } + break; + } + case 'K': { + char cur_char = *(line++); + if (cur_char == 'a') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ka[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Ka[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Ka[2] = z; + } + } else if (cur_char == 'd') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Kd[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Kd[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Kd[2] = z; + } + } else if (cur_char == 's') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ks[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Ks[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Ks[2] = z; + } + } else if (cur_char == 'e') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ke[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Ke[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Ke[2] = z; + } + } + break; + } + case 'i': { + if (*(line++) != 'l' || *(line++) != 'l' || *(line++) != 'u' || *(line++) != 'm') + return false; + EATWS(); + char * endptr = 0; + double illum = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->illum = (float) illum; + } + break; + } + case 'd': { + EATWS(); + char * endptr = 0; + double d = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->d = (float) d; + } + break; + } + case 'T': { + char cur_char = *(line++); + if (cur_char == 'r') { + EATWS(); + char * endptr = 0; + double tr = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Tr = (float) tr; + } + break; + } else if (cur_char == 'f') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Tf[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Tf[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Tf[2] = z; + } + break; + } + } + } + return true; +} bool objparse(const char *path, ObjData &data) { @@ -363,16 +604,52 @@ bool objparse(const char *path, ObjData &data) BOOST_LOG_TRIVIAL(error) << "ObjParser: Out of memory"; } ::fclose(pFile); - - // printf("vertices: %d\r\n", data.vertices.size() / 4); - // printf("coords: %d\r\n", data.coordinates.size()); return true; } +bool mtlparse(const char *path, MtlData &data) +{ + Slic3r::CNumericLocalesSetter locales_setter; + + FILE *pFile = boost::nowide::fopen(path, "rt"); + if (pFile == 0) return false; + cur_mtl_name = ""; + try { + char buf[65536 * 2]; + size_t len = 0; + size_t lenPrev = 0; + while ((len = ::fread(buf + lenPrev, 1, 65536, pFile)) != 0) { + len += lenPrev; + size_t lastLine = 0; + for (size_t i = 0; i < len; ++i) + if (buf[i] == '\r' || buf[i] == '\n') { + buf[i] = 0; + char *c = buf + lastLine; + while (*c == ' ' || *c == '\t') ++c; + // FIXME check the return value and exit on error? + // Will it break parsing of some obj files? + mtl_parseline(c, data); + lastLine = i + 1; + } + lenPrev = len - lastLine; + if (lenPrev > 65536) { + BOOST_LOG_TRIVIAL(error) << "MtlParser: Excessive line length"; + ::fclose(pFile); + return false; + } + memmove(buf, buf + lastLine, lenPrev); + } + } catch (std::bad_alloc &) { + BOOST_LOG_TRIVIAL(error) << "MtlParser: Out of memory"; + } + ::fclose(pFile); + return true; +} + bool objparse(std::istream &stream, ObjData &data) { Slic3r::CNumericLocalesSetter locales_setter; - + try { char buf[65536 * 2]; size_t len = 0; diff --git a/src/libslic3r/Format/objparser.hpp b/src/libslic3r/Format/objparser.hpp index 5f3f010e4a..48493de3de 100644 --- a/src/libslic3r/Format/objparser.hpp +++ b/src/libslic3r/Format/objparser.hpp @@ -3,6 +3,8 @@ #include #include +#include +#include #include namespace ObjParser { @@ -16,22 +18,39 @@ struct ObjVertex inline bool operator==(const ObjVertex &v1, const ObjVertex &v2) { - return - v1.coordIdx == v2.coordIdx && - v1.textureCoordIdx == v2.textureCoordIdx && + return v1.coordIdx == v2.coordIdx && + v1.textureCoordIdx == v2.textureCoordIdx && v1.normalIdx == v2.normalIdx; } struct ObjUseMtl { int vertexIdxFirst; + int vertexIdxEnd{-1}; + int face_start; + int face_end{-1}; std::string name; }; +struct ObjNewMtl +{ + std::string name; + float Ns; + float Ni; + float d; + float illum; + float Tr{1.0f}; // Transmission + std::array Tf; + std::array Ka; + std::array Kd; + std::array Ks; + std::array Ke; + std::string map_Kd;//defalut png +}; + inline bool operator==(const ObjUseMtl &v1, const ObjUseMtl &v2) { - return - v1.vertexIdxFirst == v2.vertexIdxFirst && + return v1.vertexIdxFirst == v2.vertexIdxFirst && v1.name.compare(v2.name) == 0; } @@ -56,8 +75,7 @@ struct ObjGroup inline bool operator==(const ObjGroup &v1, const ObjGroup &v2) { - return - v1.vertexIdxFirst == v2.vertexIdxFirst && + return v1.vertexIdxFirst == v2.vertexIdxFirst && v1.name.compare(v2.name) == 0; } @@ -69,17 +87,19 @@ struct ObjSmoothingGroup inline bool operator==(const ObjSmoothingGroup &v1, const ObjSmoothingGroup &v2) { - return - v1.vertexIdxFirst == v2.vertexIdxFirst && + return v1.vertexIdxFirst == v2.vertexIdxFirst && v1.smoothingGroupID == v2.smoothingGroupID; } - +#define OBJ_VERTEX_COLOR_ALPHA 6 +#define OBJ_VERTEX_LENGTH 7 // x, y, z, color_x,color_y,color_z,color_w +#define ONE_FACE_SIZE 4//ONE_FACE format: f 8/4/6 7/3/6 6/2/6 -1/-1/-1 struct ObjData { // Version of the data structure for load / store in the private binary format. int version; - // x, y, z, w + // x, y, z, color_x,color_y,color_z,color_w std::vector coordinates; + bool has_vertex_color{false}; // u, v, w std::vector textureCoordinates; // x, y, z @@ -97,7 +117,14 @@ struct ObjData { std::vector vertices; }; +struct MtlData +{ + // Version of the data structure for load / store in the private binary format. + int version; + std::unordered_map> new_mtl_unmap; +}; extern bool objparse(const char *path, ObjData &data); +extern bool mtlparse(const char *path, MtlData &data); extern bool objparse(std::istream &stream, ObjData &data); extern bool objbinsave(const char *path, const ObjData &data); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 58edf94901..b1aa81c73a 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -639,6 +639,8 @@ static std::vector get_path_of_change_filament(const Print& print) } gcodegen.placeholder_parser().set("current_extruder", new_extruder_id); + gcodegen.placeholder_parser().set("retraction_distance_when_cut", gcodegen.m_config.retraction_distances_when_cut.get_at(new_extruder_id)); + gcodegen.placeholder_parser().set("long_retraction_when_cut", gcodegen.m_config.long_retractions_when_cut.get_at(new_extruder_id)); // Process the start filament gcode. std::string start_filament_gcode_str; @@ -1380,37 +1382,8 @@ namespace DoExport { double total_used_filament = 0.0; double total_weight = 0.0; double total_cost = 0.0; - for (auto volume : result.print_statistics.volumes_per_extruder) { - total_extruded_volume += volume.second; - size_t extruder_id = volume.first; - auto extruder = std::find_if(extruders.begin(), extruders.end(), [extruder_id](const Extruder& extr) { return extr.id() == extruder_id; }); - if (extruder == extruders.end()) - continue; - - double s = PI * sqr(0.5* extruder->filament_diameter()); - double weight = volume.second * extruder->filament_density() * 0.001; - total_used_filament += volume.second/s; - total_weight += weight; - total_cost += weight * extruder->filament_cost() * 0.001; - } - //BBS: add flush volume - for (auto volume : result.print_statistics.flush_per_filament) { - total_extruded_volume += volume.second; - - size_t extruder_id = volume.first; - auto extruder = std::find_if(extruders.begin(), extruders.end(), [extruder_id](const Extruder& extr) { return extr.id() == extruder_id; }); - if (extruder == extruders.end()) - continue; - - double s = PI * sqr(0.5* extruder->filament_diameter()); - double weight = volume.second * extruder->filament_density() * 0.001; - total_used_filament += volume.second/s; - total_weight += weight; - total_cost += weight * extruder->filament_cost() * 0.001; - } - - for (auto volume : result.print_statistics.wipe_tower_volumes_per_extruder) { + for (auto volume : result.print_statistics.total_volumes_per_extruder) { total_extruded_volume += volume.second; size_t extruder_id = volume.first; @@ -1426,13 +1399,13 @@ namespace DoExport { } total_cost += config.time_cost.getFloat() * (normal_print_time/3600.0); - + print_statistics.total_extruded_volume = total_extruded_volume; print_statistics.total_used_filament = total_used_filament; print_statistics.total_weight = total_weight; print_statistics.total_cost = total_cost; - print_statistics.filament_stats = result.print_statistics.volumes_per_extruder; + print_statistics.filament_stats = result.print_statistics.model_volumes_per_extruder; } // if any reserved keyword is found, returns a std::vector containing the first MAX_COUNT keywords found @@ -1613,6 +1586,15 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu m_processor.result().timelapse_warning_code = m_timelapse_warning_code; m_processor.result().support_traditional_timelapse = m_support_traditional_timelapse; + bool activate_long_retraction_when_cut = false; + for (const auto& extruder : m_writer.extruders()) + activate_long_retraction_when_cut |= ( + m_config.long_retractions_when_cut.get_at(extruder.id()) + && m_config.retraction_distances_when_cut.get_at(extruder.id()) > 0 + ); + + m_processor.result().long_retraction_when_cut = activate_long_retraction_when_cut; + { //BBS:check bed and filament compatible const ConfigOptionDef *bed_type_def = print_config_def.get("curr_bed_type"); assert(bed_type_def != nullptr); @@ -1995,22 +1977,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } else m_enable_extrusion_role_markers = false; - if (!print.config().small_area_infill_flow_compensation_model.empty()) + if (m_config.small_area_infill_flow_compensation.value && !print.config().small_area_infill_flow_compensation_model.empty()) m_small_area_infill_flow_compensator = make_unique(print.config()); - // if thumbnail type of BTT_TFT, insert above header - // if not, it is inserted under the header in its normal spot - GCodeThumbnailsFormat m_gcode_thumbnail_format = GCodeThumbnailsFormat::PNG; - if (thumbnail_cb != nullptr) { - m_gcode_thumbnail_format = print.full_print_config().opt_enum("thumbnails_format"); - if (m_gcode_thumbnail_format == GCodeThumbnailsFormat::BTT_TFT) - GCodeThumbnails::export_thumbnails_to_file( - thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, - m_gcode_thumbnail_format, - [&file](const char *sz) { file.write(sz); }, - [&print]() { print.throw_if_canceled(); }); - } - 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()); @@ -2086,15 +2055,18 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato print.config().nozzle_temperature_initial_layer.get_at(0)); file.write("; CONFIG_BLOCK_END\n\n"); } else if (thumbnail_cb != nullptr) { - if (m_gcode_thumbnail_format != GCodeThumbnailsFormat::BTT_TFT) { - auto thumbnaim_fmt = m_gcode_thumbnail_format; - // Orca: if the thumbnail format is ColPic, we write PNG in the beginning of gcode file and ColPic in the end of gcode file. - if (m_gcode_thumbnail_format == GCodeThumbnailsFormat::ColPic) - thumbnaim_fmt = GCodeThumbnailsFormat::PNG; - GCodeThumbnails::export_thumbnails_to_file( - thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, - thumbnaim_fmt, [&file](const char* sz) { file.write(sz); }, [&print]() { print.throw_if_canceled(); }); + // generate the thumbnails + auto [thumbnails, errors] = GCodeThumbnails::make_and_check_thumbnail_list(print.full_print_config()); + + if (errors != enum_bitmask()) { + std::string error_str = format("Invalid thumbnails value:"); + error_str += GCodeThumbnails::get_error_string(errors); + throw Slic3r::ExportError(error_str); } + + if (!thumbnails.empty()) + GCodeThumbnails::export_thumbnails_to_file( + thumbnail_cb, print.get_plate_index(), thumbnails, [&file](const char* sz) { file.write(sz); }, [&print]() { print.throw_if_canceled(); }); } } @@ -2275,6 +2247,12 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("initial_no_support_tool", initial_non_support_extruder_id); this->placeholder_parser().set("initial_no_support_extruder", initial_non_support_extruder_id); this->placeholder_parser().set("current_extruder", initial_extruder_id); + //set the key for compatibilty + this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(initial_extruder_id)); + this->placeholder_parser().set("long_retraction_when_cut", m_config.long_retractions_when_cut.get_at(initial_extruder_id)); + + this->placeholder_parser().set("retraction_distances_when_cut", new ConfigOptionFloats(m_config.retraction_distances_when_cut)); + this->placeholder_parser().set("long_retractions_when_cut",new ConfigOptionBools(m_config.long_retractions_when_cut)); //Set variable for total layer count so it can be used in custom gcode. this->placeholder_parser().set("total_layer_count", m_layer_count); // Useful for sequential prints. @@ -2295,6 +2273,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato { BoundingBoxf bbox_bed(print.config().printable_area.values); + Vec2f plate_offset = m_writer.get_xy_offset(); this->placeholder_parser().set("print_bed_min", new ConfigOptionFloats({ bbox_bed.min.x(), bbox_bed.min.y()})); this->placeholder_parser().set("print_bed_max", new ConfigOptionFloats({ bbox_bed.max.x(), bbox_bed.max.y()})); this->placeholder_parser().set("print_bed_size", new ConfigOptionFloats({ bbox_bed.size().x(), bbox_bed.size().y() })); @@ -2322,12 +2301,37 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato pts->values.emplace_back(print.translate_to_print_space(pt)); bbox = BoundingBoxf((pts->values)); } - BoundingBoxf bbox_head_wrap_zone (print.config().head_wrap_detect_zone.values); this->placeholder_parser().set("first_layer_print_convex_hull", pts.release()); this->placeholder_parser().set("first_layer_print_min", new ConfigOptionFloats({bbox.min.x(), bbox.min.y()})); this->placeholder_parser().set("first_layer_print_max", new ConfigOptionFloats({bbox.max.x(), bbox.max.y()})); this->placeholder_parser().set("first_layer_print_size", new ConfigOptionFloats({ bbox.size().x(), bbox.size().y() })); - this->placeholder_parser().set("in_head_wrap_detect_zone",bbox_head_wrap_zone.overlap(bbox)); + + { + // use first layer convex_hull union with each object's bbox to check whether in head detect zone + Polygons object_projections; + for (auto& obj : print.objects()) { + for (auto& instance : obj->instances()) { + const auto& bbox = instance.get_bounding_box(); + Point min_p{ coord_t(scale_(bbox.min.x())),coord_t(scale_(bbox.min.y())) }; + Point max_p{ coord_t(scale_(bbox.max.x())),coord_t(scale_(bbox.max.y())) }; + Polygon instance_projection = { + {min_p.x(),min_p.y()}, + {max_p.x(),min_p.y()}, + {max_p.x(),max_p.y()}, + {min_p.x(),max_p.y()} + }; + object_projections.emplace_back(std::move(instance_projection)); + } + } + object_projections.emplace_back(print.first_layer_convex_hull()); + + Polygons project_polys = union_(object_projections); + Polygon head_wrap_detect_zone; + for (auto& point : print.config().head_wrap_detect_zone.values) + head_wrap_detect_zone.append(scale_(point).cast() + scale_(plate_offset).cast()); + + this->placeholder_parser().set("in_head_wrap_detect_zone", !intersection_pl(project_polys, {head_wrap_detect_zone}).empty()); + } BoundingBoxf mesh_bbox(m_config.bed_mesh_min, m_config.bed_mesh_max); auto mesh_margin = m_config.adaptive_bed_mesh_margin.value; @@ -2340,11 +2344,17 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato auto probe_dist_y = std::max(1., m_config.bed_mesh_probe_distance.value.y()); int probe_count_x = std::max(3, (int) std::ceil(mesh_bbox.size().x() / probe_dist_x)); int probe_count_y = std::max(3, (int) std::ceil(mesh_bbox.size().y() / probe_dist_y)); - this->placeholder_parser().set("bed_mesh_probe_count", new ConfigOptionInts({probe_count_x, probe_count_y})); auto bed_mesh_algo = "bicubic"; - if (probe_count_x < 4 || probe_count_y < 4) { + if (probe_count_x * probe_count_y <= 6) { // lagrange needs up to a total of 6 mesh points bed_mesh_algo = "lagrange"; } + else + if(print.config().gcode_flavor == gcfKlipper){ + // bicubic needs 4 probe points per axis + probe_count_x = std::max(probe_count_x,4); + probe_count_y = std::max(probe_count_y,4); + } + this->placeholder_parser().set("bed_mesh_probe_count", new ConfigOptionInts({probe_count_x, probe_count_y})); this->placeholder_parser().set("bed_mesh_algo", bed_mesh_algo); // get center without wipe tower BoundingBoxf bbox_wo_wt; // bounding box without wipe tower @@ -2381,6 +2391,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("first_layer_temperature", new ConfigOptionInts(m_config.nozzle_temperature_initial_layer)); this->placeholder_parser().set("max_print_height",new ConfigOptionInt(m_config.printable_height)); this->placeholder_parser().set("z_offset", new ConfigOptionFloat(m_config.z_offset)); + this->placeholder_parser().set("model_name", new ConfigOptionString(print.get_model_name())); + this->placeholder_parser().set("plate_number", new ConfigOptionString(print.get_plate_number_formatted())); this->placeholder_parser().set("plate_name", new ConfigOptionString(print.get_plate_name())); this->placeholder_parser().set("first_layer_height", new ConfigOptionFloat(m_config.initial_layer_print_height.value)); @@ -2567,7 +2579,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato 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; - file.write(this->set_extruder(initial_extruder_id, initial_layer_print_height)); + file.write(this->set_extruder(initial_extruder_id, initial_layer_print_height, true)); prime_extruder = true; } else { @@ -2761,11 +2773,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder) .c_str()); file.write("\n"); - if (m_gcode_thumbnail_format == GCodeThumbnailsFormat::ColPic) - GCodeThumbnails::export_thumbnails_to_file( - thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, - m_gcode_thumbnail_format, [&file](const char* sz) { file.write(sz); }, [&print]() { print.throw_if_canceled(); }); - file.write("; CONFIG_BLOCK_START\n"); std::string full_config; append_full_config(print, full_config); @@ -3434,13 +3441,15 @@ namespace Skirt { size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; // BBS. Extrude skirt with first extruder if min_skirt_length is zero - const PrintConfig &config = print.config(); - if (Print::min_skirt_length < EPSILON) { + //ORCA: Always extrude skirt with first extruder, independantly of if the minimum skirt length is zero or not. The code below + // is left as a placeholder for when a multiextruder support is implemented. Then we will need to extrude the skirt loops for each extruder. + //const PrintConfig &config = print.config(); + //if (config.min_skirt_length.value < EPSILON) { skirt_loops_per_extruder_out[layer_tools.extruders.front()] = std::pair(0, n_loops); - } else { - for (size_t i = 0; i < n_loops; i += lines_per_extruder) - skirt_loops_per_extruder_out[layer_tools.extruders[i / lines_per_extruder]] = std::pair(i, std::min(i + lines_per_extruder, n_loops)); - } + //} else { + // for (size_t i = 0; i < n_loops; i += lines_per_extruder) + // skirt_loops_per_extruder_out[layer_tools.extruders[i / lines_per_extruder]] = std::pair(i, std::min(i + lines_per_extruder, n_loops)); + //} } static std::map> make_skirt_loops_per_extruder_1st_layer( @@ -4104,7 +4113,7 @@ LayerResult GCode::process_layer( } // BBS - if (print.config().print_sequence == PrintSequence::ByObject && prime_extruder && first_layer && extruder_id == first_extruder_id) { + if (print.has_skirt() && print.config().print_sequence == PrintSequence::ByObject && prime_extruder && first_layer && extruder_id == first_extruder_id) { for (InstanceToPrint& instance_to_print : instances_to_print) { if (this->m_objSupportsWithBrim.find(instance_to_print.print_object.id()) != this->m_objSupportsWithBrim.end() && print.m_supportBrimMap.at(instance_to_print.print_object.id()).entities.size() > 0) @@ -4705,6 +4714,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou // Calculate the sloped loop ExtrusionLoopSloped new_loop(paths, seam_gap, slope_min_length, slope_max_segment_length, start_slope_ratio, loop.loop_role()); + new_loop.clip_slope(seam_gap); // Then extrude it for (const auto& p : new_loop.get_all_paths()) { @@ -4985,6 +4995,30 @@ static std::map overhang_speed_key_map = {5, "bridge_speed"}, }; +double GCode::get_overhang_degree_corr_speed(float normal_speed, double path_degree) { + + //BBS: protection: overhang degree is float, make sure it not excess degree range + if (path_degree <= 0) + return normal_speed; + + if (path_degree >= 5 ) + return m_config.get_abs_value(overhang_speed_key_map[5].c_str()); + + int lower_degree_bound = int(path_degree); + if (path_degree==lower_degree_bound) + return m_config.get_abs_value(overhang_speed_key_map[lower_degree_bound].c_str()); + int upper_degree_bound = lower_degree_bound + 1; + + double lower_speed_bound = lower_degree_bound == 0 ? normal_speed : m_config.get_abs_value(overhang_speed_key_map[lower_degree_bound].c_str()); + double upper_speed_bound = upper_degree_bound == 0 ? normal_speed : m_config.get_abs_value(overhang_speed_key_map[upper_degree_bound].c_str()); + + lower_speed_bound = lower_speed_bound == 0 ? normal_speed : lower_speed_bound; + upper_speed_bound = upper_speed_bound == 0 ? normal_speed : upper_speed_bound; + + double speed_out = lower_speed_bound + (upper_speed_bound - lower_speed_bound) * (path_degree - lower_degree_bound); + return speed_out; +} + std::string GCode::_extrude(const ExtrusionPath &path, std::string description, double speed) { std::string gcode; @@ -5092,12 +5126,11 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, // set speed if (speed == -1) { - 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) { - double new_speed = m_config.get_abs_value(overhang_speed_key_map[overhang_degree].c_str()); + if (m_config.overhang_speed_classic.value && m_config.enable_overhang_speed.value) { + double new_speed = 0; + new_speed = get_overhang_degree_corr_speed(speed, path.overhang_degree); speed = new_speed == 0.0 ? speed : new_speed; } @@ -5106,9 +5139,9 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } } 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) { - double new_speed = m_config.get_abs_value(overhang_speed_key_map[overhang_degree].c_str()); + if (m_config.overhang_speed_classic.value && m_config.enable_overhang_speed.value ) { + double new_speed = 0; + new_speed = get_overhang_degree_corr_speed(speed, path.overhang_degree); speed = new_speed == 0.0 ? speed : new_speed; } if (sloped) { @@ -5151,7 +5184,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, speed = m_config.get_abs_value("initial_layer_speed"); } else if(m_config.slow_down_layers > 1){ - const auto _layer = layer_id() + 1; + const auto _layer = layer_id(); if (_layer > 0 && _layer < m_config.slow_down_layers) { const auto first_layer_speed = is_perimeter(path.role()) @@ -5197,76 +5230,67 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, (is_bridge(path.role()) || is_perimeter(path.role()))) { bool is_external = is_external_perimeter(path.role()); double ref_speed = is_external ? m_config.get_abs_value("outer_wall_speed") : m_config.get_abs_value("inner_wall_speed"); + if (ref_speed == 0) + ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + + if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { + ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm); + } if (sloped) { ref_speed = std::min(ref_speed, m_config.scarf_joint_speed.get_abs_value(ref_speed)); } + ConfigOptionPercents overhang_overlap_levels({75, 50, 25, 13, 12.99, 0}); - if (m_config.slowdown_for_curled_perimeters){ - ConfigOptionFloatsOrPercents dynamic_overhang_speeds( - {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}}); - if (ref_speed == 0) - ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + if (m_config.slowdown_for_curled_perimeters){ + ConfigOptionFloatsOrPercents dynamic_overhang_speeds( + {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}}); - if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { - ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm); - } - - new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, + new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, ref_speed, speed, m_config.slowdown_for_curled_perimeters); }else{ - ConfigOptionFloatsOrPercents dynamic_overhang_speeds( - {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, - FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}, - FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}}); - - if (ref_speed == 0) - ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + ConfigOptionFloatsOrPercents dynamic_overhang_speeds( + {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, + FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}, + FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}}); - if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { - ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm); - } - - new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, + new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, ref_speed, speed, m_config.slowdown_for_curled_perimeters); - } + } variable_speed = std::any_of(new_points.begin(), new_points.end(), [speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > EPSILON; }); + } double F = speed * 60; // convert mm/sec to mm/min - if(abs(F - 5753.504) < 0.002) - { - std::cout << "F: " << F << std::endl; - } //Orca: process custom gcode for extrusion role change if (path.role() != m_last_extrusion_role && !m_config.change_extrusion_role_gcode.value.empty()) { @@ -5414,6 +5438,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, for (const Line& line : path.polyline.lines()) { std::string tempDescription = description; const double line_length = line.length() * SCALING_FACTOR; + if (line_length < EPSILON) + continue; path_length += line_length; auto dE = e_per_mm * line_length; if (m_small_area_infill_flow_compensator && m_config.small_area_infill_flow_compensation.value) { @@ -5453,6 +5479,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, 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; + if (line_length < EPSILON) + continue; auto dE = e_per_mm * line_length; if (m_small_area_infill_flow_compensator && m_config.small_area_infill_flow_compensation.value) { auto oldE = dE; @@ -5473,6 +5501,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, 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; + if (arc_length < EPSILON) + continue; const Vec2d center_offset = this->point_to_gcode(arc.center) - this->point_to_gcode(arc.start_point); auto dE = e_per_mm * arc_length; if (m_small_area_infill_flow_compensator && m_config.small_area_infill_flow_compensation.value) { @@ -5554,6 +5584,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } const double line_length = (p - prev).norm(); + if(line_length < EPSILON) + continue; path_length += line_length; double new_speed = pre_processed_point.speed * 60.0; if (last_set_speed != new_speed) { @@ -5980,6 +6012,8 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b // if we are running a single-extruder setup, just set the extruder and return nothing if (!m_writer.multiple_extruders) { this->placeholder_parser().set("current_extruder", extruder_id); + this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(extruder_id)); + this->placeholder_parser().set("long_retraction_when_cut", m_config.long_retractions_when_cut.get_at(extruder_id)); std::string gcode; // Append the filament start G-code. @@ -6171,6 +6205,8 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b } this->placeholder_parser().set("current_extruder", extruder_id); + this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(extruder_id)); + this->placeholder_parser().set("long_retraction_when_cut", m_config.long_retractions_when_cut.get_at(extruder_id)); // Append the filament start G-code. const std::string &filament_start_gcode = m_config.filament_start_gcode.get_at(extruder_id); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 03ba079fae..18ea653546 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -577,6 +577,7 @@ private: int get_bed_temperature(const int extruder_id, const bool is_first_layer, const BedType bed_type) const; std::string _extrude(const ExtrusionPath &path, std::string description = "", double speed = -1); + double get_overhang_degree_corr_speed(float speed, double path_degree); void print_machine_envelope(GCodeOutputStream &file, Print &print); void _print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); void _print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index 0598db3b17..9f01f81945 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "../Layer.hpp" #include "../GCode.hpp" #include "../EdgeGrid.hpp" diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp index 5d85aace7f..83a447806b 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_AvoidCrossingPerimeters_hpp_ #define slic3r_AvoidCrossingPerimeters_hpp_ diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp index 9966154094..fb69372a9a 100644 --- a/src/libslic3r/GCode/ConflictChecker.cpp +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -13,9 +13,6 @@ namespace RasterizationImpl { using IndexPair = std::pair; using Grids = std::vector; -inline constexpr int64_t RasteXDistance = scale_(1); -inline constexpr int64_t RasteYDistance = scale_(1); - inline IndexPair point_map_grid_index(const Point &pt, int64_t xdist, int64_t ydist) { auto x = pt.x() / xdist; @@ -25,7 +22,7 @@ inline IndexPair point_map_grid_index(const Point &pt, int64_t xdist, int64_t yd inline bool nearly_equal(const Point &p1, const Point &p2) { return std::abs(p1.x() - p2.x()) < SCALED_EPSILON && std::abs(p1.y() - p2.y()) < SCALED_EPSILON; } -inline Grids line_rasterization(const Line &line, int64_t xdist = RasteXDistance, int64_t ydist = RasteYDistance) +inline Grids line_rasterization(const Line &line, int64_t xdist = scale_(1), int64_t ydist = scale_(1)) { Grids res; Point rayStart = line.a; @@ -93,9 +90,14 @@ void LinesBucketQueue::emplace_back_bucket(ExtrusionLayers &&els, const void *ob { auto oldSize = line_buckets.capacity(); line_buckets.emplace_back(std::move(els), objPtr, offset); - line_bucket_ptr_queue.push(&line_buckets.back()); auto newSize = line_buckets.capacity(); - if (oldSize != newSize) { // pointers change + // Since line_bucket_ptr_queue is storing pointers into line_buckets, + // we need to handle the case where the capacity changes since that makes + // the existing pointers invalid + if (oldSize == newSize) { + line_bucket_ptr_queue.push(&line_buckets.back()); + } + else { // pointers change, create a new queue from scratch decltype(line_bucket_ptr_queue) newQueue; for (LinesBucket &bucket : line_buckets) { newQueue.push(&bucket); } std::swap(line_bucket_ptr_queue, newQueue); @@ -218,6 +220,7 @@ ConflictResultOpt ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectP { if (objs.size() <= 1 && !wtdptr) { return {}; } LinesBucketQueue conflictQueue; + if (wtdptr.has_value()) { // wipe tower at 0 by default auto wtpaths = wtdptr.value()->getFakeExtrusionPathsFromWipeTower(); ExtrusionLayers wtels; diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 812e71f714..ff36ce7e21 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -222,6 +222,9 @@ struct PerExtruderAdjustments float slow_down_layer_time = 0.f; // Minimum print speed allowed for this extruder. float slow_down_min_speed = 0.f; + + bool dont_slow_down_outer_wall = false; + // Parsed lines. std::vector lines; @@ -330,6 +333,8 @@ std::vector CoolingBuffer::parse_layer_gcode(const std:: adj.cooling_slow_down_enabled = m_config.slow_down_for_layer_cooling.get_at(extruder_id); adj.slow_down_layer_time = float(m_config.slow_down_layer_time.get_at(extruder_id)); adj.slow_down_min_speed = float(m_config.slow_down_min_speed.get_at(extruder_id)); + // ORCA: To enable dont slow down external perimeters feature per filament (extruder) + adj.dont_slow_down_outer_wall = m_config.dont_slow_down_outer_wall.get_at(extruder_id); map_extruder_to_per_extruder_adjustment[extruder_id] = i; } @@ -399,7 +404,15 @@ std::vector CoolingBuffer::parse_layer_gcode(const std:: line.type |= CoolingLine::TYPE_EXTERNAL_PERIMETER; if (wipe) line.type |= CoolingLine::TYPE_WIPE; - if (boost::contains(sline, ";_EXTRUDE_SET_SPEED") && ! wipe) { + + // ORCA: Dont slowdown external perimeters for layer time feature + // use the adjustment pointer to ensure the value for the current extruder (filament) is used. + bool adjust_external = true; + if(adjustment->dont_slow_down_outer_wall && external_perimeter) adjust_external = false; + + // ORCA: Dont slowdown external perimeters for layer time works by not marking the external perimeter as adjustable, + // hence the slowdown algorithm ignores it. + if (boost::contains(sline, ";_EXTRUDE_SET_SPEED") && ! wipe && adjust_external) { line.type |= CoolingLine::TYPE_ADJUSTABLE; active_speed_modifier = adjustment->lines.size(); } diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index e10e32ef92..648b570d82 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -45,6 +45,7 @@ static const float DEFAULT_FILAMENT_DIAMETER = 1.75f; static const int DEFAULT_FILAMENT_HRC = 0; static const float DEFAULT_FILAMENT_DENSITY = 1.245f; static const float DEFAULT_FILAMENT_COST = 29.99f; +static const float DEFAULT_FILAMENT_FLOW_RATIOS = 1.0f; static const int DEFAULT_FILAMENT_VITRIFICATION_TEMPERATURE = 0; static const Slic3r::Vec3f DEFAULT_EXTRUDER_OFFSET = Slic3r::Vec3f::Zero(); @@ -753,7 +754,7 @@ void GCodeProcessor::UsedFilaments::reset() volumes_per_color_change = std::vector(); model_extrude_cache = 0.0f; - volumes_per_extruder.clear(); + model_volumes_per_extruder.clear(); flush_per_filament.clear(); @@ -761,7 +762,20 @@ void GCodeProcessor::UsedFilaments::reset() filaments_per_role.clear(); wipe_tower_cache = 0.0f; - wipe_tower_volume_per_extruder.clear(); + wipe_tower_volumes_per_extruder.clear(); + + support_volume_cache = 0.0f; + support_volumes_per_extruder.clear(); + + total_volume_cache = 0.0f; + total_volumes_per_extruder.clear(); +} + +void GCodeProcessor::UsedFilaments::increase_support_caches(double extruded_volume) +{ + support_volume_cache += extruded_volume; + role_cache += extruded_volume; + total_volume_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume) @@ -769,11 +783,14 @@ void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume color_change_cache += extruded_volume; model_extrude_cache += extruded_volume; role_cache += extruded_volume; + total_volume_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::increase_wipe_tower_caches(double extruded_volume) { wipe_tower_cache += extruded_volume; + role_cache += extruded_volume; + total_volume_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::process_color_change_cache() @@ -784,14 +801,27 @@ void GCodeProcessor::UsedFilaments::process_color_change_cache() } } + +void GCodeProcessor::UsedFilaments::process_total_volume_cache(GCodeProcessor* processor) +{ + size_t active_extruder_id = processor->m_extruder_id; + if (total_volume_cache!= 0.0f) { + if (total_volumes_per_extruder.find(active_extruder_id) != total_volumes_per_extruder.end()) + total_volumes_per_extruder[active_extruder_id] += total_volume_cache; + else + total_volumes_per_extruder[active_extruder_id] = total_volume_cache; + total_volume_cache = 0.0f; + } +} + void GCodeProcessor::UsedFilaments::process_model_cache(GCodeProcessor* processor) { size_t active_extruder_id = processor->m_extruder_id; if (model_extrude_cache != 0.0f) { - if (volumes_per_extruder.find(active_extruder_id) != volumes_per_extruder.end()) - volumes_per_extruder[active_extruder_id] += model_extrude_cache; + if (model_volumes_per_extruder.find(active_extruder_id) != model_volumes_per_extruder.end()) + model_volumes_per_extruder[active_extruder_id] += model_extrude_cache; else - volumes_per_extruder[active_extruder_id] = model_extrude_cache; + model_volumes_per_extruder[active_extruder_id] = model_extrude_cache; model_extrude_cache = 0.0f; } } @@ -800,20 +830,39 @@ void GCodeProcessor::UsedFilaments::process_wipe_tower_cache(GCodeProcessor* pro { size_t active_extruder_id = processor->m_extruder_id; if (wipe_tower_cache != 0.0f) { - if (wipe_tower_volume_per_extruder.find(active_extruder_id) != wipe_tower_volume_per_extruder.end()) - wipe_tower_volume_per_extruder[active_extruder_id] += wipe_tower_cache; + if (wipe_tower_volumes_per_extruder.find(active_extruder_id) != wipe_tower_volumes_per_extruder.end()) + wipe_tower_volumes_per_extruder[active_extruder_id] += wipe_tower_cache; else - wipe_tower_volume_per_extruder[active_extruder_id] = wipe_tower_cache; + wipe_tower_volumes_per_extruder[active_extruder_id] = wipe_tower_cache; wipe_tower_cache = 0.0f; } } +void GCodeProcessor::UsedFilaments::process_support_cache(GCodeProcessor* processor) +{ + size_t active_extruder_id = processor->m_extruder_id; + if (support_volume_cache != 0.0f){ + if (support_volumes_per_extruder.find(active_extruder_id) != support_volumes_per_extruder.end()) + support_volumes_per_extruder[active_extruder_id] += support_volume_cache; + else + support_volumes_per_extruder[active_extruder_id] = support_volume_cache; + support_volume_cache = 0.0f; + } +} + void GCodeProcessor::UsedFilaments::update_flush_per_filament(size_t extrude_id, float flush_volume) { - if (flush_per_filament.find(extrude_id) != flush_per_filament.end()) - flush_per_filament[extrude_id] += flush_volume; - else - flush_per_filament[extrude_id] = flush_volume; + if (flush_volume != 0.f) { + if (flush_per_filament.find(extrude_id) != flush_per_filament.end()) + flush_per_filament[extrude_id] += flush_volume; + else + flush_per_filament[extrude_id] = flush_volume; + + if (total_volumes_per_extruder.find(extrude_id) != total_volumes_per_extruder.end()) + total_volumes_per_extruder[extrude_id] += flush_volume; + else + total_volumes_per_extruder[extrude_id] = flush_volume; + } } void GCodeProcessor::UsedFilaments::process_role_cache(GCodeProcessor* processor) @@ -842,6 +891,8 @@ void GCodeProcessor::UsedFilaments::process_caches(GCodeProcessor* processor) process_model_cache(processor); process_role_cache(processor); process_wipe_tower_cache(processor); + process_support_cache(processor); + process_total_volume_cache(processor); } #if ENABLE_GCODE_VIEWER_STATISTICS @@ -885,6 +936,7 @@ void GCodeProcessorResult::reset() { toolpath_outside = false; //BBS: add label_object_enabled label_object_enabled = false; + long_retraction_when_cut = false; timelapse_warning_code = 0; printable_height = 0.0f; settings_ids.reset(); @@ -894,6 +946,7 @@ void GCodeProcessorResult::reset() { required_nozzle_HRC = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_HRC); filament_densities = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DENSITY); filament_costs = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_COST); + filament_flow_ratios = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_FLOW_RATIOS); custom_gcode_per_print_z = std::vector(); spiral_vase_layers = std::vector>>(); bed_match_result = BedMatchResult(true); @@ -1006,6 +1059,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.filament_densities.resize(extruders_count); m_result.filament_vitrification_temperature.resize(extruders_count); m_result.filament_costs.resize(extruders_count); + m_result.filament_flow_ratios.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; @@ -1017,6 +1071,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.filament_densities[i] = static_cast(config.filament_density.get_at(i)); m_result.filament_vitrification_temperature[i] = static_cast(config.temperature_vitrification.get_at(i)); m_result.filament_costs[i] = static_cast(config.filament_cost.get_at(i)); + m_result.filament_flow_ratios[i] = static_cast(config.filament_flow_ratio.get_at(i)); } if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper || m_flavor == gcfRepRapFirmware) { @@ -1194,6 +1249,15 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) m_result.filament_costs.emplace_back(DEFAULT_FILAMENT_COST); } + // Orca: filament flow ratio + const ConfigOptionFloats* filament_flow_ratios = config.option("filament_flow_ratio"); + if (filament_flow_ratios != nullptr) { + m_result.filament_flow_ratios.clear(); + m_result.filament_flow_ratios.resize(filament_flow_ratios->values.size()); + for (size_t i = 0; i < filament_flow_ratios->values.size(); ++i) + m_result.filament_flow_ratios[i]=static_cast(filament_flow_ratios->values[i]); + } + //BBS const ConfigOptionInts* filament_vitrification_temperature = config.option("temperature_vitrification"); if (filament_vitrification_temperature != nullptr) { @@ -2866,6 +2930,7 @@ void GCodeProcessor::process_G0(const GCodeReader::GCodeLine& line) void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) { float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); + float filament_flowratio = (static_cast(m_extruder_id) < m_result.filament_flow_ratios.size()) ? m_result.filament_flow_ratios[m_extruder_id] : m_result.filament_flow_ratios.back(); float filament_radius = 0.5f * filament_diameter; float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); auto absolute_position = [this, area_filament_cross_section](Axis axis, const GCodeReader::GCodeLine& lineG1) { @@ -2932,7 +2997,10 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z])); float volume_extruded_filament = area_filament_cross_section * delta_pos[E]; float area_toolpath_cross_section = volume_extruded_filament / delta_xyz; - if (m_wipe_tower) { + + if(m_extrusion_role == ExtrusionRole::erSupportMaterial || m_extrusion_role == ExtrusionRole::erSupportMaterialInterface || m_extrusion_role ==ExtrusionRole::erSupportTransition) + m_used_filaments.increase_support_caches(volume_extruded_filament); + else if (m_extrusion_role==ExtrusionRole::erWipeTower) { m_used_filaments.increase_wipe_tower_caches(volume_extruded_filament); } else { @@ -2940,7 +3008,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) m_used_filaments.increase_model_caches(volume_extruded_filament); } // volume extruded filament / tool displacement = area toolpath cross section - m_mm3_per_mm = area_toolpath_cross_section; + m_mm3_per_mm = area_toolpath_cross_section * filament_flowratio; #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_mm3_per_mm_compare.update(area_toolpath_cross_section, m_extrusion_role); #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING @@ -3290,6 +3358,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) { float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); + float filament_flowratio = (static_cast(m_extruder_id) < m_result.filament_flow_ratios.size()) ? m_result.filament_flow_ratios[m_extruder_id] : m_result.filament_flow_ratios.back(); float filament_radius = 0.5f * filament_diameter; float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); auto absolute_position = [this, area_filament_cross_section](Axis axis, const GCodeReader::GCodeLine& lineG2_3) { @@ -3406,7 +3475,10 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) if (type == EMoveType::Extrude) { float volume_extruded_filament = area_filament_cross_section * delta_pos[E]; float area_toolpath_cross_section = volume_extruded_filament / delta_xyz; - if (m_wipe_tower) { + + if(m_extrusion_role == ExtrusionRole::erSupportMaterial || m_extrusion_role == ExtrusionRole::erSupportMaterialInterface || m_extrusion_role ==ExtrusionRole::erSupportTransition) + m_used_filaments.increase_support_caches(volume_extruded_filament); + else if (m_extrusion_role == ExtrusionRole::erWipeTower) { //BBS: save wipe tower volume to the cache m_used_filaments.increase_wipe_tower_caches(volume_extruded_filament); } @@ -3415,7 +3487,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) m_used_filaments.increase_model_caches(volume_extruded_filament); } //BBS: volume extruded filament / tool displacement = area toolpath cross section - m_mm3_per_mm = area_toolpath_cross_section; + m_mm3_per_mm = area_toolpath_cross_section * filament_flowratio; #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_mm3_per_mm_compare.update(area_toolpath_cross_section, m_extrusion_role); #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING @@ -3696,6 +3768,23 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) m_seams_detector.activate(true); m_seams_detector.set_first_vertex(m_result.moves.back().position - m_extruder_offsets[m_extruder_id] - plate_offset); } + + // Orca: we now use spiral_vase_layers for proper layer detect when scarf joint is enabled, + // and this is needed if the layer has only arc moves + if (m_detect_layer_based_on_tag && !m_result.spiral_vase_layers.empty()) { + if (delta_pos[Z] >= 0.0 && type == EMoveType::Extrude) { + const float current_z = static_cast(m_end_position[Z]); + // replace layer height placeholder with correct value + if (m_result.spiral_vase_layers.back().first == FLT_MAX) { + m_result.spiral_vase_layers.back().first = current_z; + } else { + m_result.spiral_vase_layers.back().first = std::max(m_result.spiral_vase_layers.back().first, current_z); + } + } + if (!m_result.moves.empty()) + m_result.spiral_vase_layers.back().second.second = m_result.moves.size() - 1 - m_seams_count; + } + //BBS: store move store_move_vertex(type, m_move_path_type); } @@ -4494,6 +4583,8 @@ void GCodeProcessor::process_filaments(CustomGCode::Type code) if (code == CustomGCode::ToolChange) { m_used_filaments.process_model_cache(this); + m_used_filaments.process_support_cache(this); + m_used_filaments.process_total_volume_cache(this); //BBS: reset remaining filament m_remaining_volume = m_nozzle_volume; } @@ -4525,10 +4616,12 @@ void GCodeProcessor::update_estimated_times_stats() m_result.print_statistics.modes[static_cast(PrintEstimatedStatistics::ETimeMode::Stealth)].reset(); m_result.print_statistics.volumes_per_color_change = m_used_filaments.volumes_per_color_change; - m_result.print_statistics.volumes_per_extruder = m_used_filaments.volumes_per_extruder; - m_result.print_statistics.wipe_tower_volumes_per_extruder = m_used_filaments.wipe_tower_volume_per_extruder; + m_result.print_statistics.model_volumes_per_extruder = m_used_filaments.model_volumes_per_extruder; + m_result.print_statistics.wipe_tower_volumes_per_extruder = m_used_filaments.wipe_tower_volumes_per_extruder; + m_result.print_statistics.support_volumes_per_extruder = m_used_filaments.support_volumes_per_extruder; m_result.print_statistics.flush_per_filament = m_used_filaments.flush_per_filament; m_result.print_statistics.used_filaments_per_role = m_used_filaments.filaments_per_role; + m_result.print_statistics.total_volumes_per_extruder = m_used_filaments.total_volumes_per_extruder; } //BBS: ugly code... @@ -4538,8 +4631,8 @@ void GCodeProcessor::update_slice_warnings() auto get_used_extruders = [this]() { std::vector used_extruders; - used_extruders.reserve(m_used_filaments.volumes_per_extruder.size()); - for (auto item : m_used_filaments.volumes_per_extruder) { + used_extruders.reserve(m_used_filaments.total_volumes_per_extruder.size()); + for (auto item : m_used_filaments.total_volumes_per_extruder) { used_extruders.push_back(item.first); } return used_extruders; diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 2b3a46206a..a1fd5237e3 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -22,6 +22,7 @@ namespace Slic3r { #define BED_TEMP_TOO_HIGH_THAN_FILAMENT "bed_temperature_too_high_than_filament" #define NOT_SUPPORT_TRADITIONAL_TIMELAPSE "not_support_traditional_timelapse" #define NOT_GENERATE_TIMELAPSE "not_generate_timelapse" +#define LONG_RETRACTION_WHEN_CUT "activate_long_retraction_when_cut" enum class EMoveType : unsigned char { @@ -72,8 +73,10 @@ namespace Slic3r { }; std::vector volumes_per_color_change; - std::map volumes_per_extruder; + std::map model_volumes_per_extruder; std::map wipe_tower_volumes_per_extruder; + std::map support_volumes_per_extruder; + std::map total_volumes_per_extruder; //BBS: the flush amount of every filament std::map flush_per_filament; std::map> used_filaments_per_role; @@ -90,7 +93,9 @@ namespace Slic3r { volumes_per_color_change.clear(); volumes_per_color_change.shrink_to_fit(); wipe_tower_volumes_per_extruder.clear(); - volumes_per_extruder.clear(); + model_volumes_per_extruder.clear(); + support_volumes_per_extruder.clear(); + total_volumes_per_extruder.clear(); flush_per_filament.clear(); used_filaments_per_role.clear(); total_filamentchanges = 0; @@ -195,6 +200,8 @@ namespace Slic3r { bool toolpath_outside; //BBS: add object_label_enabled bool label_object_enabled; + //BBS : extra retraction when change filament,experiment func + bool long_retraction_when_cut {0}; int timelapse_warning_code {0}; bool support_traditional_timelapse{true}; float printable_height; @@ -205,6 +212,7 @@ namespace Slic3r { std::vector required_nozzle_HRC; std::vector filament_densities; std::vector filament_costs; + std::vector filament_flow_ratios; std::vector filament_vitrification_temperature; PrintEstimatedStatistics print_statistics; std::vector custom_gcode_per_print_z; @@ -231,6 +239,7 @@ namespace Slic3r { bed_exclude_area = other.bed_exclude_area; toolpath_outside = other.toolpath_outside; label_object_enabled = other.label_object_enabled; + long_retraction_when_cut = other.long_retraction_when_cut; timelapse_warning_code = other.timelapse_warning_code; printable_height = other.printable_height; settings_ids = other.settings_ids; @@ -239,6 +248,7 @@ namespace Slic3r { filament_diameters = other.filament_diameters; filament_densities = other.filament_densities; filament_costs = other.filament_costs; + filament_flow_ratios = other.filament_flow_ratios; print_statistics = other.print_statistics; custom_gcode_per_print_z = other.custom_gcode_per_print_z; spiral_vase_layers = other.spiral_vase_layers; @@ -495,25 +505,35 @@ namespace Slic3r { std::vector volumes_per_color_change; double model_extrude_cache; - std::map volumes_per_extruder; + std::map model_volumes_per_extruder; double wipe_tower_cache; - std::mapwipe_tower_volume_per_extruder; + std::mapwipe_tower_volumes_per_extruder; + + double support_volume_cache; + std::mapsupport_volumes_per_extruder; //BBS: the flush amount of every filament std::map flush_per_filament; + double total_volume_cache; + std::maptotal_volumes_per_extruder; + double role_cache; std::map> filaments_per_role; void reset(); + void increase_support_caches(double extruded_volume); void increase_model_caches(double extruded_volume); void increase_wipe_tower_caches(double extruded_volume); void process_color_change_cache(); void process_model_cache(GCodeProcessor* processor); void process_wipe_tower_cache(GCodeProcessor* processor); + void process_support_cache(GCodeProcessor* processor); + void process_total_volume_cache(GCodeProcessor* processor); + void update_flush_per_filament(size_t extrude_id, float flush_length); void process_role_cache(GCodeProcessor* processor); void process_caches(GCodeProcessor* processor); diff --git a/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp index 0a1ffaa131..681bd92083 100644 --- a/src/libslic3r/GCode/PressureEqualizer.cpp +++ b/src/libslic3r/GCode/PressureEqualizer.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include #include diff --git a/src/libslic3r/GCode/PressureEqualizer.hpp b/src/libslic3r/GCode/PressureEqualizer.hpp index f03ecaeaec..3563cdabc6 100644 --- a/src/libslic3r/GCode/PressureEqualizer.hpp +++ b/src/libslic3r/GCode/PressureEqualizer.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GCode_PressureEqualizer_hpp_ #define slic3r_GCode_PressureEqualizer_hpp_ diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp index 301759d29b..e447d12d87 100644 --- a/src/libslic3r/GCode/SeamPlacer.cpp +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -856,7 +856,7 @@ void debug_export_points(const std::vector &lay float max_weight = min_weight; for (const SeamCandidate &point : layers[layer_idx].points) { - Vec3i color = value_to_rgbi(-PI, PI, point.local_ccw_angle); + Vec3i32 color = value_to_rgbi(-PI, PI, point.local_ccw_angle); std::string fill = "rgb(" + std::to_string(color.x()) + "," + std::to_string(color.y()) + "," + std::to_string(color.z()) + ")"; angles_svg.draw(scaled(Vec2f(point.position.head<2>())), fill); @@ -879,19 +879,19 @@ void debug_export_points(const std::vector &lay SVG overhangs_svg { overhangs_file_name, bounding_box }; for (const SeamCandidate &point : layers[layer_idx].points) { - Vec3i color = value_to_rgbi(min_vis, max_vis, point.visibility); + Vec3i32 color = value_to_rgbi(min_vis, max_vis, point.visibility); std::string visibility_fill = "rgb(" + std::to_string(color.x()) + "," + std::to_string(color.y()) + "," + std::to_string(color.z()) + ")"; visibility_svg.draw(scaled(Vec2f(point.position.head<2>())), visibility_fill); - Vec3i weight_color = value_to_rgbi(min_weight, max_weight, + Vec3i32 weight_color = value_to_rgbi(min_weight, max_weight, -compute_angle_penalty(point.local_ccw_angle)); std::string weight_fill = "rgb(" + std::to_string(weight_color.x()) + "," + std::to_string(weight_color.y()) + "," + std::to_string(weight_color.z()) + ")"; weight_svg.draw(scaled(Vec2f(point.position.head<2>())), weight_fill); - Vec3i overhang_color = value_to_rgbi(-0.5, 0.5, std::clamp(point.overhang, -0.5f, 0.5f)); + Vec3i32 overhang_color = value_to_rgbi(-0.5, 0.5, std::clamp(point.overhang, -0.5f, 0.5f)); std::string overhang_fill = "rgb(" + std::to_string(overhang_color.x()) + "," + std::to_string(overhang_color.y()) + "," @@ -1073,7 +1073,7 @@ void SeamPlacer::calculate_overhangs_and_layer_embedding(const PrintObject *po) if (prev_layer_distancer.get() != nullptr) { const auto _dist = prev_layer_distancer->distance_from_lines(point.cast()); perimeter_point.overhang = _dist - + 0.6f * perimeter_point.perimeter.flow_width + + 0.65f * perimeter_point.perimeter.flow_width - tan(SeamPlacer::overhang_angle_threshold) * po->layers()[layer_idx]->height; perimeter_point.overhang = @@ -1083,7 +1083,7 @@ void SeamPlacer::calculate_overhangs_and_layer_embedding(const PrintObject *po) if (should_compute_layer_embedding) { // search for embedded perimeter points (points hidden inside the print ,e.g. multimaterial join, best position for seam) perimeter_point.embedded_distance = current_layer_distancer->distance_from_lines(point.cast()) - + 0.6f * perimeter_point.perimeter.flow_width; + + 0.65f * perimeter_point.perimeter.flow_width; } } diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp index 430cccf957..a8a04cc672 100644 --- a/src/libslic3r/GCode/SeamPlacer.hpp +++ b/src/libslic3r/GCode/SeamPlacer.hpp @@ -119,7 +119,7 @@ public: // snapping angle - angles larger than this value will be snapped to during seam painting static constexpr float sharp_angle_snapping_threshold = 55.0f * float(PI) / 180.0f; // overhang angle for seam placement that still yields good results, in degrees, measured from vertical direction - static constexpr float overhang_angle_threshold = 50.0f * float(PI) / 180.0f; + static constexpr float overhang_angle_threshold = 45.0f * float(PI) / 180.0f; // determines angle importance compared to visibility ( neutral value is 1.0f. ) static constexpr float angle_importance_aligned = 0.6f; diff --git a/src/libslic3r/GCode/SpiralVase.cpp b/src/libslic3r/GCode/SpiralVase.cpp index e1440bc7db..8462e73111 100644 --- a/src/libslic3r/GCode/SpiralVase.cpp +++ b/src/libslic3r/GCode/SpiralVase.cpp @@ -164,13 +164,19 @@ std::string SpiralVase::process_layer(const std::string &gcode, bool last_layer) if (found && dist < max_xy_dist_for_smoothing) { // Interpolate between the point on this layer and the point on the previous layer SpiralVase::SpiralPoint target = SpiralVaseHelpers::add(SpiralVaseHelpers::scale(nearestp, 1 - factor), SpiralVaseHelpers::scale(p, factor)); - line.set(reader, X, target.x); - line.set(reader, Y, target.y); + + // Remove tiny movement // We need to figure out the distance of this new line! float modified_dist_XY = SpiralVaseHelpers::distance(last_point, target); - // Scale the extrusion amount according to change in length - line.set(reader, E, line.e() * modified_dist_XY / dist_XY, 5 /*decimal_digits*/); - last_point = target; + if (modified_dist_XY < 0.001) + line.clear(); + else { + line.set(reader, X, target.x); + line.set(reader, Y, target.y); + // Scale the extrusion amount according to change in length + line.set(reader, E, line.e() * modified_dist_XY / dist_XY, 5 /*decimal_digits*/); + last_point = target; + } } else { last_point = p; } diff --git a/src/libslic3r/GCode/Thumbnails.cpp b/src/libslic3r/GCode/Thumbnails.cpp index 5d78584a4c..352cc8444b 100644 --- a/src/libslic3r/GCode/Thumbnails.cpp +++ b/src/libslic3r/GCode/Thumbnails.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Thumbnails.hpp" #include "../miniz_extension.hpp" @@ -528,5 +524,81 @@ int ColPic_EncodeStr(unsigned short* fromcolor16, int picw, int pich, unsigned c outputdata[qty] = 0; return qty; } +std::pair make_and_check_thumbnail_list(const std::string& thumbnails_string, const std::string_view def_ext /*= "PNG"sv*/) +{ + if (thumbnails_string.empty()) + return {}; + + std::istringstream is(thumbnails_string); + std::string point_str; + + ThumbnailErrors errors; + + // generate thumbnails data to process it + + GCodeThumbnailDefinitionsList thumbnails_list; + while (std::getline(is, point_str, ',')) { + Vec2d point(Vec2d::Zero()); + GCodeThumbnailsFormat format; + std::istringstream iss(point_str); + std::string coord_str; + if (std::getline(iss, coord_str, 'x') && !coord_str.empty()) { + std::istringstream(coord_str) >> point(0); + if (std::getline(iss, coord_str, '/') && !coord_str.empty()) { + std::istringstream(coord_str) >> point(1); + + if (0 < point(0) && point(0) < 1000 && 0 < point(1) && point(1) < 1000) { + std::string ext_str; + std::getline(iss, ext_str, '/'); + + if (ext_str.empty()) + ext_str = def_ext.empty() ? "PNG"sv : def_ext; + + // check validity of extention + boost::to_upper(ext_str); + if (!ConfigOptionEnum::from_string(ext_str, format)) { + format = GCodeThumbnailsFormat::PNG; + errors = enum_bitmask(errors | ThumbnailError::InvalidExt); + } + + thumbnails_list.emplace_back(std::make_pair(format, point)); + } + else + errors = enum_bitmask(errors | ThumbnailError::OutOfRange); + continue; + } + } + errors = enum_bitmask(errors | ThumbnailError::InvalidVal); + } + + return std::make_pair(std::move(thumbnails_list), errors); +} + +std::pair make_and_check_thumbnail_list(const ConfigBase& config) +{ + // ??? Unit tests or command line slicing may not define "thumbnails" or "thumbnails_format". + // ??? If "thumbnails_format" is not defined, export to PNG. + + // generate thumbnails data to process it + + if (const auto thumbnails_value = config.option("thumbnails")) + return make_and_check_thumbnail_list(thumbnails_value->value); + + return {}; +} + +std::string get_error_string(const ThumbnailErrors& errors) +{ + std::string error_str; + + if (errors.has(ThumbnailError::InvalidVal)) + error_str += "\n - " + format("Invalid input format. Expected vector of dimensions in the following format: \"%1%\"", "XxY/EXT, XxY/EXT, ..."); + if (errors.has(ThumbnailError::OutOfRange)) + error_str += "\n - Input value is out of range"; + if (errors.has(ThumbnailError::InvalidExt)) + error_str += "\n - Some extension in the input is invalid"; + + return error_str; +} } // namespace Slic3r::GCodeThumbnails diff --git a/src/libslic3r/GCode/Thumbnails.hpp b/src/libslic3r/GCode/Thumbnails.hpp index 0d6e3f1bcb..3a6a6d69fb 100644 --- a/src/libslic3r/GCode/Thumbnails.hpp +++ b/src/libslic3r/GCode/Thumbnails.hpp @@ -1,13 +1,8 @@ -///|/ Copyright (c) Prusa Research 2022 Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GCodeThumbnails_hpp_ #define slic3r_GCodeThumbnails_hpp_ #include "../Point.hpp" #include "../PrintConfig.hpp" -#include "PrintConfig.hpp" #include "ThumbnailData.hpp" #include @@ -16,6 +11,12 @@ #include +namespace Slic3r { + enum class ThumbnailError : int { InvalidVal, OutOfRange, InvalidExt }; + using ThumbnailErrors = enum_bitmask; + ENABLE_ENUM_BITMASK_OPERATORS(ThumbnailError); +} + namespace Slic3r::GCodeThumbnails { struct CompressedImageBuffer @@ -29,20 +30,30 @@ struct CompressedImageBuffer std::string get_hex(const unsigned int input); std::string rjust(std::string input, unsigned int width, char fill_char); std::unique_ptr compress_thumbnail(const ThumbnailData &data, GCodeThumbnailsFormat format); +std::string get_error_string(const ThumbnailErrors& errors); + + +typedef std::vector> GCodeThumbnailDefinitionsList; +using namespace std::literals; +std::pair make_and_check_thumbnail_list(const std::string& thumbnails_string, const std::string_view def_ext = "PNG"sv); +std::pair make_and_check_thumbnail_list(const ConfigBase &config); + template -inline void export_thumbnails_to_file(ThumbnailsGeneratorCallback &thumbnail_cb, - int plate_id, - const std::vector &sizes, - GCodeThumbnailsFormat format, - WriteToOutput output, - ThrowIfCanceledCallback throw_if_canceled) +inline void export_thumbnails_to_file(ThumbnailsGeneratorCallback& thumbnail_cb, + int plate_id, + const std::vector>& thumbnails_list, + WriteToOutput output, + ThrowIfCanceledCallback throw_if_canceled) { // Write thumbnails using base64 encoding - if (thumbnail_cb != nullptr) { + if (thumbnail_cb == nullptr) + return; + short i = 0; + bool first_ColPic = true; + for (const auto& [format, size] : thumbnails_list) { static constexpr const size_t max_row_length = 78; - ThumbnailsList thumbnails = thumbnail_cb(ThumbnailsParams{sizes, true, true, true, true, plate_id}); - short i = 0; + ThumbnailsList thumbnails = thumbnail_cb(ThumbnailsParams{{size}, true, true, true, true, plate_id}); for (const ThumbnailData &data : thumbnails) { if (data.is_valid()) { auto compressed = compress_thumbnail(data, format); @@ -51,15 +62,16 @@ inline void export_thumbnails_to_file(ThumbnailsGeneratorCallback &thumbnail_cb, // write BTT_TFT header output((";" + rjust(get_hex(data.width), 4, '0') + rjust(get_hex(data.height), 4, '0') + "\r\n").c_str()); output((char *) compressed->data); - if (i == (thumbnails.size() - 1)) + if (i == (thumbnails_list.size() - 1)) output("; bigtree thumbnail end\r\n\r\n"); } else if (format == GCodeThumbnailsFormat::ColPic) { - if (i == 0) { + if (first_ColPic) { output((boost::format("\n\n;gimage:%s\n\n") % reinterpret_cast(compressed->data)).str().c_str()); } else { output((boost::format("\n\n;simage:%s\n\n") % reinterpret_cast(compressed->data)).str().c_str()); } + first_ColPic = false; } else { output("; THUMBNAIL_BLOCK_START\n"); @@ -84,10 +96,9 @@ inline void export_thumbnails_to_file(ThumbnailsGeneratorCallback &thumbnail_cb, } throw_if_canceled(); } - - i++; } } + i++; } } diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index a5aaf4e00b..e5c3260084 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -1,6 +1,8 @@ #include "Print.hpp" #include "ToolOrdering.hpp" #include "Layer.hpp" +#include "ClipperUtils.hpp" +#include "ParameterUtils.hpp" // #define SLIC3R_DEBUG @@ -21,9 +23,80 @@ namespace Slic3r { const static bool g_wipe_into_objects = false; -std::vector get_extruders_order(const std::vector> &wipe_volumes, std::vector all_extruders, unsigned int start_extruder_id) + +// Shortest hamilton path problem +static std::vector solve_extruder_order(const std::vector>& wipe_volumes, std::vector all_extruders, std::optional start_extruder_id) { - if (all_extruders.size() > 1) { + bool add_start_extruder_flag = false; + + if (start_extruder_id) { + auto start_iter = std::find(all_extruders.begin(), all_extruders.end(), start_extruder_id); + if (start_iter == all_extruders.end()) + all_extruders.insert(all_extruders.begin(), *start_extruder_id), add_start_extruder_flag = true; + else + std::swap(*all_extruders.begin(), *start_iter); + } + else { + *start_extruder_id = all_extruders.front(); + } + + unsigned int iterations = (1 << all_extruders.size()); + unsigned int final_state = iterations - 1; + std::vector>cache(iterations, std::vector(all_extruders.size(),0x7fffffff)); + std::vector>prev(iterations, std::vector(all_extruders.size(), -1)); + cache[1][0] = 0.; + for (unsigned int state = 0; state < iterations; ++state) { + if (state & 1) { + for (unsigned int target = 0; target < all_extruders.size(); ++target) { + if (state >> target & 1) { + for (unsigned int mid_point = 0; mid_point < all_extruders.size(); ++mid_point) { + if(state>>mid_point&1){ + auto tmp = cache[state - (1 << target)][mid_point] + wipe_volumes[all_extruders[mid_point]][all_extruders[target]]; + if (cache[state][target] >tmp) { + cache[state][target] = tmp; + prev[state][target] = mid_point; + } + } + } + } + } + } + } + + //get res + float cost = std::numeric_limits::max(); + int final_dst =0; + for (unsigned int dst = 0; dst < all_extruders.size(); ++dst) { + if (all_extruders[dst] != start_extruder_id && cost > cache[final_state][dst]) { + cost = cache[final_state][dst]; + final_dst = dst; + } + } + + std::vectorpath; + unsigned int curr_state = final_state; + int curr_point = final_dst; + while (curr_point != -1) { + path.emplace_back(all_extruders[curr_point]); + auto mid_point = prev[curr_state][curr_point]; + curr_state -= (1 << curr_point); + curr_point = mid_point; + }; + + if (add_start_extruder_flag) + path.pop_back(); + + std::reverse(path.begin(), path.end()); + return path; +} + +std::vector get_extruders_order(const std::vector> &wipe_volumes, std::vector all_extruders, std::optionalstart_extruder_id) +{ +#define USE_DP_OPTIMIZE +#ifdef USE_DP_OPTIMIZE + return solve_extruder_order(wipe_volumes, all_extruders, start_extruder_id); +#else +if (all_extruders.size() > 1) { int begin_index = 0; auto iter = std::find(all_extruders.begin(), all_extruders.end(), start_extruder_id); if (iter != all_extruders.end()) { @@ -52,8 +125,9 @@ std::vector get_extruders_order(const std::vector(number_of_extruders, print_config->prime_volume)); } - - unsigned int current_extruder_id = -1; + + auto extruders_to_hash_key = [](const std::vector& extruders, + std::optional initial_extruder_id) -> uint32_t { + uint32_t hash_key = 0; + // high 16 bit define initial extruder ,low 16 bit define extruder set + if (initial_extruder_id) + hash_key |= (1 << (16 + *initial_extruder_id)); + for (auto item : extruders) + hash_key |= (1 << item); + return hash_key; + }; + + std::vector other_layers_seqs; + const ConfigOptionInts *other_layers_print_sequence_op = print_config->option("other_layers_print_sequence"); + const ConfigOptionInt *other_layers_print_sequence_nums_op = print_config->option("other_layers_print_sequence_nums"); + if (other_layers_print_sequence_op && other_layers_print_sequence_nums_op) { + const std::vector &print_sequence = other_layers_print_sequence_op->values; + int sequence_nums = other_layers_print_sequence_nums_op->value; + other_layers_seqs = get_other_layers_print_sequence(sequence_nums, print_sequence); + } + + // other_layers_seq: the layer_idx and extruder_idx are base on 1 + auto get_custom_seq = [&other_layers_seqs](int layer_idx, std::vector& out_seq) -> bool { + for (size_t idx = other_layers_seqs.size() - 1; idx != size_t(-1); --idx) { + const auto &other_layers_seq = other_layers_seqs[idx]; + if (layer_idx + 1 >= other_layers_seq.first.first && layer_idx + 1 <= other_layers_seq.first.second) { + out_seq = other_layers_seq.second; + return true; + } + } + return false; + }; + + std::optionalcurrent_extruder_id; for (int i = 0; i < m_layer_tools.size(); ++i) { LayerTools& lt = m_layer_tools[i]; if (lt.extruders.empty()) continue; - // todo: The algorithm complexity is too high(o(n2)), currently only 12 colors are supported - if (i != 0 && lt.extruders.size() <= 12) { - lt.extruders = get_extruders_order(wipe_volumes, lt.extruders, current_extruder_id); + + std::vector custom_extruder_seq; + if (get_custom_seq(i, custom_extruder_seq) && !custom_extruder_seq.empty()) { + std::vector unsign_custom_extruder_seq; + for (int extruder : custom_extruder_seq) { + unsigned int unsign_extruder = static_cast(extruder) - 1; + auto it = std::find(lt.extruders.begin(), lt.extruders.end(), unsign_extruder); + if (it != lt.extruders.end()) { + unsign_custom_extruder_seq.emplace_back(unsign_extruder); + } + } + assert(lt.extruders.size() == unsign_custom_extruder_seq.size()); + lt.extruders = unsign_custom_extruder_seq; + current_extruder_id = lt.extruders.back(); + continue; + } + + // The algorithm complexity is O(n2*2^n) + if (i != 0) { + auto hash_key = extruders_to_hash_key(lt.extruders, current_extruder_id); + auto iter = m_tool_order_cache.find(hash_key); + if (iter == m_tool_order_cache.end()) { + lt.extruders = get_extruders_order(wipe_volumes, lt.extruders, current_extruder_id); + std::vector hash_val; + hash_val.reserve(lt.extruders.size()); + for (auto item : lt.extruders) + hash_val.emplace_back(static_cast(item)); + m_tool_order_cache[hash_key] = hash_val; + } + else { + std::vectorextruder_order; + extruder_order.reserve(iter->second.size()); + for (auto item : iter->second) + extruder_order.emplace_back(static_cast(item)); + lt.extruders = std::move(extruder_order); + } } current_extruder_id = lt.extruders.back(); } diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 1cc6f74c8a..d9a93131a7 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -156,7 +156,9 @@ public: // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering(const Print& print, unsigned int first_extruder, bool prime_multi_material = false); - void clear() { m_layer_tools.clear(); } + void clear() { + m_layer_tools.clear(); m_tool_order_cache.clear(); + } // Only valid for non-sequential print: // Assign a pointer to a custom G-code to the respective ToolOrdering::LayerTools. @@ -207,7 +209,7 @@ private: unsigned int m_last_printing_extruder = (unsigned int)-1; // All extruders, which extrude some material over m_layer_tools. std::vector m_all_printing_extruders; - + std::unordered_map> m_tool_order_cache; const PrintConfig* m_print_config_ptr = nullptr; const PrintObject* m_print_object_ptr = nullptr; bool m_is_BBL_printer = false; diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 642b07c9dd..39c603a470 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -76,6 +76,9 @@ public: m_gcode_flavor(flavor), m_filpar(filament_parameters) { + // ORCA: This class is only used by BBL printers, so set the parameter appropriately. + // This fixes an issue where the wipe tower was using BBL tags resulting in statistics for purging in the purge tower not being displayed. + GCodeProcessor::s_IsBBLPrinter = true; // adds tag for analyzer: std::ostringstream str; str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) << std::to_string(m_layer_height) << "\n"; // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 3c717a063d..6e96e21150 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -1,13 +1,6 @@ // Orca: This file is ported from latest PrusaSlicer // Original PrusaSlicer Copyright: -///|/ Copyright (c) Prusa Research 2017 - 2023 Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966 -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ Copyright (c) 2020 Paul Arden @ardenpm -///|/ Copyright (c) 2019 Thomas Moore -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "WipeTower2.hpp" #include @@ -50,6 +43,9 @@ public: m_gcode_flavor(flavor), m_filpar(filament_parameters) { + // ORCA: This class is only used by non BBL printers, so set the parameter appropriately. + // This fixes an issue where the wipe tower was using BBL tags resulting in statistics for purging in the purge tower not being displayed. + GCodeProcessor::s_IsBBLPrinter = false; // adds tag for analyzer: std::ostringstream str; str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) << m_layer_height << "\n"; // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming @@ -547,7 +543,8 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau m_infill_speed(default_region_config.sparse_infill_speed), m_perimeter_speed(default_region_config.inner_wall_speed), m_current_tool(initial_tool), - wipe_volumes(wiping_matrix) + wipe_volumes(wiping_matrix), + m_wipe_tower_max_purge_speed(float(config.wipe_tower_max_purge_speed)) { // Read absolute value of first layer speed, if given as percentage, // it is taken over following default. Speeds from config are not @@ -803,9 +800,11 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) "; CP TOOLCHANGE START\n") .comment_with_value(" toolchange #", m_num_tool_changes + 1); // the number is zero-based - if (tool != (unsigned)(-1)) + if (tool != (unsigned)(-1)){ writer.append(std::string("; material : " + (m_current_tool < m_filpar.size() ? m_filpar[m_current_tool].material : "(NONE)") + " -> " + m_filpar[tool].material + "\n").c_str()) - .append(";--------------------\n"); + .append(";--------------------\n"); + writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_Start) + "\n"); + } writer.speed_override_backup(); writer.speed_override(100); @@ -825,6 +824,7 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) toolchange_Load(writer, cleaning_box); writer.travel(writer.x(), writer.y()-m_perimeter_width); // cooling and loading were done a bit down the road toolchange_Wipe(writer, cleaning_box, wipe_volume); // Wipe the newly loaded filament until the end of the assigned wipe area. + writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_End) + "\n"); ++ m_num_tool_changes; } else toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, m_filpar[m_current_tool].temperature); @@ -1093,7 +1093,7 @@ void WipeTower2::toolchange_Wipe( // All the calculations in all other places take the spacing into account for all the layers. // If spare layers are excluded->if 1 or less toolchange has been done, it must be sill the first layer, too.So slow down. - const float target_speed = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers) ? m_first_layer_speed * 60.f : std::min(5400.f, m_infill_speed * 60.f); + const float target_speed = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers) ? m_first_layer_speed * 60.f : std::min(m_wipe_tower_max_purge_speed * 60.f, m_infill_speed * 60.f); float wipe_speed = 0.33f * target_speed; // if there is less than 2.5*m_perimeter_width to the edge, advance straightaway (there is likely a blob anyway) @@ -1163,7 +1163,7 @@ WipeTower::ToolChangeResult WipeTower2::finish_layer() // Slow down on the 1st layer. // If spare layers are excluded -> if 1 or less toolchange has been done, it must be still the first layer, too. So slow down. bool first_layer = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers); - float feedrate = first_layer ? m_first_layer_speed * 60.f : std::min(5400.f, m_infill_speed * 60.f); + float feedrate = first_layer ? m_first_layer_speed * 60.f : std::min(m_wipe_tower_max_purge_speed * 60.f, m_infill_speed * 60.f); float current_depth = m_layer_info->depth - m_layer_info->toolchanges_depth(); WipeTower::box_coordinates fill_box(Vec2f(m_perimeter_width, m_layer_info->depth-(current_depth-m_perimeter_width)), m_wipe_tower_width - 2 * m_perimeter_width, current_depth-m_perimeter_width); diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index 8fd5d5de31..58bdd6fc39 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -1,10 +1,6 @@ // Orca: This file is ported from latest PrusaSlicer // Original PrusaSlicer Copyright: -///|/ Copyright (c) Prusa Research 2017 - 2023 Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef WipeTower2_ #define WipeTower2_ @@ -189,6 +185,7 @@ private: int m_old_temperature = -1; // To keep track of what was the last temp that we set (so we don't issue the command when not neccessary) float m_travel_speed = 0.f; float m_infill_speed = 0.f; + float m_wipe_tower_max_purge_speed = 90.f; float m_perimeter_speed = 0.f; float m_first_layer_speed = 0.f; size_t m_first_layer_idx = size_t(-1); diff --git a/src/libslic3r/GCodeReader.hpp b/src/libslic3r/GCodeReader.hpp index ea0df3dd70..52a37dde55 100644 --- a/src/libslic3r/GCodeReader.hpp +++ b/src/libslic3r/GCodeReader.hpp @@ -26,6 +26,7 @@ public: const std::string_view comment() const { size_t pos = m_raw.find(';'); return (pos == std::string::npos) ? std::string_view() : std::string_view(m_raw).substr(pos + 1); } + void clear() { m_raw.clear(); } bool has(Axis axis) const { return (m_mask & (1 << int(axis))) != 0; } float value(Axis axis) const { return m_axis[axis]; } bool has(char axis) const; diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index 27c58a0702..b335faed49 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -21,7 +21,7 @@ public: m_single_extruder_multi_material(false), m_last_acceleration(0), m_max_acceleration(0),m_last_travel_acceleration(0), m_max_travel_acceleration(0), m_last_jerk(0), m_max_jerk(0), - /*m_last_bed_temperature(0), */m_last_bed_temperature_reached(true), + m_last_bed_temperature(0), m_last_bed_temperature_reached(true), m_lifted(0), m_to_lift(0), m_to_lift_type(LiftType::NormalLift), diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index 46f7b10368..54dcb14cca 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -1,17 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/Geometry.pm: -///|/ Copyright (c) Prusa Research 2017 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2013 Jose Luis Perez Diez -///|/ Copyright (c) 2013 Anders Sundman -///|/ Copyright (c) 2013 Jesse Vincent -///|/ Copyright (c) 2012 Mike Sheldrake @mesheldrake -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r.h" #include "Exception.hpp" #include "Geometry.hpp" diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp index 616fb56495..67b27dd293 100644 --- a/src/libslic3r/Geometry.hpp +++ b/src/libslic3r/Geometry.hpp @@ -1,18 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Lukáš Hejl @hejllukas -///|/ Copyright (c) 2017 Eyal Soha @eyal0 -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/Geometry.pm: -///|/ Copyright (c) Prusa Research 2017 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2013 Jose Luis Perez Diez -///|/ Copyright (c) 2013 Anders Sundman -///|/ Copyright (c) 2013 Jesse Vincent -///|/ Copyright (c) 2012 Mike Sheldrake @mesheldrake -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Geometry_hpp_ #define slic3r_Geometry_hpp_ @@ -48,14 +33,24 @@ enum Orientation // As the points are limited to 30 bits + signum, // the temporaries u, v, w are limited to 61 bits + signum, // and d is limited to 63 bits + signum and we are good. -static inline Orientation orient(const Point &a, const Point &b, const Point &c) -{ - static_assert(sizeof(coord_t) * 2 == sizeof(int64_t), "orient works with 32 bit coordinates"); - int64_t u = int64_t(b.x()) * int64_t(c.y()) - int64_t(b.y()) * int64_t(c.x()); - int64_t v = int64_t(a.x()) * int64_t(c.y()) - int64_t(a.y()) * int64_t(c.x()); - int64_t w = int64_t(a.x()) * int64_t(b.y()) - int64_t(a.y()) * int64_t(b.x()); - int64_t d = u - v + w; - return (d > 0) ? ORIENTATION_CCW : ((d == 0) ? ORIENTATION_COLINEAR : ORIENTATION_CW); +//note: now coord_t is int64_t, so the algorithm is now adjusted to fallback to double is too big. +static inline Orientation orient(const Point &a, const Point &b, const Point &c) { + //static_assert(sizeof(coord_t) * 2 == sizeof(int64_t), "orient works with 32 bit coordinates"); + // BOOST_STATIC_ASSERT(sizeof(coord_t) == sizeof(int64_t)); + if (a.x() <= 0xffffffff && b.x() <= 0xffffffff && c.x() <= 0xffffffff && + a.y() <= 0xffffffff && b.y() <= 0xffffffff && c.y() <= 0xffffffff) { + int64_t u = int64_t(b(0)) * int64_t(c(1)) - int64_t(b(1)) * int64_t(c(0)); + int64_t v = int64_t(a(0)) * int64_t(c(1)) - int64_t(a(1)) * int64_t(c(0)); + int64_t w = int64_t(a(0)) * int64_t(b(1)) - int64_t(a(1)) * int64_t(b(0)); + int64_t d = u - v + w; + return (d > 0) ? ORIENTATION_CCW : ((d == 0) ? ORIENTATION_COLINEAR : ORIENTATION_CW); + } else { + double u = double(b(0)) * double(c(1)) - double(b(1)) * double(c(0)); + double v = double(a(0)) * double(c(1)) - double(a(1)) * double(c(0)); + double w = double(a(0)) * double(b(1)) - double(a(1)) * double(b(0)); + double d = u - v + w; + return (d > 0) ? ORIENTATION_CCW : ((d == 0) ? ORIENTATION_COLINEAR : ORIENTATION_CW); + } } // Return orientation of the polygon by checking orientation of the left bottom corner of the polygon diff --git a/src/libslic3r/Geometry/Circle.cpp b/src/libslic3r/Geometry/Circle.cpp index 012b240f8a..6796671954 100644 --- a/src/libslic3r/Geometry/Circle.cpp +++ b/src/libslic3r/Geometry/Circle.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Circle.hpp" #include "../Polygon.hpp" diff --git a/src/libslic3r/Geometry/Circle.hpp b/src/libslic3r/Geometry/Circle.hpp index a192cc2fd6..653102e2ab 100644 --- a/src/libslic3r/Geometry/Circle.hpp +++ b/src/libslic3r/Geometry/Circle.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Geometry_Circle_hpp_ #define slic3r_Geometry_Circle_hpp_ diff --git a/src/libslic3r/Geometry/MedialAxis.cpp b/src/libslic3r/Geometry/MedialAxis.cpp index 39677c9285..2a27db1d8a 100644 --- a/src/libslic3r/Geometry/MedialAxis.cpp +++ b/src/libslic3r/Geometry/MedialAxis.cpp @@ -448,7 +448,7 @@ MedialAxis::MedialAxis(double min_width, double max_width, const ExPolygon &expo void MedialAxis::build(ThickPolylines* polylines) { - construct_voronoi(m_lines.begin(), m_lines.end(), &m_vd); + m_vd.construct_voronoi(m_lines.begin(), m_lines.end()); Slic3r::Voronoi::annotate_inside_outside(m_vd, m_lines); // static constexpr double threshold_alpha = M_PI / 12.; // 30 degrees // std::vector skeleton_edges = Slic3r::Voronoi::skeleton_edges_rough(vd, lines, threshold_alpha); @@ -594,13 +594,13 @@ bool MedialAxis::validate_edge(const VD::edge_type* edge) }; // prevent overflows and detect almost-infinite edges -#ifndef CLIPPERLIB_INT32 - if (std::abs(edge->vertex0()->x()) > double(CLIPPER_MAX_COORD_UNSCALED) || - std::abs(edge->vertex0()->y()) > double(CLIPPER_MAX_COORD_UNSCALED) || - std::abs(edge->vertex1()->x()) > double(CLIPPER_MAX_COORD_UNSCALED) || - std::abs(edge->vertex1()->y()) > double(CLIPPER_MAX_COORD_UNSCALED)) - return false; -#endif // CLIPPERLIB_INT32 +// #ifndef CLIPPERLIB_INT32 +// if (std::abs(edge->vertex0()->x()) > double(CLIPPER_MAX_COORD_UNSCALED) || +// std::abs(edge->vertex0()->y()) > double(CLIPPER_MAX_COORD_UNSCALED) || +// std::abs(edge->vertex1()->x()) > double(CLIPPER_MAX_COORD_UNSCALED) || +// std::abs(edge->vertex1()->y()) > double(CLIPPER_MAX_COORD_UNSCALED)) +// return false; +// #endif // CLIPPERLIB_INT32 // construct the line representing this edge of the Voronoi diagram const Line line({ edge->vertex0()->x(), edge->vertex0()->y() }, diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp new file mode 100644 index 0000000000..0842ddc37b --- /dev/null +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -0,0 +1,356 @@ +#include "Voronoi.hpp" + +#include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" +#include "libslic3r/Geometry/VoronoiUtils.hpp" +#include "libslic3r/Geometry/VoronoiUtilsCgal.hpp" +#include "libslic3r/MultiMaterialSegmentation.hpp" + +#include + +namespace Slic3r::Geometry { + +using PolygonsSegmentIndexConstIt = std::vector::const_iterator; +using LinesIt = Lines::iterator; +using ColoredLinesConstIt = ColoredLines::const_iterator; + +// Explicit template instantiation. +template void VoronoiDiagram::construct_voronoi(LinesIt, LinesIt, bool); +template void VoronoiDiagram::construct_voronoi(ColoredLinesConstIt, ColoredLinesConstIt, bool); +template void VoronoiDiagram::construct_voronoi(PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt, bool); + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + void>::type +VoronoiDiagram::construct_voronoi(const SegmentIterator segment_begin, const SegmentIterator segment_end, const bool try_to_repair_if_needed) { + boost::polygon::construct_voronoi(segment_begin, segment_end, &m_voronoi_diagram); + if (try_to_repair_if_needed) { + if (m_issue_type = detect_known_issues(*this, segment_begin, segment_end); m_issue_type != IssueType::NO_ISSUE_DETECTED) { + if (m_issue_type == IssueType::MISSING_VORONOI_VERTEX) { + BOOST_LOG_TRIVIAL(warning) << "Detected missing Voronoi vertex, input polygons will be rotated back and forth."; + } else if (m_issue_type == IssueType::NON_PLANAR_VORONOI_DIAGRAM) { + BOOST_LOG_TRIVIAL(warning) << "Detected non-planar Voronoi diagram, input polygons will be rotated back and forth."; + } else if (m_issue_type == IssueType::VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT) { + BOOST_LOG_TRIVIAL(warning) << "Detected Voronoi edge intersecting input segment, input polygons will be rotated back and forth."; + } else if (m_issue_type == IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX) { + BOOST_LOG_TRIVIAL(warning) << "Detected finite Voronoi vertex with non finite vertex, input polygons will be rotated back and forth."; + } else { + BOOST_LOG_TRIVIAL(error) << "Detected unknown Voronoi diagram issue, input polygons will be rotated back and forth."; + } + + if (m_issue_type = try_to_repair_degenerated_voronoi_diagram(segment_begin, segment_end); m_issue_type != IssueType::NO_ISSUE_DETECTED) { + if (m_issue_type == IssueType::MISSING_VORONOI_VERTEX) { + BOOST_LOG_TRIVIAL(error) << "Detected missing Voronoi vertex even after the rotation of input."; + } else if (m_issue_type == IssueType::NON_PLANAR_VORONOI_DIAGRAM) { + BOOST_LOG_TRIVIAL(error) << "Detected non-planar Voronoi diagram even after the rotation of input."; + } else if (m_issue_type == IssueType::VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT) { + BOOST_LOG_TRIVIAL(error) << "Detected Voronoi edge intersecting input segment even after the rotation of input."; + } else if (m_issue_type == IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX) { + BOOST_LOG_TRIVIAL(error) << "Detected finite Voronoi vertex with non finite vertex even after the rotation of input."; + } else { + BOOST_LOG_TRIVIAL(error) << "Detected unknown Voronoi diagram issue even after the rotation of input."; + } + + m_state = State::REPAIR_UNSUCCESSFUL; + } else { + m_state = State::REPAIR_SUCCESSFUL; + } + } else { + m_state = State::REPAIR_NOT_NEEDED; + m_issue_type = IssueType::NO_ISSUE_DETECTED; + } + } else { + m_state = State::UNKNOWN; + m_issue_type = IssueType::UNKNOWN; + } +} + +void VoronoiDiagram::clear() +{ + if (m_is_modified) { + m_vertices.clear(); + m_edges.clear(); + m_cells.clear(); + m_is_modified = false; + } else { + m_voronoi_diagram.clear(); + } + + m_state = State::UNKNOWN; + m_issue_type = IssueType::UNKNOWN; +} + +void VoronoiDiagram::copy_to_local(voronoi_diagram_type &voronoi_diagram) { + m_edges.clear(); + m_cells.clear(); + m_vertices.clear(); + + // Copy Voronoi edges. + m_edges.reserve(voronoi_diagram.num_edges()); + for (const edge_type &edge : voronoi_diagram.edges()) { + m_edges.emplace_back(edge.is_linear(), edge.is_primary()); + m_edges.back().color(edge.color()); + } + + // Copy Voronoi cells. + m_cells.reserve(voronoi_diagram.num_cells()); + for (const cell_type &cell : voronoi_diagram.cells()) { + m_cells.emplace_back(cell.source_index(), cell.source_category()); + m_cells.back().color(cell.color()); + + if (cell.incident_edge()) { + size_t incident_edge_idx = cell.incident_edge() - voronoi_diagram.edges().data(); + m_cells.back().incident_edge(&m_edges[incident_edge_idx]); + } + } + + // Copy Voronoi vertices. + m_vertices.reserve(voronoi_diagram.num_vertices()); + for (const vertex_type &vertex : voronoi_diagram.vertices()) { + m_vertices.emplace_back(vertex.x(), vertex.y()); + m_vertices.back().color(vertex.color()); + + if (vertex.incident_edge()) { + size_t incident_edge_idx = vertex.incident_edge() - voronoi_diagram.edges().data(); + m_vertices.back().incident_edge(&m_edges[incident_edge_idx]); + } + } + + // Assign all pointers for each Voronoi edge. + for (const edge_type &old_edge : voronoi_diagram.edges()) { + size_t edge_idx = &old_edge - voronoi_diagram.edges().data(); + edge_type &new_edge = m_edges[edge_idx]; + + if (old_edge.cell()) { + size_t cell_idx = old_edge.cell() - voronoi_diagram.cells().data(); + new_edge.cell(&m_cells[cell_idx]); + } + + if (old_edge.vertex0()) { + size_t vertex0_idx = old_edge.vertex0() - voronoi_diagram.vertices().data(); + new_edge.vertex0(&m_vertices[vertex0_idx]); + } + + if (old_edge.twin()) { + size_t twin_edge_idx = old_edge.twin() - voronoi_diagram.edges().data(); + new_edge.twin(&m_edges[twin_edge_idx]); + } + + if (old_edge.next()) { + size_t next_edge_idx = old_edge.next() - voronoi_diagram.edges().data(); + new_edge.next(&m_edges[next_edge_idx]); + } + + if (old_edge.prev()) { + size_t prev_edge_idx = old_edge.prev() - voronoi_diagram.edges().data(); + new_edge.prev(&m_edges[prev_edge_idx]); + } + } +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type +VoronoiDiagram::detect_known_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end) +{ + if (has_finite_edge_with_non_finite_vertex(voronoi_diagram)) { + return IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX; + } else if (const IssueType cell_issue_type = detect_known_voronoi_cell_issues(voronoi_diagram, segment_begin, segment_end); cell_issue_type != IssueType::NO_ISSUE_DETECTED) { + return cell_issue_type; + } + // BBS: test no problem in BBS + //} else if (!VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segment_begin, segment_end)) { + // // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. + // return IssueType::NON_PLANAR_VORONOI_DIAGRAM; + //} + + return IssueType::NO_ISSUE_DETECTED; +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type +VoronoiDiagram::detect_known_voronoi_cell_issues(const VoronoiDiagram &voronoi_diagram, + const SegmentIterator segment_begin, + const SegmentIterator segment_end) +{ + using Segment = typename std::iterator_traits::value_type; + using Point = typename boost::polygon::segment_point_type::type; + using SegmentCellRange = SegmentCellRange; + + for (VD::cell_type cell : voronoi_diagram.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; // Skip degenerated cell that has no spoon. Also, skip a cell that doesn't contain a segment. + + if (const SegmentCellRange cell_range = VoronoiUtils::compute_segment_cell_range(cell, segment_begin, segment_end); cell_range.is_valid()) { + // Detection if Voronoi edge is intersecting input segment. + // It detects this type of issue at least in GH issues #8446, #8474 and #8514. + + const Segment &source_segment = Geometry::VoronoiUtils::get_source_segment(cell, segment_begin, segment_end); + const Vec2d source_segment_from = boost::polygon::segment_traits::get(source_segment, boost::polygon::LOW).template cast(); + const Vec2d source_segment_to = boost::polygon::segment_traits::get(source_segment, boost::polygon::HIGH).template cast(); + const Vec2d source_segment_vec = source_segment_to - source_segment_from; + + // All Voronoi vertices must be on the left side of the source segment, otherwise the Voronoi diagram is invalid. + for (const VD::edge_type *edge = cell_range.edge_begin; edge != cell_range.edge_end; edge = edge->next()) { + if (edge->is_infinite()) { + // When there is a missing Voronoi vertex, we may encounter an infinite Voronoi edge. + // This happens, for example, in GH issue #8846. + return IssueType::MISSING_VORONOI_VERTEX; + } else if (const Vec2d edge_v1(edge->vertex1()->x(), edge->vertex1()->y()); Slic3r::cross2(source_segment_vec, edge_v1 - source_segment_from) < 0) { + return IssueType::VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT; + } + } + } else { + // When there is a missing Voronoi vertex (especially at one of the endpoints of the input segment), + // the returned cell_range is marked as invalid. + // It detects this type of issue at least in GH issue #8846. + return IssueType::MISSING_VORONOI_VERTEX; + } + } + + return IssueType::NO_ISSUE_DETECTED; +} + +bool VoronoiDiagram::has_finite_edge_with_non_finite_vertex(const VoronoiDiagram &voronoi_diagram) +{ + for (const voronoi_diagram_type::edge_type &edge : voronoi_diagram.edges()) { + if (edge.is_finite()) { + assert(edge.vertex0() != nullptr && edge.vertex1() != nullptr); + if (edge.vertex0() == nullptr || edge.vertex1() == nullptr || !VoronoiUtils::is_finite(*edge.vertex0()) || !VoronoiUtils::is_finite(*edge.vertex1())) + return true; + } + } + return false; +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type +VoronoiDiagram::try_to_repair_degenerated_voronoi_diagram(const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + IssueType issue_type = m_issue_type; + + const std::vector fix_angles = {PI / 6, PI / 5, PI / 7, PI / 11}; + for (const double fix_angle : fix_angles) { + issue_type = try_to_repair_degenerated_voronoi_diagram_by_rotation(segment_begin, segment_end, fix_angle); + if (issue_type == IssueType::NO_ISSUE_DETECTED) { + return issue_type; + } + } + + return issue_type; +} + +inline VD::vertex_type::color_type encode_input_segment_endpoint(const VD::cell_type::source_index_type cell_source_index, const boost::polygon::direction_1d dir) +{ + return (cell_source_index + 1) << 1 | (dir.to_int() ? 1 : 0); +} + +template +inline typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename boost::polygon::segment_point_type::value_type>::type>::type +decode_input_segment_endpoint(const VD::vertex_type::color_type color, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + using SegmentType = typename std::iterator_traits::value_type; + using PointType = typename boost::polygon::segment_traits::point_type; + + const size_t segment_idx = (color >> 1) - 1; + const SegmentIterator segment_it = segment_begin + segment_idx; + const PointType source_point = boost::polygon::segment_traits::get(*segment_it, ((color & 1) ? boost::polygon::HIGH : + boost::polygon::LOW)); + return source_point; +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type +VoronoiDiagram::try_to_repair_degenerated_voronoi_diagram_by_rotation(const SegmentIterator segment_begin, + const SegmentIterator segment_end, + const double fix_angle) +{ + using SegmentType = typename std::iterator_traits::value_type; + using PointType = typename boost::polygon::segment_traits::point_type; + + // Copy all segments and rotate their vertices. + std::vector segments_rotated; + segments_rotated.reserve(std::distance(segment_begin, segment_end)); + for (auto segment_it = segment_begin; segment_it != segment_end; ++segment_it) { + PointType from = boost::polygon::segment_traits::get(*segment_it, boost::polygon::LOW); + PointType to = boost::polygon::segment_traits::get(*segment_it, boost::polygon::HIGH); + segments_rotated.emplace_back(from.rotated(fix_angle), to.rotated(fix_angle)); + } + + VoronoiDiagram::voronoi_diagram_type voronoi_diagram_rotated; + boost::polygon::construct_voronoi(segments_rotated.begin(), segments_rotated.end(), &voronoi_diagram_rotated); + + this->copy_to_local(voronoi_diagram_rotated); + const IssueType issue_type = detect_known_issues(*this, segments_rotated.begin(), segments_rotated.end()); + + // We want to remap all Voronoi vertices at the endpoints of input segments + // to ensure that Voronoi vertices at endpoints will be preserved after rotation. + // So we assign every Voronoi vertices color to map this Vertex into input segments. + for (cell_type cell : m_cells) { + if (cell.is_degenerate()) + continue; + + if (cell.contains_segment()) { + if (const SegmentCellRange cell_range = VoronoiUtils::compute_segment_cell_range(cell, segments_rotated.begin(), segments_rotated.end()); cell_range.is_valid()) { + if (cell_range.edge_end->vertex1()->color() == 0) { + // Vertex 1 of edge_end points to the starting endpoint of the input segment (from() or line.a). + VD::vertex_type::color_type color = encode_input_segment_endpoint(cell.source_index(), boost::polygon::LOW); + cell_range.edge_end->vertex1()->color(color); + } + + if (cell_range.edge_begin->vertex0()->color() == 0) { + // Vertex 0 of edge_end points to the ending endpoint of the input segment (to() or line.b). + VD::vertex_type::color_type color = encode_input_segment_endpoint(cell.source_index(), boost::polygon::HIGH); + cell_range.edge_begin->vertex0()->color(color); + } + } else { + // This could happen when there is a missing Voronoi vertex even after rotation. + assert(cell_range.is_valid()); + } + } + + // FIXME @hejllukas: Implement mapping also for source points and not just for source segments. + } + + // Rotate all Voronoi vertices back. + // When a Voronoi vertex can be mapped to the input segment endpoint, then we don't need to do rotation back. + for (vertex_type &vertex : m_vertices) { + if (vertex.color() == 0) { + // This vertex isn't mapped to any vertex, so we rotate it back. + vertex = VoronoiUtils::make_rotated_vertex(vertex, -fix_angle); + } else { + // This vertex can be mapped to the input segment endpoint. + PointType endpoint = decode_input_segment_endpoint(vertex.color(), segment_begin, segment_end); + vertex_type endpoint_vertex{double(endpoint.x()), double(endpoint.y())}; + endpoint_vertex.incident_edge(vertex.incident_edge()); + endpoint_vertex.color(vertex.color()); + vertex = endpoint_vertex; + } + } + + // We have to clear all marked vertices because some algorithms expect that all vertices have a color equal to 0. + for (vertex_type &vertex : m_vertices) + vertex.color(0); + + m_voronoi_diagram.clear(); + m_is_modified = true; + + return issue_type; +} + +} // namespace Slic3r::Geometry diff --git a/src/libslic3r/Geometry/Voronoi.hpp b/src/libslic3r/Geometry/Voronoi.hpp index 5529750f3b..ef1c622769 100644 --- a/src/libslic3r/Geometry/Voronoi.hpp +++ b/src/libslic3r/Geometry/Voronoi.hpp @@ -4,10 +4,8 @@ #include "../Line.hpp" #include "../Polyline.hpp" -#define BOOST_VORONOI_USE_GMP 1 - #ifdef _MSC_VER -// Suppress warning C4146 in OpenVDB: unary minus operator applied to unsigned type, result still unsigned +// Suppress warning C4146 in OpenVDB: unary minus operator applied to unsigned type, result still unsigned #pragma warning(push) #pragma warning(disable : 4146) #endif // _MSC_VER @@ -16,18 +14,182 @@ #pragma warning(pop) #endif // _MSC_VER -namespace Slic3r { +namespace Slic3r::Geometry { -namespace Geometry { - -class VoronoiDiagram : public boost::polygon::voronoi_diagram { +class VoronoiDiagram +{ public: - typedef double coord_type; - typedef boost::polygon::point_data point_type; - typedef boost::polygon::segment_data segment_type; - typedef boost::polygon::rectangle_data rect_type; + using coord_type = double; + using voronoi_diagram_type = boost::polygon::voronoi_diagram; + using point_type = boost::polygon::point_data; + using segment_type = boost::polygon::segment_data; + using rect_type = boost::polygon::rectangle_data; + + using coordinate_type = voronoi_diagram_type::coordinate_type; + using vertex_type = voronoi_diagram_type::vertex_type; + using edge_type = voronoi_diagram_type::edge_type; + using cell_type = voronoi_diagram_type::cell_type; + + using const_vertex_iterator = voronoi_diagram_type::const_vertex_iterator; + using const_edge_iterator = voronoi_diagram_type::const_edge_iterator; + using const_cell_iterator = voronoi_diagram_type::const_cell_iterator; + + using vertex_container_type = voronoi_diagram_type::vertex_container_type; + using edge_container_type = voronoi_diagram_type::edge_container_type; + using cell_container_type = voronoi_diagram_type::cell_container_type; + + enum class IssueType { + NO_ISSUE_DETECTED, + FINITE_EDGE_WITH_NON_FINITE_VERTEX, + MISSING_VORONOI_VERTEX, + NON_PLANAR_VORONOI_DIAGRAM, + VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT, + UNKNOWN // Repairs are disabled in the constructor. + }; + + enum class State { + REPAIR_NOT_NEEDED, // The original Voronoi diagram doesn't have any issue. + REPAIR_SUCCESSFUL, // The original Voronoi diagram has some issues, but it was repaired. + REPAIR_UNSUCCESSFUL, // The original Voronoi diagram has some issues, but it wasn't repaired. + UNKNOWN // Repairs are disabled in the constructor. + }; + + VoronoiDiagram() = default; + + virtual ~VoronoiDiagram() = default; + + IssueType get_issue_type() const { return m_issue_type; } + + State get_state() const { return m_state; } + + bool is_valid() const { return m_state != State::REPAIR_UNSUCCESSFUL; } + + void clear(); + + const vertex_container_type &vertices() const { return m_is_modified ? m_vertices : m_voronoi_diagram.vertices(); } + + const edge_container_type &edges() const { return m_is_modified ? m_edges : m_voronoi_diagram.edges(); } + + const cell_container_type &cells() const { return m_is_modified ? m_cells : m_voronoi_diagram.cells(); } + + std::size_t num_vertices() const { return m_is_modified ? m_vertices.size() : m_voronoi_diagram.num_vertices(); } + + std::size_t num_edges() const { return m_is_modified ? m_edges.size() : m_voronoi_diagram.num_edges(); } + + std::size_t num_cells() const { return m_is_modified ? m_cells.size() : m_voronoi_diagram.num_cells(); } + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + void>::type + construct_voronoi(SegmentIterator segment_begin, SegmentIterator segment_end, bool try_to_repair_if_needed = true); + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + void>::type + construct_voronoi(const PointIterator first, const PointIterator last) + { + boost::polygon::construct_voronoi(first, last, &m_voronoi_diagram); + m_state = State::UNKNOWN; + m_issue_type = IssueType::UNKNOWN; + } + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_and< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename boost::polygon::gtl_if::value_type>::type>::type>::type>::type, + void>::type + construct_voronoi(const PointIterator p_first, const PointIterator p_last, const SegmentIterator s_first, const SegmentIterator s_last) + { + boost::polygon::construct_voronoi(p_first, p_last, s_first, s_last, &m_voronoi_diagram); + m_state = State::UNKNOWN; + m_issue_type = IssueType::UNKNOWN; + } + + // Try to detect cases when some Voronoi vertex is missing, when the Voronoi diagram + // is not planar or some Voronoi edge is intersecting input segment. + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + IssueType>::type + detect_known_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type + try_to_repair_degenerated_voronoi_diagram_by_rotation(SegmentIterator segment_begin, SegmentIterator segment_end, double fix_angle); + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type + try_to_repair_degenerated_voronoi_diagram(SegmentIterator segment_begin, SegmentIterator segment_end); + +private: + struct Segment + { + Point from; + Point to; + + Segment() = delete; + explicit Segment(const Point &from, const Point &to) : from(from), to(to) {} + }; + + void copy_to_local(voronoi_diagram_type &voronoi_diagram); + + // Detect issues related to Voronoi cells, or that can be detected by iterating over Voronoi cells. + // The first type of issue that can be detected is a missing Voronoi vertex, especially when it is + // missing at one of the endpoints of the input segment. + // The second type of issue that can be detected is a Voronoi edge that intersects the input segment. + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + IssueType>::type + detect_known_voronoi_cell_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); + + static bool has_finite_edge_with_non_finite_vertex(const VoronoiDiagram &voronoi_diagram); + + voronoi_diagram_type m_voronoi_diagram; + vertex_container_type m_vertices; + edge_container_type m_edges; + cell_container_type m_cells; + bool m_is_modified = false; + State m_state = State::UNKNOWN; + IssueType m_issue_type = IssueType::UNKNOWN; + +public: + using SegmentIt = std::vector::iterator; + + friend struct boost::polygon::segment_traits; }; -} } // namespace Slicer::Geometry +} // namespace Slic3r::Geometry + +namespace boost::polygon { +template<> struct geometry_concept +{ + typedef segment_concept type; +}; + +template<> struct segment_traits +{ + using coordinate_type = coord_t; + using point_type = Slic3r::Point; + using segment_type = Slic3r::Geometry::VoronoiDiagram::Segment; + + static inline point_type get(const segment_type &segment, direction_1d dir) { return dir.to_int() ? segment.to : segment.from; } +}; +} // namespace boost::polygon #endif // slic3r_Geometry_Voronoi_hpp_ diff --git a/src/libslic3r/Geometry/VoronoiOffset.cpp b/src/libslic3r/Geometry/VoronoiOffset.cpp index ed8d9c2b18..46105220a4 100644 --- a/src/libslic3r/Geometry/VoronoiOffset.cpp +++ b/src/libslic3r/Geometry/VoronoiOffset.cpp @@ -782,9 +782,6 @@ void annotate_inside_outside(VD &vd, const Lines &lines) for (const VD::edge_type &edge : vd.edges()) if (edge.vertex1() == nullptr) { - if (edge.vertex0() == nullptr) - continue; - // Infinite Voronoi edge separating two Point sites or a Point site and a Segment site. // Infinite edge is always outside and it references at least one valid vertex. assert(edge.is_infinite()); @@ -891,9 +888,6 @@ void annotate_inside_outside(VD &vd, const Lines &lines) for (const VD::edge_type &edge : vd.edges()) { assert((edge_category(edge) == EdgeCategory::Unknown) == (edge_category(edge.twin()) == EdgeCategory::Unknown)); if (edge_category(edge) == EdgeCategory::Unknown) { - if (!edge.is_finite()) - continue; - assert(edge.is_finite()); const VD::cell_type &cell = *edge.cell(); const VD::cell_type &cell2 = *edge.twin()->cell(); diff --git a/src/libslic3r/Geometry/VoronoiUtils.cpp b/src/libslic3r/Geometry/VoronoiUtils.cpp new file mode 100644 index 0000000000..f126258d28 --- /dev/null +++ b/src/libslic3r/Geometry/VoronoiUtils.cpp @@ -0,0 +1,284 @@ +#include + +#include +#include + +#include "VoronoiUtils.hpp" +#include "libslic3r.h" + +namespace Slic3r::Geometry { + +using PolygonsSegmentIndexConstIt = std::vector::const_iterator; +using LinesIt = Lines::iterator; +using ColoredLinesIt = ColoredLines::iterator; +using ColoredLinesConstIt = ColoredLines::const_iterator; + +// Explicit template instantiation. +template LinesIt::reference VoronoiUtils::get_source_segment(const VoronoiDiagram::cell_type &, LinesIt, LinesIt); +template VD::SegmentIt::reference VoronoiUtils::get_source_segment(const VoronoiDiagram::cell_type &, VD::SegmentIt, VD::SegmentIt); +template ColoredLinesIt::reference VoronoiUtils::get_source_segment(const VoronoiDiagram::cell_type &, ColoredLinesIt, ColoredLinesIt); +template ColoredLinesConstIt::reference VoronoiUtils::get_source_segment(const VoronoiDiagram::cell_type &, ColoredLinesConstIt, ColoredLinesConstIt); +template PolygonsSegmentIndexConstIt::reference VoronoiUtils::get_source_segment(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); +template Point VoronoiUtils::get_source_point(const VoronoiDiagram::cell_type &, LinesIt, LinesIt); +template Point VoronoiUtils::get_source_point(const VoronoiDiagram::cell_type &, VD::SegmentIt, VD::SegmentIt); +template Point VoronoiUtils::get_source_point(const VoronoiDiagram::cell_type &, ColoredLinesIt, ColoredLinesIt); +template Point VoronoiUtils::get_source_point(const VoronoiDiagram::cell_type &, ColoredLinesConstIt, ColoredLinesConstIt); +template Point VoronoiUtils::get_source_point(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); +template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, LinesIt, LinesIt); +template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, VD::SegmentIt, VD::SegmentIt); +template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, ColoredLinesConstIt, ColoredLinesConstIt); +template SegmentCellRange VoronoiUtils::compute_segment_cell_range(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); +template Points VoronoiUtils::discretize_parabola(const Point &, const Arachne::PolygonsSegmentIndex &, const Point &, const Point &, coord_t, float); +template Arachne::PolygonsPointIndex VoronoiUtils::get_source_point_index(const VoronoiDiagram::cell_type &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename std::iterator_traits::reference>::type +VoronoiUtils::get_source_segment(const VoronoiDiagram::cell_type &cell, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + if (!cell.contains_segment()) + throw Slic3r::InvalidArgument("Voronoi cell doesn't contain a source segment!"); + + if (cell.source_index() >= size_t(std::distance(segment_begin, segment_end))) + throw Slic3r::OutOfRange("Voronoi cell source index is out of range!"); + + return *(segment_begin + cell.source_index()); +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename boost::polygon::segment_point_type::value_type>::type>::type +VoronoiUtils::get_source_point(const VoronoiDiagram::cell_type &cell, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + using Segment = typename std::iterator_traits::value_type; + + if (!cell.contains_point()) + throw Slic3r::InvalidArgument("Voronoi cell doesn't contain a source point!"); + + if (cell.source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT) { + assert(int(cell.source_index()) < std::distance(segment_begin, segment_end)); + const SegmentIterator segment_it = segment_begin + cell.source_index(); + return boost::polygon::segment_traits::get(*segment_it, boost::polygon::LOW); + } else if (cell.source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_END_POINT) { + assert(int(cell.source_index()) < std::distance(segment_begin, segment_end)); + const SegmentIterator segment_it = segment_begin + cell.source_index(); + return boost::polygon::segment_traits::get(*segment_it, boost::polygon::HIGH); + } else if (cell.source_category() == boost::polygon::SOURCE_CATEGORY_SINGLE_POINT) { + throw Slic3r::RuntimeError("Voronoi diagram is always constructed using segments, so cell.source_category() shouldn't be SOURCE_CATEGORY_SINGLE_POINT!"); + } else { + throw Slic3r::InvalidArgument("Function get_source_point() should only be called on point cells!"); + } +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + Arachne::PolygonsPointIndex>::type +VoronoiUtils::get_source_point_index(const VD::cell_type &cell, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + if (!cell.contains_point()) + throw Slic3r::InvalidArgument("Voronoi cell doesn't contain a source point!"); + + if (cell.source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT) { + assert(int(cell.source_index()) < std::distance(segment_begin, segment_end)); + const SegmentIterator segment_it = segment_begin + cell.source_index(); + return (*segment_it); + } else if (cell.source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_END_POINT) { + assert(int(cell.source_index()) < std::distance(segment_begin, segment_end)); + const SegmentIterator segment_it = segment_begin + cell.source_index(); + return (*segment_it).next(); + } else if (cell.source_category() == boost::polygon::SOURCE_CATEGORY_SINGLE_POINT) { + throw Slic3r::RuntimeError("Voronoi diagram is always constructed using segments, so cell.source_category() shouldn't be SOURCE_CATEGORY_SINGLE_POINT!"); + } else { + throw Slic3r::InvalidArgument("Function get_source_point_index() should only be called on point cells!"); + } +} + +template +typename boost::polygon::enable_if::type>::type>::type, + Points>::type +VoronoiUtils::discretize_parabola(const Point &source_point, const Segment &source_segment, const Point &start, const Point &end, const coord_t approximate_step_size, float transitioning_angle) +{ + Points discretized; + // x is distance of point projected on the segment ab + // xx is point projected on the segment ab + const Point a = source_segment.from(); + const Point b = source_segment.to(); + const Point ab = b - a; + const Point as = start - a; + const Point ae = end - a; + const coord_t ab_size = ab.cast().norm(); + const coord_t sx = as.cast().dot(ab.cast()) / ab_size; + const coord_t ex = ae.cast().dot(ab.cast()) / ab_size; + const coord_t sxex = ex - sx; + + const Point ap = source_point - a; + const coord_t px = ap.cast().dot(ab.cast()) / ab_size; + + Point pxx; + Line(a, b).distance_to_infinite_squared(source_point, &pxx); + const Point ppxx = pxx - source_point; + const coord_t d = ppxx.norm(); + + const Vec2d rot = perp(ppxx).cast().normalized(); + const double rot_cos_theta = rot.x(); + const double rot_sin_theta = rot.y(); + + if (d == 0) { + discretized.emplace_back(start); + discretized.emplace_back(end); + return discretized; + } + + const double marking_bound = atan(transitioning_angle * 0.5); + int64_t msx = -marking_bound * d; // projected marking_start + int64_t mex = marking_bound * d; // projected marking_end + + const coord_t marking_start_end_h = msx * msx / (2 * d) + d / 2; + Point marking_start = Point(coord_t(msx), marking_start_end_h).rotated(rot_cos_theta, rot_sin_theta) + pxx; + Point marking_end = Point(coord_t(mex), marking_start_end_h).rotated(rot_cos_theta, rot_sin_theta) + pxx; + const int dir = (sx > ex) ? -1 : 1; + if (dir < 0) { + std::swap(marking_start, marking_end); + std::swap(msx, mex); + } + + bool add_marking_start = msx * int64_t(dir) > int64_t(sx - px) * int64_t(dir) && msx * int64_t(dir) < int64_t(ex - px) * int64_t(dir); + bool add_marking_end = mex * int64_t(dir) > int64_t(sx - px) * int64_t(dir) && mex * int64_t(dir) < int64_t(ex - px) * int64_t(dir); + + const Point apex = Point(coord_t(0), coord_t(d / 2)).rotated(rot_cos_theta, rot_sin_theta) + pxx; + bool add_apex = int64_t(sx - px) * int64_t(dir) < 0 && int64_t(ex - px) * int64_t(dir) > 0; + + assert(!add_marking_start || !add_marking_end || add_apex); + if (add_marking_start && add_marking_end && !add_apex) + BOOST_LOG_TRIVIAL(warning) << "Failing to discretize parabola! Must add an apex or one of the endpoints."; + + const coord_t step_count = lround(static_cast(std::abs(ex - sx)) / approximate_step_size); + discretized.emplace_back(start); + for (coord_t step = 1; step < step_count; ++step) { + const int64_t x = int64_t(sx) + int64_t(sxex) * int64_t(step) / int64_t(step_count) - int64_t(px); + const int64_t y = int64_t(x) * int64_t(x) / int64_t(2 * d) + int64_t(d / 2); + + if (add_marking_start && msx * int64_t(dir) < int64_t(x) * int64_t(dir)) { + discretized.emplace_back(marking_start); + add_marking_start = false; + } + + if (add_apex && int64_t(x) * int64_t(dir) > 0) { + discretized.emplace_back(apex); + add_apex = false; // only add the apex just before the + } + + if (add_marking_end && mex * int64_t(dir) < int64_t(x) * int64_t(dir)) { + discretized.emplace_back(marking_end); + add_marking_end = false; + } + + assert(is_in_range(x) && is_in_range(y)); + const Point result = Point(x, y).rotated(rot_cos_theta, rot_sin_theta) + pxx; + discretized.emplace_back(result); + } + + if (add_apex) + discretized.emplace_back(apex); + + if (add_marking_end) + discretized.emplace_back(marking_end); + + discretized.emplace_back(end); + return discretized; +} + +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + Geometry::SegmentCellRange< + typename boost::polygon::segment_point_type::value_type>::type>>::type +VoronoiUtils::compute_segment_cell_range(const VD::cell_type &cell, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + using Segment = typename std::iterator_traits::value_type; + using Point = typename boost::polygon::segment_point_type::type; + using SegmentCellRange = SegmentCellRange; + + const Segment &source_segment = Geometry::VoronoiUtils::get_source_segment(cell, segment_begin, segment_end); + const Point from = boost::polygon::segment_traits::get(source_segment, boost::polygon::LOW); + const Point to = boost::polygon::segment_traits::get(source_segment, boost::polygon::HIGH); + const Vec2i64 from_i64 = from.template cast(); + const Vec2i64 to_i64 = to.template cast(); + + // FIXME @hejllukas: Ensure that there is no infinite edge during iteration between edge_begin and edge_end. + SegmentCellRange cell_range(to, from); + + // Find starting edge and end edge + bool seen_possible_start = false; + bool after_start = false; + bool ending_edge_is_set_before_start = false; + const VD::edge_type *edge = cell.incident_edge(); + do { + if (edge->is_infinite()) + continue; + + Vec2i64 v0 = Geometry::VoronoiUtils::to_point(edge->vertex0()); + Vec2i64 v1 = Geometry::VoronoiUtils::to_point(edge->vertex1()); + assert(v0 != to_i64 || v1 != from_i64); + + if (v0 == to_i64 && !after_start) { // Use the last edge which starts in source_segment.to + cell_range.edge_begin = edge; + seen_possible_start = true; + } else if (seen_possible_start) { + after_start = true; + } + + if (v1 == from_i64 && (!cell_range.edge_end || ending_edge_is_set_before_start)) { + ending_edge_is_set_before_start = !after_start; + cell_range.edge_end = edge; + } + } while (edge = edge->next(), edge != cell.incident_edge()); + + return cell_range; +} + +Vec2i64 VoronoiUtils::to_point(const VD::vertex_type *vertex) +{ + assert(vertex != nullptr); + return VoronoiUtils::to_point(*vertex); +} + +Vec2i64 VoronoiUtils::to_point(const VD::vertex_type &vertex) +{ + const double x = vertex.x(), y = vertex.y(); + + assert(std::isfinite(x) && std::isfinite(y)); + assert(is_in_range(x) && is_in_range(y)); + + return {std::llround(x), std::llround(y)}; +} + +bool VoronoiUtils::is_finite(const VD::vertex_type &vertex) +{ + return std::isfinite(vertex.x()) && std::isfinite(vertex.y()); +} + +VD::vertex_type VoronoiUtils::make_rotated_vertex(VD::vertex_type &vertex, const double angle) +{ + const double cos_a = std::cos(angle); + const double sin_a = std::sin(angle); + + const double rotated_x = (cos_a * vertex.x() - sin_a * vertex.y()); + const double rotated_y = (cos_a * vertex.y() + sin_a * vertex.x()); + + VD::vertex_type rotated_vertex{rotated_x, rotated_y}; + rotated_vertex.incident_edge(vertex.incident_edge()); + rotated_vertex.color(vertex.color()); + + return rotated_vertex; +} + +} // namespace Slic3r::Geometry diff --git a/src/libslic3r/Geometry/VoronoiUtils.hpp b/src/libslic3r/Geometry/VoronoiUtils.hpp new file mode 100644 index 0000000000..bf63914677 --- /dev/null +++ b/src/libslic3r/Geometry/VoronoiUtils.hpp @@ -0,0 +1,120 @@ +#ifndef slic3r_VoronoiUtils_hpp_ +#define slic3r_VoronoiUtils_hpp_ + +#include "libslic3r/Geometry/Voronoi.hpp" +#include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" + +using VD = Slic3r::Geometry::VoronoiDiagram; + +namespace Slic3r::Geometry { + +// Represent trapezoid Voronoi cell around segment. +template struct SegmentCellRange +{ + const PT segment_start_point; // The start point of the source segment of this cell. + const PT segment_end_point; // The end point of the source segment of this cell. + const VD::edge_type *edge_begin = nullptr; // The edge of the Voronoi diagram where the loop around the cell starts. + const VD::edge_type *edge_end = nullptr; // The edge of the Voronoi diagram where the loop around the cell ends. + + SegmentCellRange() = delete; + explicit SegmentCellRange(const PT &segment_start_point, const PT &segment_end_point) + : segment_start_point(segment_start_point), segment_end_point(segment_end_point) + {} + + bool is_valid() const { return edge_begin && edge_end && edge_begin != edge_end; } +}; + +class VoronoiUtils +{ +public: + static Vec2i64 to_point(const VD::vertex_type *vertex); + + static Vec2i64 to_point(const VD::vertex_type &vertex); + + static bool is_finite(const VD::vertex_type &vertex); + + static VD::vertex_type make_rotated_vertex(VD::vertex_type &vertex, double angle); + + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename std::iterator_traits::reference>::type + get_source_segment(const VD::cell_type &cell, SegmentIterator segment_begin, SegmentIterator segment_end); + + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename boost::polygon::segment_point_type::value_type>::type>::type + get_source_point(const VoronoiDiagram::cell_type &cell, SegmentIterator segment_begin, SegmentIterator segment_end); + + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + Arachne::PolygonsPointIndex>::type + get_source_point_index(const VD::cell_type &cell, SegmentIterator segment_begin, SegmentIterator segment_end); + + /** + * Discretize a parabola based on (approximate) step size. + * + * Adapted from CuraEngine VoronoiUtils::discretizeParabola by Tim Kuipers @BagelOrb and @Ghostkeeper. + * + * @param approximate_step_size is measured parallel to the source_segment, not along the parabola. + */ + template + static typename boost::polygon::enable_if::type>::type>::type, + Points>::type + discretize_parabola(const Point &source_point, const Segment &source_segment, const Point &start, const Point &end, coord_t approximate_step_size, float transitioning_angle); + + /** + * Compute the range of line segments that surround a cell of the skeletal + * graph that belongs to a line segment of the medial axis. + * + * This should only be used on cells that belong to a central line segment + * of the skeletal graph, e.g. trapezoid cells, not triangular cells. + * + * The resulting line segments is just the first and the last segment. They + * are linked to the neighboring segments, so you can iterate over the + * segments until you reach the last segment. + * + * Adapted from CuraEngine VoronoiUtils::computePointCellRange by Tim Kuipers @BagelOrb, + * Jaime van Kessel @nallath, Remco Burema @rburema and @Ghostkeeper. + * + * @param cell The cell to compute the range of line segments for. + * @param segment_begin Begin iterator for all edges of the input Polygons. + * @param segment_end End iterator for all edges of the input Polygons. + * @return Range of line segments that surround the cell. + */ + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + Geometry::SegmentCellRange< + typename boost::polygon::segment_point_type::value_type>::type>>::type + compute_segment_cell_range(const VD::cell_type &cell, SegmentIterator segment_begin, SegmentIterator segment_end); + + template static bool is_in_range(double value) + { + return double(std::numeric_limits::lowest()) <= value && value <= double(std::numeric_limits::max()); + } + + template static bool is_in_range(const VD::vertex_type &vertex) + { + return VoronoiUtils::is_finite(vertex) && is_in_range(vertex.x()) && is_in_range(vertex.y()); + } + + template static bool is_in_range(const VD::edge_type &edge) + { + if (edge.vertex0() == nullptr || edge.vertex1() == nullptr) + return false; + + return is_in_range(*edge.vertex0()) && is_in_range(*edge.vertex1()); + } +}; + +} // namespace Slic3r::Geometry + +#endif // slic3r_VoronoiUtils_hpp_ diff --git a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp index e76decf5f1..a0e2191af5 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp @@ -4,7 +4,9 @@ #include #include "libslic3r/Geometry/Voronoi.hpp" -#include "libslic3r/Arachne/utils/VoronoiUtils.hpp" +#include "libslic3r/Geometry/VoronoiUtils.hpp" +#include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" +#include "libslic3r/MultiMaterialSegmentation.hpp" #include "VoronoiUtilsCgal.hpp" @@ -12,18 +14,145 @@ using VD = Slic3r::Geometry::VoronoiDiagram; namespace Slic3r::Geometry { -using CGAL_Point = CGAL::Exact_predicates_exact_constructions_kernel::Point_2; -using CGAL_Segment = CGAL::Arr_segment_traits_2::Curve_2; +using PolygonsSegmentIndexConstIt = std::vector::const_iterator; +using LinesIt = Lines::iterator; +using ColoredLinesConstIt = ColoredLines::const_iterator; -inline static CGAL_Point to_cgal_point(const VD::vertex_type &pt) { return {pt.x(), pt.y()}; } +// Explicit template instantiation. +template bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VD &, LinesIt, LinesIt); +template bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VD &, VD::SegmentIt, VD::SegmentIt); +template bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VD &, ColoredLinesConstIt, ColoredLinesConstIt); +template bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VD &, PolygonsSegmentIndexConstIt, PolygonsSegmentIndexConstIt); + +// The tangent vector of the parabola is computed based on the Proof of the reflective property. +// https://en.wikipedia.org/wiki/Parabola#Proof_of_the_reflective_property +// https://math.stackexchange.com/q/2439647/2439663#comment5039739_2439663 +namespace impl { + using K = CGAL::Simple_cartesian; + using FK = CGAL::Simple_cartesian; + using EK = CGAL::Simple_cartesian; + using C2E = CGAL::Cartesian_converter; + using C2F = CGAL::Cartesian_converter; + class Epick : public CGAL::Filtered_kernel_adaptor::Type, Epick>, true> {}; + + template + inline typename K::Vector_2 calculate_parabolic_tangent_vector( + // Test point on the parabola, where the tangent will be calculated. + const typename K::Point_2 &p, + // Focus point of the parabola. + const typename K::Point_2 &f, + // Points of a directrix of the parabola. + const typename K::Point_2 &u, + const typename K::Point_2 &v, + // On which side of the parabolic segment endpoints the focus point is, which determines the orientation of the tangent. + const typename K::Orientation &tangent_orientation) + { + using RT = typename K::RT; + using Vector_2 = typename K::Vector_2; + + const Vector_2 directrix_vec = v - u; + const RT directrix_vec_sqr_length = CGAL::scalar_product(directrix_vec, directrix_vec); + Vector_2 focus_vec = (f - u) * directrix_vec_sqr_length - directrix_vec * CGAL::scalar_product(directrix_vec, p - u); + Vector_2 tangent_vec = focus_vec.perpendicular(tangent_orientation); + return tangent_vec; + } + + template struct ParabolicTangentToSegmentOrientationPredicate + { + using Point_2 = typename K::Point_2; + using Vector_2 = typename K::Vector_2; + using Orientation = typename K::Orientation; + using result_type = typename K::Orientation; + + result_type operator()( + // Test point on the parabola, where the tangent will be calculated. + const Point_2 &p, + // End of the linear segment (p, q), for which orientation towards the tangent to parabola will be evaluated. + const Point_2 &q, + // Focus point of the parabola. + const Point_2 &f, + // Points of a directrix of the parabola. + const Point_2 &u, + const Point_2 &v, + // On which side of the parabolic segment endpoints the focus point is, which determines the orientation of the tangent. + const Orientation &tangent_orientation) const + { + assert(tangent_orientation == CGAL::Orientation::LEFT_TURN || tangent_orientation == CGAL::Orientation::RIGHT_TURN); + + Vector_2 tangent_vec = calculate_parabolic_tangent_vector(p, f, u, v, tangent_orientation); + Vector_2 linear_vec = q - p; + + return CGAL::sign(tangent_vec.x() * linear_vec.y() - tangent_vec.y() * linear_vec.x()); + } + }; + + template struct ParabolicTangentToParabolicTangentOrientationPredicate + { + using Point_2 = typename K::Point_2; + using Vector_2 = typename K::Vector_2; + using Orientation = typename K::Orientation; + using result_type = typename K::Orientation; + + result_type operator()( + // Common point on both parabolas, where the tangent will be calculated. + const Point_2 &p, + // Focus point of the first parabola. + const Point_2 &f_0, + // Points of a directrix of the first parabola. + const Point_2 &u_0, + const Point_2 &v_0, + // On which side of the parabolic segment endpoints the focus point is, which determines the orientation of the tangent. + const Orientation &tangent_orientation_0, + // Focus point of the second parabola. + const Point_2 &f_1, + // Points of a directrix of the second parabola. + const Point_2 &u_1, + const Point_2 &v_1, + // On which side of the parabolic segment endpoints the focus point is, which determines the orientation of the tangent. + const Orientation &tangent_orientation_1) const + { + assert(tangent_orientation_0 == CGAL::Orientation::LEFT_TURN || tangent_orientation_0 == CGAL::Orientation::RIGHT_TURN); + assert(tangent_orientation_1 == CGAL::Orientation::LEFT_TURN || tangent_orientation_1 == CGAL::Orientation::RIGHT_TURN); + + Vector_2 tangent_vec_0 = calculate_parabolic_tangent_vector(p, f_0, u_0, v_0, tangent_orientation_0); + Vector_2 tangent_vec_1 = calculate_parabolic_tangent_vector(p, f_1, u_1, v_1, tangent_orientation_1); + + return CGAL::sign(tangent_vec_0.x() * tangent_vec_1.y() - tangent_vec_0.y() * tangent_vec_1.x()); + } + }; + + using ParabolicTangentToSegmentOrientationPredicateFiltered = CGAL::Filtered_predicate, ParabolicTangentToSegmentOrientationPredicate, C2E, C2F>; + using ParabolicTangentToParabolicTangentOrientationPredicateFiltered = CGAL::Filtered_predicate, ParabolicTangentToParabolicTangentOrientationPredicate, C2E, C2F>; +} // namespace impl + +using ParabolicTangentToSegmentOrientation = impl::ParabolicTangentToSegmentOrientationPredicateFiltered; +using ParabolicTangentToParabolicTangentOrientation = impl::ParabolicTangentToParabolicTangentOrientationPredicateFiltered; +using CGAL_Point = impl::K::Point_2; + +inline CGAL_Point to_cgal_point(const VD::vertex_type *pt) { return {pt->x(), pt->y()}; } +inline CGAL_Point to_cgal_point(const Point &pt) { return {pt.x(), pt.y()}; } +inline CGAL_Point to_cgal_point(const Vec2d &pt) { return {pt.x(), pt.y()}; } + +inline Linef make_linef(const VD::edge_type &edge) +{ + const VD::vertex_type *v0 = edge.vertex0(); + const VD::vertex_type *v1 = edge.vertex1(); + return {Vec2d(v0->x(), v0->y()), Vec2d(v1->x(), v1->y())}; +} + +[[maybe_unused]] inline bool is_equal(const VD::vertex_type &vertex_first, const VD::vertex_type &vertex_second) { return vertex_first.x() == vertex_second.x() && vertex_first.y() == vertex_second.y(); } // FIXME Lukas H.: Also includes parabolic segments. bool VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(const VD &voronoi_diagram) { + using CGAL_E_Point = CGAL::Exact_predicates_exact_constructions_kernel::Point_2; + using CGAL_E_Segment = CGAL::Arr_segment_traits_2::Curve_2; + auto to_cgal_point = [](const VD::vertex_type &pt) -> CGAL_E_Point { return {pt.x(), pt.y()}; }; + assert(std::all_of(voronoi_diagram.edges().cbegin(), voronoi_diagram.edges().cend(), [](const VD::edge_type &edge) { return edge.color() == 0; })); - std::vector segments; + std::vector segments; segments.reserve(voronoi_diagram.num_edges()); for (const VD::edge_type &edge : voronoi_diagram.edges()) { @@ -31,7 +160,7 @@ bool VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(const VD &voronoi_ continue; if (edge.is_finite() && edge.is_linear() && edge.vertex0() != nullptr && edge.vertex1() != nullptr && - Arachne::VoronoiUtils::is_finite(*edge.vertex0()) && Arachne::VoronoiUtils::is_finite(*edge.vertex1())) { + VoronoiUtils::is_finite(*edge.vertex0()) && VoronoiUtils::is_finite(*edge.vertex1())) { segments.emplace_back(to_cgal_point(*edge.vertex0()), to_cgal_point(*edge.vertex1())); edge.color(1); assert(edge.twin() != nullptr); @@ -42,42 +171,136 @@ bool VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(const VD &voronoi_ for (const VD::edge_type &edge : voronoi_diagram.edges()) edge.color(0); - std::vector intersections_pt; + std::vector intersections_pt; CGAL::compute_intersection_points(segments.begin(), segments.end(), std::back_inserter(intersections_pt)); return intersections_pt.empty(); } -static bool check_if_three_vectors_are_ccw(const CGAL_Point &common_pt, const CGAL_Point &pt_1, const CGAL_Point &pt_2, const CGAL_Point &test_pt) { - CGAL::Orientation orientation = CGAL::orientation(common_pt, pt_1, pt_2); +struct ParabolicSegment +{ + const Point focus; + const Line directrix; + // Two points on the parabola; + const Linef segment; + // Indicate if focus point is on the left side or right side relative to parabolic segment endpoints. + const CGAL::Orientation is_focus_on_left; +}; + +template +inline static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + ParabolicSegment>::type +get_parabolic_segment(const VD::edge_type &edge, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + using Segment = typename std::iterator_traits::value_type; + assert(edge.is_curved()); + + const VD::cell_type *left_cell = edge.cell(); + const VD::cell_type *right_cell = edge.twin()->cell(); + + const Point focus_pt = VoronoiUtils::get_source_point(*(left_cell->contains_point() ? left_cell : right_cell), segment_begin, segment_end); + const Segment &directrix = VoronoiUtils::get_source_segment(*(left_cell->contains_point() ? right_cell : left_cell), segment_begin, segment_end); + CGAL::Orientation focus_side = CGAL::opposite(CGAL::orientation(to_cgal_point(edge.vertex0()), to_cgal_point(edge.vertex1()), to_cgal_point(focus_pt))); + + assert(focus_side == CGAL::Orientation::LEFT_TURN || focus_side == CGAL::Orientation::RIGHT_TURN); + + const Point directrix_from = boost::polygon::segment_traits::get(directrix, boost::polygon::LOW); + const Point directrix_to = boost::polygon::segment_traits::get(directrix, boost::polygon::HIGH); + return {focus_pt, Line(directrix_from, directrix_to), make_linef(edge), focus_side}; +} + +template +inline static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + CGAL::Orientation>::type +orientation_of_two_edges(const VD::edge_type &edge_a, const VD::edge_type &edge_b, const SegmentIterator segment_begin, const SegmentIterator segment_end) +{ + assert(is_equal(*edge_a.vertex0(), *edge_b.vertex0())); + CGAL::Orientation orientation; + if (edge_a.is_linear() && edge_b.is_linear()) { + orientation = CGAL::orientation(to_cgal_point(edge_a.vertex0()), to_cgal_point(edge_a.vertex1()), to_cgal_point(edge_b.vertex1())); + } else if (edge_a.is_curved() && edge_b.is_curved()) { + const ParabolicSegment parabolic_a = get_parabolic_segment(edge_a, segment_begin, segment_end); + const ParabolicSegment parabolic_b = get_parabolic_segment(edge_b, segment_begin, segment_end); + orientation = ParabolicTangentToParabolicTangentOrientation{}(to_cgal_point(parabolic_a.segment.a), + to_cgal_point(parabolic_a.focus), + to_cgal_point(parabolic_a.directrix.a), + to_cgal_point(parabolic_a.directrix.b), + parabolic_a.is_focus_on_left, + to_cgal_point(parabolic_b.focus), + to_cgal_point(parabolic_b.directrix.a), + to_cgal_point(parabolic_b.directrix.b), + parabolic_b.is_focus_on_left); + return orientation; + } else { + assert(edge_a.is_curved() != edge_b.is_curved()); + + const VD::edge_type &linear_edge = edge_a.is_curved() ? edge_b : edge_a; + const VD::edge_type ¶bolic_edge = edge_a.is_curved() ? edge_a : edge_b; + const ParabolicSegment parabolic = get_parabolic_segment(parabolic_edge, segment_begin, segment_end); + orientation = ParabolicTangentToSegmentOrientation{}(to_cgal_point(parabolic.segment.a), to_cgal_point(linear_edge.vertex1()), + to_cgal_point(parabolic.focus), + to_cgal_point(parabolic.directrix.a), + to_cgal_point(parabolic.directrix.b), + parabolic.is_focus_on_left); + + if (edge_b.is_curved()) + orientation = CGAL::opposite(orientation); + } + + return orientation; +} + +template +static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + bool>::type +check_if_three_edges_are_ccw(const VD::edge_type &edge_first, + const VD::edge_type &edge_second, + const VD::edge_type &edge_third, + const SegmentIterator segment_begin, + const SegmentIterator segment_end) +{ + assert(is_equal(*edge_first.vertex0(), *edge_second.vertex0()) && is_equal(*edge_second.vertex0(), *edge_third.vertex0())); + + CGAL::Orientation orientation = orientation_of_two_edges(edge_first, edge_second, segment_begin, segment_end); if (orientation == CGAL::Orientation::COLLINEAR) { // The first two edges are collinear, so the third edge must be on the right side on the first of them. - return CGAL::orientation(common_pt, pt_1, test_pt) == CGAL::Orientation::RIGHT_TURN; + return orientation_of_two_edges(edge_first, edge_third, segment_begin, segment_end) == CGAL::Orientation::RIGHT_TURN; } else if (orientation == CGAL::Orientation::LEFT_TURN) { // CCW oriented angle between vectors (common_pt, pt1) and (common_pt, pt2) is bellow PI. // So we need to check if test_pt isn't between them. - CGAL::Orientation orientation1 = CGAL::orientation(common_pt, pt_1, test_pt); - CGAL::Orientation orientation2 = CGAL::orientation(common_pt, pt_2, test_pt); + CGAL::Orientation orientation1 = orientation_of_two_edges(edge_first, edge_third, segment_begin, segment_end); + CGAL::Orientation orientation2 = orientation_of_two_edges(edge_second, edge_third, segment_begin, segment_end); return (orientation1 != CGAL::Orientation::LEFT_TURN || orientation2 != CGAL::Orientation::RIGHT_TURN); } else { assert(orientation == CGAL::Orientation::RIGHT_TURN); // CCW oriented angle between vectors (common_pt, pt1) and (common_pt, pt2) is upper PI. // So we need to check if test_pt is between them. - CGAL::Orientation orientation1 = CGAL::orientation(common_pt, pt_1, test_pt); - CGAL::Orientation orientation2 = CGAL::orientation(common_pt, pt_2, test_pt); + CGAL::Orientation orientation1 = orientation_of_two_edges(edge_first, edge_third, segment_begin, segment_end); + CGAL::Orientation orientation2 = orientation_of_two_edges(edge_second, edge_third, segment_begin, segment_end); return (orientation1 == CGAL::Orientation::RIGHT_TURN || orientation2 == CGAL::Orientation::LEFT_TURN); } } -bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VoronoiDiagram &voronoi_diagram) +template +typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + bool>::type +VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VD &voronoi_diagram, + const SegmentIterator segment_begin, + const SegmentIterator segment_end) { for (const VD::vertex_type &vertex : voronoi_diagram.vertices()) { std::vector edges; const VD::edge_type *edge = vertex.incident_edge(); do { - // FIXME Lukas H.: Also process parabolic segments. - if (edge->is_finite() && edge->is_linear() && edge->vertex0() != nullptr && edge->vertex1() != nullptr && - Arachne::VoronoiUtils::is_finite(*edge->vertex0()) && Arachne::VoronoiUtils::is_finite(*edge->vertex1())) + if (edge->is_finite() && edge->vertex0() != nullptr && edge->vertex1() != nullptr && VoronoiUtils::is_finite(*edge->vertex0()) && VoronoiUtils::is_finite(*edge->vertex1())) edges.emplace_back(edge); edge = edge->rot_next(); @@ -86,12 +309,11 @@ bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VoronoiDiagram &vor // Checking for CCW make sense for three and more edges. if (edges.size() > 2) { for (auto edge_it = edges.begin() ; edge_it != edges.end(); ++edge_it) { - const Geometry::VoronoiDiagram::edge_type *prev_edge = edge_it == edges.begin() ? edges.back() : *std::prev(edge_it); - const Geometry::VoronoiDiagram::edge_type *curr_edge = *edge_it; - const Geometry::VoronoiDiagram::edge_type *next_edge = std::next(edge_it) == edges.end() ? edges.front() : *std::next(edge_it); + const VD::edge_type *prev_edge = edge_it == edges.begin() ? edges.back() : *std::prev(edge_it); + const VD::edge_type *curr_edge = *edge_it; + const VD::edge_type *next_edge = std::next(edge_it) == edges.end() ? edges.front() : *std::next(edge_it); - if (!check_if_three_vectors_are_ccw(to_cgal_point(*prev_edge->vertex0()), to_cgal_point(*prev_edge->vertex1()), - to_cgal_point(*curr_edge->vertex1()), to_cgal_point(*next_edge->vertex1()))) + if (!check_if_three_edges_are_ccw(*prev_edge, *curr_edge, *next_edge, segment_begin, segment_end)) return false; } } @@ -100,5 +322,4 @@ bool VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(const VoronoiDiagram &vor return true; } - } // namespace Slic3r::Geometry diff --git a/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp b/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp index 897891bd93..33ae847802 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp @@ -2,6 +2,7 @@ #define slic3r_VoronoiUtilsCgal_hpp_ #include "Voronoi.hpp" +#include "../Arachne/utils/PolygonsSegmentIndex.hpp" namespace Slic3r::Geometry { class VoronoiDiagram; @@ -13,8 +14,12 @@ public: static bool is_voronoi_diagram_planar_intersection(const VoronoiDiagram &voronoi_diagram); // Check if the Voronoi diagram is planar using verification that all neighboring edges are ordered CCW for each vertex. - static bool is_voronoi_diagram_planar_angle(const VoronoiDiagram &voronoi_diagram); - + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + bool>::type + is_voronoi_diagram_planar_angle(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); }; } // namespace Slic3r::Geometry diff --git a/src/libslic3r/IntersectionPoints.cpp b/src/libslic3r/IntersectionPoints.cpp index bdf66d5905..888285f834 100644 --- a/src/libslic3r/IntersectionPoints.cpp +++ b/src/libslic3r/IntersectionPoints.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "IntersectionPoints.hpp" #include diff --git a/src/libslic3r/IntersectionPoints.hpp b/src/libslic3r/IntersectionPoints.hpp index cf06c718a0..49694c8a8e 100644 --- a/src/libslic3r/IntersectionPoints.hpp +++ b/src/libslic3r/IntersectionPoints.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_IntersectionPoints_hpp_ #define slic3r_IntersectionPoints_hpp_ diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index e92eb0a2ba..ddb608901f 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -181,6 +181,7 @@ void Layer::make_perimeters() && config.opt_serialize("outer_wall_line_width") == other_config.opt_serialize("outer_wall_line_width") && config.detect_thin_wall == other_config.detect_thin_wall && config.infill_wall_overlap == other_config.infill_wall_overlap + && config.top_bottom_infill_wall_overlap == other_config.top_bottom_infill_wall_overlap && config.fuzzy_skin == other_config.fuzzy_skin && config.fuzzy_skin_thickness == other_config.fuzzy_skin_thickness && config.fuzzy_skin_point_distance == other_config.fuzzy_skin_point_distance diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index 69ac1824cc..2900c2fae9 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas -///|/ Copyright (c) Slic3r 2014 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Layer.hpp" #include "BridgeDetector.hpp" #include "ClipperUtils.hpp" @@ -408,7 +403,7 @@ void LayerRegion::process_external_surfaces(const Layer *lower_layer, const Poly float expansion_bottom = expansion_top; float expansion_bottom_bridge = expansion_top; // Expand by waves of expansion_step size (expansion_step is scaled), but with no more steps than max_nr_expansion_steps. - static constexpr const float expansion_step = scaled(0.1); + const auto expansion_step = scaled(0.1); // Don't take more than max_nr_steps for small expansion_step. static constexpr const size_t max_nr_expansion_steps = 5; // Radius (with added epsilon) to absorb empty regions emering from regularization of ensuring, viz const float narrow_ensure_vertical_wall_thickness_region_radius = 0.5f * 0.65f * min_perimeter_infill_spacing; diff --git a/src/libslic3r/Measure.cpp b/src/libslic3r/Measure.cpp index 2e6156a88e..c6f1276e83 100644 --- a/src/libslic3r/Measure.cpp +++ b/src/libslic3r/Measure.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "Measure.hpp" #include "MeasureUtils.hpp" @@ -114,7 +110,7 @@ void MeasuringImpl::update_planes() const size_t num_of_facets = m_its.indices.size(); m_face_to_plane.resize(num_of_facets, size_t(-1)); const std::vector face_normals = its_face_normals(m_its); - const std::vector face_neighbors = its_face_neighbors(m_its); + const std::vector face_neighbors = its_face_neighbors(m_its); std::vector facet_queue(num_of_facets, 0); int facet_queue_cnt = 0; const stl_normal* normal_ptr = nullptr; @@ -149,7 +145,7 @@ void MeasuringImpl::update_planes() int facet_idx = facet_queue[-- facet_queue_cnt]; const stl_normal& this_normal = face_normals[facet_idx]; if (is_same_normal(this_normal, *normal_ptr)) { -// const Vec3i& face = m_its.indices[facet_idx]; +// const Vec3i32& face = m_its.indices[facet_idx]; m_face_to_plane[facet_idx] = m_planes.size() - 1; m_planes.back().facets.emplace_back(facet_idx); diff --git a/src/libslic3r/Measure.hpp b/src/libslic3r/Measure.hpp index dcccafb70d..70f446afd9 100644 --- a/src/libslic3r/Measure.hpp +++ b/src/libslic3r/Measure.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef Slic3r_Measure_hpp_ #define Slic3r_Measure_hpp_ diff --git a/src/libslic3r/MeasureUtils.hpp b/src/libslic3r/MeasureUtils.hpp index 8a63de5a1f..0ab4ac121d 100644 --- a/src/libslic3r/MeasureUtils.hpp +++ b/src/libslic3r/MeasureUtils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Enrico Turri @enricoturri1966 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef Slic3r_MeasureUtils_hpp_ #define Slic3r_MeasureUtils_hpp_ diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index f9e66e9ebb..e246c16d49 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -201,16 +201,16 @@ indexed_triangle_set cgal_to_indexed_triangle_set(const _Mesh &cgalmesh) const auto &vertices = cgalmesh.vertices(); int vsize = int(vertices.size()); - for (const auto &vi : vertices) { + for (auto &vi : vertices) { auto &v = cgalmesh.point(vi); // Don't ask... its.vertices.emplace_back(to_vec3f(v)); } - for (const auto &face : faces) { + for (auto &face : faces) { auto vtc = cgalmesh.vertices_around_face(cgalmesh.halfedge(face)); int i = 0; - Vec3i facet; + Vec3i32 facet; for (auto v : vtc) { int iv = v; if (i > 2 || iv < 0 || iv >= vsize) { i = 0; break; } @@ -550,7 +550,7 @@ TriangleMesh mcut_to_triangle_mesh(const McutMesh &mcutmesh) int faceVertexOffsetBase = 0; // for each face in CC - std::vector faces(ccFaceCount); + std::vector faces(ccFaceCount); for (uint32_t f = 0; f < ccFaceCount; ++f) { int faceSize = faceSizes.at(f); @@ -730,7 +730,7 @@ bool do_boolean_single(McutMesh &srcMesh, const McutMesh &cutMesh, const std::st int faceVertexOffsetBase = 0; // for each face in CC - std::vector faces(ccFaceCount); + std::vector faces(ccFaceCount); for (uint32_t f = 0; f < ccFaceCount; ++f) { bool reverseWindingOrder = (fragmentLocation == MC_FRAGMENT_LOCATION_BELOW) && (patchLocation == MC_PATCH_LOCATION_OUTSIDE); int faceSize = faceSizes.at(f); @@ -782,7 +782,7 @@ void do_boolean(McutMesh& srcMesh, const McutMesh& cutMesh, const std::string& b auto src_part = triangle_mesh_to_mcut(src_parts[i]); for (size_t j = 0; j < cut_parts.size(); j++) { auto cut_part = triangle_mesh_to_mcut(cut_parts[j]); - bool success = do_boolean_single(*src_part, *cut_part, boolean_opts); + do_boolean_single(*src_part, *cut_part, boolean_opts); } TriangleMesh tri_part = mcut_to_triangle_mesh(*src_part); its_merge(all_its, tri_part.its); @@ -811,7 +811,9 @@ void make_boolean(const TriangleMesh &src_mesh, const TriangleMesh &cut_mesh, st triangle_mesh_to_mcut(cut_mesh, cutMesh); //dst_mesh = make_boolean(srcMesh, cutMesh, boolean_opts); do_boolean(srcMesh, cutMesh, boolean_opts); - dst_mesh.push_back(mcut_to_triangle_mesh(srcMesh)); + TriangleMesh tri_src = mcut_to_triangle_mesh(srcMesh); + if (!tri_src.empty()) + dst_mesh.push_back(std::move(tri_src)); } } // namespace mcut diff --git a/src/libslic3r/MeshSplitImpl.hpp b/src/libslic3r/MeshSplitImpl.hpp index 711923ce11..9fa87d2a9e 100644 --- a/src/libslic3r/MeshSplitImpl.hpp +++ b/src/libslic3r/MeshSplitImpl.hpp @@ -14,7 +14,7 @@ namespace Slic3r { template -std::vector create_face_neighbors_index(ExPolicy &&ex, const indexed_triangle_set &its); +std::vector create_face_neighbors_index(ExPolicy &&ex, const indexed_triangle_set &its); namespace meshsplit_detail { @@ -26,7 +26,7 @@ template struct ItsWithNeighborsIndex_ { // Define a default neighbors index for indexed_triangle_set template<> struct ItsWithNeighborsIndex_ { - using Index = std::vector; + using Index = std::vector; static const indexed_triangle_set &get_its(const indexed_triangle_set &its) noexcept { return its; } static Index get_index(const indexed_triangle_set &its) noexcept { @@ -161,7 +161,7 @@ void its_split(const Its &m, OutputIt out_it) // Assign the facets to the new mesh. for (size_t face_id : facets) { const auto &face = its.indices[face_id]; - Vec3i new_face; + Vec3i32 new_face; for (size_t v = 0; v < 3; ++v) { auto vi = face(v); @@ -221,7 +221,7 @@ size_t its_number_of_patches(const Its &m) } template -std::vector create_face_neighbors_index(ExPolicy &&ex, const indexed_triangle_set &its) +std::vector create_face_neighbors_index(ExPolicy &&ex, const indexed_triangle_set &its) { const std::vector &indices = its.indices; @@ -231,14 +231,14 @@ std::vector create_face_neighbors_index(ExPolicy &&ex, const indexed_tria auto vertex_triangles = VertexFaceIndex{its}; static constexpr int no_value = -1; - std::vector neighbors(indices.size(), - Vec3i(no_value, no_value, no_value)); + std::vector neighbors(indices.size(), + Vec3i32(no_value, no_value, no_value)); //for (int face_idx = 0; face_idx < indices.size(); face_idx++) { execution::for_each(ex, size_t(0), indices.size(), [&neighbors, &indices, &vertex_triangles] (size_t face_idx) { - Vec3i& neighbor = neighbors[face_idx]; + Vec3i32& neighbor = neighbors[face_idx]; const stl_triangle_vertex_indices & triangle_indices = indices[face_idx]; for (int edge_index = 0; edge_index < 3; ++edge_index) { // check if done @@ -246,7 +246,7 @@ std::vector create_face_neighbors_index(ExPolicy &&ex, const indexed_tria if (neighbor_edge != no_value) // This edge already has a neighbor assigned. continue; - Vec2i edge_indices = its_triangle_edge(triangle_indices, edge_index); + Vec2i32 edge_indices = its_triangle_edge(triangle_indices, edge_index); // IMPROVE: use same vector for 2 sides of triangle for (const size_t other_face : vertex_triangles[edge_indices[0]]) { if (other_face <= face_idx) continue; diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 8d475cefbb..c2fd0f6796 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1,16 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Oleksandra Iushchenko @YuSanka, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2021 Boleslaw Ciesielski -///|/ Copyright (c) 2019 John Drake @foxox -///|/ Copyright (c) 2019 Sijmen Schoon -///|/ Copyright (c) Slic3r 2014 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ -///|/ ported from lib/Slic3r/Model.pm: -///|/ Copyright (c) Prusa Research 2016 - 2022 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2012 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Model.hpp" #include "libslic3r.h" #include "BuildVolume.hpp" @@ -24,9 +11,6 @@ #include "TriangleSelector.hpp" #include "Format/AMF.hpp" -#include "Format/OBJ.hpp" -#include "Format/STL.hpp" -#include "Format/STEP.hpp" #include "Format/svg.hpp" // BBS #include "FaceDetector.hpp" @@ -60,6 +44,9 @@ #define _L(s) Slic3r::I18N::translate(s) namespace Slic3r { +const std::vector CONST_FILAMENTS = { + "", "4", "8", "0C", "1C", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "AC", "BC", "CC", "DC", +}; // 5 10 15 16 // BBS initialization of static variables std::map Model::extruderParamsMap = { {0,{"",0,0}}}; GlobalSpeedMap Model::printSpeedMap{}; @@ -104,10 +91,13 @@ Model& Model::assign_copy(const Model &rhs) this->design_info = rhs.design_info; this->model_info = rhs.model_info; this->stl_design_id = rhs.stl_design_id; + this->stl_design_country = rhs.stl_design_country; this->profile_info = rhs.profile_info; this->mk_name = rhs.mk_name; this->mk_version = rhs.mk_version; + this->md_name = rhs.md_name; + this->md_value = rhs.md_value; return *this; } @@ -138,8 +128,11 @@ Model& Model::assign_copy(Model &&rhs) //BBS: add auxiliary path logic // BBS: backup, all in one temp dir this->stl_design_id = rhs.stl_design_id; + this->stl_design_country = rhs.stl_design_country; this->mk_name = rhs.mk_name; this->mk_version = rhs.mk_version; + this->md_name = rhs.md_name; + this->md_value = rhs.md_value; this->backup_path = std::move(rhs.backup_path); this->object_backup_id_map = std::move(rhs.object_backup_id_map); this->next_object_backup_id = rhs.next_object_backup_id; @@ -188,7 +181,12 @@ Model::~Model() // Loading model from a file, it may be a simple geometry file as STL or OBJ, however it may be a project file as well. Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, LoadStrategy options, PlateDataPtrs* plate_data, std::vector* project_presets, bool *is_xxx, Semver* file_version, Import3mfProgressFn proFn, - ImportstlProgressFn stlFn, ImportStepProgressFn stepFn, StepIsUtf8Fn stepIsUtf8Fn, BBLProject* project, int plate_id) + ImportstlProgressFn stlFn, + ImportStepProgressFn stepFn, + StepIsUtf8Fn stepIsUtf8Fn, + BBLProject * project, + int plate_id, + ObjImportColorFn objFn) { Model model; @@ -217,8 +215,38 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c result = load_step(input_file.c_str(), &model, is_cb_cancel, stepFn, stepIsUtf8Fn); else if (boost::algorithm::iends_with(input_file, ".stl")) result = load_stl(input_file.c_str(), &model, nullptr, stlFn); - else if (boost::algorithm::iends_with(input_file, ".obj")) - result = load_obj(input_file.c_str(), &model, message); + else if (boost::algorithm::iends_with(input_file, ".oltp")) + result = load_stl(input_file.c_str(), &model, nullptr, stlFn,256); + else if (boost::algorithm::iends_with(input_file, ".obj")) { + ObjInfo obj_info; + result = load_obj(input_file.c_str(), &model, obj_info, message); + if (result){ + unsigned char first_extruder_id; + if (obj_info.vertex_colors.size() > 0) { + std::vector vertex_filament_ids; + if (objFn) { // 1.result is ok and pop up a dialog + objFn(obj_info.vertex_colors, false, vertex_filament_ids, first_extruder_id); + if (vertex_filament_ids.size() > 0) { + result = obj_import_vertex_color_deal(vertex_filament_ids, first_extruder_id, & model); + } + } + } else if (obj_info.face_colors.size() > 0 && obj_info.has_uv_png == false) { // mtl file + std::vector face_filament_ids; + if (objFn) { // 1.result is ok and pop up a dialog + objFn(obj_info.face_colors, obj_info.is_single_mtl, face_filament_ids, first_extruder_id); + if (face_filament_ids.size() > 0) { + result = obj_import_face_color_deal(face_filament_ids, first_extruder_id, &model); + } + } + } /*else if (obj_info.has_uv_png && obj_info.uvs.size() > 0) { + boost::filesystem::path full_path(input_file); + std::string obj_directory = full_path.parent_path().string(); + obj_info.obj_dircetory = obj_directory; + result = false; + message = _L("Importing obj with png function is developing."); + }*/ + } + } else if (boost::algorithm::iends_with(input_file, ".svg")) result = load_svg(input_file.c_str(), &model, message); //BBS: remove the old .amf.xml files @@ -954,10 +982,13 @@ void Model::load_from(Model& model) next_object_backup_id = model.next_object_backup_id; design_info = model.design_info; stl_design_id = model.stl_design_id; + stl_design_country = model.stl_design_country; model_info = model.model_info; profile_info = model.profile_info; mk_name = model.mk_name; mk_version = model.mk_version; + md_name = model.md_name; + md_value = model.md_value; model.design_info.reset(); model.model_info.reset(); model.profile_info.reset(); @@ -1508,13 +1539,16 @@ BoundingBoxf3 ModelObject::instance_bounding_box(const ModelInstance &instance, //BBS: add convex bounding box BoundingBoxf3 ModelObject::instance_convex_hull_bounding_box(size_t instance_idx, bool dont_translate) const +{ + return instance_convex_hull_bounding_box(this->instances[instance_idx], dont_translate); +} + +BoundingBoxf3 ModelObject::instance_convex_hull_bounding_box(const ModelInstance* instance, bool dont_translate) const { BoundingBoxf3 bb; - const Transform3d& inst_matrix = dont_translate ? - this->instances[instance_idx]->get_transformation().get_matrix_no_offset() : - this->instances[instance_idx]->get_transformation().get_matrix(); - for (ModelVolume *v : this->volumes) - { + const Transform3d inst_matrix = dont_translate ? instance->get_transformation().get_matrix_no_offset() : + instance->get_transformation().get_matrix(); + for (ModelVolume* v : this->volumes) { if (v->is_model_part()) bb.merge(v->get_convex_hull().transformed_bounding_box(inst_matrix * v->get_matrix())); } @@ -2858,6 +2892,163 @@ void Model::setExtruderParams(const DynamicPrintConfig& config, int extruders_co } } +static void get_real_filament_id(const unsigned char &id, std::string &result) { + if (id < CONST_FILAMENTS.size()) { + result = CONST_FILAMENTS[id]; + } else { + result = "";//error + } +}; + +bool Model::obj_import_vertex_color_deal(const std::vector &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model) +{ + if (vertex_filament_ids.size() == 0) { + return false; + } + // 2.generate mmu_segmentation_facets + if (model->objects.size() == 1 ) { + auto obj = model->objects[0]; + obj->config.set("extruder", first_extruder_id); + if (obj->volumes.size() == 1) { + enum VertexColorCase { + _3_SAME_COLOR, + _3_DIFF_COLOR, + _2_SAME_1_DIFF_COLOR, + }; + auto calc_vertex_color_case = [](const unsigned char &c0, const unsigned char &c1, const unsigned char &c2, VertexColorCase &vertex_color_case, + unsigned char &iso_index) { + if (c0 == c1 && c1 == c2) { + vertex_color_case = VertexColorCase::_3_SAME_COLOR; + } else if (c0 != c1 && c1 != c2 && c0 != c2) { + vertex_color_case = VertexColorCase::_3_DIFF_COLOR; + } else if (c0 == c1) { + vertex_color_case = _2_SAME_1_DIFF_COLOR; + iso_index = 2; + } else if (c1 == c2) { + vertex_color_case = _2_SAME_1_DIFF_COLOR; + iso_index = 0; + } else if (c0 == c2) { + vertex_color_case = _2_SAME_1_DIFF_COLOR; + iso_index = 1; + } else { + std::cout << "error"; + } + }; + auto calc_tri_area = [](const Vec3f &v0, const Vec3f &v1, const Vec3f &v2) { + return std::abs((v0 - v1).cross(v0 - v2).norm()) / 2; + }; + auto volume = obj->volumes[0]; + volume->config.set("extruder", first_extruder_id); + auto face_count = volume->mesh().its.indices.size(); + volume->mmu_segmentation_facets.reserve(face_count); + if (volume->mesh().its.vertices.size() != vertex_filament_ids.size()) { + return false; + } + for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) { + auto face = volume->mesh().its.indices[i]; + auto filament_id0 = vertex_filament_ids[face[0]]; + auto filament_id1 = vertex_filament_ids[face[1]]; + auto filament_id2 = vertex_filament_ids[face[2]]; + if (filament_id0 <= 1 && filament_id1 <= 1 && filament_id2 <= 2) { + continue; + } + if (i == 0) { + std::cout << ""; + } + VertexColorCase vertex_color_case; + unsigned char iso_index; + calc_vertex_color_case(filament_id0, filament_id1, filament_id2, vertex_color_case, iso_index); + switch (vertex_color_case) { + case _3_SAME_COLOR: { + std::string result; + get_real_filament_id(filament_id0, result); + volume->mmu_segmentation_facets.set_triangle_from_string(i, result); + break; + } + case _3_DIFF_COLOR: { + std::string result0, result1, result2; + get_real_filament_id(filament_id0, result0); + get_real_filament_id(filament_id1, result1); + get_real_filament_id(filament_id2, result2); + + auto v0 = volume->mesh().its.vertices[face[0]]; + auto v1 = volume->mesh().its.vertices[face[1]]; + auto v2 = volume->mesh().its.vertices[face[2]]; + auto dir_0_1 = (v1 - v0).normalized(); + auto dir_0_2 = (v2 - v0).normalized(); + float sita0 = acos(dir_0_1.dot(dir_0_2)); + auto dir_1_0 = -dir_0_1; + auto dir_1_2 = (v2 - v1).normalized(); + float sita1 = acos(dir_1_0.dot(dir_1_2)); + float sita2 = PI - sita0 - sita1; + std::array sitas = {sita0, sita1, sita2}; + float max_sita = sitas[0]; + int max_sita_vertex_index = 0; + for (size_t j = 1; j < sitas.size(); j++) { + if (sitas[j] > max_sita) { + max_sita_vertex_index = j; + max_sita = sitas[j]; + } + } + if (max_sita_vertex_index == 0) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result2 + (result1 + result2 + "5" )+ "3"); //"1C0C2C0C1C13" + } else if (max_sita_vertex_index == 1) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result2 + (result0 + result2 + "9") + "3"); + } else{// if (max_sita_vertex_index == 2) + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result2 + (result1 + result0 + "1") + "3"); + } + break; + } + case _2_SAME_1_DIFF_COLOR: { + std::string result0, result1, result2; + get_real_filament_id(filament_id0, result0); + get_real_filament_id(filament_id1, result1); + get_real_filament_id(filament_id2, result2); + if (iso_index == 0) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result1 + "2"); + } else if (iso_index == 1) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result1 + result0 + result0 + "6"); + } else if (iso_index == 2) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result2 + result0 + result0 + "A"); + } + break; + } + default: break; + } + } + return true; + } + } + return false; +} + +bool Model::obj_import_face_color_deal(const std::vector &face_filament_ids, const unsigned char &first_extruder_id, Model *model) +{ + if (face_filament_ids.size() == 0) { return false; } + // 2.generate mmu_segmentation_facets + if (model->objects.size() == 1) { + auto obj = model->objects[0]; + obj->config.set("extruder", first_extruder_id); + if (obj->volumes.size() == 1) { + auto volume = obj->volumes[0]; + volume->config.set("extruder", first_extruder_id); + auto face_count = volume->mesh().its.indices.size(); + volume->mmu_segmentation_facets.reserve(face_count); + if (volume->mesh().its.indices.size() != face_filament_ids.size()) { return false; } + for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) { + auto face = volume->mesh().its.indices[i]; + auto filament_id = face_filament_ids[i]; + if (filament_id <= 1) { continue; } + std::string result; + get_real_filament_id(filament_id, result); + volume->mmu_segmentation_facets.set_triangle_from_string(i, result); + } + return true; + } + } + return false; +} + // update the maxSpeed of an object if it is different from the global configuration double Model::findMaxSpeed(const ModelObject* object) { auto objectKeys = object->config.keys(); @@ -2976,7 +3167,8 @@ double getadhesionCoeff(const ModelVolumePtrs objectVolumes) double adhesionCoeff = 1; for (const ModelVolume* modelVolume : objectVolumes) { if (Model::extruderParamsMap.find(modelVolume->extruder_id()) != Model::extruderParamsMap.end()) - if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG") { + if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG" || + Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PCTG") { adhesionCoeff = 2; } else if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "TPU") { diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index ecab5a1296..b035c2bdd2 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -1,15 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2019 John Drake @foxox -///|/ Copyright (c) 2019 Sijmen Schoon -///|/ Copyright (c) 2017 Eyal Soha @eyal0 -///|/ Copyright (c) Slic3r 2014 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/Model.pm: -///|/ Copyright (c) Prusa Research 2016 - 2022 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2012 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Model_hpp_ #define slic3r_Model_hpp_ @@ -35,6 +23,7 @@ #include "Format/STEP.hpp" //BBS: add stl #include "Format/STL.hpp" +#include "Format/OBJ.hpp" #include #include @@ -434,7 +423,7 @@ public: bool is_mm_painted() const; // This object may have a varying layer height by painting or by a table. // Even if true is returned, the layer height profile may be "flat" with no difference to default layering. - bool has_custom_layering() const + bool has_custom_layering() const { return ! this->layer_config_ranges.empty() || ! this->layer_height_profile.empty(); } ModelInstance* add_instance(); @@ -482,6 +471,7 @@ public: //BBS: add instance convex hull bounding box BoundingBoxf3 instance_convex_hull_bounding_box(size_t instance_idx, bool dont_translate = false) const; + BoundingBoxf3 instance_convex_hull_bounding_box(const ModelInstance* instance, bool dont_translate = false) const; // Calculate 2D convex hull of of a projection of the transformed printable volumes into the XY plane. // This method is cheap in that it does not make any unnecessary copy of the volume meshes. @@ -1510,6 +1500,7 @@ public: // DesignInfo of Model std::string stl_design_id; + std::string stl_design_country; std::shared_ptr design_info = nullptr; std::shared_ptr model_info = nullptr; std::shared_ptr profile_info = nullptr; @@ -1517,6 +1508,8 @@ public: //makerlab information std::string mk_name; std::string mk_version; + std::vector md_name; + std::vector md_value; void SetDesigner(std::string designer, std::string designer_user_id) { if (design_info == nullptr) { @@ -1562,8 +1555,16 @@ public: DynamicPrintConfig* config = nullptr, ConfigSubstitutionContext* config_substitutions = nullptr, LoadStrategy options = LoadStrategy::AddDefaultInstances, PlateDataPtrs* plate_data = nullptr, std::vector* project_presets = nullptr, bool* is_xxx = nullptr, Semver* file_version = nullptr, Import3mfProgressFn proFn = nullptr, - ImportstlProgressFn stlFn = nullptr, ImportStepProgressFn stepFn = nullptr, StepIsUtf8Fn stepIsUtf8Fn = nullptr, BBLProject* project = nullptr, int plate_id = 0); + ImportstlProgressFn stlFn = nullptr, + ImportStepProgressFn stepFn = nullptr, + StepIsUtf8Fn stepIsUtf8Fn = nullptr, + BBLProject * project = nullptr, + int plate_id = 0, + ObjImportColorFn objFn = nullptr + ); // BBS + static bool obj_import_vertex_color_deal(const std::vector &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model); + static bool obj_import_face_color_deal(const std::vector &face_filament_ids, const unsigned char &first_extruder_id, Model *model); static double findMaxSpeed(const ModelObject* object); static double getThermalLength(const ModelVolume* modelVolumePtr); static double getThermalLength(const std::vector modelVolumePtrs); diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index 92ac77b191..477509e69e 100644 --- a/src/libslic3r/ModelArrange.cpp +++ b/src/libslic3r/ModelArrange.cpp @@ -176,7 +176,8 @@ ArrangePolygon get_instance_arrange_poly(ModelInstance* instance, const Slic3r:: ap.has_tree_support = true; } - ap.height = obj->bounding_box_exact().size().z(); + auto size = obj->instance_convex_hull_bounding_box(instance).size(); + ap.height = size.z(); ap.name = obj->name; return ap; } diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 596fc56db4..6fba47f5b8 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -4,11 +4,11 @@ #include "Layer.hpp" #include "Print.hpp" #include "Geometry/VoronoiVisualUtils.hpp" +#include "Geometry/VoronoiUtils.hpp" #include "MutablePolygon.hpp" #include "format.hpp" #include -#include #include #include @@ -16,38 +16,469 @@ #include #include +//#define MM_SEGMENTATION_DEBUG_GRAPH +//#define MM_SEGMENTATION_DEBUG_REGIONS +//#define MM_SEGMENTATION_DEBUG_INPUT +//#define MM_SEGMENTATION_DEBUG_PAINTED_LINES +//#define MM_SEGMENTATION_DEBUG_COLORIZED_POLYGONS + +#if defined(MM_SEGMENTATION_DEBUG_GRAPH) || defined(MM_SEGMENTATION_DEBUG_REGIONS) || \ + defined(MM_SEGMENTATION_DEBUG_INPUT) || defined(MM_SEGMENTATION_DEBUG_PAINTED_LINES) || \ + defined(MM_SEGMENTATION_DEBUG_COLORIZED_POLYGONS) +#define MM_SEGMENTATION_DEBUG +#endif + +//#define MM_SEGMENTATION_DEBUG_TOP_BOTTOM + namespace Slic3r { -struct ColoredLine { - Line line; - int color; - int poly_idx = -1; - int local_line_idx = -1; -}; +using boost::polygon::voronoi_diagram; + +static inline Point mk_point(const Voronoi::VD::vertex_type *point) { return {coord_t(point->x()), coord_t(point->y())}; } + +static inline Point mk_point(const Voronoi::Internal::point_type &point) { return {coord_t(point.x()), coord_t(point.y())}; } + +static inline Point mk_point(const voronoi_diagram::vertex_type &point) { return {coord_t(point.x()), coord_t(point.y())}; } + +static inline Point mk_point(const Vec2d &point) { return {coord_t(std::round(point.x())), coord_t(std::round(point.y()))}; } + +static inline Vec2d mk_vec2(const voronoi_diagram::vertex_type *point) { return {point->x(), point->y()}; } + +static bool vertex_equal_to_point(const Voronoi::VD::vertex_type &vertex, const Vec2d &ipt) +{ + // Convert ipt to doubles, force the 80bit FPU temporary to 64bit and then compare. + // This should work with any settings of math compiler switches and the C++ compiler + // shall understand the memcpies as type punning and it shall optimize them out. + using ulp_cmp_type = boost::polygon::detail::ulp_comparison; + ulp_cmp_type ulp_cmp; + static constexpr int ULPS = boost::polygon::voronoi_diagram_traits::vertex_equality_predicate_type::ULPS; + return ulp_cmp(vertex.x(), ipt.x(), ULPS) == ulp_cmp_type::EQUAL && ulp_cmp(vertex.y(), ipt.y(), ULPS) == ulp_cmp_type::EQUAL; } -#include -namespace boost::polygon { -template <> -struct geometry_concept { typedef segment_concept type; }; +static inline bool vertex_equal_to_point(const Voronoi::VD::vertex_type *vertex, const Vec2d &ipt) { return vertex_equal_to_point(*vertex, ipt); } -template <> -struct segment_traits { - typedef coord_t coordinate_type; - typedef Slic3r::Point point_type; +struct MMU_Graph +{ + enum class ARC_TYPE { BORDER, NON_BORDER }; - static inline point_type get(const Slic3r::ColoredLine& line, const direction_1d& dir) { - return dir.to_int() ? line.line.b : line.line.a; + struct Arc + { + size_t from_idx; + size_t to_idx; + int color; + ARC_TYPE type; + + bool operator==(const Arc &rhs) const { return (from_idx == rhs.from_idx) && (to_idx == rhs.to_idx) && (color == rhs.color) && (type == rhs.type); } + bool operator!=(const Arc &rhs) const { return !operator==(rhs); } + }; + + struct Node + { + Vec2d point; + std::list arc_idxs; + + void remove_edge(const size_t to_idx, MMU_Graph &graph) + { + for (auto arc_it = this->arc_idxs.begin(); arc_it != this->arc_idxs.end(); ++arc_it) { + MMU_Graph::Arc &arc = graph.arcs[*arc_it]; + if (arc.to_idx == to_idx) { + assert(arc.type != ARC_TYPE::BORDER); + this->arc_idxs.erase(arc_it); + break; + } + } + } + }; + + std::vector nodes; + std::vector arcs; + size_t all_border_points{}; + + std::vector polygon_idx_offset; + std::vector polygon_sizes; + + void remove_edge(const size_t from_idx, const size_t to_idx) + { + nodes[from_idx].remove_edge(to_idx, *this); + nodes[to_idx].remove_edge(from_idx, *this); + } + + [[nodiscard]] size_t get_global_index(const size_t poly_idx, const size_t point_idx) const { return polygon_idx_offset[poly_idx] + point_idx; } + + void append_edge(const size_t &from_idx, const size_t &to_idx, int color = -1, ARC_TYPE type = ARC_TYPE::NON_BORDER) + { + // Don't append duplicate edges between the same nodes. + for (const size_t &arc_idx : this->nodes[from_idx].arc_idxs) + if (arcs[arc_idx].to_idx == to_idx) return; + for (const size_t &arc_idx : this->nodes[to_idx].arc_idxs) + if (arcs[arc_idx].to_idx == from_idx) return; + + this->nodes[from_idx].arc_idxs.push_back(this->arcs.size()); + this->arcs.push_back({from_idx, to_idx, color, type}); + + // Always insert only one directed arc for the input polygons. + // Two directed arcs in both directions are inserted if arcs aren't between points of the input polygons. + if (type == ARC_TYPE::NON_BORDER) { + this->nodes[to_idx].arc_idxs.push_back(this->arcs.size()); + this->arcs.push_back({to_idx, from_idx, color, type}); + } + } + + // It assumes that between points of the input polygons is always only one directed arc, + // with the same direction as lines of the input polygon. + [[nodiscard]] MMU_Graph::Arc get_border_arc(size_t idx) const + { + assert(idx < this->all_border_points); + return this->arcs[idx]; + } + + [[nodiscard]] size_t nodes_count() const { return this->nodes.size(); } + + void remove_nodes_with_one_arc() + { + std::queue update_queue; + for (const MMU_Graph::Node &node : this->nodes) { + size_t node_idx = &node - &this->nodes.front(); + // Skip nodes that represent points of input polygons. + if (node.arc_idxs.size() == 1 && node_idx >= this->all_border_points) update_queue.emplace(&node - &this->nodes.front()); + } + + while (!update_queue.empty()) { + size_t node_from_idx = update_queue.front(); + MMU_Graph::Node &node_from = this->nodes[update_queue.front()]; + update_queue.pop(); + if (node_from.arc_idxs.empty()) continue; + + assert(node_from.arc_idxs.size() == 1); + size_t node_to_idx = arcs[node_from.arc_idxs.front()].to_idx; + MMU_Graph::Node &node_to = this->nodes[node_to_idx]; + this->remove_edge(node_from_idx, node_to_idx); + if (node_to.arc_idxs.size() == 1 && node_to_idx >= this->all_border_points) update_queue.emplace(node_to_idx); + } + } + + void add_contours(const std::vector> &color_poly) + { + this->all_border_points = nodes.size(); + this->polygon_sizes = std::vector(color_poly.size()); + for (size_t polygon_idx = 0; polygon_idx < color_poly.size(); ++polygon_idx) this->polygon_sizes[polygon_idx] = color_poly[polygon_idx].size(); + this->polygon_idx_offset = std::vector(color_poly.size()); + this->polygon_idx_offset[0] = 0; + for (size_t polygon_idx = 1; polygon_idx < color_poly.size(); ++polygon_idx) { + this->polygon_idx_offset[polygon_idx] = this->polygon_idx_offset[polygon_idx - 1] + color_poly[polygon_idx - 1].size(); + } + + size_t poly_idx = 0; + for (const std::vector &color_lines : color_poly) { + size_t line_idx = 0; + for (const ColoredLine &color_line : color_lines) { + size_t from_idx = this->get_global_index(poly_idx, line_idx); + size_t to_idx = this->get_global_index(poly_idx, (line_idx + 1) % color_lines.size()); + this->append_edge(from_idx, to_idx, color_line.color, ARC_TYPE::BORDER); + ++line_idx; + } + ++poly_idx; + } + } + + // Nodes 0..all_border_points are only one with are on countour. Other vertexis are consider as not on coouter. So we check if base on attach index + inline bool is_vertex_on_contour(const Voronoi::VD::vertex_type *vertex) const + { + assert(vertex != nullptr); + return vertex->color() < this->all_border_points; + } + + [[nodiscard]] inline bool is_edge_attach_to_contour(const voronoi_diagram::const_edge_iterator &edge_iterator) const + { + return this->is_vertex_on_contour(edge_iterator->vertex0()) || this->is_vertex_on_contour(edge_iterator->vertex1()); + } + + [[nodiscard]] inline bool is_edge_connecting_two_contour_vertices(const voronoi_diagram::const_edge_iterator &edge_iterator) const + { + return this->is_vertex_on_contour(edge_iterator->vertex0()) && this->is_vertex_on_contour(edge_iterator->vertex1()); + } + + // All Voronoi vertices are post-processes to merge very close vertices to single. Witch eliminates issues with intersection edges. + // Also, Voronoi vertices outside of the bounding of input polygons are throw away by marking them. + void append_voronoi_vertices(const Geometry::VoronoiDiagram &vd, const Polygons &color_poly_tmp, BoundingBox bbox) + { + bbox.offset(SCALED_EPSILON); + + struct CPoint + { + CPoint() = delete; + CPoint(const Vec2d &point, size_t contour_idx, size_t point_idx) : m_point_double(point), m_point(mk_point(point)), m_point_idx(point_idx), m_contour_idx(contour_idx) + {} + CPoint(const Vec2d &point, size_t point_idx) : m_point_double(point), m_point(mk_point(point)), m_point_idx(point_idx), m_contour_idx(0) {} + const Vec2d m_point_double; + const Point m_point; + size_t m_point_idx; + size_t m_contour_idx; + + [[nodiscard]] const Vec2d &point_double() const { return m_point_double; } + [[nodiscard]] const Point &point() const { return m_point; } + bool operator==(const CPoint &rhs) const + { + return this->m_point_double == rhs.m_point_double && this->m_contour_idx == rhs.m_contour_idx && this->m_point_idx == rhs.m_point_idx; + } + }; + struct CPointAccessor + { + const Point *operator()(const CPoint &pt) const { return &pt.point(); } + }; + typedef ClosestPointInRadiusLookup CPointLookupType; + + CPointLookupType closest_voronoi_point(coord_t(SCALED_EPSILON)); + CPointLookupType closest_contour_point(3 * coord_t(SCALED_EPSILON)); + for (const Polygon &polygon : color_poly_tmp) + for (const Point &pt : polygon.points) closest_contour_point.insert(CPoint(Vec2d(pt.x(), pt.y()), &polygon - &color_poly_tmp.front(), &pt - &polygon.points.front())); + + for (const voronoi_diagram::vertex_type &vertex : vd.vertices()) { + vertex.color(-1); + Vec2d vertex_point_double = Vec2d(vertex.x(), vertex.y()); + Point vertex_point = mk_point(vertex); + + const Vec2d &first_point_double = this->nodes[this->get_border_arc(vertex.incident_edge()->cell()->source_index()).from_idx].point; + const Vec2d &second_point_double = this->nodes[this->get_border_arc(vertex.incident_edge()->twin()->cell()->source_index()).from_idx].point; + + if (vertex_equal_to_point(&vertex, first_point_double)) { + assert(vertex.color() != vertex.incident_edge()->cell()->source_index()); + assert(vertex.color() != vertex.incident_edge()->twin()->cell()->source_index()); + vertex.color(this->get_border_arc(vertex.incident_edge()->cell()->source_index()).from_idx); + } else if (vertex_equal_to_point(&vertex, second_point_double)) { + assert(vertex.color() != vertex.incident_edge()->cell()->source_index()); + assert(vertex.color() != vertex.incident_edge()->twin()->cell()->source_index()); + vertex.color(this->get_border_arc(vertex.incident_edge()->twin()->cell()->source_index()).from_idx); + } else if (bbox.contains(vertex_point)) { + if (auto [contour_pt, c_dist_sqr] = closest_contour_point.find(vertex_point); contour_pt != nullptr && c_dist_sqr < Slic3r::sqr(3 * SCALED_EPSILON)) { + vertex.color(this->get_global_index(contour_pt->m_contour_idx, contour_pt->m_point_idx)); + } else if (auto [voronoi_pt, v_dist_sqr] = closest_voronoi_point.find(vertex_point); voronoi_pt == nullptr || v_dist_sqr >= Slic3r::sqr(SCALED_EPSILON / 10.0)) { + closest_voronoi_point.insert(CPoint(vertex_point_double, this->nodes_count())); + vertex.color(this->nodes_count()); + this->nodes.push_back({vertex_point_double}); + } else { + // Boost Voronoi diagram generator sometimes creates two very closed points instead of one point. + // For the example points (146872.99999999997, -146872.99999999997) and (146873, -146873), this example also included in Voronoi generator test cases. + std::vector> all_closes_c_points = closest_voronoi_point.find_all(vertex_point); + int merge_to_point = -1; + for (const std::pair &c_point : all_closes_c_points) + if ((vertex_point_double - c_point.first->point_double()).squaredNorm() <= Slic3r::sqr(EPSILON)) { + merge_to_point = int(c_point.first->m_point_idx); + break; + } + + if (merge_to_point != -1) { + vertex.color(merge_to_point); + } else { + closest_voronoi_point.insert(CPoint(vertex_point_double, this->nodes_count())); + vertex.color(this->nodes_count()); + this->nodes.push_back({vertex_point_double}); + } + } + } + } + } + + void garbage_collect() + { + std::vector nodes_map(this->nodes.size(), -1); + int nodes_count = 0; + size_t arcs_count = 0; + for (const MMU_Graph::Node &node : this->nodes) + if (size_t node_idx = &node - &this->nodes.front(); !node.arc_idxs.empty()) { + nodes_map[node_idx] = nodes_count++; + arcs_count += node.arc_idxs.size(); + } + + std::vector new_nodes; + std::vector new_arcs; + new_nodes.reserve(nodes_count); + new_arcs.reserve(arcs_count); + for (const MMU_Graph::Node &node : this->nodes) + if (size_t node_idx = &node - &this->nodes.front(); nodes_map[node_idx] >= 0) { + new_nodes.push_back({node.point}); + for (const size_t &arc_idx : node.arc_idxs) { + const Arc &arc = this->arcs[arc_idx]; + new_nodes.back().arc_idxs.emplace_back(new_arcs.size()); + new_arcs.push_back({size_t(nodes_map[arc.from_idx]), size_t(nodes_map[arc.to_idx]), arc.color, arc.type}); + } + } + + this->nodes = std::move(new_nodes); + this->arcs = std::move(new_arcs); } }; + +static Polygon colored_points_to_polygon(const std::vector &lines) +{ + Polygon out; + out.points.reserve(lines.size()); + for (const ColoredLine &l : lines) out.points.emplace_back(l.line.a); + return out; } -//#define MMU_SEGMENTATION_DEBUG_GRAPH -//#define MMU_SEGMENTATION_DEBUG_REGIONS -//#define MMU_SEGMENTATION_DEBUG_INPUT -//#define MMU_SEGMENTATION_DEBUG_PAINTED_LINES -//#define MMU_SEGMENTATION_DEBUG_COLORIZED_POLYGONS +static Polygons colored_points_to_polygon(const std::vector> &lines) +{ + Polygons out; + out.reserve(lines.size()); + for (const std::vector &l : lines) out.emplace_back(colored_points_to_polygon(l)); + return out; +} + +static std::vector> get_all_next_arcs( + const MMU_Graph &graph, std::vector &used_arcs, const Linef &process_line, const MMU_Graph::Arc &original_arc, const int color) +{ + std::vector> all_next_arcs; + for (const size_t &arc_idx : graph.nodes[original_arc.to_idx].arc_idxs) { + std::vector next_continue_arc; + + const MMU_Graph::Arc &arc = graph.arcs[arc_idx]; + if (graph.nodes[arc.to_idx].point == process_line.a || used_arcs[arc_idx]) continue; + + if (original_arc.type == MMU_Graph::ARC_TYPE::BORDER && original_arc.color != color) continue; + + if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color != color) continue; + + Vec2d arc_line = graph.nodes[arc.to_idx].point - graph.nodes[arc.from_idx].point; + next_continue_arc.emplace_back(&arc); + all_next_arcs.emplace_back(next_continue_arc); + } + return all_next_arcs; +} + +static std::vector get_next_arc( + const MMU_Graph &graph, std::vector &used_arcs, const Linef &process_line, const MMU_Graph::Arc &original_arc, const int color) +{ + std::vector res; + + std::vector> all_next_arcs = get_all_next_arcs(graph, used_arcs, process_line, original_arc, color); + if (all_next_arcs.empty()) { + res.emplace_back(&original_arc); + return res; + } + + std::vector, double>> sorted_arcs; + for (auto next_arc : all_next_arcs) { + if (next_arc.empty()) continue; + + Vec2d process_line_vec_n = (process_line.a - process_line.b).normalized(); + Vec2d neighbour_line_vec_n = (graph.nodes[next_arc.back()->to_idx].point - graph.nodes[next_arc.back()->from_idx].point).normalized(); + + double angle = ::acos(std::clamp(neighbour_line_vec_n.dot(process_line_vec_n), -1.0, 1.0)); + if (Slic3r::cross2(neighbour_line_vec_n, process_line_vec_n) < 0.0) angle = 2.0 * (double) PI - angle; + + sorted_arcs.emplace_back(next_arc, angle); + } + + std::sort(sorted_arcs.begin(), sorted_arcs.end(), + [](std::pair, double> &l, std::pair, double> &r) -> bool { return l.second < r.second; }); + + // Try to return left most edge witch is unused + for (auto &sorted_arc : sorted_arcs) { + if (size_t arc_idx = sorted_arc.first.back() - &graph.arcs.front(); !used_arcs[arc_idx]) return sorted_arc.first; + } + + if (sorted_arcs.empty()) { + res.emplace_back(&original_arc); + return res; + } + + return sorted_arcs.front().first; +} + +static bool is_profile_self_interaction(Polygon poly) +{ + auto lines = poly.lines(); + Point intersection; + for (int i = 0; i < lines.size(); ++i) { + for (int j = i + 2; j < std::min(lines.size(), lines.size() + i - 1); ++j) { + if (lines[i].intersection(lines[j], &intersection)) return true; + } + } + return false; +} + +static inline Polygon to_polygon(const std::vector> &id_to_lines) +{ + std::vector lines; + for (auto id_to_line : id_to_lines) lines.emplace_back(id_to_line.second); + + Polygon poly_out; + poly_out.points.reserve(lines.size()); + for (const Linef &line : lines) poly_out.points.emplace_back(mk_point(line.a)); + return poly_out; +} + +static std::vector extract_colored_segments(const MMU_Graph &graph, const size_t num_extruders) +{ + std::vector used_arcs(graph.arcs.size(), false); + + auto all_arc_used = [&used_arcs](const MMU_Graph::Node &node) -> bool { + return std::all_of(node.arc_idxs.cbegin(), node.arc_idxs.cend(), [&used_arcs](const size_t &arc_idx) -> bool { return used_arcs[arc_idx]; }); + }; + + std::vector expolygons_segments(num_extruders + 1); + for (size_t node_idx = 0; node_idx < graph.all_border_points; ++node_idx) { + const MMU_Graph::Node &node = graph.nodes[node_idx]; + + for (const size_t &arc_idx : node.arc_idxs) { + const MMU_Graph::Arc &arc = graph.arcs[arc_idx]; + if (arc.type == MMU_Graph::ARC_TYPE::NON_BORDER || used_arcs[arc_idx]) continue; + + Linef process_line(graph.nodes[arc.from_idx].point, graph.nodes[arc.to_idx].point); + used_arcs[arc_idx] = true; + + std::vector> arc_id_to_face_lines; + arc_id_to_face_lines.emplace_back(std::make_pair(arc_idx, process_line)); + Vec2d start_p = process_line.a; + + Linef p_vec = process_line; + const MMU_Graph::Arc *p_arc = &arc; + bool flag = false; + do { + std::vector nexts = get_next_arc(graph, used_arcs, p_vec, *p_arc, arc.color); + for (auto next : nexts) { + size_t next_arc_idx = next - &graph.arcs.front(); + if (used_arcs[next_arc_idx]) { + flag = true; + break; + } + } + + if (flag) break; + + for (auto next : nexts) { + size_t next_arc_idx = next - &graph.arcs.front(); + arc_id_to_face_lines.emplace_back(std::make_pair(next_arc_idx, Linef(graph.nodes[next->from_idx].point, graph.nodes[next->to_idx].point))); + used_arcs[next_arc_idx] = true; + } + + p_vec = Linef(graph.nodes[nexts.back()->from_idx].point, graph.nodes[nexts.back()->to_idx].point); + p_arc = nexts.back(); + + } while (graph.nodes[p_arc->to_idx].point != start_p || !all_arc_used(graph.nodes[p_arc->to_idx])); + + if (Polygon poly = to_polygon(arc_id_to_face_lines); poly.is_counter_clockwise() && poly.is_valid()) { + expolygons_segments[arc.color].emplace_back(std::move(poly)); + } else { + while (arc_id_to_face_lines.size() > 1) { + auto id_to_line = arc_id_to_face_lines.back(); + used_arcs[id_to_line.first] = false; + arc_id_to_face_lines.pop_back(); + Linef add_line(arc_id_to_face_lines.back().second.b, arc_id_to_face_lines.front().second.a); + arc_id_to_face_lines.emplace_back(std::make_pair(-1, add_line)); + Polygon poly = to_polygon(arc_id_to_face_lines); + if (!is_profile_self_interaction(poly) && poly.is_counter_clockwise() && poly.is_valid()) { + expolygons_segments[arc.color].emplace_back(std::move(poly)); + break; + } + arc_id_to_face_lines.pop_back(); + } + } + } + } + return expolygons_segments; +} -namespace Slic3r { bool is_equal(float left, float right, float eps = 1e-3) { return abs(left - right) <= eps; } @@ -156,55 +587,31 @@ struct PaintedLineVisitor static inline const double append_threshold2 = Slic3r::sqr(append_threshold); }; -static Polygon colored_points_to_polygon(const std::vector &lines) -{ - Polygon out; - out.points.reserve(lines.size()); - for (const ColoredLine &l : lines) - out.points.emplace_back(l.line.a); - return out; -} - -static Polygons colored_points_to_polygon(const std::vector> &lines) -{ - Polygons out; - out.reserve(lines.size()); - for (const std::vector &l : lines) - out.emplace_back(colored_points_to_polygon(l)); - return out; +BoundingBox get_extents(const std::vector &colored_polygons) { + BoundingBox bbox; + for (const ColoredLines &colored_lines : colored_polygons) { + for (const ColoredLine &colored_line : colored_lines) { + bbox.merge(colored_line.line.a); + bbox.merge(colored_line.line.b); + } + } + return bbox; } // Flatten the vector of vectors into a vector. -static inline std::vector to_lines(const std::vector> &c_lines) +static inline ColoredLines to_lines(const std::vector &c_lines) { size_t n_lines = 0; for (const auto &c_line : c_lines) n_lines += c_line.size(); - std::vector lines; + ColoredLines lines; lines.reserve(n_lines); for (const auto &c_line : c_lines) lines.insert(lines.end(), c_line.begin(), c_line.end()); return lines; } -static bool vertex_equal_to_point(const Voronoi::VD::vertex_type &vertex, const Vec2d &ipt) -{ - // Convert ipt to doubles, force the 80bit FPU temporary to 64bit and then compare. - // This should work with any settings of math compiler switches and the C++ compiler - // shall understand the memcpies as type punning and it shall optimize them out. - using ulp_cmp_type = boost::polygon::detail::ulp_comparison; - ulp_cmp_type ulp_cmp; - static constexpr int ULPS = boost::polygon::voronoi_diagram_traits::vertex_equality_predicate_type::ULPS; - return ulp_cmp(vertex.x(), ipt.x(), ULPS) == ulp_cmp_type::EQUAL && - ulp_cmp(vertex.y(), ipt.y(), ULPS) == ulp_cmp_type::EQUAL; -} - -static inline bool vertex_equal_to_point(const Voronoi::VD::vertex_type *vertex, const Vec2d &ipt) -{ - return vertex_equal_to_point(*vertex, ipt); -} - -static std::vector> get_segments(const std::vector &polygon) +static std::vector> get_segments(const ColoredLines &polygon) { std::vector> segments; @@ -229,16 +636,6 @@ static std::vector> get_segments(const std::vector>> get_all_segments(const std::vector> &color_poly) -{ - std::vector>> all_segments(color_poly.size()); - for (size_t poly_idx = 0; poly_idx < color_poly.size(); ++poly_idx) { - const std::vector &c_polygon = color_poly[poly_idx]; - all_segments[poly_idx] = get_segments(c_polygon); - } - return all_segments; -} - static std::vector filter_painted_lines(const Line &line_to_process, const size_t start_idx, const size_t end_idx, const std::vector &painted_lines) { const int filter_eps_value = scale_(0.1f); @@ -319,7 +716,7 @@ static std::vector> post_process_painted_lines(const st } #ifndef NDEBUG -static bool are_lines_connected(const std::vector &colored_lines) +static bool are_lines_connected(const ColoredLines &colored_lines) { for (size_t line_idx = 1; line_idx < colored_lines.size(); ++line_idx) if (colored_lines[line_idx - 1].line.b != colored_lines[line_idx].line.a) @@ -328,7 +725,7 @@ static bool are_lines_connected(const std::vector &colored_lines) } #endif -static std::vector colorize_line(const Line &line_to_process, +static ColoredLines colorize_line(const Line &line_to_process, const size_t start_idx, const size_t end_idx, const std::vector &painted_contour) @@ -336,9 +733,9 @@ static std::vector colorize_line(const Line &line_to_process, assert(start_idx < painted_contour.size() && end_idx < painted_contour.size() && start_idx <= end_idx); assert(std::all_of(painted_contour.begin() + start_idx, painted_contour.begin() + end_idx + 1, [&painted_contour, &start_idx](const auto &p_line) { return painted_contour[start_idx].line_idx == p_line.line_idx; })); - const int filter_eps_value = scale_(0.1f); - std::vector final_lines; - const PaintedLine &first_line = painted_contour[start_idx]; + const int filter_eps_value = scale_(0.1f); + ColoredLines final_lines; + const PaintedLine &first_line = painted_contour[start_idx]; if (double dist_to_start = (first_line.projected_line.a - line_to_process.a).cast().norm(); dist_to_start > filter_eps_value) final_lines.push_back({Line(line_to_process.a, first_line.projected_line.a), 0}); final_lines.push_back({first_line.projected_line, first_line.color}); @@ -377,7 +774,7 @@ static std::vector colorize_line(const Line &line_to_process, if (line_1.line.length() <= scale_(0.2)) line_1.color = line_0.color; } - std::vector colored_lines_simple; + ColoredLines colored_lines_simple; colored_lines_simple.emplace_back(final_lines.front()); for (size_t line_idx = 1; line_idx < final_lines.size(); ++line_idx) { const ColoredLine &line_0 = final_lines[line_idx]; @@ -405,7 +802,7 @@ static std::vector colorize_line(const Line &line_to_process, return final_lines; } -static std::vector filter_colorized_polygon(std::vector &&new_lines) { +static ColoredLines filter_colorized_polygon(ColoredLines &&new_lines) { for (size_t line_idx = 2; line_idx < new_lines.size(); ++line_idx) { const ColoredLine &line_0 = new_lines[line_idx - 2]; ColoredLine &line_1 = new_lines[line_idx - 1]; @@ -494,10 +891,10 @@ static std::vector filter_colorized_polygon(std::vector colorize_contour(const EdgeGrid::Contour &contour, const std::vector &painted_contour) { +static ColoredLines colorize_contour(const EdgeGrid::Contour &contour, const std::vector &painted_contour) { assert(painted_contour.empty() || std::all_of(painted_contour.begin(), painted_contour.end(), [&painted_contour](const auto &p_line) { return painted_contour.front().contour_idx == p_line.contour_idx; })); - std::vector colorized_contour; + ColoredLines colorized_contour; if (painted_contour.empty()) { // Appends contour with default color for lines before the first PaintedLine. colorized_contour.reserve(contour.num_segments()); @@ -534,297 +931,33 @@ static std::vector colorize_contour(const EdgeGrid::Contour &contou return filter_colorized_polygon(std::move(colorized_contour)); } -static std::vector> colorize_contours(const std::vector &contours, const std::vector> &painted_contours) +static std::vector colorize_contours(const std::vector &contours, const std::vector> &painted_contours) { assert(contours.size() == painted_contours.size()); - std::vector> colorized_contours(contours.size()); + std::vector colorized_contours(contours.size()); for (const std::vector &painted_contour : painted_contours) { size_t contour_idx = &painted_contour - &painted_contours.front(); colorized_contours[contour_idx] = colorize_contour(contours[contour_idx], painted_contours[contour_idx]); } + + size_t poly_idx = 0; + for (ColoredLines &color_lines : colorized_contours) { + size_t line_idx = 0; + for (size_t color_line_idx = 0; color_line_idx < color_lines.size(); ++color_line_idx) { + color_lines[color_line_idx].poly_idx = int(poly_idx); + color_lines[color_line_idx].local_line_idx = int(line_idx); + ++line_idx; + } + ++poly_idx; + } + return colorized_contours; } -using boost::polygon::voronoi_diagram; - -static inline Point mk_point(const Voronoi::VD::vertex_type *point) { return {coord_t(point->x()), coord_t(point->y())}; } - -static inline Point mk_point(const Voronoi::Internal::point_type &point) { return {coord_t(point.x()), coord_t(point.y())}; } - -static inline Point mk_point(const voronoi_diagram::vertex_type &point) { return {coord_t(point.x()), coord_t(point.y())}; } - -static inline Point mk_point(const Vec2d &point) { return {coord_t(std::round(point.x())), coord_t(std::round(point.y()))}; } - -static inline Vec2d mk_vec2(const voronoi_diagram::vertex_type *point) { return {point->x(), point->y()}; } - -struct MMU_Graph -{ - enum class ARC_TYPE { BORDER, NON_BORDER }; - - struct Arc - { - size_t from_idx; - size_t to_idx; - int color; - ARC_TYPE type; - - bool operator==(const Arc &rhs) const { return (from_idx == rhs.from_idx) && (to_idx == rhs.to_idx) && (color == rhs.color) && (type == rhs.type); } - bool operator!=(const Arc &rhs) const { return !operator==(rhs); } - }; - - struct Node - { - Vec2d point; - std::list arc_idxs; - - void remove_edge(const size_t to_idx, MMU_Graph &graph) - { - for (auto arc_it = this->arc_idxs.begin(); arc_it != this->arc_idxs.end(); ++arc_it) { - MMU_Graph::Arc &arc = graph.arcs[*arc_it]; - if (arc.to_idx == to_idx) { - assert(arc.type != ARC_TYPE::BORDER); - this->arc_idxs.erase(arc_it); - break; - } - } - } - }; - - std::vector nodes; - std::vector arcs; - size_t all_border_points{}; - - std::vector polygon_idx_offset; - std::vector polygon_sizes; - - void remove_edge(const size_t from_idx, const size_t to_idx) - { - nodes[from_idx].remove_edge(to_idx, *this); - nodes[to_idx].remove_edge(from_idx, *this); - } - - [[nodiscard]] size_t get_global_index(const size_t poly_idx, const size_t point_idx) const { return polygon_idx_offset[poly_idx] + point_idx; } - - void append_edge(const size_t &from_idx, const size_t &to_idx, int color = -1, ARC_TYPE type = ARC_TYPE::NON_BORDER) - { - // Don't append duplicate edges between the same nodes. - for (const size_t &arc_idx : this->nodes[from_idx].arc_idxs) - if (arcs[arc_idx].to_idx == to_idx) - return; - for (const size_t &arc_idx : this->nodes[to_idx].arc_idxs) - if (arcs[arc_idx].to_idx == from_idx) - return; - - this->nodes[from_idx].arc_idxs.push_back(this->arcs.size()); - this->arcs.push_back({from_idx, to_idx, color, type}); - - // Always insert only one directed arc for the input polygons. - // Two directed arcs in both directions are inserted if arcs aren't between points of the input polygons. - if (type == ARC_TYPE::NON_BORDER) { - this->nodes[to_idx].arc_idxs.push_back(this->arcs.size()); - this->arcs.push_back({to_idx, from_idx, color, type}); - } - } - - // It assumes that between points of the input polygons is always only one directed arc, - // with the same direction as lines of the input polygon. - [[nodiscard]] MMU_Graph::Arc get_border_arc(size_t idx) const { - assert(idx < this->all_border_points); - return this->arcs[idx]; - } - - [[nodiscard]] size_t nodes_count() const { return this->nodes.size(); } - - void remove_nodes_with_one_arc() - { - std::queue update_queue; - for (const MMU_Graph::Node &node : this->nodes) { - size_t node_idx = &node - &this->nodes.front(); - // Skip nodes that represent points of input polygons. - if (node.arc_idxs.size() == 1 && node_idx >= this->all_border_points) - update_queue.emplace(&node - &this->nodes.front()); - } - - while (!update_queue.empty()) { - size_t node_from_idx = update_queue.front(); - MMU_Graph::Node &node_from = this->nodes[update_queue.front()]; - update_queue.pop(); - if (node_from.arc_idxs.empty()) - continue; - - assert(node_from.arc_idxs.size() == 1); - size_t node_to_idx = arcs[node_from.arc_idxs.front()].to_idx; - MMU_Graph::Node &node_to = this->nodes[node_to_idx]; - this->remove_edge(node_from_idx, node_to_idx); - if (node_to.arc_idxs.size() == 1 && node_to_idx >= this->all_border_points) - update_queue.emplace(node_to_idx); - } - } - - void add_contours(const std::vector> &color_poly) - { - this->all_border_points = nodes.size(); - this->polygon_sizes = std::vector(color_poly.size()); - for (size_t polygon_idx = 0; polygon_idx < color_poly.size(); ++polygon_idx) - this->polygon_sizes[polygon_idx] = color_poly[polygon_idx].size(); - this->polygon_idx_offset = std::vector(color_poly.size()); - this->polygon_idx_offset[0] = 0; - for (size_t polygon_idx = 1; polygon_idx < color_poly.size(); ++polygon_idx) { - this->polygon_idx_offset[polygon_idx] = this->polygon_idx_offset[polygon_idx - 1] + color_poly[polygon_idx - 1].size(); - } - - size_t poly_idx = 0; - for (const std::vector &color_lines : color_poly) { - size_t line_idx = 0; - for (const ColoredLine &color_line : color_lines) { - size_t from_idx = this->get_global_index(poly_idx, line_idx); - size_t to_idx = this->get_global_index(poly_idx, (line_idx + 1) % color_lines.size()); - this->append_edge(from_idx, to_idx, color_line.color, ARC_TYPE::BORDER); - ++line_idx; - } - ++poly_idx; - } - } - - // Nodes 0..all_border_points are only one with are on countour. Other vertexis are consider as not on coouter. So we check if base on attach index - inline bool is_vertex_on_contour(const Voronoi::VD::vertex_type *vertex) const - { - assert(vertex != nullptr); - return vertex->color() < this->all_border_points; - } - - [[nodiscard]] inline bool is_edge_attach_to_contour(const voronoi_diagram::const_edge_iterator &edge_iterator) const - { - return this->is_vertex_on_contour(edge_iterator->vertex0()) || this->is_vertex_on_contour(edge_iterator->vertex1()); - } - - [[nodiscard]] inline bool is_edge_connecting_two_contour_vertices(const voronoi_diagram::const_edge_iterator &edge_iterator) const - { - return this->is_vertex_on_contour(edge_iterator->vertex0()) && this->is_vertex_on_contour(edge_iterator->vertex1()); - } - - // All Voronoi vertices are post-processes to merge very close vertices to single. Witch eliminates issues with intersection edges. - // Also, Voronoi vertices outside of the bounding of input polygons are throw away by marking them. - void append_voronoi_vertices(const Geometry::VoronoiDiagram &vd, const Polygons &color_poly_tmp, BoundingBox bbox) { - bbox.offset(SCALED_EPSILON); - - struct CPoint - { - CPoint() = delete; - CPoint(const Vec2d &point, size_t contour_idx, size_t point_idx) : m_point_double(point), m_point(mk_point(point)), m_point_idx(point_idx), m_contour_idx(contour_idx) {} - CPoint(const Vec2d &point, size_t point_idx) : m_point_double(point), m_point(mk_point(point)), m_point_idx(point_idx), m_contour_idx(0) {} - const Vec2d m_point_double; - const Point m_point; - size_t m_point_idx; - size_t m_contour_idx; - - [[nodiscard]] const Vec2d &point_double() const { return m_point_double; } - [[nodiscard]] const Point &point() const { return m_point; } - bool operator==(const CPoint &rhs) const { return this->m_point_double == rhs.m_point_double && this->m_contour_idx == rhs.m_contour_idx && this->m_point_idx == rhs.m_point_idx; } - }; - struct CPointAccessor { const Point* operator()(const CPoint &pt) const { return &pt.point(); }}; - typedef ClosestPointInRadiusLookup CPointLookupType; - - CPointLookupType closest_voronoi_point(coord_t(SCALED_EPSILON)); - CPointLookupType closest_contour_point(3 * coord_t(SCALED_EPSILON)); - for (const Polygon &polygon : color_poly_tmp) - for (const Point &pt : polygon.points) - closest_contour_point.insert(CPoint(Vec2d(pt.x(), pt.y()), &polygon - &color_poly_tmp.front(), &pt - &polygon.points.front())); - - for (const voronoi_diagram::vertex_type &vertex : vd.vertices()) { - vertex.color(-1); - Vec2d vertex_point_double = Vec2d(vertex.x(), vertex.y()); - Point vertex_point = mk_point(vertex); - - const Vec2d &first_point_double = this->nodes[this->get_border_arc(vertex.incident_edge()->cell()->source_index()).from_idx].point; - const Vec2d &second_point_double = this->nodes[this->get_border_arc(vertex.incident_edge()->twin()->cell()->source_index()).from_idx].point; - - if (vertex_equal_to_point(&vertex, first_point_double)) { - assert(vertex.color() != vertex.incident_edge()->cell()->source_index()); - assert(vertex.color() != vertex.incident_edge()->twin()->cell()->source_index()); - vertex.color(this->get_border_arc(vertex.incident_edge()->cell()->source_index()).from_idx); - } else if (vertex_equal_to_point(&vertex, second_point_double)) { - assert(vertex.color() != vertex.incident_edge()->cell()->source_index()); - assert(vertex.color() != vertex.incident_edge()->twin()->cell()->source_index()); - vertex.color(this->get_border_arc(vertex.incident_edge()->twin()->cell()->source_index()).from_idx); - } else if (bbox.contains(vertex_point)) { - if (auto [contour_pt, c_dist_sqr] = closest_contour_point.find(vertex_point); contour_pt != nullptr && c_dist_sqr < Slic3r::sqr(3 * SCALED_EPSILON)) { - vertex.color(this->get_global_index(contour_pt->m_contour_idx, contour_pt->m_point_idx)); - } else if (auto [voronoi_pt, v_dist_sqr] = closest_voronoi_point.find(vertex_point); voronoi_pt == nullptr || v_dist_sqr >= Slic3r::sqr(SCALED_EPSILON / 10.0)) { - closest_voronoi_point.insert(CPoint(vertex_point_double, this->nodes_count())); - vertex.color(this->nodes_count()); - this->nodes.push_back({vertex_point_double}); - } else { - // Boost Voronoi diagram generator sometimes creates two very closed points instead of one point. - // For the example points (146872.99999999997, -146872.99999999997) and (146873, -146873), this example also included in Voronoi generator test cases. - std::vector> all_closes_c_points = closest_voronoi_point.find_all(vertex_point); - int merge_to_point = -1; - for (const std::pair &c_point : all_closes_c_points) - if ((vertex_point_double - c_point.first->point_double()).squaredNorm() <= Slic3r::sqr(EPSILON)) { - merge_to_point = int(c_point.first->m_point_idx); - break; - } - - if (merge_to_point != -1) { - vertex.color(merge_to_point); - } else { - closest_voronoi_point.insert(CPoint(vertex_point_double, this->nodes_count())); - vertex.color(this->nodes_count()); - this->nodes.push_back({vertex_point_double}); - } - } - } - } - } - - void garbage_collect() - { - std::vector nodes_map(this->nodes.size(), -1); - int nodes_count = 0; - size_t arcs_count = 0; - for (const MMU_Graph::Node &node : this->nodes) - if (size_t node_idx = &node - &this->nodes.front(); !node.arc_idxs.empty()) { - nodes_map[node_idx] = nodes_count++; - arcs_count += node.arc_idxs.size(); - } - - std::vector new_nodes; - std::vector new_arcs; - new_nodes.reserve(nodes_count); - new_arcs.reserve(arcs_count); - for (const MMU_Graph::Node &node : this->nodes) - if (size_t node_idx = &node - &this->nodes.front(); nodes_map[node_idx] >= 0) { - new_nodes.push_back({node.point}); - for (const size_t &arc_idx : node.arc_idxs) { - const Arc &arc = this->arcs[arc_idx]; - new_nodes.back().arc_idxs.emplace_back(new_arcs.size()); - new_arcs.push_back({size_t(nodes_map[arc.from_idx]), size_t(nodes_map[arc.to_idx]), arc.color, arc.type}); - } - } - - this->nodes = std::move(new_nodes); - this->arcs = std::move(new_arcs); - } -}; - -static inline void mark_processed(const voronoi_diagram::const_edge_iterator &edge_iterator) -{ - edge_iterator->color(true); - edge_iterator->twin()->color(true); -} - -// Return true, if "p" is closer to line.a, then line.b -static inline bool is_point_closer_to_beginning_of_line(const Line &line, const Point &p) -{ - return (p - line.a).cast().squaredNorm() < (p - line.b).cast().squaredNorm(); -} - -static inline bool has_same_color(const ColoredLine &cl1, const ColoredLine &cl2) { return cl1.color == cl2.color; } - // Determines if the line points from the point between two contour lines is pointing inside polygon or outside. static inline bool points_inside(const Line &contour_first, const Line &contour_second, const Point &new_point) { - // Used in points_inside for decision if line leading thought the common point of two lines is pointing inside polygon or outside + // TODO: Used in points_inside for decision if line leading thought the common point of two lines is pointing inside polygon or outside auto three_points_inward_normal = [](const Point &left, const Point &middle, const Point &right) -> Vec2d { assert(left != middle); assert(middle != right); @@ -839,535 +972,312 @@ static inline bool points_inside(const Line &contour_first, const Line &contour_ return side > 0.; } -static inline bool line_intersection_with_epsilon(const Line &line_to_extend, const Line &other, Point *intersection) -{ - Line extended_line = line_to_extend; - extended_line.extend(15 * SCALED_EPSILON); - return extended_line.intersection(other, intersection); +enum VD_ANNOTATION : Voronoi::VD::cell_type::color_type { + VERTEX_ON_CONTOUR = 1, + DELETED = 2 +}; + +#ifdef MM_SEGMENTATION_DEBUG_GRAPH +static void export_graph_to_svg(const std::string &path, const Voronoi::VD& vd, const std::vector& colored_polygons) { + const coordf_t stroke_width = scaled(0.05f); + const BoundingBox bbox = get_extents(colored_polygons); + + SVG svg(path.c_str(), bbox); + for (const ColoredLines &colored_lines : colored_polygons) + for (const ColoredLine &colored_line : colored_lines) + svg.draw(colored_line.line, "black", stroke_width); + + for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { + if (Geometry::VoronoiUtils::is_in_range(vertex)) { + if (const Point pt = Geometry::VoronoiUtils::to_point(&vertex).cast(); vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) { + svg.draw(pt, "blue", coord_t(stroke_width)); + } else if (vertex.color() != VD_ANNOTATION::DELETED) { + svg.draw(pt, "green", coord_t(stroke_width)); + } + } + } + + for (const Voronoi::VD::edge_type &edge : vd.edges()) { + if (edge.is_infinite() || !Geometry::VoronoiUtils::is_in_range(edge)) + continue; + + const Point from = Geometry::VoronoiUtils::to_point(edge.vertex0()).cast(); + const Point to = Geometry::VoronoiUtils::to_point(edge.vertex1()).cast(); + + if (edge.color() != VD_ANNOTATION::DELETED) + svg.draw(Line(from, to), "red", stroke_width); + } +} +#endif // MM_SEGMENTATION_DEBUG_GRAPH + +static size_t non_deleted_edge_count(const VD::vertex_type &vertex) { + size_t non_deleted_edge_cnt = 0; + const VD::edge_type *edge = vertex.incident_edge(); + do { + if (edge->color() != VD_ANNOTATION::DELETED) + ++non_deleted_edge_cnt; + } while (edge = edge->prev()->twin(), edge != vertex.incident_edge()); + + return non_deleted_edge_cnt; } -// For every ColoredLine in lines_colored_out, assign the index of the polygon to which belongs and also the index of this line inside of the polygon. -static inline void init_polygon_indices(const MMU_Graph &graph, - const std::vector> &color_poly, - std::vector &lines_colored_out) -{ - size_t poly_idx = 0; - for (const std::vector &color_lines : color_poly) { - size_t line_idx = 0; - for (size_t color_line_idx = 0; color_line_idx < color_lines.size(); ++color_line_idx) { - size_t from_idx = graph.get_global_index(poly_idx, line_idx); - lines_colored_out[from_idx].poly_idx = int(poly_idx); - lines_colored_out[from_idx].local_line_idx = int(line_idx); - ++line_idx; - } - ++poly_idx; +static bool can_vertex_be_deleted(const VD::vertex_type &vertex) { + if (vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR || vertex.color() == VD_ANNOTATION::DELETED) + return false; + + return non_deleted_edge_count(vertex) <= 1; +} + +static void delete_vertex_deep(const VD::vertex_type &vertex) { + std::queue vertices_to_delete; + vertices_to_delete.emplace(&vertex); + + while (!vertices_to_delete.empty()) { + const VD::vertex_type &vertex_to_delete = *vertices_to_delete.front(); + vertices_to_delete.pop(); + vertex_to_delete.color(VD_ANNOTATION::DELETED); + + const VD::edge_type *edge = vertex_to_delete.incident_edge(); + do { + edge->color(VD_ANNOTATION::DELETED); + edge->twin()->color(VD_ANNOTATION::DELETED); + + if (edge->is_finite() && can_vertex_be_deleted(*edge->vertex1())) + vertices_to_delete.emplace(edge->vertex1()); + } while (edge = edge->prev()->twin(), edge != vertex_to_delete.incident_edge()); } } -// Voronoi edges produced by Voronoi generator cloud have coordinates that don't fit inside coord_t (int32_t). -// Because of that, this function tries to clip edges that have one endpoint of the edge inside the BoundingBox. -static inline Line clip_finite_voronoi_edge(const Voronoi::VD::edge_type &edge, const BoundingBoxf &bbox) -{ +static inline Vec2d mk_point_vec2d(const VD::vertex_type *point) { + assert(point != nullptr); + return {point->x(), point->y()}; +} + +static inline Vec2d mk_vector_vec2d(const VD::edge_type *edge) { + assert(edge != nullptr); + return mk_point_vec2d(edge->vertex1()) - mk_point_vec2d(edge->vertex0()); +} + +static inline Vec2d mk_flipped_vector_vec2d(const VD::edge_type *edge) { + assert(edge != nullptr); + return mk_point_vec2d(edge->vertex0()) - mk_point_vec2d(edge->vertex1()); +} + +static double edge_length(const VD::edge_type &edge) { assert(edge.is_finite()); - Vec2d v0 = mk_vec2(edge.vertex0()); - Vec2d v1 = mk_vec2(edge.vertex1()); - bool contains_v0 = bbox.contains(v0); - bool contains_v1 = bbox.contains(v1); - if ((contains_v0 && contains_v1) || (!contains_v0 && !contains_v1)) - return {mk_point(edge.vertex0()), mk_point(edge.vertex1())}; - - Vec2d vector = (v1 - v0).normalized() * bbox.size().norm(); - if (!contains_v0) - v0 = (v1 - vector); - else - v1 = (v0 + vector); - - return {v0.cast(), v1.cast()}; -} - -static MMU_Graph build_graph(size_t layer_idx, const std::vector> &color_poly) -{ - Geometry::VoronoiDiagram vd; - std::vector lines_colored = to_lines(color_poly); - const Polygons color_poly_tmp = colored_points_to_polygon(color_poly); - const Points points = to_points(color_poly_tmp); - const Lines lines = to_lines(color_poly_tmp); - - // The algorithm adds edges to the graph that are between two different colors. - // If a polygon is colored entirely with one color, we need to add at least one edge from that polygon artificially. - // Adding this edge is necessary for cases where the expolygon has an outer contour colored whole with one color - // and a hole colored with a different color. If an edge wasn't added to the graph, - // the entire expolygon would be colored with single random color instead of two different. - std::vector force_edge_adding(color_poly.size()); - - // For each polygon, check if it is all colored with the same color. If it is, we need to force adding one edge to it. - for (const std::vector &c_poly : color_poly) { - bool force_edge = true; - for (const ColoredLine &c_line : c_poly) - if (c_line.color != c_poly.front().color) { - force_edge = false; - break; - } - force_edge_adding[&c_poly - &color_poly.front()] = force_edge; - } - - boost::polygon::construct_voronoi(lines_colored.begin(), lines_colored.end(), &vd); - MMU_Graph graph; - graph.nodes.reserve(points.size() + vd.vertices().size()); - for (const Point &point : points) - graph.nodes.push_back({Vec2d(double(point.x()), double(point.y()))}); - - graph.add_contours(color_poly); - init_polygon_indices(graph, color_poly, lines_colored); - - assert(graph.nodes.size() == lines_colored.size()); - BoundingBox bbox = get_extents(color_poly_tmp); - graph.append_voronoi_vertices(vd, color_poly_tmp, bbox); - - auto get_prev_contour_line = [&lines_colored, &color_poly, &graph](const voronoi_diagram::const_edge_iterator &edge_it) -> ColoredLine { - size_t contour_line_local_idx = lines_colored[edge_it->cell()->source_index()].local_line_idx; - size_t contour_line_size = color_poly[lines_colored[edge_it->cell()->source_index()].poly_idx].size(); - size_t contour_prev_idx = graph.get_global_index(lines_colored[edge_it->cell()->source_index()].poly_idx, - (contour_line_local_idx > 0) ? contour_line_local_idx - 1 : contour_line_size - 1); - return lines_colored[contour_prev_idx]; - }; - - auto get_next_contour_line = [&lines_colored, &color_poly, &graph](const voronoi_diagram::const_edge_iterator &edge_it) -> ColoredLine { - size_t contour_line_local_idx = lines_colored[edge_it->cell()->source_index()].local_line_idx; - size_t contour_line_size = color_poly[lines_colored[edge_it->cell()->source_index()].poly_idx].size(); - size_t contour_next_idx = graph.get_global_index(lines_colored[edge_it->cell()->source_index()].poly_idx, - (contour_line_local_idx + 1) % contour_line_size); - return lines_colored[contour_next_idx]; - }; - - bbox.offset(scale_(10.)); - const BoundingBoxf bbox_clip(bbox.min.cast(), bbox.max.cast()); - const double bbox_dim_max = double(std::max(bbox.size().x(), bbox.size().y())); - - // Make a copy of the input segments with the double type. - std::vector segments; - for (const Line &line : lines) - segments.emplace_back(Voronoi::Internal::point_type(double(line.a(0)), double(line.a(1))), - Voronoi::Internal::point_type(double(line.b(0)), double(line.b(1)))); - - for (auto edge_it = vd.edges().begin(); edge_it != vd.edges().end(); ++edge_it) { - // Skip second half-edge - if (edge_it->cell()->source_index() > edge_it->twin()->cell()->source_index() || edge_it->color()) - continue; - - if (edge_it->is_infinite() && (edge_it->vertex0() != nullptr || edge_it->vertex1() != nullptr)) { - // Infinite edge is leading through a point on the counter, but there are no Voronoi vertices. - // So we could fix this case by computing the intersection between the contour line and infinity edge. - std::vector samples; - Voronoi::Internal::clip_infinite_edge(points, segments, *edge_it, bbox_dim_max, &samples); - if (samples.empty()) - continue; - - const Line edge_line(mk_point(samples[0]), mk_point(samples[1])); - const ColoredLine &contour_line = lines_colored[edge_it->cell()->source_index()]; - Point contour_intersection; - - if (line_intersection_with_epsilon(contour_line.line, edge_line, &contour_intersection)) { - const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_it->cell()->source_index()); - const size_t from_idx = (edge_it->vertex1() != nullptr) ? edge_it->vertex1()->color() : edge_it->vertex0()->color(); - size_t to_idx = ((contour_line.line.a - contour_intersection).cast().squaredNorm() < - (contour_line.line.b - contour_intersection).cast().squaredNorm()) ? - graph_arc.from_idx : - graph_arc.to_idx; - if (from_idx != to_idx && from_idx < graph.nodes_count() && to_idx < graph.nodes_count()) { - graph.append_edge(from_idx, to_idx); - mark_processed(edge_it); - } - } - } else if (edge_it->is_finite()) { - // Both points are on contour, so skip them. In cases of duplicate Voronoi vertices, skip edges between the same two points. - if (graph.is_edge_connecting_two_contour_vertices(edge_it) || (edge_it->vertex0()->color() == edge_it->vertex1()->color())) - continue; - - const Line edge_line = clip_finite_voronoi_edge(*edge_it, bbox_clip); - const Line contour_line = lines_colored[edge_it->cell()->source_index()].line; - const ColoredLine colored_line = lines_colored[edge_it->cell()->source_index()]; - const ColoredLine contour_line_prev = get_prev_contour_line(edge_it); - const ColoredLine contour_line_next = get_next_contour_line(edge_it); - - if (edge_it->vertex0()->color() >= graph.nodes_count() || edge_it->vertex1()->color() >= graph.nodes_count()) { - enum class Vertex { VERTEX0, VERTEX1 }; - auto append_edge_if_intersects_with_contour = [&graph, &lines_colored, &edge_line, &contour_line](const voronoi_diagram::const_edge_iterator &edge_iterator, const Vertex vertex) { - Point intersection; - Line contour_line_twin = lines_colored[edge_iterator->twin()->cell()->source_index()].line; - if (line_intersection_with_epsilon(contour_line_twin, edge_line, &intersection)) { - const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_iterator->twin()->cell()->source_index()); - const size_t to_idx_l = is_point_closer_to_beginning_of_line(contour_line_twin, intersection) ? graph_arc.from_idx : - graph_arc.to_idx; - graph.append_edge(vertex == Vertex::VERTEX0 ? edge_iterator->vertex0()->color() : edge_iterator->vertex1()->color(), to_idx_l); - } else if (line_intersection_with_epsilon(contour_line, edge_line, &intersection)) { - const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_iterator->cell()->source_index()); - const size_t to_idx_l = is_point_closer_to_beginning_of_line(contour_line, intersection) ? graph_arc.from_idx : graph_arc.to_idx; - graph.append_edge(vertex == Vertex::VERTEX0 ? edge_iterator->vertex0()->color() : edge_iterator->vertex1()->color(), to_idx_l); - } - mark_processed(edge_iterator); - }; - - if (edge_it->vertex0()->color() < graph.nodes_count() && !graph.is_vertex_on_contour(edge_it->vertex0())) - append_edge_if_intersects_with_contour(edge_it, Vertex::VERTEX0); - - if (edge_it->vertex1()->color() < graph.nodes_count() && !graph.is_vertex_on_contour(edge_it->vertex1())) - append_edge_if_intersects_with_contour(edge_it, Vertex::VERTEX1); - } else if (graph.is_edge_attach_to_contour(edge_it)) { - mark_processed(edge_it); - // Skip edges witch connection two points on a contour - if (graph.is_edge_connecting_two_contour_vertices(edge_it)) - continue; - - const size_t from_idx = edge_it->vertex0()->color(); - const size_t to_idx = edge_it->vertex1()->color(); - if (graph.is_vertex_on_contour(edge_it->vertex0())) { - if (is_point_closer_to_beginning_of_line(contour_line, edge_line.a)) { - if ((!has_same_color(contour_line_prev, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line_prev.line, contour_line, edge_line.b)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } else { - if ((!has_same_color(contour_line_next, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line, contour_line_next.line, edge_line.b)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } - } else { - assert(graph.is_vertex_on_contour(edge_it->vertex1())); - if (is_point_closer_to_beginning_of_line(contour_line, edge_line.b)) { - if ((!has_same_color(contour_line_prev, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line_prev.line, contour_line, edge_line.a)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } else { - if ((!has_same_color(contour_line_next, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line, contour_line_next.line, edge_line.a)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } - } - } else if (Point intersection; line_intersection_with_epsilon(contour_line, edge_line, &intersection)) { - mark_processed(edge_it); - Vec2d real_v0_double = graph.nodes[edge_it->vertex0()->color()].point; - Vec2d real_v1_double = graph.nodes[edge_it->vertex1()->color()].point; - Point real_v0 = Point(coord_t(real_v0_double.x()), coord_t(real_v0_double.y())); - Point real_v1 = Point(coord_t(real_v1_double.x()), coord_t(real_v1_double.y())); - - if (is_point_closer_to_beginning_of_line(contour_line, intersection)) { - Line first_part(intersection, real_v0); - Line second_part(intersection, real_v1); - - if (!has_same_color(contour_line_prev, colored_line)) { - if (points_inside(contour_line_prev.line, contour_line, first_part.b)) - graph.append_edge(edge_it->vertex0()->color(), graph.get_border_arc(edge_it->cell()->source_index()).from_idx); - - if (points_inside(contour_line_prev.line, contour_line, second_part.b)) - graph.append_edge(edge_it->vertex1()->color(), graph.get_border_arc(edge_it->cell()->source_index()).from_idx); - } - } else { - const size_t int_point_idx = graph.get_border_arc(edge_it->cell()->source_index()).to_idx; - const Vec2d int_point_double = graph.nodes[int_point_idx].point; - const Point int_point = Point(coord_t(int_point_double.x()), coord_t(int_point_double.y())); - - const Line first_part(int_point, real_v0); - const Line second_part(int_point, real_v1); - - if (!has_same_color(contour_line_next, colored_line)) { - if (points_inside(contour_line, contour_line_next.line, first_part.b)) - graph.append_edge(edge_it->vertex0()->color(), int_point_idx); - - if (points_inside(contour_line, contour_line_next.line, second_part.b)) - graph.append_edge(edge_it->vertex1()->color(), int_point_idx); - } - } - } - } - } - - for (auto edge_it = vd.edges().begin(); edge_it != vd.edges().end(); ++edge_it) { - // Skip second half-edge and processed edges - if (edge_it->cell()->source_index() > edge_it->twin()->cell()->source_index() || edge_it->color()) - continue; - - if (edge_it->is_finite() && !bool(edge_it->color()) && edge_it->vertex0()->color() < graph.nodes_count() && - edge_it->vertex1()->color() < graph.nodes_count()) { - // Skip cases, when the edge is between two same vertices, which is in cases two near vertices were merged together. - if (edge_it->vertex0()->color() == edge_it->vertex1()->color()) - continue; - - size_t from_idx = edge_it->vertex0()->color(); - size_t to_idx = edge_it->vertex1()->color(); - graph.append_edge(from_idx, to_idx); - } - mark_processed(edge_it); - } - - graph.remove_nodes_with_one_arc(); - return graph; -} - -static inline Polygon to_polygon(const std::vector> &id_to_lines) -{ - std::vector lines; - for (auto id_to_line : id_to_lines) - lines.emplace_back(id_to_line.second); - - Polygon poly_out; - poly_out.points.reserve(lines.size()); - for (const Linef &line : lines) - poly_out.points.emplace_back(mk_point(line.a)); - return poly_out; -} - - -static std::vector> get_all_next_arcs( - const MMU_Graph &graph, - std::vector &used_arcs, - const Linef &process_line, - const MMU_Graph::Arc &original_arc, - const int color) -{ - std::vector> all_next_arcs; - for (const size_t &arc_idx : graph.nodes[original_arc.to_idx].arc_idxs) { - std::vector next_continue_arc; - - const MMU_Graph::Arc & arc = graph.arcs[arc_idx]; - if (graph.nodes[arc.to_idx].point == process_line.a || used_arcs[arc_idx]) - continue; - - if (original_arc.type == MMU_Graph::ARC_TYPE::BORDER && original_arc.color != color) - continue; - - if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color != color) - continue; - - Vec2d arc_line = graph.nodes[arc.to_idx].point - graph.nodes[arc.from_idx].point; - next_continue_arc.emplace_back(&arc); - all_next_arcs.emplace_back(next_continue_arc); - } - return all_next_arcs; -} - -// two points that are very close are considered as one point -// std::vector contain the close points -static std::vector get_next_arc( - const MMU_Graph &graph, - std::vector &used_arcs, - const Linef &process_line, - const MMU_Graph::Arc &original_arc, - const int color) -{ - std::vector res; - - std::vector> all_next_arcs = get_all_next_arcs(graph, used_arcs, process_line, original_arc, color); - if (all_next_arcs.empty()) { - res.emplace_back(&original_arc); - return res; - } - - std::vector, double>> sorted_arcs; - for (auto next_arc : all_next_arcs) { - if (next_arc.empty()) - continue; - - Vec2d process_line_vec_n = (process_line.a - process_line.b).normalized(); - Vec2d neighbour_line_vec_n = (graph.nodes[next_arc.back()->to_idx].point - graph.nodes[next_arc.back()->from_idx].point).normalized(); - - double angle = ::acos(std::clamp(neighbour_line_vec_n.dot(process_line_vec_n), -1.0, 1.0)); - if (Slic3r::cross2(neighbour_line_vec_n, process_line_vec_n) < 0.0) - angle = 2.0 * (double) PI - angle; - - sorted_arcs.emplace_back(next_arc, angle); - } - - std::sort(sorted_arcs.begin(), sorted_arcs.end(), - [](std::pair, double> &l, std::pair, double> &r) -> bool { - return l.second < r.second; - }); - - // Try to return left most edge witch is unused - for (auto &sorted_arc : sorted_arcs) { - if (size_t arc_idx = sorted_arc.first.back() - &graph.arcs.front(); !used_arcs[arc_idx]) - return sorted_arc.first; - } - - if (sorted_arcs.empty()) { - res.emplace_back(&original_arc); - return res; - } - - return sorted_arcs.front().first; -} - -static bool is_profile_self_interaction(Polygon poly) -{ - auto lines = poly.lines(); - Point intersection; - for (int i = 0; i < lines.size(); ++i) { - for (int j = i + 2; j < std::min(lines.size(), lines.size() + i - 1); ++j) { - if (lines[i].intersection(lines[j], &intersection)) - return true; - } - } - return false; -} - -// Returns list of polygons and assigned colors. -// It iterates through all nodes on the border between two different colors, and from this point, -// start selection always left most edges for every node to construct CCW polygons. -// Assumes that graph is planar (without self-intersection edges) -static std::vector extract_colored_segments(const MMU_Graph &graph, const size_t num_extruders) -{ - std::vector used_arcs(graph.arcs.size(), false); - - auto all_arc_used = [&used_arcs](const MMU_Graph::Node &node) -> bool { - return std::all_of(node.arc_idxs.cbegin(), node.arc_idxs.cend(), [&used_arcs](const size_t &arc_idx) -> bool { return used_arcs[arc_idx]; }); - }; - - std::vector expolygons_segments(num_extruders + 1); - for (size_t node_idx = 0; node_idx < graph.all_border_points; ++node_idx) { - const MMU_Graph::Node &node = graph.nodes[node_idx]; - - for (const size_t &arc_idx : node.arc_idxs) { - const MMU_Graph::Arc &arc = graph.arcs[arc_idx]; - if (arc.type == MMU_Graph::ARC_TYPE::NON_BORDER || used_arcs[arc_idx]) - continue; - - Linef process_line(graph.nodes[arc.from_idx].point, graph.nodes[arc.to_idx].point); - used_arcs[arc_idx] = true; - - std::vector> arc_id_to_face_lines; - arc_id_to_face_lines.emplace_back(std::make_pair(arc_idx, process_line)); - Vec2d start_p = process_line.a; - - Linef p_vec = process_line; - const MMU_Graph::Arc *p_arc = &arc; - bool flag = false; - do { - std::vector nexts = get_next_arc(graph, used_arcs, p_vec, *p_arc, arc.color); - for (auto next : nexts) { - size_t next_arc_idx = next - &graph.arcs.front(); - if (used_arcs[next_arc_idx]) { - flag = true; - break; - } - } - - if (flag) - break; - - for (auto next : nexts) { - size_t next_arc_idx = next - &graph.arcs.front(); - arc_id_to_face_lines.emplace_back(std::make_pair(next_arc_idx, Linef(graph.nodes[next->from_idx].point, graph.nodes[next->to_idx].point))); - used_arcs[next_arc_idx] = true; - } - - p_vec = Linef(graph.nodes[nexts.back()->from_idx].point, graph.nodes[nexts.back()->to_idx].point); - p_arc = nexts.back(); - - } while (graph.nodes[p_arc->to_idx].point != start_p || !all_arc_used(graph.nodes[p_arc->to_idx])); - - if (Polygon poly = to_polygon(arc_id_to_face_lines); poly.is_counter_clockwise() && poly.is_valid()) { - expolygons_segments[arc.color].emplace_back(std::move(poly)); - } else{ - while (arc_id_to_face_lines.size() > 1) - { - auto id_to_line = arc_id_to_face_lines.back(); - used_arcs[id_to_line.first] = false; - arc_id_to_face_lines.pop_back(); - Linef add_line(arc_id_to_face_lines.back().second.b, arc_id_to_face_lines.front().second.a); - arc_id_to_face_lines.emplace_back(std::make_pair(-1, add_line)); - Polygon poly = to_polygon(arc_id_to_face_lines); - if (!is_profile_self_interaction(poly) && poly.is_counter_clockwise() && poly.is_valid()) { - expolygons_segments[arc.color].emplace_back(std::move(poly)); - break; - } - arc_id_to_face_lines.pop_back(); - } - } - } - } - return expolygons_segments; + return mk_vector_vec2d(&edge).norm(); } // Used in remove_multiple_edges_in_vertices() // Returns length of edge with is connected to contour. To this length is include other edges with follows it if they are almost straight (with the // tolerance of 15) And also if node between two subsequent edges is connected only to these two edges. -static inline double compute_edge_length(const MMU_Graph &graph, const size_t start_idx, const size_t &start_arc_idx) +static inline double calc_total_edge_length(const VD::edge_type &starting_edge) { - assert(start_arc_idx < graph.arcs.size()); - std::vector used_arcs(graph.arcs.size(), false); + double total_edge_length = edge_length(starting_edge); + const VD::edge_type *prev = &starting_edge; + do { + if (prev->is_finite() && non_deleted_edge_count(*prev->vertex1()) > 2) + break; - used_arcs[start_arc_idx] = true; - const MMU_Graph::Arc *arc = &graph.arcs[start_arc_idx]; - size_t idx = start_idx; - double line_total_length = (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); - while (graph.nodes[arc->to_idx].arc_idxs.size() == 2) { - bool found = false; - for (const size_t &arc_idx : graph.nodes[arc->to_idx].arc_idxs) { - if (const MMU_Graph::Arc &arc_n = graph.arcs[arc_idx]; arc_n.type == MMU_Graph::ARC_TYPE::NON_BORDER && !used_arcs[arc_idx] && arc_n.to_idx != idx) { - Linef first_line(graph.nodes[idx].point, graph.nodes[arc->to_idx].point); - Linef second_line(graph.nodes[arc->to_idx].point, graph.nodes[arc_n.to_idx].point); + bool found_next_edge = false; + const VD::edge_type *current = prev->next(); + do { + if (current->color() == VD_ANNOTATION::DELETED) + continue; - Vec2d first_line_vec = (first_line.a - first_line.b); - Vec2d second_line_vec = (second_line.b - second_line.a); - Vec2d first_line_vec_n = first_line_vec.normalized(); - Vec2d second_line_vec_n = second_line_vec.normalized(); - double angle = ::acos(std::clamp(first_line_vec_n.dot(second_line_vec_n), -1.0, 1.0)); - if (Slic3r::cross2(first_line_vec_n, second_line_vec_n) < 0.0) - angle = 2.0 * (double) PI - angle; + Vec2d first_line_vec_n = mk_flipped_vector_vec2d(prev).normalized(); + Vec2d second_line_vec_n = mk_vector_vec2d(current).normalized(); + double angle = ::acos(std::clamp(first_line_vec_n.dot(second_line_vec_n), -1.0, 1.0)); + if (Slic3r::cross2(first_line_vec_n, second_line_vec_n) < 0.0) + angle = 2.0 * (double) PI - angle; - if (std::abs(angle - PI) >= (PI / 12)) + if (std::abs(angle - PI) >= (PI / 12)) + continue; + + prev = current; + found_next_edge = true; + total_edge_length += edge_length(*current); + + break; + } while (current = current->prev()->twin(), current != prev->next()); + + if (!found_next_edge) + break; + + } while (prev != &starting_edge); + + return total_edge_length; +} + +// When a Voronoi vertex has more than one Voronoi edge (for example, in concave parts of a polygon), +// we leave just one Voronoi edge in the Voronoi vertex. +// This Voronoi edge is selected based on a heuristic. +static void remove_multiple_edges_in_vertex(const VD::vertex_type &vertex) { + if (non_deleted_edge_count(vertex) <= 1) + return; + + std::vector> edges_to_check; + const VD::edge_type *edge = vertex.incident_edge(); + do { + if (edge->color() == VD_ANNOTATION::DELETED) + continue; + + edges_to_check.emplace_back(edge, calc_total_edge_length(*edge)); + } while (edge = edge->prev()->twin(), edge != vertex.incident_edge()); + + std::sort(edges_to_check.begin(), edges_to_check.end(), [](const auto &l, const auto &r) -> bool { + return l.second > r.second; + }); + + while (edges_to_check.size() > 1) { + const VD::edge_type &edge_to_check = *edges_to_check.back().first; + edge_to_check.color(VD_ANNOTATION::DELETED); + edge_to_check.twin()->color(VD_ANNOTATION::DELETED); + + if (const VD::vertex_type &vertex_to_delete = *edge_to_check.vertex1(); can_vertex_be_deleted(vertex_to_delete)) + delete_vertex_deep(vertex_to_delete); + + edges_to_check.pop_back(); + } +} + +#if (0) +// Returns list of ExPolygons for each extruder + 1 for default unpainted regions. +// It iterates through all nodes on the border between two different colors, and from this point, +// start selection always left most edges for every node to construct CCW polygons. +static std::vector extract_colored_segments(const std::vector &colored_polygons, + const size_t num_extruders, + const size_t layer_idx) +{ + const ColoredLines colored_lines = to_lines(colored_polygons); + const BoundingBox bbox = get_extents(colored_polygons); + + auto get_next_contour_line = [&colored_polygons](const ColoredLine &line) -> const ColoredLine & { + size_t contour_line_size = colored_polygons[line.poly_idx].size(); + size_t contour_next_idx = (line.local_line_idx + 1) % contour_line_size; + return colored_polygons[line.poly_idx][contour_next_idx]; + }; + + Voronoi::VD vd; + vd.construct_voronoi(colored_lines.begin(), colored_lines.end()); + + // First, mark each Voronoi vertex on the input polygon to prevent it from being deleted later. + for (const Voronoi::VD::cell_type &cell : vd.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; + + if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) + cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::VERTEX_ON_CONTOUR); + } + + // Second, remove all Voronoi vertices that are outside the bounding box of input polygons. + // Such Voronoi vertices are definitely not inside of input polygons, so we don't care about them. + for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { + if (vertex.color() == VD_ANNOTATION::DELETED || vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) + continue; + + if (!Geometry::VoronoiUtils::is_in_range(vertex) || !bbox.contains(Geometry::VoronoiUtils::to_point(vertex).cast())) + delete_vertex_deep(vertex); + } + + // Third, remove all Voronoi edges that are infinite. + for (const Voronoi::VD::edge_type &edge : vd.edges()) { + if (edge.color() != VD_ANNOTATION::DELETED && edge.is_infinite()) { + edge.color(VD_ANNOTATION::DELETED); + edge.twin()->color(VD_ANNOTATION::DELETED); + + if (edge.vertex0() != nullptr && can_vertex_be_deleted(*edge.vertex0())) + delete_vertex_deep(*edge.vertex0()); + + if (edge.vertex1() != nullptr && can_vertex_be_deleted(*edge.vertex1())) + delete_vertex_deep(*edge.vertex1()); + } + } + + // Fourth, remove all edges that point outward from the input polygon. + for (Voronoi::VD::cell_type cell : vd.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; + + if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) { + const ColoredLine ¤t_line = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); + const ColoredLine &next_line = get_next_contour_line(current_line); + + const VD::edge_type *edge = cell_range.edge_begin; + do { + if (edge->color() == VD_ANNOTATION::DELETED) continue; - idx = arc->to_idx; - arc = &arc_n; - - line_total_length += (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); - used_arcs[arc_idx] = true; - found = true; - break; - } - } - if (!found) - break; - } - - return line_total_length; -} - -// Used for fixing double Voronoi edges for concave parts of the polygon. -static void remove_multiple_edges_in_vertices(MMU_Graph &graph, const std::vector> &color_poly) -{ - std::vector>> colored_segments = get_all_segments(color_poly); - for (const std::vector> &colored_segment_p : colored_segments) { - size_t poly_idx = &colored_segment_p - &colored_segments.front(); - for (const std::pair &colored_segment : colored_segment_p) { - size_t first_idx = graph.get_global_index(poly_idx, colored_segment.first); - size_t second_idx = graph.get_global_index(poly_idx, (colored_segment.second + 1) % graph.polygon_sizes[poly_idx]); - Linef seg_line(graph.nodes[first_idx].point, graph.nodes[second_idx].point); - - if (graph.nodes[first_idx].arc_idxs.size() >= 3) { - std::vector> arc_to_check; - for (const size_t &arc_idx : graph.nodes[first_idx].arc_idxs) { - MMU_Graph::Arc &n_arc = graph.arcs[arc_idx]; - if (n_arc.type == MMU_Graph::ARC_TYPE::NON_BORDER) { - double total_len = compute_edge_length(graph, first_idx, arc_idx); - arc_to_check.emplace_back(&n_arc, total_len); - } + if (!points_inside(current_line.line, next_line.line, Geometry::VoronoiUtils::to_point(edge->vertex1()).cast())) { + edge->color(VD_ANNOTATION::DELETED); + edge->twin()->color(VD_ANNOTATION::DELETED); + delete_vertex_deep(*edge->vertex1()); } - std::sort(arc_to_check.begin(), arc_to_check.end(), - [](std::pair &l, std::pair &r) -> bool { return l.second > r.second; }); - - while (arc_to_check.size() > 1) { - graph.remove_edge(first_idx, arc_to_check.back().first->to_idx); - arc_to_check.pop_back(); - } - } + } while (edge = edge->prev()->twin(), edge != cell_range.edge_begin); } } + + // Fifth, if a Voronoi vertex has more than one Voronoi edge, remove all but one of them based on heuristics. + for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { + if (vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) + remove_multiple_edges_in_vertex(vertex); + } + +#ifdef MM_SEGMENTATION_DEBUG_GRAPH + { + static int iRun = 0; + export_graph_to_svg(debug_out_path("mm-graph-%d-%d.svg", layer_idx, iRun++), vd, colored_polygons); + } +#endif // MM_SEGMENTATION_DEBUG_GRAPH + + // Sixth, extract the colored segments from the annotated Voronoi diagram. + std::vector segmented_expolygons_per_extruder(num_extruders + 1); + for (const Voronoi::VD::cell_type &cell : vd.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; + + if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) { + if (cell_range.edge_begin->vertex0()->color() != VD_ANNOTATION::VERTEX_ON_CONTOUR) + continue; + + const ColoredLine source_segment = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); + + Polygon segmented_polygon; + segmented_polygon.points.emplace_back(source_segment.line.b); + + // We have ensured that each segmented_polygon have to start at edge_begin->vertex0() and end at edge_end->vertex1(). + const VD::edge_type *edge = cell_range.edge_begin; + do { + if (edge->color() == VD_ANNOTATION::DELETED) + continue; + + const VD::vertex_type &next_vertex = *edge->vertex1(); + segmented_polygon.points.emplace_back(Geometry::VoronoiUtils::to_point(next_vertex).cast()); + edge->color(VD_ANNOTATION::DELETED); + + if (next_vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR || next_vertex.color() == VD_ANNOTATION::DELETED) { + assert(next_vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR); + break; + } + + edge = edge->twin(); + } while (edge = edge->twin()->next(), edge != cell_range.edge_begin); + + if (edge->vertex1() != cell_range.edge_end->vertex1()) + continue; + + cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::DELETED); + segmented_expolygons_per_extruder[source_segment.color].emplace_back(std::move(segmented_polygon)); + } + } + + // Merge all polygons together for each extruder + for (auto &segmented_expolygons : segmented_expolygons_per_extruder) + segmented_expolygons = union_ex(segmented_expolygons); + + return segmented_expolygons_per_extruder; } +#endif static void cut_segmented_layers(const std::vector &input_expolygons, std::vector> &segmented_regions, @@ -1375,12 +1285,13 @@ static void cut_segmented_layers(const std::vector &input_exp const float interlocking_depth, const std::function &throw_on_cancel_callback) { - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - cutting segmented layers in parallel - begin"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - cutting segmented layers in parallel - begin"; + const float interlocking_cut_width = interlocking_depth > 0.f ? std::max(cut_width - interlocking_depth, 0.f) : 0.f; tbb::parallel_for(tbb::blocked_range(0, segmented_regions.size()), - [&segmented_regions, &input_expolygons, &cut_width, &interlocking_depth, &throw_on_cancel_callback](const tbb::blocked_range &range) { + [&segmented_regions, &input_expolygons, &cut_width, &interlocking_depth, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); - const float region_cut_width = ((layer_idx % 2 == 0) && (interlocking_depth != 0.f)) ? interlocking_depth : cut_width; + const float region_cut_width = ((layer_idx % 2 == 0) && (interlocking_depth != 0.f)) ? interlocking_depth : cut_width; const size_t num_extruders_plus_one = segmented_regions[layer_idx].size(); if (region_cut_width > 0.f) { std::vector segmented_regions_cuts(num_extruders_plus_one); // Indexed by extruder_id @@ -1391,7 +1302,7 @@ static void cut_segmented_layers(const std::vector &input_exp } } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - cutting segmented layers in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - cutting segmented layers in parallel - end"; } static bool is_volume_sinking(const indexed_triangle_set &its, const Transform3d &trafo) @@ -1431,9 +1342,9 @@ static inline std::vector> mmu_segmentation_top_and_bott std::vector zs = zs_from_layers(layers); Transform3d object_trafo = print_object.trafo_centered(); -#ifdef MMU_SEGMENTATION_DEBUG_TOP_BOTTOM +#ifdef MM_SEGMENTATION_DEBUG_TOP_BOTTOM static int iRun = 0; -#endif // NDEBUG +#endif // MM_SEGMENTATION_DEBUG_TOP_BOTTOM if (max_top_layers > 0 || max_bottom_layers > 0) { for (const ModelVolume *mv : print_object.model_object()->volumes) @@ -1441,12 +1352,12 @@ static inline std::vector> mmu_segmentation_top_and_bott const Transform3d volume_trafo = object_trafo * mv->get_matrix(); for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++ extruder_idx) { const indexed_triangle_set painted = mv->mmu_segmentation_facets.get_facets_strict(*mv, EnforcerBlockerType(extruder_idx)); -#ifdef MMU_SEGMENTATION_DEBUG_TOP_BOTTOM +#ifdef MM_SEGMENTATION_DEBUG_TOP_BOTTOM { static int iRun = 0; its_write_obj(painted, debug_out_path("mm-painted-patch-%d-%d.obj", iRun ++, extruder_idx).c_str()); } -#endif // MMU_SEGMENTATION_DEBUG_TOP_BOTTOM +#endif // MM_SEGMENTATION_DEBUG_TOP_BOTTOM if (! painted.indices.empty()) { std::vector top, bottom; if (!zs.empty() && is_volume_sinking(painted, volume_trafo)) { @@ -1501,7 +1412,7 @@ static inline std::vector> mmu_segmentation_top_and_bott filter_out_small_polygons(top_raw, Slic3r::sqr(scale_(0.1f))); filter_out_small_polygons(bottom_raw, Slic3r::sqr(scale_(0.1f))); -#ifdef MMU_SEGMENTATION_DEBUG_TOP_BOTTOM +#ifdef MM_SEGMENTATION_DEBUG_TOP_BOTTOM { const char* colors[] = { "aqua", "black", "blue", "fuchsia", "gray", "green", "lime", "maroon", "navy", "olive", "purple", "red", "silver", "teal", "yellow" }; static int iRun = 0; @@ -1523,7 +1434,21 @@ static inline std::vector> mmu_segmentation_top_and_bott } ++ iRun; } -#endif // MMU_SEGMENTATION_DEBUG_TOP_BOTTOM +#endif // MM_SEGMENTATION_DEBUG_TOP_BOTTOM + + // When the upper surface of an object is occluded, it should no longer be considered the upper surface + { + for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++extruder_idx) { + for (size_t layer_idx = 0; layer_idx < layers.size(); ++layer_idx) { + if (!top_raw[extruder_idx].empty() && !top_raw[extruder_idx][layer_idx].empty() && layer_idx + 1 < layers.size()) { + top_raw[extruder_idx][layer_idx] = diff(top_raw[extruder_idx][layer_idx], input_expolygons[layer_idx + 1]); + } + if (!bottom_raw[extruder_idx].empty() && !bottom_raw[extruder_idx][layer_idx].empty() && layer_idx > 0) { + bottom_raw[extruder_idx][layer_idx] = diff(bottom_raw[extruder_idx][layer_idx], input_expolygons[layer_idx - 1]); + } + } + } + } std::vector> triangles_by_color_bottom(num_extruders); std::vector> triangles_by_color_top(num_extruders); @@ -1681,6 +1606,358 @@ static inline std::vector> mmu_segmentation_top_and_bott return triangles_by_color_merged; } +// For every ColoredLine in lines_colored_out, assign the index of the polygon to which belongs and also the index of this line inside of the polygon. +static inline void init_polygon_indices(const MMU_Graph &graph, const std::vector> &color_poly, std::vector &lines_colored_out) +{ + size_t poly_idx = 0; + for (const std::vector &color_lines : color_poly) { + size_t line_idx = 0; + for (size_t color_line_idx = 0; color_line_idx < color_lines.size(); ++color_line_idx) { + size_t from_idx = graph.get_global_index(poly_idx, line_idx); + lines_colored_out[from_idx].poly_idx = int(poly_idx); + lines_colored_out[from_idx].local_line_idx = int(line_idx); + ++line_idx; + } + ++poly_idx; + } +} + +static inline bool line_intersection_with_epsilon(const Line &line_to_extend, const Line &other, Point *intersection) +{ + Line extended_line = line_to_extend; + extended_line.extend(15 * SCALED_EPSILON); + return extended_line.intersection(other, intersection); +} + +static inline void mark_processed(const voronoi_diagram::const_edge_iterator &edge_iterator) +{ + edge_iterator->color(true); + edge_iterator->twin()->color(true); +} + +static inline bool is_point_closer_to_beginning_of_line(const Line &line, const Point &p) +{ + return (p - line.a).cast().squaredNorm() < (p - line.b).cast().squaredNorm(); +} + +static inline Line clip_finite_voronoi_edge(const Voronoi::VD::edge_type &edge, const BoundingBoxf &bbox) +{ + assert(edge.is_finite()); + Vec2d v0 = mk_vec2(edge.vertex0()); + Vec2d v1 = mk_vec2(edge.vertex1()); + bool contains_v0 = bbox.contains(v0); + bool contains_v1 = bbox.contains(v1); + if ((contains_v0 && contains_v1) || (!contains_v0 && !contains_v1)) return {mk_point(edge.vertex0()), mk_point(edge.vertex1())}; + + Vec2d vector = (v1 - v0).normalized() * bbox.size().norm(); + if (!contains_v0) + v0 = (v1 - vector); + else + v1 = (v0 + vector); + + return {v0.cast(), v1.cast()}; +} + +static inline bool has_same_color(const ColoredLine &cl1, const ColoredLine &cl2) { return cl1.color == cl2.color; } + +static MMU_Graph build_graph(size_t layer_idx, const std::vector> &color_poly) +{ + const Polygons color_poly_tmp = colored_points_to_polygon(color_poly); + const Points points = to_points(color_poly_tmp); + const Lines lines = to_lines(color_poly_tmp); + + // The algorithm adds edges to the graph that are between two different colors. + // If a polygon is colored entirely with one color, we need to add at least one edge from that polygon artificially. + // Adding this edge is necessary for cases where the expolygon has an outer contour colored whole with one color + // and a hole colored with a different color. If an edge wasn't added to the graph, + // the entire expolygon would be colored with single random color instead of two different. + std::vector force_edge_adding(color_poly.size()); + + // For each polygon, check if it is all colored with the same color. If it is, we need to force adding one edge to it. + for (const std::vector &c_poly : color_poly) { + bool force_edge = true; + for (const ColoredLine &c_line : c_poly) + if (c_line.color != c_poly.front().color) { + force_edge = false; + break; + } + force_edge_adding[&c_poly - &color_poly.front()] = force_edge; + } + + ColoredLines lines_colored = to_lines(color_poly); + const ColoredLines colored_lines = lines_colored; + + Voronoi::VD vd; + vd.construct_voronoi(colored_lines.begin(), colored_lines.end()); + // boost::polygon::construct_voronoi(lines_colored.begin(), lines_colored.end(), &vd); + MMU_Graph graph; + graph.nodes.reserve(points.size() + vd.vertices().size()); + for (const Point &point : points) graph.nodes.push_back({Vec2d(double(point.x()), double(point.y()))}); + + graph.add_contours(color_poly); + init_polygon_indices(graph, color_poly, lines_colored); + + assert(graph.nodes.size() == lines_colored.size()); + BoundingBox bbox = get_extents(color_poly_tmp); + graph.append_voronoi_vertices(vd, color_poly_tmp, bbox); + + auto get_prev_contour_line = [&lines_colored, &color_poly, &graph](const voronoi_diagram::const_edge_iterator &edge_it) -> ColoredLine { + size_t contour_line_local_idx = lines_colored[edge_it->cell()->source_index()].local_line_idx; + size_t contour_line_size = color_poly[lines_colored[edge_it->cell()->source_index()].poly_idx].size(); + size_t contour_prev_idx = graph.get_global_index(lines_colored[edge_it->cell()->source_index()].poly_idx, + (contour_line_local_idx > 0) ? contour_line_local_idx - 1 : contour_line_size - 1); + return lines_colored[contour_prev_idx]; + }; + + auto get_next_contour_line = [&lines_colored, &color_poly, &graph](const voronoi_diagram::const_edge_iterator &edge_it) -> ColoredLine { + size_t contour_line_local_idx = lines_colored[edge_it->cell()->source_index()].local_line_idx; + size_t contour_line_size = color_poly[lines_colored[edge_it->cell()->source_index()].poly_idx].size(); + size_t contour_next_idx = graph.get_global_index(lines_colored[edge_it->cell()->source_index()].poly_idx, (contour_line_local_idx + 1) % contour_line_size); + return lines_colored[contour_next_idx]; + }; + + bbox.offset(scale_(10.)); + const BoundingBoxf bbox_clip(bbox.min.cast(), bbox.max.cast()); + const double bbox_dim_max = double(std::max(bbox.size().x(), bbox.size().y())); + + // Make a copy of the input segments with the double type. + std::vector segments; + for (const Line &line : lines) + segments.emplace_back(Voronoi::Internal::point_type(double(line.a(0)), double(line.a(1))), Voronoi::Internal::point_type(double(line.b(0)), double(line.b(1)))); + + for (auto edge_it = vd.edges().begin(); edge_it != vd.edges().end(); ++edge_it) { + // Skip second half-edge + if (edge_it->cell()->source_index() > edge_it->twin()->cell()->source_index() || edge_it->color()) continue; + + if (edge_it->is_infinite() && (edge_it->vertex0() != nullptr || edge_it->vertex1() != nullptr)) { + // Infinite edge is leading through a point on the counter, but there are no Voronoi vertices. + // So we could fix this case by computing the intersection between the contour line and infinity edge. + std::vector samples; + Voronoi::Internal::clip_infinite_edge(points, segments, *edge_it, bbox_dim_max, &samples); + if (samples.empty()) continue; + + const Line edge_line(mk_point(samples[0]), mk_point(samples[1])); + const ColoredLine &contour_line = lines_colored[edge_it->cell()->source_index()]; + Point contour_intersection; + + if (line_intersection_with_epsilon(contour_line.line, edge_line, &contour_intersection)) { + const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_it->cell()->source_index()); + const size_t from_idx = (edge_it->vertex1() != nullptr) ? edge_it->vertex1()->color() : edge_it->vertex0()->color(); + size_t to_idx = ((contour_line.line.a - contour_intersection).cast().squaredNorm() < + (contour_line.line.b - contour_intersection).cast().squaredNorm()) ? + graph_arc.from_idx : + graph_arc.to_idx; + if (from_idx != to_idx && from_idx < graph.nodes_count() && to_idx < graph.nodes_count()) { + graph.append_edge(from_idx, to_idx); + mark_processed(edge_it); + } + } + } else if (edge_it->is_finite()) { + // Both points are on contour, so skip them. In cases of duplicate Voronoi vertices, skip edges between the same two points. + if (graph.is_edge_connecting_two_contour_vertices(edge_it) || (edge_it->vertex0()->color() == edge_it->vertex1()->color())) continue; + + const Line edge_line = clip_finite_voronoi_edge(*edge_it, bbox_clip); + const Line contour_line = lines_colored[edge_it->cell()->source_index()].line; + const ColoredLine colored_line = lines_colored[edge_it->cell()->source_index()]; + const ColoredLine contour_line_prev = get_prev_contour_line(edge_it); + const ColoredLine contour_line_next = get_next_contour_line(edge_it); + + if (edge_it->vertex0()->color() >= graph.nodes_count() || edge_it->vertex1()->color() >= graph.nodes_count()) { + enum class Vertex { VERTEX0, VERTEX1 }; + auto append_edge_if_intersects_with_contour = [&graph, &lines_colored, &edge_line, + &contour_line](const voronoi_diagram::const_edge_iterator &edge_iterator, const Vertex vertex) { + Point intersection; + Line contour_line_twin = lines_colored[edge_iterator->twin()->cell()->source_index()].line; + if (line_intersection_with_epsilon(contour_line_twin, edge_line, &intersection)) { + const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_iterator->twin()->cell()->source_index()); + const size_t to_idx_l = is_point_closer_to_beginning_of_line(contour_line_twin, intersection) ? graph_arc.from_idx : graph_arc.to_idx; + graph.append_edge(vertex == Vertex::VERTEX0 ? edge_iterator->vertex0()->color() : edge_iterator->vertex1()->color(), to_idx_l); + } else if (line_intersection_with_epsilon(contour_line, edge_line, &intersection)) { + const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_iterator->cell()->source_index()); + const size_t to_idx_l = is_point_closer_to_beginning_of_line(contour_line, intersection) ? graph_arc.from_idx : graph_arc.to_idx; + graph.append_edge(vertex == Vertex::VERTEX0 ? edge_iterator->vertex0()->color() : edge_iterator->vertex1()->color(), to_idx_l); + } + mark_processed(edge_iterator); + }; + + if (edge_it->vertex0()->color() < graph.nodes_count() && !graph.is_vertex_on_contour(edge_it->vertex0())) + append_edge_if_intersects_with_contour(edge_it, Vertex::VERTEX0); + + if (edge_it->vertex1()->color() < graph.nodes_count() && !graph.is_vertex_on_contour(edge_it->vertex1())) + append_edge_if_intersects_with_contour(edge_it, Vertex::VERTEX1); + } else if (graph.is_edge_attach_to_contour(edge_it)) { + mark_processed(edge_it); + // Skip edges witch connection two points on a contour + if (graph.is_edge_connecting_two_contour_vertices(edge_it)) continue; + + const size_t from_idx = edge_it->vertex0()->color(); + const size_t to_idx = edge_it->vertex1()->color(); + if (graph.is_vertex_on_contour(edge_it->vertex0())) { + if (is_point_closer_to_beginning_of_line(contour_line, edge_line.a)) { + if ((!has_same_color(contour_line_prev, colored_line) || force_edge_adding[colored_line.poly_idx]) && + points_inside(contour_line_prev.line, contour_line, edge_line.b)) { + graph.append_edge(from_idx, to_idx); + force_edge_adding[colored_line.poly_idx] = false; + } + } else { + if ((!has_same_color(contour_line_next, colored_line) || force_edge_adding[colored_line.poly_idx]) && + points_inside(contour_line, contour_line_next.line, edge_line.b)) { + graph.append_edge(from_idx, to_idx); + force_edge_adding[colored_line.poly_idx] = false; + } + } + } else { + assert(graph.is_vertex_on_contour(edge_it->vertex1())); + if (is_point_closer_to_beginning_of_line(contour_line, edge_line.b)) { + if ((!has_same_color(contour_line_prev, colored_line) || force_edge_adding[colored_line.poly_idx]) && + points_inside(contour_line_prev.line, contour_line, edge_line.a)) { + graph.append_edge(from_idx, to_idx); + force_edge_adding[colored_line.poly_idx] = false; + } + } else { + if ((!has_same_color(contour_line_next, colored_line) || force_edge_adding[colored_line.poly_idx]) && + points_inside(contour_line, contour_line_next.line, edge_line.a)) { + graph.append_edge(from_idx, to_idx); + force_edge_adding[colored_line.poly_idx] = false; + } + } + } + } else if (Point intersection; line_intersection_with_epsilon(contour_line, edge_line, &intersection)) { + mark_processed(edge_it); + Vec2d real_v0_double = graph.nodes[edge_it->vertex0()->color()].point; + Vec2d real_v1_double = graph.nodes[edge_it->vertex1()->color()].point; + Point real_v0 = Point(coord_t(real_v0_double.x()), coord_t(real_v0_double.y())); + Point real_v1 = Point(coord_t(real_v1_double.x()), coord_t(real_v1_double.y())); + + if (is_point_closer_to_beginning_of_line(contour_line, intersection)) { + Line first_part(intersection, real_v0); + Line second_part(intersection, real_v1); + + if (!has_same_color(contour_line_prev, colored_line)) { + if (points_inside(contour_line_prev.line, contour_line, first_part.b)) + graph.append_edge(edge_it->vertex0()->color(), graph.get_border_arc(edge_it->cell()->source_index()).from_idx); + + if (points_inside(contour_line_prev.line, contour_line, second_part.b)) + graph.append_edge(edge_it->vertex1()->color(), graph.get_border_arc(edge_it->cell()->source_index()).from_idx); + } + } else { + const size_t int_point_idx = graph.get_border_arc(edge_it->cell()->source_index()).to_idx; + const Vec2d int_point_double = graph.nodes[int_point_idx].point; + const Point int_point = Point(coord_t(int_point_double.x()), coord_t(int_point_double.y())); + + const Line first_part(int_point, real_v0); + const Line second_part(int_point, real_v1); + + if (!has_same_color(contour_line_next, colored_line)) { + if (points_inside(contour_line, contour_line_next.line, first_part.b)) graph.append_edge(edge_it->vertex0()->color(), int_point_idx); + + if (points_inside(contour_line, contour_line_next.line, second_part.b)) graph.append_edge(edge_it->vertex1()->color(), int_point_idx); + } + } + } + } + } + + for (auto edge_it = vd.edges().begin(); edge_it != vd.edges().end(); ++edge_it) { + // Skip second half-edge and processed edges + if (edge_it->cell()->source_index() > edge_it->twin()->cell()->source_index() || edge_it->color()) continue; + + if (edge_it->is_finite() && !bool(edge_it->color()) && edge_it->vertex0()->color() < graph.nodes_count() && edge_it->vertex1()->color() < graph.nodes_count()) { + // Skip cases, when the edge is between two same vertices, which is in cases two near vertices were merged together. + if (edge_it->vertex0()->color() == edge_it->vertex1()->color()) continue; + + size_t from_idx = edge_it->vertex0()->color(); + size_t to_idx = edge_it->vertex1()->color(); + graph.append_edge(from_idx, to_idx); + } + mark_processed(edge_it); + } + + graph.remove_nodes_with_one_arc(); + return graph; +} + +static std::vector>> get_all_segments(const std::vector> &color_poly) +{ + std::vector>> all_segments(color_poly.size()); + for (size_t poly_idx = 0; poly_idx < color_poly.size(); ++poly_idx) { + const std::vector &c_polygon = color_poly[poly_idx]; + all_segments[poly_idx] = get_segments(c_polygon); + } + return all_segments; +} + +static inline double compute_edge_length(const MMU_Graph &graph, const size_t start_idx, const size_t &start_arc_idx) +{ + assert(start_arc_idx < graph.arcs.size()); + std::vector used_arcs(graph.arcs.size(), false); + + used_arcs[start_arc_idx] = true; + const MMU_Graph::Arc *arc = &graph.arcs[start_arc_idx]; + size_t idx = start_idx; + double line_total_length = (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); + while (graph.nodes[arc->to_idx].arc_idxs.size() == 2) { + bool found = false; + for (const size_t &arc_idx : graph.nodes[arc->to_idx].arc_idxs) { + if (const MMU_Graph::Arc &arc_n = graph.arcs[arc_idx]; arc_n.type == MMU_Graph::ARC_TYPE::NON_BORDER && !used_arcs[arc_idx] && arc_n.to_idx != idx) { + Linef first_line(graph.nodes[idx].point, graph.nodes[arc->to_idx].point); + Linef second_line(graph.nodes[arc->to_idx].point, graph.nodes[arc_n.to_idx].point); + + Vec2d first_line_vec = (first_line.a - first_line.b); + Vec2d second_line_vec = (second_line.b - second_line.a); + Vec2d first_line_vec_n = first_line_vec.normalized(); + Vec2d second_line_vec_n = second_line_vec.normalized(); + double angle = ::acos(std::clamp(first_line_vec_n.dot(second_line_vec_n), -1.0, 1.0)); + if (Slic3r::cross2(first_line_vec_n, second_line_vec_n) < 0.0) angle = 2.0 * (double) PI - angle; + + if (std::abs(angle - PI) >= (PI / 12)) continue; + + idx = arc->to_idx; + arc = &arc_n; + + line_total_length += (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); + used_arcs[arc_idx] = true; + found = true; + break; + } + } + if (!found) break; + } + + return line_total_length; +} + +static void remove_multiple_edges_in_vertices(MMU_Graph &graph, const std::vector> &color_poly) +{ + std::vector>> colored_segments = get_all_segments(color_poly); + for (const std::vector> &colored_segment_p : colored_segments) { + size_t poly_idx = &colored_segment_p - &colored_segments.front(); + for (const std::pair &colored_segment : colored_segment_p) { + size_t first_idx = graph.get_global_index(poly_idx, colored_segment.first); + size_t second_idx = graph.get_global_index(poly_idx, (colored_segment.second + 1) % graph.polygon_sizes[poly_idx]); + Linef seg_line(graph.nodes[first_idx].point, graph.nodes[second_idx].point); + + if (graph.nodes[first_idx].arc_idxs.size() >= 3) { + std::vector> arc_to_check; + for (const size_t &arc_idx : graph.nodes[first_idx].arc_idxs) { + MMU_Graph::Arc &n_arc = graph.arcs[arc_idx]; + if (n_arc.type == MMU_Graph::ARC_TYPE::NON_BORDER) { + double total_len = compute_edge_length(graph, first_idx, arc_idx); + arc_to_check.emplace_back(&n_arc, total_len); + } + } + std::sort(arc_to_check.begin(), arc_to_check.end(), + [](std::pair &l, std::pair &r) -> bool { return l.second > r.second; }); + + while (arc_to_check.size() > 1) { + graph.remove_edge(first_idx, arc_to_check.back().first->to_idx); + arc_to_check.pop_back(); + } + } + } + } +} + static std::vector> merge_segmented_layers( const std::vector> &segmented_regions, std::vector> &&top_and_bottom_layers, @@ -1692,7 +1969,7 @@ static std::vector> merge_segmented_layers( segmented_regions_merged.assign(num_layers, std::vector(num_extruders)); assert(num_extruders + 1 == top_and_bottom_layers.size()); - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging segmented layers in parallel - begin"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - merging segmented layers in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, num_layers), [&segmented_regions, &top_and_bottom_layers, &segmented_regions_merged, &num_extruders, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { assert(segmented_regions[layer_idx].size() == num_extruders + 1); @@ -1719,12 +1996,12 @@ static std::vector> merge_segmented_layers( } } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging segmented layers in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - merging segmented layers in parallel - end"; return segmented_regions_merged; } -#ifdef MMU_SEGMENTATION_DEBUG_REGIONS +#ifdef MM_SEGMENTATION_DEBUG_REGIONS static void export_regions_to_svg(const std::string &path, const std::vector ®ions, const ExPolygons &lslices) { const std::vector colors = {"blue", "cyan", "red", "orange", "magenta", "pink", "purple", "yellow"}; @@ -1736,35 +2013,15 @@ static void export_regions_to_svg(const std::string &path, const std::vector= 0 && extrude_idx < int(colors.size())) - svg.draw(by_extruder, colors[extrude_idx], stroke_width); + if (extrude_idx < int(colors.size())) + svg.draw(by_extruder, colors[extrude_idx]); else - svg.draw(by_extruder, "black", stroke_width); + svg.draw(by_extruder, "black"); } } -#endif // MMU_SEGMENTATION_DEBUG_REGIONS +#endif // MM_SEGMENTATION_DEBUG_REGIONS -#ifdef MMU_SEGMENTATION_DEBUG_GRAPH -static void export_graph_to_svg(const std::string &path, const MMU_Graph &graph, const ExPolygons &lslices) -{ - const std::vector colors = {"blue", "cyan", "red", "orange", "magenta", "pink", "purple", "green", "yellow"}; - coordf_t stroke_width = scale_(0.05); - BoundingBox bbox = get_extents(lslices); - bbox.offset(scale_(1.)); - ::Slic3r::SVG svg(path.c_str(), bbox); - for (const MMU_Graph::Node &node : graph.nodes) - for (const size_t &arc_idx : node.arc_idxs) { - const MMU_Graph::Arc &arc = graph.arcs[arc_idx]; - Line arc_line(mk_point(node.point), mk_point(graph.nodes[arc.to_idx].point)); - if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color >= 0 && arc.color < int(colors.size())) - svg.draw(arc_line, colors[arc.color], stroke_width); - else - svg.draw(arc_line, "black", stroke_width); - } -} -#endif // MMU_SEGMENTATION_DEBUG_GRAPH - -#ifdef MMU_SEGMENTATION_DEBUG_INPUT +#ifdef MM_SEGMENTATION_DEBUG_INPUT void export_processed_input_expolygons_to_svg(const std::string &path, const LayerRegionPtrs ®ions, const ExPolygons &processed_input_expolygons) { coordf_t stroke_width = scale_(0.05); @@ -1774,13 +2031,14 @@ void export_processed_input_expolygons_to_svg(const std::string &path, const Lay ::Slic3r::SVG svg(path.c_str(), bbox); for (LayerRegion *region : regions) - svg.draw_outline(region->slices.surfaces, "blue", "cyan", stroke_width); + for (const Surface &surface : region->slices.surfaces) + svg.draw_outline(surface, "blue", "cyan", stroke_width); svg.draw_outline(processed_input_expolygons, "red", "pink", stroke_width); } -#endif // MMU_SEGMENTATION_DEBUG_INPUT +#endif // MM_SEGMENTATION_DEBUG_INPUT -#ifdef MMU_SEGMENTATION_DEBUG_PAINTED_LINES +#ifdef MM_SEGMENTATION_DEBUG_PAINTED_LINES static void export_painted_lines_to_svg(const std::string &path, const std::vector> &all_painted_lines, const ExPolygons &lslices) { const std::vector colors = {"blue", "cyan", "red", "orange", "magenta", "pink", "purple", "yellow"}; @@ -1796,10 +2054,10 @@ static void export_painted_lines_to_svg(const std::string &path, const std::vect for (const PaintedLine &painted_line : painted_lines) svg.draw(painted_line.projected_line, painted_line.color < int(colors.size()) ? colors[painted_line.color] : "black", stroke_width); } -#endif // MMU_SEGMENTATION_DEBUG_PAINTED_LINES +#endif // MM_SEGMENTATION_DEBUG_PAINTED_LINES -#ifdef MMU_SEGMENTATION_DEBUG_COLORIZED_POLYGONS -static void export_colorized_polygons_to_svg(const std::string &path, const std::vector> &colorized_polygons, const ExPolygons &lslices) +#ifdef MM_SEGMENTATION_DEBUG_COLORIZED_POLYGONS +static void export_colorized_polygons_to_svg(const std::string &path, const std::vector &colorized_polygons, const ExPolygons &lslices) { const std::vector colors = {"blue", "cyan", "red", "orange", "magenta", "pink", "purple", "green", "yellow"}; coordf_t stroke_width = scale_(0.05); @@ -1807,19 +2065,19 @@ static void export_colorized_polygons_to_svg(const std::string &path, const std: bbox.offset(scale_(1.)); ::Slic3r::SVG svg(path.c_str(), bbox); - for (const std::vector &colorized_polygon : colorized_polygons) + for (const ColoredLines &colorized_polygon : colorized_polygons) for (const ColoredLine &colorized_line : colorized_polygon) svg.draw(colorized_line.line, colorized_line.color < int(colors.size())? colors[colorized_line.color] : "black", stroke_width); } -#endif // MMU_SEGMENTATION_DEBUG_COLORIZED_POLYGONS +#endif // MM_SEGMENTATION_DEBUG_COLORIZED_POLYGONS // Check if all ColoredLine representing a single layer uses the same color. -static bool has_layer_only_one_color(const std::vector> &colored_polygons) +static bool has_layer_only_one_color(const std::vector &colored_polygons) { assert(!colored_polygons.empty()); assert(!colored_polygons.front().empty()); int first_line_color = colored_polygons.front().front().color; - for (const std::vector &colored_polygon : colored_polygons) + for (const ColoredLines &colored_polygon : colored_polygons) for (const ColoredLine &colored_line : colored_polygon) if (first_line_color != colored_line.color) return false; @@ -1841,8 +2099,12 @@ std::vector> multi_material_segmentation_by_painting(con throw_on_cancel_callback(); +#ifdef MM_SEGMENTATION_DEBUG + static int iRun = 0; +#endif // MM_SEGMENTATION_DEBUG + // Merge all regions and remove small holes - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - slices preparation in parallel - begin"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - slices preparation in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, num_layers), [&layers, &input_expolygons, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); @@ -1862,17 +2124,14 @@ std::vector> multi_material_segmentation_by_painting(con // Such close points sometimes caused that the Voronoi diagram has self-intersecting edges around these vertices. // This consequently leads to issues with the extraction of colored segments by function extract_colored_segments. // Calling expolygons_simplify fixed these issues. - input_expolygons[layer_idx] = remove_duplicates(expolygons_simplify(offset_ex(ex_polygons, -10.f * float(SCALED_EPSILON)), 5 * SCALED_EPSILON), scaled(0.01), PI / 6); + input_expolygons[layer_idx] = remove_duplicates(expolygons_simplify(offset_ex(ex_polygons, -10.f * float(SCALED_EPSILON)), 5 * SCALED_EPSILON), scaled(0.01), PI/6); -#ifdef MMU_SEGMENTATION_DEBUG_INPUT - { - static int iRun = 0; - export_processed_input_expolygons_to_svg(debug_out_path("mm-input-%d-%d.svg", layer_idx, iRun++), layers[layer_idx]->regions(), input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_INPUT +#ifdef MM_SEGMENTATION_DEBUG_INPUT + export_processed_input_expolygons_to_svg(debug_out_path("mm-input-%d-%d.svg", layer_idx, iRun), layers[layer_idx]->regions(), input_expolygons[layer_idx]); +#endif // MM_SEGMENTATION_DEBUG_INPUT } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - slices preparation in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - slices preparation in parallel - end"; std::vector layer_bboxes(num_layers); for (size_t layer_idx = 0; layer_idx < num_layers; ++layer_idx) { @@ -1895,7 +2154,7 @@ std::vector> multi_material_segmentation_by_painting(con edge_grids[layer_idx].create(input_expolygons[layer_idx], coord_t(scale_(10.))); } - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - projection of painted triangles - begin"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - projection of painted triangles - begin"; for (const ModelVolume *mv : print_object.model_object()->volumes) { tbb::parallel_for(tbb::blocked_range(1, num_extruders + 1), [&mv, &print_object, &layers, &edge_grids, &painted_lines, &painted_lines_mutex, &input_expolygons, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t extruder_idx = range.begin(); extruder_idx < range.end(); ++extruder_idx) { @@ -1917,6 +2176,9 @@ std::vector> multi_material_segmentation_by_painting(con min_z = std::min(min_z, facet[p_idx].z()); } + if (is_equal(min_z, max_z)) + continue; + // Sort the vertices by z-axis for simplification of projected_facet on slices std::sort(facet.begin(), facet.end(), [](const Vec3f &p1, const Vec3f &p2) { return p1.z() < p2.z(); }); @@ -1961,7 +2223,9 @@ std::vector> multi_material_segmentation_by_painting(con // be outside EdgeGrid's BoundingBox, for example, when the negative volume is used on the painted area (GH #7618). // To ensure that the painted line is always inside EdgeGrid's BoundingBox, it is clipped by EdgeGrid's BoundingBox in cases // when any of the endpoints of the line are outside the EdgeGrid's BoundingBox. - if (const BoundingBox &edge_grid_bbox = edge_grids[layer_idx].bbox(); !edge_grid_bbox.contains(line_to_test.a) || !edge_grid_bbox.contains(line_to_test.b)) { + BoundingBox edge_grid_bbox = edge_grids[layer_idx].bbox(); + edge_grid_bbox.offset(10 * scale_(EPSILON)); + if (!edge_grid_bbox.contains(line_to_test.a) || !edge_grid_bbox.contains(line_to_test.b)) { // If the painted line (line_to_test) is entirely outside EdgeGrid's BoundingBox, skip this painted line. if (!edge_grid_bbox.overlap(BoundingBox(Points{line_to_test.a, line_to_test.b})) || !line_to_test.clip_with_bbox(edge_grid_bbox)) @@ -1981,39 +2245,30 @@ std::vector> multi_material_segmentation_by_painting(con } }); // end of parallel_for } - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - projection of painted triangles - end"; - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - painted layers count: " + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - projection of painted triangles - end"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - painted layers count: " << std::count_if(painted_lines.begin(), painted_lines.end(), [](const std::vector &pl) { return !pl.empty(); }); - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - layers segmentation in parallel - begin"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - layers segmentation in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, num_layers), [&edge_grids, &input_expolygons, &painted_lines, &segmented_regions, &num_extruders, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); if (!painted_lines[layer_idx].empty()) { -#ifdef MMU_SEGMENTATION_DEBUG_PAINTED_LINES - { - static int iRun = 0; - export_painted_lines_to_svg(debug_out_path("mm-painted-lines-%d-%d.svg", layer_idx, iRun++), {painted_lines[layer_idx]}, input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_PAINTED_LINES +#ifdef MM_SEGMENTATION_DEBUG_PAINTED_LINES + export_painted_lines_to_svg(debug_out_path("0-mm-painted-lines-%d-%d.svg", layer_idx, iRun), {painted_lines[layer_idx]}, input_expolygons[layer_idx]); +#endif // MM_SEGMENTATION_DEBUG_PAINTED_LINES std::vector> post_processed_painted_lines = post_process_painted_lines(edge_grids[layer_idx].contours(), std::move(painted_lines[layer_idx])); -#ifdef MMU_SEGMENTATION_DEBUG_PAINTED_LINES - { - static int iRun = 0; - export_painted_lines_to_svg(debug_out_path("mm-painted-lines-post-processed-%d-%d.svg", layer_idx, iRun++), post_processed_painted_lines, input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_PAINTED_LINES +#ifdef MM_SEGMENTATION_DEBUG_PAINTED_LINES + export_painted_lines_to_svg(debug_out_path("1-mm-painted-lines-post-processed-%d-%d.svg", layer_idx, iRun), post_processed_painted_lines, input_expolygons[layer_idx]); +#endif // MM_SEGMENTATION_DEBUG_PAINTED_LINES - std::vector> color_poly = colorize_contours(edge_grids[layer_idx].contours(), post_processed_painted_lines); + std::vector color_poly = colorize_contours(edge_grids[layer_idx].contours(), post_processed_painted_lines); -#ifdef MMU_SEGMENTATION_DEBUG_COLORIZED_POLYGONS - { - static int iRun = 0; - export_colorized_polygons_to_svg(debug_out_path("mm-colorized_polygons-%d-%d.svg", layer_idx, iRun++), color_poly, input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_COLORIZED_POLYGONS +#ifdef MM_SEGMENTATION_DEBUG_COLORIZED_POLYGONS + export_colorized_polygons_to_svg(debug_out_path("2-mm-colorized_polygons-%d-%d.svg", layer_idx, iRun), color_poly, input_expolygons[layer_idx]); +#endif // MM_SEGMENTATION_DEBUG_COLORIZED_POLYGONS assert(!color_poly.empty()); assert(!color_poly.front().empty()); @@ -2024,30 +2279,20 @@ std::vector> multi_material_segmentation_by_painting(con MMU_Graph graph = build_graph(layer_idx, color_poly); remove_multiple_edges_in_vertices(graph, color_poly); graph.remove_nodes_with_one_arc(); - -#ifdef MMU_SEGMENTATION_DEBUG_GRAPH - { - static int iRun = 0; - export_graph_to_svg(debug_out_path("mm-graph-final-%d-%d.svg", layer_idx, iRun++), graph, input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_GRAPH - segmented_regions[layer_idx] = extract_colored_segments(graph, num_extruders); + //segmented_regions[layer_idx] = extract_colored_segments(color_poly, num_extruders, layer_idx); } -#ifdef MMU_SEGMENTATION_DEBUG_REGIONS - { - static int iRun = 0; - export_regions_to_svg(debug_out_path("mm-regions-sides-%d-%d.svg", layer_idx, iRun++), segmented_regions[layer_idx], input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_REGIONS +#ifdef MM_SEGMENTATION_DEBUG_REGIONS + export_regions_to_svg(debug_out_path("3-mm-regions-sides-%d-%d.svg", layer_idx, iRun), segmented_regions[layer_idx], input_expolygons[layer_idx]); +#endif // MM_SEGMENTATION_DEBUG_REGIONS } } }); // end of parallel_for - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - layers segmentation in parallel - end"; + BOOST_LOG_TRIVIAL(debug) << "MM segmentation - layers segmentation in parallel - end"; throw_on_cancel_callback(); - if (auto max_width = print_object.config().mmu_segmented_region_max_width, interlocking_depth = print_object.config().mmu_segmented_region_interlocking_depth; max_width > 0.f || interlocking_depth > 0.f) { + if (auto max_width = print_object.config().mmu_segmented_region_max_width, interlocking_depth = print_object.config().mmu_segmented_region_interlocking_depth; max_width > 0.f || interlocking_depth > 0.f) { cut_segmented_layers(input_expolygons, segmented_regions, float(scale_(max_width)), float(scale_(interlocking_depth)), throw_on_cancel_callback); throw_on_cancel_callback(); } @@ -2059,13 +2304,14 @@ std::vector> multi_material_segmentation_by_painting(con std::vector> segmented_regions_merged = merge_segmented_layers(segmented_regions, std::move(top_and_bottom_layers), num_extruders, throw_on_cancel_callback); throw_on_cancel_callback(); -#ifdef MMU_SEGMENTATION_DEBUG_REGIONS - { - static int iRun = 0; - for (size_t layer_idx = 0; layer_idx < print_object.layers().size(); ++layer_idx) - export_regions_to_svg(debug_out_path("mm-regions-merged-%d-%d.svg", layer_idx, iRun++), segmented_regions_merged[layer_idx], input_expolygons[layer_idx]); - } -#endif // MMU_SEGMENTATION_DEBUG_REGIONS +#ifdef MM_SEGMENTATION_DEBUG_REGIONS + for (size_t layer_idx = 0; layer_idx < print_object.layers().size(); ++layer_idx) + export_regions_to_svg(debug_out_path("4-mm-regions-merged-%d-%d.svg", layer_idx, iRun), segmented_regions_merged[layer_idx], input_expolygons[layer_idx]); +#endif // MM_SEGMENTATION_DEBUG_REGIONS + +#ifdef MM_SEGMENTATION_DEBUG + ++iRun; +#endif // MM_SEGMENTATION_DEBUG return segmented_regions_merged; } diff --git a/src/libslic3r/MultiMaterialSegmentation.hpp b/src/libslic3r/MultiMaterialSegmentation.hpp index 4efdc69514..91d0f298bc 100644 --- a/src/libslic3r/MultiMaterialSegmentation.hpp +++ b/src/libslic3r/MultiMaterialSegmentation.hpp @@ -6,13 +6,41 @@ namespace Slic3r { - class PrintObject; class ExPolygon; +using ExPolygons = std::vector; + +struct ColoredLine +{ + Line line; + int color; + int poly_idx = -1; + int local_line_idx = -1; +}; + +using ColoredLines = std::vector; // Returns MMU segmentation based on painting in MMU segmentation gizmo std::vector> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback); } // namespace Slic3r +namespace boost::polygon { +template<> struct geometry_concept +{ + typedef segment_concept type; +}; + +template<> struct segment_traits +{ + typedef coord_t coordinate_type; + typedef Slic3r::Point point_type; + + static inline point_type get(const Slic3r::ColoredLine &line, const direction_1d &dir) + { + return dir.to_int() ? line.line.b : line.line.a; + } +}; +} // namespace boost::polygon + #endif // slic3r_MultiMaterialSegmentation_hpp_ diff --git a/src/libslic3r/NSVGUtils.cpp b/src/libslic3r/NSVGUtils.cpp index 6bfb89b74e..e27a6738e2 100644 --- a/src/libslic3r/NSVGUtils.cpp +++ b/src/libslic3r/NSVGUtils.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "NSVGUtils.hpp" #include #include // to_chars diff --git a/src/libslic3r/NSVGUtils.hpp b/src/libslic3r/NSVGUtils.hpp index fe76fa0459..8d6a3bc3ef 100644 --- a/src/libslic3r/NSVGUtils.hpp +++ b/src/libslic3r/NSVGUtils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_NSVGUtils_hpp_ #define slic3r_NSVGUtils_hpp_ diff --git a/src/libslic3r/NormalUtils.cpp b/src/libslic3r/NormalUtils.cpp index dc94515656..8619b749a2 100644 --- a/src/libslic3r/NormalUtils.cpp +++ b/src/libslic3r/NormalUtils.cpp @@ -19,7 +19,7 @@ std::vector NormalUtils::create_triangle_normals( { std::vector normals; normals.reserve(its.indices.size()); - for (const Vec3crd &index : its.indices) { + for (const auto &index : its.indices) { normals.push_back(create_triangle_normal(index, its.vertices)); } return normals; @@ -31,7 +31,7 @@ NormalUtils::Normals NormalUtils::create_normals_average_neighbor( size_t count_vertices = its.vertices.size(); std::vector normals(count_vertices, Vec3f(.0f, .0f, .0f)); std::vector count(count_vertices, 0); - for (const Vec3crd &indice : its.indices) { + for (const auto &indice : its.indices) { Vec3f normal = create_triangle_normal(indice, its.vertices); for (int i = 0; i < 3; ++i) { normals[indice[i]] += normal; @@ -48,7 +48,7 @@ NormalUtils::Normals NormalUtils::create_normals_average_neighbor( // calc triangle angle of vertex defined by index to triangle indices float NormalUtils::indice_angle(int i, - const Vec3crd & indice, + const Vec3i32 & indice, const std::vector &vertices) { int i1 = (i == 0) ? 2 : (i - 1); @@ -74,7 +74,7 @@ NormalUtils::Normals NormalUtils::create_normals_angle_weighted( size_t count_vertices = its.vertices.size(); std::vector normals(count_vertices, Vec3f(.0f, .0f, .0f)); std::vector count(count_vertices, 0.f); - for (const Vec3crd &indice : its.indices) { + for (const auto &indice : its.indices) { Vec3f normal = create_triangle_normal(indice, its.vertices); Vec3f angles(indice_angle(0, indice, its.vertices), indice_angle(1, indice, its.vertices), 0.f); @@ -100,7 +100,7 @@ NormalUtils::Normals NormalUtils::create_normals_nelson_weighted( std::vector normals(count_vertices, Vec3f(.0f, .0f, .0f)); std::vector count(count_vertices, 0.f); const std::vector &vertices = its.vertices; - for (const Vec3crd &indice : its.indices) { + for (const auto &indice : its.indices) { Vec3f normal = create_triangle_normal(indice, vertices); const stl_vertex &v0 = vertices[indice[0]]; diff --git a/src/libslic3r/NormalUtils.hpp b/src/libslic3r/NormalUtils.hpp index 60ec57f724..8dcd0c0290 100644 --- a/src/libslic3r/NormalUtils.hpp +++ b/src/libslic3r/NormalUtils.hpp @@ -61,7 +61,7 @@ public: /// vertices data /// Angle [in radian] static float indice_angle(int i, - const Vec3crd & indice, + const Vec3i32 & indice, const std::vector &vertices); }; diff --git a/src/libslic3r/ObjColorUtils.hpp b/src/libslic3r/ObjColorUtils.hpp new file mode 100644 index 0000000000..ea4418adfd --- /dev/null +++ b/src/libslic3r/ObjColorUtils.hpp @@ -0,0 +1,262 @@ +#pragma once +#include +#include + +#include "opencv2/opencv.hpp" + +class QuantKMeans +{ +public: + int m_alpha_thres; + cv::Mat m_flatten_labels; + cv::Mat m_centers8UC3; + QuantKMeans(int alpha_thres = 10) : m_alpha_thres(alpha_thres) {} + void apply(cv::Mat &ori_image, cv::Mat &new_image, int num_cluster, int color_space) + { + cv::Mat image; + convert_color_space(ori_image, image, color_space); + cv::Mat flatten_image = flatten(image); + + apply(flatten_image, num_cluster, color_space); + replace_centers(ori_image, new_image); + } + void apply_aplha(cv::Mat &ori_image, cv::Mat &new_image, int num_cluster, int color_space) + { + // cout << " *** DoAlpha *** " << endl; + cv::Mat flatten_image8UC3 = flatten_alpha(ori_image); + cv::Mat image8UC3; + convert_color_space(flatten_image8UC3, image8UC3, color_space); + cv::Mat image32FC3(image8UC3.rows, 1, CV_32FC3); + for (int i = 0; i < image8UC3.rows; i++) + image32FC3.at(i, 0) = image8UC3.at(i, 0); + + apply(image32FC3, num_cluster, color_space); + repalce_centers_aplha(ori_image, new_image); + } + void apply(cv::Mat &flatten_image, int num_cluster, int color_space) + { + cv::Mat centers32FC3; + num_cluster = fmin(flatten_image.rows, num_cluster); + kmeans(flatten_image, num_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, cv::KMEANS_PP_CENTERS, + centers32FC3); + this->m_centers8UC3 = cv::Mat(num_cluster, 1, CV_8UC3); + for (int i = 0; i < num_cluster; i++) this->m_centers8UC3.at(i) = centers32FC3.at(i); + + convert_color_space(this->m_centers8UC3, this->m_centers8UC3, color_space, true); + } + void apply(const std::vector> &ori_colors, + std::vector> & cluster_results, + std::vector & labels, + int num_cluster = -1, + int max_cluster = 15, + int color_space = 2) + { + // 0~255 + cv::Mat flatten_image8UC3 = flatten_vector(ori_colors); + + this->apply(flatten_image8UC3, cluster_results, labels, num_cluster, max_cluster, color_space); + } + void apply(const cv::Mat & flatten_image8UC3, + std::vector> &cluster_results, + std::vector & labels, + int num_cluster = -1, + int max_cluster = 15, + int color_space = 2) + { + cv::Mat image8UC3; + convert_color_space(flatten_image8UC3, image8UC3, color_space); + + cv::Mat image32FC3(image8UC3.rows, 1, CV_32FC3); + for (int i = 0; i < image8UC3.rows; i++) + image32FC3.at(i, 0) = image8UC3.at(i, 0); + + int best_cluster = 1; + double cur_score = 0, best_score = 100; + num_cluster = fmin(num_cluster, max_cluster); + if (num_cluster < 1) { + if (!this->more_than_request(image8UC3, max_cluster)) max_cluster = compute_num_colors(image8UC3); + num_cluster = fmin(num_cluster, max_cluster); + cur_score = cv::kmeans(image32FC3, 1, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, cv::KMEANS_PP_CENTERS); + best_score = cur_score; + + for (int cur_cluster = 2; cur_cluster < max_cluster + 1; cur_cluster++) { + cv::Mat centers32FC3; + cur_score = cv::kmeans(image32FC3, cur_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, + cv::KMEANS_PP_CENTERS, centers32FC3); + if (this->repeat_center(cur_cluster, centers32FC3, color_space)) + break; + best_cluster = cur_score < best_score ? cur_cluster : best_cluster; + best_score = cur_score < best_score ? cur_score : best_score; + } + } else if (this->more_than_request(image8UC3, num_cluster)) + best_cluster = num_cluster; + else { + best_cluster = compute_num_colors(image8UC3); + std::cout << "num of image color is " << best_cluster << ", less than custom number " << num_cluster << std::endl; + } + + cv::Mat centers32FC3; + cv::kmeans(image32FC3, best_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, cv::KMEANS_PP_CENTERS, + centers32FC3); + this->m_centers8UC3 = cv::Mat(best_cluster, 1, CV_8UC3); + for (int i = 0; i < best_cluster; i++) { + auto center = centers32FC3.row(i); + this->m_centers8UC3.at(i) = {uchar(center.at(0)), uchar(center.at(1)), uchar(center.at(2))}; + } + convert_color_space(this->m_centers8UC3, this->m_centers8UC3, color_space, true); + + cluster_results.clear(); + labels.clear(); + for (int i = 0; i < flatten_image8UC3.rows; i++) + labels.emplace_back(this->m_flatten_labels.at(i, 0)); + for (int i = 0; i < best_cluster; i++) { + cv::Vec3f center = this->m_centers8UC3.at(i, 0); + cluster_results.emplace_back(std::array{center[0] / 255.f, center[1] / 255.f, center[2] / 255.f, 1.f}); + } + } + + bool more_than_request(const cv::Mat &image8UC3, int target_num) + { + std::vector uniqueImage; + cv::Vec3b cur_color; + for (int i = 0; i < image8UC3.rows; i++) { + cur_color = image8UC3.at(i, 0); + if (!is_in(cur_color, uniqueImage)) { + uniqueImage.emplace_back(cur_color); + if (uniqueImage.size() >= target_num) return true; + } + } + return false; + } + + int compute_num_colors(const cv::Mat &image8UC3) + { + std::vector uniqueImage; + cv::Vec3b cur_color; + for (int i = 0; i < image8UC3.rows; i++) { + cur_color = image8UC3.at(i, 0); + if (!is_in(cur_color, uniqueImage)) uniqueImage.emplace_back(cur_color); + } + + return uniqueImage.size(); + } + + bool is_in(const cv::Vec3b &cur_color, const std::vector &uniqueImage) + { + for (auto &color : uniqueImage) + if (cur_color[0] == color[0] && cur_color[1] == color[1] && cur_color[2] == color[2]) return true; + return false; + } + + bool repeat_center(int cur_cluster, const cv::Mat ¢ers32FC3, int color_space) + { + cv::Mat centers8UC3 = cv::Mat(cur_cluster, 1, CV_8UC3); + for (int i = 0; i < cur_cluster; i++) { + auto center = centers32FC3.row(i); + centers8UC3.at(i) = {uchar(center.at(0)), uchar(center.at(1)), uchar(center.at(2))}; + } + convert_color_space(centers8UC3, centers8UC3, color_space, true); + std::vector unique_centers; + cv::Vec3b cur_center; + for (int i = 0; i < cur_cluster; i++) { + cur_center = centers8UC3.at(i, 0); + if (!is_in(cur_center, unique_centers)) + unique_centers.emplace_back(cur_center); + else + return true; + } + return false; + } + + void replace_centers(cv::Mat &ori_image, cv::Mat &new_image) + { + for (int i = 0; i < ori_image.rows; i++) { + for (int j = 0; j < ori_image.cols; j++) { + int idx = this->m_flatten_labels.at(i * ori_image.cols + j, 0); + cv::Vec3b pixel = this->m_centers8UC3.at(idx); + new_image.at(i, j) = pixel; + } + } + } + void repalce_centers_aplha(cv::Mat &ori_image, cv::Mat &new_image) + { + int cnt = 0; + int idx; + cv::Vec3b center; + for (int i = 0; i < ori_image.rows; i++) { + for (int j = 0; j < ori_image.cols; j++) { + cv::Vec4b pixel = ori_image.at(i, j); + if ((int) pixel[3] < this->m_alpha_thres) + new_image.at(i, j) = pixel; + else { + idx = this->m_flatten_labels.at(cnt++, 0); + center = this->m_centers8UC3.at(idx); + new_image.at(i, j) = cv::Vec4b(center[0], center[1], center[2], pixel[3]); + } + } + } + } + + void convert_color_space(const cv::Mat &ori_image, cv::Mat &image, int color_space, bool reverse = false) + { + switch (color_space) { + case 0: image = ori_image; break; + case 1: + if (reverse) + cvtColor(ori_image, image, cv::COLOR_HSV2BGR); + else + cvtColor(ori_image, image, cv::COLOR_BGR2HSV); + break; + case 2: + if (reverse) + cvtColor(ori_image, image, cv::COLOR_Lab2BGR); + else + cvtColor(ori_image, image, cv::COLOR_BGR2Lab); + break; + default: break; + } + } + + cv::Mat flatten(cv::Mat &image) + { + int num_pixels = image.rows * image.cols; + cv::Mat img(num_pixels, 1, CV_32FC3); + for (int i = 0; i < image.rows; i++) { + for (int j = 0; j < image.cols; j++) { + cv::Vec3f pixel = image.at(i, j); + img.at(i * image.cols + j, 0) = pixel; + } + } + return img; + } + cv::Mat flatten_alpha(cv::Mat &image) + { + int num_pixels = image.rows * image.cols; + for (int i = 0; i < image.rows; i++) + for (int j = 0; j < image.cols; j++) { + cv::Vec4b pixel = image.at(i, j); + if ((int) pixel[3] < this->m_alpha_thres) num_pixels--; + } + + cv::Mat img(num_pixels, 1, CV_8UC3); + int cnt = 0; + for (int i = 0; i < image.rows; i++) { + for (int j = 0; j < image.cols; j++) { + cv::Vec4b pixel = image.at(i, j); + if ((int) pixel[3] >= this->m_alpha_thres) img.at(cnt++, 0) = cv::Vec3b(pixel[0], pixel[1], pixel[2]); + } + } + return img; + } + cv::Mat flatten_vector(const std::vector> &ori_colors) + { + int num_pixels = ori_colors.size(); + + cv::Mat image8UC3(num_pixels, 1, CV_8UC3); + for (int i = 0; i < num_pixels; i++) { + std::array pixel = ori_colors[i]; + image8UC3.at(i, 0) = cv::Vec3b((int) (pixel[0] * 255.f), (int) (pixel[1] * 255.f), (int) (pixel[2] * 255.f)); + } + return image8UC3; + } +}; diff --git a/src/libslic3r/OpenVDBUtils.hpp b/src/libslic3r/OpenVDBUtils.hpp index 490b3e2228..f4441ba964 100644 --- a/src/libslic3r/OpenVDBUtils.hpp +++ b/src/libslic3r/OpenVDBUtils.hpp @@ -17,7 +17,7 @@ namespace Slic3r { inline Vec3f to_vec3f(const openvdb::Vec3s &v) { return Vec3f{v.x(), v.y(), v.z()}; } inline Vec3d to_vec3d(const openvdb::Vec3s &v) { return to_vec3f(v).cast(); } -inline Vec3i to_vec3i(const openvdb::Vec3I &v) { return Vec3i{int(v[0]), int(v[1]), int(v[2])}; } +inline Vec3i32 to_vec3i(const openvdb::Vec3I &v) { return Vec3i32{int(v[0]), int(v[1]), int(v[2])}; } // Here voxel_scale defines the scaling of voxels which affects the voxel count. // 1.0 value means a voxel for every unit cube. 2 means the model is scaled to diff --git a/src/libslic3r/ParameterUtils.cpp b/src/libslic3r/ParameterUtils.cpp new file mode 100644 index 0000000000..adde84d5cd --- /dev/null +++ b/src/libslic3r/ParameterUtils.cpp @@ -0,0 +1,46 @@ +#include "ParameterUtils.hpp" +#include + +namespace Slic3r { + +std::vector get_other_layers_print_sequence(int sequence_nums, const std::vector &sequence) +{ + std::vector res; + if (sequence_nums == 0 || sequence.empty()) + return res; + + assert(sequence.size() % sequence_nums == 0); + + res.reserve(sequence_nums); + size_t item_nums = sequence.size() / sequence_nums; + + for (int i = 0; i < sequence_nums; ++i) { + std::vector item; + item.assign(sequence.begin() + i * item_nums, sequence.begin() + ((i + 1) * item_nums)); + + assert(item.size() > 2); + std::pair, std::vector> res_item; + res_item.first.first = item[0]; + res_item.first.second = item[1]; + res_item.second.assign(item.begin() + 2, item.end()); + res.emplace_back(std::move(res_item)); + } + + return res; +} + +void get_other_layers_print_sequence(const std::vector &customize_sequences, int &sequence_nums, std::vector &sequence) +{ + sequence_nums = 0; + sequence.clear(); + if (customize_sequences.empty()) { return; } + + sequence_nums = (int) customize_sequences.size(); + for (const auto &customize_sequence : customize_sequences) { + sequence.push_back(customize_sequence.first.first); + sequence.push_back(customize_sequence.first.second); + sequence.insert(sequence.end(), customize_sequence.second.begin(), customize_sequence.second.end()); + } +} + +}; // namespace Slic3r diff --git a/src/libslic3r/ParameterUtils.hpp b/src/libslic3r/ParameterUtils.hpp new file mode 100644 index 0000000000..090fd8d803 --- /dev/null +++ b/src/libslic3r/ParameterUtils.hpp @@ -0,0 +1,14 @@ +#ifndef slic3r_Parameter_Utils_hpp_ +#define slic3r_Parameter_Utils_hpp_ + +#include +#include + +namespace Slic3r { +using LayerPrintSequence = std::pair, std::vector>; +std::vector get_other_layers_print_sequence(int sequence_nums, const std::vector &sequence); +void get_other_layers_print_sequence(const std::vector &customize_sequences, int &sequence_nums, std::vector &sequence); + +} // namespace Slic3r + +#endif // slic3r_Parameter_Utils_hpp_ diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index c708e5620d..a3c123c10c 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1,10 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Hejl @hejllukas, Lukáš Matěna @lukasmatena -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ Copyright (c) 2021 Ilya @xorza -///|/ Copyright (c) Slic3r 2015 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "PerimeterGenerator.hpp" #include "AABBTreeLines.hpp" #include "BridgeDetector.hpp" @@ -20,13 +13,16 @@ #include "Geometry/ConvexHull.hpp" #include "ExPolygonCollection.hpp" #include "Geometry.hpp" - +#include "Line.hpp" #include #include +#include #include - +#include "libslic3r/AABBTreeLines.hpp" static const int overhang_sampling_number = 6; static const double narrow_loop_length_threshold = 10; +static const double min_degree_gap = 0.1; +static const int max_overhang_degree = overhang_sampling_number - 1; //BBS: when the width of expolygon is smaller than //ext_perimeter_width + ext_perimeter_spacing * (1 - SMALLER_EXT_INSET_OVERLAP_TOLERANCE), //we think it's small detail area and will generate smaller line width for it @@ -34,6 +30,15 @@ static constexpr double SMALLER_EXT_INSET_OVERLAP_TOLERANCE = 0.22; namespace Slic3r { +// Produces a random value between 0 and 1. Thread-safe. +static double random_value() { + thread_local std::random_device rd; + // Hash thread ID for random number seed if no hardware rng seed is available + thread_local std::mt19937 gen(rd.entropy() > 0 ? rd() : std::hash()(std::this_thread::get_id())); + thread_local std::uniform_real_distribution dist(0.0, 1.0); + return dist(gen); +} + // Hierarchy of perimeters. class PerimeterGeneratorLoop { public: @@ -63,7 +68,7 @@ static void fuzzy_polygon(Polygon &poly, double fuzzy_skin_thickness, double fuz { const double min_dist_between_points = fuzzy_skin_point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value const double range_random_point_dist = fuzzy_skin_point_distance / 2.; - double dist_left_over = double(rand()) * (min_dist_between_points / 2) / double(RAND_MAX); // the distance to be traversed on the line before making the first new point + double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point Point* p0 = &poly.points.back(); Points out; out.reserve(poly.points.size()); @@ -73,9 +78,9 @@ static void fuzzy_polygon(Polygon &poly, double fuzzy_skin_thickness, double fuz double p0p1_size = p0p1.norm(); double p0pa_dist = dist_left_over; for (; p0pa_dist < p0p1_size; - p0pa_dist += min_dist_between_points + double(rand()) * range_random_point_dist / double(RAND_MAX)) + p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) { - double r = double(rand()) * (fuzzy_skin_thickness * 2.) / double(RAND_MAX) - fuzzy_skin_thickness; + double r = random_value() * (fuzzy_skin_thickness * 2.) - fuzzy_skin_thickness; out.emplace_back(*p0 + (p0p1 * (p0pa_dist / p0p1_size) + perp(p0p1).cast().normalized() * r).cast()); } dist_left_over = p0pa_dist - p0p1_size; @@ -222,6 +227,188 @@ static void lowpass_filter_by_paths_overhang_degree(ExtrusionPaths& paths) { } } +struct PolylineWithDegree +{ + PolylineWithDegree(Polyline polyline, double overhang_degree) : polyline(polyline), overhang_degree(overhang_degree){}; + Polyline polyline; + double overhang_degree = 0; +}; + +static std::deque split_polyline_by_degree(const Polyline &polyline_with_insert_points, const std::deque &points_overhang) +{ + std::deque out; + Polyline left; + Polyline right; + Polyline temp_copy = polyline_with_insert_points; + + size_t poly_size = polyline_with_insert_points.size(); + // BBS: merge degree in limited range + //find first degee base + double degree_base = int(points_overhang[points_overhang.size() - 1] / min_degree_gap) * min_degree_gap + min_degree_gap; + degree_base = degree_base > max_overhang_degree ? max_overhang_degree : degree_base; + double short_poly_len = 0; + for (int point_idx = points_overhang.size() - 2; point_idx > 0; --point_idx) { + + double degree = points_overhang[point_idx]; + + if ( degree <= degree_base && degree >= degree_base - min_degree_gap ) + continue; + + temp_copy.split_at_index(point_idx, &left, &right); + + temp_copy = std::move(left); + out.push_back(PolylineWithDegree(right, degree_base)); + + degree_base = int(degree / min_degree_gap) * min_degree_gap + min_degree_gap; + degree_base = degree_base > max_overhang_degree ? max_overhang_degree : degree_base; + } + + if (!temp_copy.empty()) { + out.push_back(PolylineWithDegree(temp_copy, degree_base)); + } + + return out; + +} +static void insert_point_to_line( double left_point_degree, + Point left_point, + double right_point_degree, + Point right_point, + std::deque &points_overhang, + Polyline& polyline, + double mini_length) +{ + Line line_temp(left_point, right_point); + double line_length = line_temp.length(); + if (std::abs(left_point_degree - right_point_degree) <= 0.5 * min_degree_gap || line_length left_points_overhang; + std::deque right_points_overhang; + + double middle_degree = (left_point_degree + right_point_degree) / 2; + Polyline left_polyline; + Polyline right_polyline; + + insert_point_to_line(left_point_degree, left_point, middle_degree, middle_pt, left_points_overhang, left_polyline, mini_length); + insert_point_to_line(middle_degree, middle_pt, right_point_degree, right_point, right_points_overhang, right_polyline, mini_length); + + if (!left_polyline.empty()) { + polyline.points.insert(polyline.points.end(), std::make_move_iterator(left_polyline.points.begin()), std::make_move_iterator(left_polyline.points.end())); + points_overhang.insert(points_overhang.end(), std::make_move_iterator(left_points_overhang.begin()), std::make_move_iterator(left_points_overhang.end())); + } + + polyline.append(middle_pt); + points_overhang.emplace_back(middle_degree); + + if (!right_polyline.empty()) { + polyline.points.insert(polyline.points.end(), std::make_move_iterator(right_polyline.points.begin()), std::make_move_iterator(right_polyline.points.end())); + points_overhang.insert(points_overhang.end(), std::make_move_iterator(right_points_overhang.begin()), std::make_move_iterator(right_points_overhang.end())); + } +} + +class OverhangDistancer +{ + std::vector lines; + AABBTreeIndirect::Tree<2, double> tree; + +public: + OverhangDistancer(const Polygons layer_polygons) + { + for (const Polygon &island : layer_polygons) { + for (const auto &line : island.lines()) { + lines.emplace_back(line.a.cast(), line.b.cast()); + } + } + tree = AABBTreeLines::build_aabb_tree_over_indexed_lines(lines); + } + + float distance_from_perimeter(const Vec2f &point) const + { + Vec2d p = point.cast(); + size_t hit_idx_out{}; + Vec2d hit_point_out = Vec2d::Zero(); + auto distance = AABBTreeLines::squared_distance_to_indexed_lines(lines, tree, p, hit_idx_out, hit_point_out); + if (distance < 0) { return std::numeric_limits::max(); } + + distance = sqrt(distance); + return distance; + } +}; + +static std::deque detect_overahng_degree(Polygons lower_polygons, + Polylines middle_overhang_polyines, + const double &lower_bound, + const double &upper_bound, + Polylines &too_short_polylines) +{ + // BBS: collect lower_polygons points + //Polylines; + Points lower_polygon_points; + std::vector polygons_bound; + + std::unique_ptr prev_layer_distancer; + prev_layer_distancer = std::make_unique(lower_polygons); + std::deque out; + std::deque points_overhang; + //BBS: get overhang degree and split path + for (size_t polyline_idx = 0; polyline_idx < middle_overhang_polyines.size(); ++polyline_idx) { + //filter too short polyline + Polyline middle_poly = middle_overhang_polyines[polyline_idx]; + if (middle_poly.length() < scale_(1.0)) { + too_short_polylines.push_back(middle_poly); + continue; + } + + Polyline polyline_with_insert_points; + points_overhang.clear(); + double last_degree = 0; + // BBS : calculate overhang dist + for (size_t point_idx = 0; point_idx < middle_poly.points.size(); ++point_idx) { + Point pt = middle_poly.points[point_idx]; + + float overhang_dist = prev_layer_distancer->distance_from_perimeter(pt.cast()); + overhang_dist = overhang_dist > upper_bound ? upper_bound : overhang_dist; + // BBS : calculate overhang degree + int max_overhang = max_overhang_degree; + int min_overhang = 0; + double t = (overhang_dist - lower_bound) / (upper_bound - lower_bound); + t = t > 1.0 ? 1: t; + t = t < EPSILON ? 0 : t; + double this_degree = (1.0 - t) * min_overhang + t * max_overhang; + // BBS: intert points + if (point_idx > 0) { + insert_point_to_line(last_degree, middle_poly.points[point_idx - 1], this_degree, pt, points_overhang, polyline_with_insert_points, + upper_bound - lower_bound); + } + points_overhang.push_back(this_degree); + + polyline_with_insert_points.append(pt); + last_degree = this_degree; + + } + + // BBS : split path by degree + std::deque polyline_with_merged_degree = split_polyline_by_degree(polyline_with_insert_points, points_overhang); + out.insert(out.end(), std::make_move_iterator(polyline_with_merged_degree.begin()), std::make_move_iterator(polyline_with_merged_degree.end())); + } + + return out; +} + +std::pair PerimeterGenerator::dist_boundary(double width) +{ + std::pair out; + float nozzle_diameter = print_config->nozzle_diameter.get_at(config->wall_filament - 1); + float start_offset = -0.5 * width; + float end_offset = 0.5 * nozzle_diameter; + double degree_0 = scale_(start_offset + 0.5 * (end_offset - start_offset) / (overhang_sampling_number - 1)); + out.first = 0; + out.second = scale_(end_offset) - degree_0; + return out; +} + template static bool detect_steep_overhang(const PrintRegionConfig *config, bool is_contour, @@ -297,24 +484,28 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime ExtrusionPaths paths; // BBS: get lower polygons series, width, mm3_per_mm - const std::map *lower_polygons_series; + const std::vector *lower_polygons_series; + const std::pair *overhang_dist_boundary; double extrusion_mm3_per_mm; double extrusion_width; if (is_external) { if (is_small_width) { //BBS: smaller width external perimeter lower_polygons_series = &perimeter_generator.m_smaller_external_lower_polygons_series; + overhang_dist_boundary = &perimeter_generator.m_smaller_external_overhang_dist_boundary; extrusion_mm3_per_mm = perimeter_generator.smaller_width_ext_mm3_per_mm(); extrusion_width = perimeter_generator.smaller_ext_perimeter_flow.width(); } else { //BBS: normal external perimeter lower_polygons_series = &perimeter_generator.m_external_lower_polygons_series; + overhang_dist_boundary = &perimeter_generator.m_external_overhang_dist_boundary; extrusion_mm3_per_mm = perimeter_generator.ext_mm3_per_mm(); extrusion_width = perimeter_generator.ext_perimeter_flow.width(); } } else { //BBS: normal perimeter lower_polygons_series = &perimeter_generator.m_lower_polygons_series; + overhang_dist_boundary = &perimeter_generator.m_lower_overhang_dist_boundary; extrusion_mm3_per_mm = perimeter_generator.mm3_per_mm(); extrusion_width = perimeter_generator.perimeter_flow.width(); } @@ -349,50 +540,72 @@ 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) { - for (auto it = lower_polygons_series->begin(); - it != lower_polygons_series->end(); it++) - { - Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(it->second, bbox); + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_polygons_series->back(), bbox); - Polylines inside_polines = (it == lower_polygons_series->begin()) ? intersection_pl({polygon}, lower_polygons_series_clipped) : - intersection_pl(remain_polines, lower_polygons_series_clipped); + Polylines inside_polines = intersection_pl({polygon}, lower_polygons_series_clipped); + + + remain_polines = diff_pl({polygon}, lower_polygons_series_clipped); + + bool detect_overhang_degree = perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None; + + if (!detect_overhang_degree) { + if (!inside_polines.empty()) extrusion_paths_append( paths, std::move(inside_polines), - it->first, + 0, int(0), role, extrusion_mm3_per_mm, extrusion_width, (float)perimeter_generator.layer_height); - - remain_polines = (it == lower_polygons_series->begin()) ? diff_pl({polygon}, lower_polygons_series_clipped) : - diff_pl(remain_polines, lower_polygons_series_clipped); - - if (remain_polines.size() == 0) - break; - } } else { - auto it = lower_polygons_series->end(); - it--; - Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(it->second, bbox); + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_polygons_series->front(), bbox); - Polylines inside_polines = intersection_pl({polygon}, lower_polygons_series_clipped); - extrusion_paths_append( - paths, - std::move(inside_polines), - int(0), - int(0), - role, - extrusion_mm3_per_mm, - extrusion_width, - (float)perimeter_generator.layer_height); + Polylines middle_overhang_polyines = diff_pl({inside_polines}, lower_polygons_series_clipped); + //BBS: add zero_degree_path + Polylines zero_degree_polines = intersection_pl({inside_polines}, lower_polygons_series_clipped); + if (!zero_degree_polines.empty()) + extrusion_paths_append( + paths, + std::move(zero_degree_polines), + 0, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, + (float)perimeter_generator.layer_height); + //BBS: detect middle line overhang + if (!middle_overhang_polyines.empty()) { + Polylines too_short_polylines; + std::deque polylines_degree_collection = detect_overahng_degree(lower_polygons_series->front(), + middle_overhang_polyines, + overhang_dist_boundary->first, + overhang_dist_boundary->second, + too_short_polylines); + if (!too_short_polylines.empty()) + extrusion_paths_append(paths, + std::move(too_short_polylines), + 0, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, + (float) perimeter_generator.layer_height); + // BBS: add path with overhang degree + for (PolylineWithDegree polylines_collection : polylines_degree_collection) { + extrusion_paths_append(paths, + std::move(polylines_collection.polyline), + polylines_collection.overhang_degree, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, (float) perimeter_generator.layer_height); + } + } - remain_polines = diff_pl({polygon}, lower_polygons_series_clipped); } - // get 100% overhang paths by checking what parts of this loop fall // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter @@ -407,9 +620,6 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime // We allow polyline reversal because Clipper may have randomly reversed polylines during clipping. if(paths.empty()) continue; chain_and_reorder_extrusion_paths(paths, &paths.front().first_point()); - // smothing the overhang degree - // merge small path between paths which have same overhang degree - lowpass_filter_by_paths_overhang_degree(paths); } else { ExtrusionPath path(role); //BBS. @@ -1489,12 +1699,16 @@ void PerimeterGenerator::process_classic() // prepare grown lower layer slices for overhang detection m_lower_polygons_series = generate_lower_polygons_series(this->perimeter_flow.width()); - if (ext_perimeter_width == perimeter_width) + m_lower_overhang_dist_boundary = dist_boundary(this->perimeter_flow.width()); + if (ext_perimeter_width == perimeter_width){ m_external_lower_polygons_series = m_lower_polygons_series; - else + m_external_overhang_dist_boundary=m_lower_overhang_dist_boundary; + } else { m_external_lower_polygons_series = generate_lower_polygons_series(this->ext_perimeter_flow.width()); + m_external_overhang_dist_boundary = dist_boundary(this->ext_perimeter_flow.width()); + } m_smaller_external_lower_polygons_series = generate_lower_polygons_series(this->smaller_ext_perimeter_flow.width()); - + m_smaller_external_overhang_dist_boundary = dist_boundary(this->smaller_ext_perimeter_flow.width()); // we need to process each island separately because we might have different // extra perimeters for each one Surfaces all_surfaces = this->slices->surfaces; @@ -1927,10 +2141,17 @@ void PerimeterGenerator::process_classic() ext_perimeter_spacing / 2 : // two or more loops? perimeter_spacing / 2; + // only apply infill overlap if we actually have one perimeter coord_t infill_peri_overlap = 0; + coord_t top_infill_peri_overlap = 0; if (inset > 0) { - infill_peri_overlap = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset + solid_infill_spacing / 2)))); + if(this->layer_id == 0 || this->upper_slices == nullptr){ + infill_peri_overlap = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset + solid_infill_spacing / 2)))); + }else{ + infill_peri_overlap = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset + solid_infill_spacing / 2)))); + top_infill_peri_overlap = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset + solid_infill_spacing / 2)))); + } inset -= infill_peri_overlap; } // simplify infill contours according to resolution @@ -1949,7 +2170,7 @@ void PerimeterGenerator::process_classic() //if any top_fills, grow them by ext_perimeter_spacing/2 to have the real un-anchored fill ExPolygons top_infill_exp = intersection_ex(fill_clip, offset_ex(top_fills, double(ext_perimeter_spacing / 2))); if (!top_fills.empty()) { - infill_exp = union_ex(infill_exp, offset_ex(top_infill_exp, double(infill_peri_overlap))); + infill_exp = union_ex(infill_exp, offset_ex(top_infill_exp, double(top_infill_peri_overlap))); } this->fill_surfaces->append(infill_exp, stInternal); @@ -2655,8 +2876,14 @@ ExPolygons infill_contour = union_ex(wallToolPaths.getInnerContour()); ext_perimeter_spacing : // two or more loops? perimeter_spacing; - - inset = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset)))); + coord_t top_inset = inset; + + top_inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); + if(is_topmost_layer || is_bottom_layer) + inset = coord_t(scale_(this->config->top_bottom_infill_wall_overlap.get_abs_value(unscale(inset)))); + else + inset = coord_t(scale_(this->config->infill_wall_overlap.get_abs_value(unscale(inset)))); + // simplify infill contours according to resolution Polygons pp; for (ExPolygon& ex : infill_contour) @@ -2671,7 +2898,7 @@ ExPolygons infill_contour = union_ex(wallToolPaths.getInnerContour()); 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))); + infill_exp = union_ex(infill_exp, offset_ex(top_fills, double(top_inset))); } this->fill_surfaces->append(infill_exp, stInternal); @@ -2702,7 +2929,7 @@ bool PerimeterGeneratorLoop::is_internal_contour() const return true; } -std::map PerimeterGenerator::generate_lower_polygons_series(float width) +std::vector PerimeterGenerator::generate_lower_polygons_series(float width) { float nozzle_diameter = print_config->nozzle_diameter.get_at(config->wall_filament - 1); float start_offset = -0.5 * width; @@ -2711,23 +2938,18 @@ std::map PerimeterGenerator::generate_lower_polygons_series(float assert(overhang_sampling_number >= 3); // generate offsets std::vector offset_series; - offset_series.reserve(overhang_sampling_number - 1); - for (int i = 0; i < overhang_sampling_number - 1; i++) { - offset_series.push_back(start_offset + (i + 0.5) * (end_offset - start_offset) / (overhang_sampling_number - 1)); - } - // 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; + offset_series.reserve(2); - std::map lower_polygons_series; + offset_series.push_back(start_offset + 0.5 * (end_offset - start_offset) / (overhang_sampling_number - 1)); + offset_series.push_back(end_offset); + std::vector lower_polygons_series; if (this->lower_slices == NULL) { return lower_polygons_series; } // offset expolygon to generate series of polygons for (int i = 0; i < offset_series.size(); i++) { - lower_polygons_series.insert(std::pair(i, offset(*this->lower_slices, float(scale_(offset_series[i]))))); + lower_polygons_series.emplace_back(offset(*this->lower_slices, float(scale_(offset_series[i])))); } return lower_polygons_series; } diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp index e9da632386..c50f3b7faa 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -34,9 +34,13 @@ public: //BBS Flow smaller_ext_perimeter_flow; - std::map m_lower_polygons_series; - std::map m_external_lower_polygons_series; - std::map m_smaller_external_lower_polygons_series; + std::vector m_lower_polygons_series; + std::vector m_external_lower_polygons_series; + std::vector m_smaller_external_lower_polygons_series; + std::pair m_lower_overhang_dist_boundary; + std::pair m_external_overhang_dist_boundary; + std::pair m_smaller_external_overhang_dist_boundary; + PerimeterGenerator( // Input: @@ -79,10 +83,11 @@ public: Polygons lower_slices_polygons() const { return m_lower_slices_polygons; } private: - std::map generate_lower_polygons_series(float width); + std::vector generate_lower_polygons_series(float width); void split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills, ExPolygons &non_top_polygons, ExPolygons &fill_clip) const; void apply_extra_perimeters(ExPolygons& infill_area); void process_no_bridge(Surfaces& all_surfaces, coord_t perimeter_spacing, coord_t ext_perimeter_width); + std::pair dist_boundary(double width); private: bool m_spiral_vase; diff --git a/src/libslic3r/Point.cpp b/src/libslic3r/Point.cpp index 38c813d098..e06b3d5ca6 100644 --- a/src/libslic3r/Point.cpp +++ b/src/libslic3r/Point.cpp @@ -1,15 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ Copyright (c) 2014 Kamil Kwolek -///|/ Copyright (c) 2013 Jose Luis Perez Diez -///|/ -///|/ ported from lib/Slic3r/Point.pm: -///|/ Copyright (c) Prusa Research 2018 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Point.hpp" #include "Line.hpp" #include "MultiPoint.hpp" @@ -76,9 +64,9 @@ void Point::rotate(double angle, const Point ¢er) */ double Point::ccw(const Point &p1, const Point &p2) const { - static_assert(sizeof(coord_t) == 4, "Point::ccw() requires a 32 bit coord_t"); - return cross2((p2 - p1).cast(), (*this - p1).cast()); -// return cross2((p2 - p1).cast(), (*this - p1).cast()); + // static_assert(sizeof(coord_t) == 4, "Point::ccw() requires a 32 bit coord_t"); + // return cross2((p2 - p1).cast(), (*this - p1).cast()); + return cross2((p2 - p1).cast(), (*this - p1).cast()); } double Point::ccw(const Line &line) const diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index b3498e308d..1c5aa43c09 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Tomáš Mészáros @tamasmeszaros, Vojtěch Král @vojtechkral -///|/ Copyright (c) SuperSlicer 2019 Remi Durand @supermerill -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2016 Mark Walker -///|/ -///|/ ported from lib/Slic3r/Point.pm: -///|/ Copyright (c) Prusa Research 2018 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Point_hpp_ #define slic3r_Point_hpp_ @@ -42,13 +31,14 @@ template using Vec = Mat; // Vector types with a fixed point coordinate base type. using Vec2crd = Eigen::Matrix; using Vec3crd = Eigen::Matrix; -using Vec2i = Eigen::Matrix; -using Vec3i = Eigen::Matrix; -using Vec4i = Eigen::Matrix; +// using Vec2i = Eigen::Matrix; +// using Vec3i = Eigen::Matrix; +// using Vec4i = Eigen::Matrix; using Vec2i32 = Eigen::Matrix; using Vec2i64 = Eigen::Matrix; using Vec3i32 = Eigen::Matrix; using Vec3i64 = Eigen::Matrix; +using Vec4i32 = Eigen::Matrix; // Vector types with a double coordinate base type. using Vec2f = Eigen::Matrix; @@ -185,6 +175,8 @@ public: Point() : Vec2crd(0, 0) {} Point(int32_t x, int32_t y) : Vec2crd(coord_t(x), coord_t(y)) {} Point(int64_t x, int64_t y) : Vec2crd(coord_t(x), coord_t(y)) {} + Point(int64_t x, int32_t y) : Vec2crd(coord_t(x), coord_t(y)) {} + Point(int32_t x, int64_t y) : Vec2crd(coord_t(x), coord_t(y)) {} Point(double x, double y) : Vec2crd(coord_t(std::round(x)), coord_t(std::round(y))) {} Point(const Point &rhs) { *this = rhs; } explicit Point(const Vec2d& rhs) : Vec2crd(coord_t(std::round(rhs.x())), coord_t(std::round(rhs.y()))) {} @@ -652,10 +644,10 @@ namespace boost { namespace polygon { namespace cereal { // template void serialize(Archive& archive, Slic3r::Vec2crd &v) { archive(v.x(), v.y()); } // template void serialize(Archive& archive, Slic3r::Vec3crd &v) { archive(v.x(), v.y(), v.z()); } - template void serialize(Archive& archive, Slic3r::Vec2i &v) { archive(v.x(), v.y()); } - template void serialize(Archive& archive, Slic3r::Vec3i &v) { archive(v.x(), v.y(), v.z()); } -// template void serialize(Archive& archive, Slic3r::Vec2i64 &v) { archive(v.x(), v.y()); } -// template void serialize(Archive& archive, Slic3r::Vec3i64 &v) { archive(v.x(), v.y(), v.z()); } + template void serialize(Archive& archive, Slic3r::Vec2i32 &v) { archive(v.x(), v.y()); } + template void serialize(Archive& archive, Slic3r::Vec3i32 &v) { archive(v.x(), v.y(), v.z()); } + template void serialize(Archive& archive, Slic3r::Vec2i64 &v) { archive(v.x(), v.y()); } + template void serialize(Archive& archive, Slic3r::Vec3i64 &v) { archive(v.x(), v.y(), v.z()); } template void serialize(Archive& archive, Slic3r::Vec2f &v) { archive(v.x(), v.y()); } template void serialize(Archive& archive, Slic3r::Vec3f &v) { archive(v.x(), v.y(), v.z()); } template void serialize(Archive& archive, Slic3r::Vec2d &v) { archive(v.x(), v.y()); } diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index 697def1f5b..5d3d643349 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2013 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ -///|/ ported from lib/Slic3r/Polygon.pm: -///|/ Copyright (c) Prusa Research 2017 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "BoundingBox.hpp" #include "ClipperUtils.hpp" #include "Exception.hpp" diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp index 848e37c0ad..eacf5a6636 100644 --- a/src/libslic3r/Polygon.hpp +++ b/src/libslic3r/Polygon.hpp @@ -1,13 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Oleksandra Iushchenko @YuSanka -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/Polygon.pm: -///|/ Copyright (c) Prusa Research 2017 - 2022 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Polygon_hpp_ #define slic3r_Polygon_hpp_ diff --git a/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp index bab74a93cf..b30564f3c1 100644 --- a/src/libslic3r/Polyline.cpp +++ b/src/libslic3r/Polyline.cpp @@ -1,15 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ -///|/ ported from lib/Slic3r/Polyline.pm: -///|/ Copyright (c) Prusa Research 2018 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "BoundingBox.hpp" #include "Polyline.hpp" #include "Exception.hpp" diff --git a/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp index 6b5479e669..bff65f7a2f 100644 --- a/src/libslic3r/Polyline.hpp +++ b/src/libslic3r/Polyline.hpp @@ -1,13 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Tomáš Mészáros @tamasmeszaros, Pavel Mikuš @Godrak, Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/Polyline.pm: -///|/ Copyright (c) Prusa Research 2018 Vojtěch Bubník @bubnikv -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Polyline_hpp_ #define slic3r_Polyline_hpp_ diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index a9995c15d6..4a2db4c990 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1,11 +1,3 @@ -///|/ Copyright (c) Prusa Research 2017 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2021 Martin Budden -///|/ Copyright (c) 2021 Ilya @xorza -///|/ Copyright (c) 2019 John Drake @foxox -///|/ Copyright (c) 2018 Martin Loidl @LoidlM -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include "Config.hpp" @@ -55,6 +47,7 @@ #include "Utils.hpp" #include "Time.hpp" #include "PlaceholderParser.hpp" +#include "libslic3r/GCode/Thumbnails.hpp" using boost::property_tree::ptree; @@ -772,7 +765,7 @@ static std::vector s_Preset_print_options { "top_shell_layers", "top_shell_thickness", "bottom_shell_layers", "bottom_shell_thickness", "extra_perimeters_on_overhangs", "ensure_vertical_shell_thickness", "reduce_crossing_wall", "detect_thin_wall", "detect_overhang_wall", "overhang_reverse", "overhang_reverse_threshold","overhang_reverse_internal_only", "wall_direction", "seam_position", "staggered_inner_seams", "wall_sequence", "is_infill_first", "sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", - "infill_direction", "counterbore_hole_bridging", + "infill_direction", "solid_infill_direction", "rotate_solid_infill_direction", "counterbore_hole_bridging", "minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target", "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "max_travel_detour_distance", @@ -781,7 +774,7 @@ static std::vector s_Preset_print_options { "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", + "outer_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "skirt_loops", "skirt_speed","min_skirt_length", "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", "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", @@ -793,7 +786,7 @@ static std::vector s_Preset_print_options { "sparse_infill_filament", "solid_infill_filament", "support_filament", "support_interface_filament","support_interface_not_for_body", "ooze_prevention", "standby_temperature_delta", "interface_shells", "line_width", "initial_layer_line_width", "inner_wall_line_width", "outer_wall_line_width", "sparse_infill_line_width", "internal_solid_infill_line_width", - "top_surface_line_width", "support_line_width", "infill_wall_overlap", "bridge_flow", "internal_bridge_flow", + "top_surface_line_width", "support_line_width", "infill_wall_overlap","top_bottom_infill_wall_overlap", "bridge_flow", "internal_bridge_flow", "elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", "prime_tower_width", "prime_tower_brim_width", "prime_volume", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", @@ -801,7 +794,7 @@ static std::vector s_Preset_print_options { "tree_support_branch_angle", "tree_support_angle_slow", "tree_support_wall_count", "tree_support_top_rate", "tree_support_branch_distance", "tree_support_tip_diameter", "tree_support_branch_diameter", "tree_support_branch_diameter_angle", "tree_support_branch_diameter_double_wall", "detect_narrow_internal_solid_infill", - "gcode_add_line_number", "enable_arc_fitting", "infill_combination", /*"adaptive_layer_height",*/ + "gcode_add_line_number", "enable_arc_fitting", "precise_z_height", "infill_combination", /*"adaptive_layer_height",*/ "support_bottom_interface_spacing", "enable_overhang_speed", "slowdown_for_curled_perimeters", "overhang_1_4_speed", "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed", "initial_layer_infill_speed", "only_one_wall_top", "timelapse_type", @@ -816,7 +809,7 @@ static std::vector s_Preset_print_options { "tree_support_brim_width", "gcode_comments", "gcode_label_objects", "initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max","initial_layer_min_bead_width", "make_overhang_printable", "make_overhang_printable_angle", "make_overhang_printable_hole_size" ,"notes", - "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_extruder", "wiping_volumes_extruders","wipe_tower_bridging", "single_extruder_multi_material_priming", + "wipe_tower_cone_angle", "wipe_tower_extra_spacing","wipe_tower_max_purge_speed", "wipe_tower_extruder", "wiping_volumes_extruders","wipe_tower_bridging", "single_extruder_multi_material_priming", "wipe_tower_rotation_angle", "tree_support_branch_distance_organic", "tree_support_branch_diameter_organic", "tree_support_branch_angle_organic", "hole_to_polyhole", "hole_to_polyhole_threshold", "hole_to_polyhole_twisted", "mmu_segmented_region_max_width", "mmu_segmented_region_interlocking_depth", "small_area_infill_flow_compensation", "small_area_infill_flow_compensation_model", @@ -832,7 +825,7 @@ static std::vector s_Preset_filament_options { "cool_plate_temp", "eng_plate_temp", "hot_plate_temp", "textured_plate_temp", "cool_plate_temp_initial_layer", "eng_plate_temp_initial_layer", "hot_plate_temp_initial_layer","textured_plate_temp_initial_layer", // "bed_type", //BBS:temperature_vitrification - "temperature_vitrification", "reduce_fan_stop_start_freq", "slow_down_for_layer_cooling", "fan_min_speed", + "temperature_vitrification", "reduce_fan_stop_start_freq","dont_slow_down_outer_wall", "slow_down_for_layer_cooling", "fan_min_speed", "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", //exhaust fan control @@ -850,7 +843,8 @@ static std::vector s_Preset_filament_options { "filament_loading_speed", "filament_loading_speed_start", "filament_load_time", "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", - "filament_multitool_ramming", "filament_multitool_ramming_volume", "filament_multitool_ramming_flow", "activate_chamber_temp_control" + "filament_multitool_ramming", "filament_multitool_ramming_volume", "filament_multitool_ramming_flow", "activate_chamber_temp_control", + "filament_long_retractions_when_cut","filament_retraction_distances_when_cut" }; static std::vector s_Preset_machine_limits_options { @@ -867,6 +861,7 @@ static std::vector s_Preset_printer_options { "fan_kickstart", "fan_speedup_time", "fan_speedup_overhangs", "single_extruder_multi_material", "manual_filament_change", "machine_start_gcode", "machine_end_gcode", "before_layer_change_gcode", "printing_by_object_gcode", "layer_change_gcode", "time_lapse_gcode", "change_filament_gcode", "change_extrusion_role_gcode", "printer_model", "printer_variant", "printable_height", "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", + "nozzle_height", "default_print_profile", "inherits", "silent_mode", // BBS @@ -882,7 +877,7 @@ static std::vector s_Preset_printer_options { "cooling_tube_retraction", "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming", "z_offset", - "disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "support_multi_bed_types","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin" + "disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "support_multi_bed_types","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut" }; static std::vector s_Preset_sla_print_options { @@ -1136,6 +1131,8 @@ void PresetCollection::load_presets( preset.filament_id = key_values[BBL_JSON_KEY_FILAMENT_ID]; if (key_values.find(BBL_JSON_KEY_IS_CUSTOM) != key_values.end()) preset.custom_defined = key_values[BBL_JSON_KEY_IS_CUSTOM]; + if (key_values.find(BBL_JSON_KEY_DESCRIPTION) != key_values.end()) + preset.description = key_values[BBL_JSON_KEY_DESCRIPTION]; if (key_values.find("instantiation") != key_values.end()) preset.is_visible = key_values["instantiation"] != "false"; @@ -1184,6 +1181,8 @@ void PresetCollection::load_presets( preset.setting_id.clear(); //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", preset type %1%, name %2%, path %3%, is_system %4%, is_default %5% is_visible %6%")%Preset::get_type_string(m_type) %preset.name %preset.file %preset.is_system %preset.is_default %preset.is_visible; + // add alias for custom filament preset + set_custom_preset_alias(preset); } catch (const std::ifstream::failure &err) { ++m_errors; BOOST_LOG_TRIVIAL(error) << boost::format("The user-config cannot be loaded: %1%. Reason: %2%")%preset.file %err.what(); @@ -2139,6 +2138,7 @@ bool PresetCollection::clone_presets(std::vector const &presets, auto old_name = this->get_edited_preset().name; for (auto preset : new_presets) { preset.alias.clear(); + set_custom_preset_alias(preset); preset.base_id.clear(); auto it = this->find_preset_internal(preset.name); assert((it == m_presets.end() || it->name != preset.name) || force_rewritten); @@ -2200,6 +2200,10 @@ std::map> PresetCollection::get_filamen { std::map> filament_presets; for (auto &preset : m_presets) { + if (preset.is_user()) { + if (preset.inherits() == "") { filament_presets[preset.filament_id].push_back(&preset); } + continue; + } if (get_preset_base(preset) == &preset) { filament_presets[preset.filament_id].push_back(&preset); } } return filament_presets; @@ -2456,10 +2460,13 @@ const std::string& PresetCollection::get_preset_name_by_alias(const std::string& auto it = Slic3r::lower_bound_by_predicate(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [&alias](auto &l){ return l.first < alias; }); // Continue over all profile names with the same alias. it != m_map_alias_to_profile_name.end() && it->first == alias; ++ it) - if (auto it_preset = this->find_preset_internal(it->second); - it_preset != m_presets.end() && it_preset->name == it->second && + for (const std::string &preset_name : it->second) { + if (auto it_preset = this->find_preset_internal(preset_name); + it_preset != m_presets.end() && it_preset->name == preset_name && it_preset->is_visible && (it_preset->is_compatible || size_t(it_preset - m_presets.begin()) == m_idx_selected)) return it_preset->name; + } + return alias; } @@ -2471,6 +2478,28 @@ const std::string* PresetCollection::get_preset_name_renamed(const std::string & return nullptr; } +bool PresetCollection::is_alias_exist(const std::string &alias, Preset* preset) +{ + auto it = m_map_alias_to_profile_name.find(alias); + if (m_map_alias_to_profile_name.end() == it) return false; + if (!preset) return true; + + auto compatible_printers = dynamic_cast(preset->config.option("compatible_printers")); + if (compatible_printers == nullptr) return true; + + for (const std::string &printer_name : compatible_printers->values) { + auto printer_iter = m_printer_hold_alias.find(printer_name); + if (m_printer_hold_alias.end() != printer_iter) { + auto alias_iter = m_printer_hold_alias[printer_name].find(alias); + if (m_printer_hold_alias[printer_name].end() != alias_iter) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << " The alias already exists: " << alias << " and the preset name: " << preset->name; + return true; + } + } + } + return false; +} + const std::string& PresetCollection::get_suffix_modified() { return g_suffix_modified; } @@ -2601,6 +2630,16 @@ inline t_config_option_keys deep_diff(const ConfigBase &config_this, const Confi } else if (opt_key == "default_filament_profile") { // Ignore this field, it is not presented to the user, therefore showing a "modified" flag for this parameter does not help. // Also the length of this field may differ, which may lead to a crash if the block below is used. + } + else if (opt_key == "thumbnails") { + // "thumbnails" can not contain extensions in old config but they are valid and use PNG extension by default + // So, check if "thumbnails" is really changed + // We will compare full thumbnails instead of exactly config values + auto [thumbnails, er] = GCodeThumbnails::make_and_check_thumbnail_list(config_this); + auto [thumbnails_new, er_new] = GCodeThumbnails::make_and_check_thumbnail_list(config_other); + if (thumbnails != thumbnails_new || er != er_new) + // if those strings are actually the same, erase them from the list of dirty oprions + diff.emplace_back(opt_key); } else { switch (other_opt->type()) { case coInts: add_correct_opts_to_diff(opt_key, diff, config_other, config_this); break; @@ -2803,9 +2842,11 @@ void PresetCollection::update_vendor_ptrs_after_copy(const VendorMap &new_vendor void PresetCollection::update_map_alias_to_profile_name() { m_map_alias_to_profile_name.clear(); - for (const Preset &preset : m_presets) - m_map_alias_to_profile_name.emplace_back(preset.alias, preset.name); - std::sort(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [](auto &l, auto &r) { return l.first < r.first; }); + for (const Preset &preset : m_presets) { + m_map_alias_to_profile_name[preset.alias].push_back(preset.name); + } + // now m_map_alias_to_profile_name is map, not need sort + //std::sort(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [](auto &l, auto &r) { return l.first < r.first; }); } void PresetCollection::update_map_system_profile_renamed() @@ -2823,6 +2864,47 @@ void PresetCollection::update_map_system_profile_renamed() } } +void PresetCollection::set_custom_preset_alias(Preset &preset) +{ + if (m_type == Preset::Type::TYPE_FILAMENT && preset.config.has(BBL_JSON_KEY_INHERITS) && preset.config.option(BBL_JSON_KEY_INHERITS)->value.empty()) { + std::string alias_name; + std::string preset_name = preset.name; + if (alias_name.empty()) { + size_t end_pos = preset_name.find_first_of("@"); + if (end_pos != std::string::npos) { + alias_name = preset_name.substr(0, end_pos); + boost::trim_right(alias_name); + } + } + if (alias_name.empty() || is_alias_exist(alias_name, &preset)) + preset.alias = ""; + else { + preset.alias = std::move(alias_name); + m_map_alias_to_profile_name[preset.alias].push_back(preset.name); + set_printer_hold_alias(preset.alias, preset); + } + } +} + +void PresetCollection::set_printer_hold_alias(const std::string &alias, Preset &preset) +{ + auto compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); + if (compatible_printers == nullptr) return; + for (const std::string &printer_name : compatible_printers->values) { + auto printer_iter = m_printer_hold_alias.find(printer_name); + if (m_printer_hold_alias.end() == printer_iter) { + m_printer_hold_alias[printer_name].insert(alias); + } else { + auto alias_iter = m_printer_hold_alias[printer_name].find(alias); + if (m_printer_hold_alias[printer_name].end() == alias_iter) { + m_printer_hold_alias[printer_name].insert(alias); + } else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << printer_name << "already has alias: " << alias << " and the preset name: " << preset.name; + } + } + } +} + std::string PresetCollection::name() const { switch (this->type()) { diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index b03ce605e3..659fc0bf9e 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -240,6 +241,7 @@ public: std::string base_id; // base id of preset std::string sync_info; // enum: "delete", "create", "update", "" std::string custom_defined; // enum: "1", "0", "" + std::string description; // long long updated_time{0}; //last updated time std::map key_values; @@ -554,6 +556,8 @@ public: const std::string& get_preset_name_by_alias(const std::string& alias) const; const std::string* get_preset_name_renamed(const std::string &old_name) const; + bool is_alias_exist(const std::string &alias, Preset* preset = nullptr); + void set_printer_hold_alias(const std::string &alias, Preset &preset); // used to update preset_choice from Tab const std::deque& get_presets() const { return m_presets; } @@ -705,6 +709,8 @@ protected: // Update m_map_system_profile_renamed from loaded system profiles. void update_map_system_profile_renamed(); + void set_custom_preset_alias(Preset &preset); + private: // Find a preset position in the sorted list of presets. // The "-- default -- " preset is always the first, so it needs @@ -748,7 +754,8 @@ private: // so that the addresses of the presets don't change during resizing of the container. std::deque m_presets; // System profiles may have aliases. Map to the full profile name. - std::vector> m_map_alias_to_profile_name; + std::map> m_map_alias_to_profile_name; + std::unordered_map> m_printer_hold_alias; // Map from old system profile name to a current system profile name. std::map m_map_system_profile_renamed; // Initially this preset contains a copy of the selected preset. Later on, this copy may be modified by the user. diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index f46e0aebcb..c4f58e3271 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -351,6 +351,20 @@ bool PresetBundle::use_bbl_network() return use_bbl_network; } +bool PresetBundle::use_bbl_device_tab() { + if (!is_bbl_vendor()) { + return false; + } + + if (use_bbl_network()) { + return true; + } + + const auto cfg = printers.get_edited_preset().config; + // Use bbl device tab if printhost webui url is not set + return cfg.opt_string("print_host_webui").empty(); +} + //BBS: load project embedded presets PresetsConfigSubstitutions PresetBundle::load_project_embedded_presets(std::vector project_presets, ForwardCompatibilitySubstitutionRule substitution_rule) { @@ -1684,6 +1698,7 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p // If executed due to a Config Wizard update, preferred_printer contains the first newly installed printer, otherwise nullptr. 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); + CNumericLocalesSetter locales_setter; // Orca: load from orca_presets // const auto os_presets = config.get_machine_settings(initial_printer_profile_name); @@ -1895,7 +1910,6 @@ unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns) if (filament_presets.size() < this->filament_presets.size()) { filament_presets.push_back(this->filament_presets[filament_presets.size()]); filament_colors.push_back(filament_color); - ams_multi_color_filment.push_back(filament_multi_color); ++unknowns; continue; } @@ -1945,6 +1959,97 @@ void PresetBundle::set_calibrate_printer(std::string name) } } +std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str) +{ + std::set printer_names; + if ("0.0" == nozzle_diameter_str || nozzle_diameter_str.empty()) { + nozzle_diameter_str = "0.4"; + } + std::ostringstream stream; + + for (auto printer_it = this->printers.begin(); printer_it != this->printers.end(); printer_it++) { + if (!printer_it->is_system) continue; + + ConfigOption * printer_model_opt = printer_it->config.option("printer_model"); + ConfigOptionString *printer_model_str = dynamic_cast(printer_model_opt); + if (!printer_model_str) continue; + + // use printer_model as printer type + if (printer_model_str->value != printer_type) continue; + + if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) printer_names.insert(printer_it->name); + } + + //assert(printer_names.size() == 1); + + for (auto& printer_name : printer_names) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " printer name: " << printer_name; + } + + return printer_names; +} + +bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + const std::string &printer_type, std::string& nozzle_diameter_str, std::string &setting_id, std::string &tag_uid, std::string &nozzle_temp_min, std::string &nozzle_temp_max, std::string& preset_setting_id) +{ + bool is_equation = true; + + std::map> filament_list = filaments.get_filament_presets(); + std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); + + for (const Preset *preset : filament_list.find(setting_id)->second) { + if (tag_uid == "0" || (tag_uid.size() == 16 && tag_uid.substr(12, 2) == "01")) continue; + if (preset && !preset->is_user()) continue; + ConfigOption * printer_opt = const_cast(preset)->config.option("compatible_printers"); + ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); + bool compared = false; + for (const std::string &printer_str : printer_strs->values) { + if (printer_names.find(printer_str) != printer_names.end()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "nozzle temp matching: preset name: " << preset->name << " printer name: " << printer_str; + // Compare only once + if (!compared) { + compared = true; + bool min_temp_equation = false, max_temp_equation = false; + int min_nozzle_temp = std::stoi(nozzle_temp_min); + int max_nozzle_temp = std::stoi(nozzle_temp_max); + ConfigOption *opt_min = const_cast(preset)->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); + min_nozzle_temp = opt_min_ints->get_at(0); + if (std::to_string(min_nozzle_temp) == nozzle_temp_min) + min_temp_equation = true; + else { + BOOST_LOG_TRIVIAL(info) << "tray min temp: " << nozzle_temp_min << " preset min temp: " << min_nozzle_temp; + nozzle_temp_min = std::to_string(min_nozzle_temp); + } + } + ConfigOption *opt_max = const_cast(preset)->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); + max_nozzle_temp = opt_max_ints->get_at(0); + if (std::to_string(max_nozzle_temp) == nozzle_temp_max) + max_temp_equation = true; + else { + BOOST_LOG_TRIVIAL(info) << "tray max temp: " << nozzle_temp_max << " preset min temp: " << max_nozzle_temp; + nozzle_temp_max = std::to_string(max_nozzle_temp); + } + } + if (min_temp_equation && max_temp_equation) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "Determine if the temperature has changed: no changed"; + } else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "Determine if the temperature has changed: has changed"; + preset_setting_id = preset->setting_id; + is_equation = false; + } + } else { + assert(false); + } + } + } + } + return is_equation; +} + //BBS: check whether this is the only edited filament bool PresetBundle::is_the_only_edited_filament(unsigned int filament_index) { @@ -3374,7 +3479,7 @@ std::pair PresetBundle::load_vendor_configs_ // Load the print, filament or printer preset. std::string preset_name; DynamicPrintConfig config; - std::string alias_name, inherits, instantiation, setting_id, filament_id; + std::string alias_name, inherits, description, instantiation, setting_id, filament_id; std::vector renamed_from; const DynamicPrintConfig* default_config = nullptr; std::string reason; @@ -3391,7 +3496,8 @@ std::pair PresetBundle::load_vendor_configs_ return reason; } preset_name = key_values[BBL_JSON_KEY_NAME]; - instantiation = key_values[BBL_JSON_KEY_INSTANTIATION]; + description = key_values[BBL_JSON_KEY_DESCRIPTION]; + instantiation = key_values[BBL_JSON_KEY_INSTANTIATION]; auto setting_it = key_values.find(BBL_JSON_KEY_SETTING_ID); if (setting_it != key_values.end()) setting_id = setting_it->second; @@ -3514,6 +3620,7 @@ std::pair PresetBundle::load_vendor_configs_ loaded.is_system = true; loaded.vendor = current_vendor_profile; loaded.version = current_vendor_profile->config_version; + loaded.description = description; loaded.setting_id = setting_id; loaded.filament_id = filament_id; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << loaded.name << " load filament_id: " << filament_id; @@ -3544,8 +3651,10 @@ std::pair PresetBundle::load_vendor_configs_ } if (alias_name.empty()) loaded.alias = preset_name; - else + else { loaded.alias = std::move(alias_name); + filaments.set_printer_hold_alias(loaded.alias, loaded); + } loaded.renamed_from = std::move(renamed_from); if (! substitution_context.empty()) substitutions.push_back({ diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index c54ddda576..976e654074 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2017 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, David Kocík @kocikdav, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2019 John Drake @foxox -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_PresetBundle_hpp_ #define slic3r_PresetBundle_hpp_ @@ -97,7 +92,10 @@ public: VendorType get_current_vendor_type(); // Vendor related handy functions bool is_bbl_vendor() { return get_current_vendor_type() == VendorType::Marlin_BBL; } + // Whether using bbl network for print upload bool use_bbl_network(); + // Whether using bbl's device tab + bool use_bbl_device_tab(); //BBS: project embedded preset logic PresetsConfigSubstitutions load_project_embedded_presets(std::vector project_presets, ForwardCompatibilitySubstitutionRule substitution_rule); @@ -125,6 +123,15 @@ public: void set_is_validation_mode(bool mode) { validation_mode = mode; } void set_vendor_to_validate(std::string vendor) { vendor_to_validate = vendor; } + std::set get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str); + bool check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray(const std::string &printer_type, + std::string & nozzle_diameter_str, + std::string & setting_id, + std::string & tag_uid, + std::string & nozzle_temp_min, + std::string & nozzle_temp_max, + std::string & preset_setting_id); + PresetCollection prints; PresetCollection sla_prints; PresetCollection filaments; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index a4756a6e38..5d19c04279 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1,25 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Oleksandra Iushchenko @YuSanka, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Roman Beránek @zavorka, David Kocík @kocikdav -///|/ Copyright (c) BambuStudio 2023 manch1n @manch1n -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ Copyright (c) 2021 Martin Budden -///|/ Copyright (c) 2020 Paul Arden @ardenpm -///|/ Copyright (c) 2019 Thomas Moore -///|/ Copyright (c) 2019 Bryan Smith -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ -///|/ ported from lib/Slic3r/Print.pm: -///|/ Copyright (c) Prusa Research 2016 - 2018 Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) Slic3r 2011 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 - 2013 Mark Hindess -///|/ Copyright (c) 2013 Devin Grady -///|/ Copyright (c) 2012 - 2013 Mike Sheldrake @mesheldrake -///|/ Copyright (c) 2012 Henrik Brix Andersen @henrikbrixandersen -///|/ Copyright (c) 2012 Michael Moon -///|/ Copyright (c) 2011 Richard Goodwin -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Config.hpp" #include "Exception.hpp" #include "Print.hpp" @@ -76,7 +54,8 @@ PrintRegion::PrintRegion(const PrintRegionConfig &config) : PrintRegion(config, PrintRegion::PrintRegion(PrintRegionConfig &&config) : PrintRegion(std::move(config), config.hash()) {} //BBS -float Print::min_skirt_length = 0; +// ORCA: Now this is a parameter +//float Print::min_skirt_length = 0; void Print::clear() { @@ -125,10 +104,12 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid", "extruder_clearance_radius", + "nozzle_height", "extruder_colour", "extruder_offset", "filament_flow_ratio", "reduce_fan_stop_start_freq", + "dont_slow_down_outer_wall", "fan_cooling_layer_time", "full_fan_speed_layer", "fan_kickstart", @@ -213,6 +194,12 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "activate_chamber_temp_control", "manual_filament_change", "disable_m73", + "use_firmware_retraction", + "enable_long_retraction_when_cut", + "long_retractions_when_cut", + "retraction_distances_when_cut", + "filament_long_retractions_when_cut", + "filament_retraction_distances_when_cut" }; static std::unordered_set steps_ignore; @@ -232,6 +219,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n opt_key == "skirt_loops" || opt_key == "skirt_speed" || opt_key == "skirt_height" + || opt_key == "min_skirt_length" || opt_key == "draft_shield" || opt_key == "skirt_distance" || opt_key == "ooze_prevention" @@ -244,6 +232,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "nozzle_diameter" || opt_key == "filament_shrink" || opt_key == "resolution" + || opt_key == "precise_z_height" // 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. // Therefore toggling the Spiral Vase on / off requires complete reslicing. @@ -280,6 +269,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "prime_tower_width" || opt_key == "prime_tower_brim_width" || opt_key == "first_layer_print_sequence" + || opt_key == "other_layers_print_sequence" + || opt_key == "other_layers_print_sequence_nums" || opt_key == "wipe_tower_bridging" || opt_key == "wipe_tower_no_sparse_layers" || opt_key == "flush_volumes_matrix" @@ -294,6 +285,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "slow_down_layers" || opt_key == "wipe_tower_cone_angle" || opt_key == "wipe_tower_extra_spacing" + || opt_key == "wipe_tower_max_purge_speed" || opt_key == "wipe_tower_extruder" || opt_key == "wiping_volumes_extruders" || opt_key == "enable_filament_ramming" @@ -460,8 +452,8 @@ std::vector Print::extruders(bool conside_custom_gcode) const if (conside_custom_gcode) { //BBS int num_extruders = m_config.filament_colour.size(); - for (auto plate_data : m_model.plates_custom_gcodes) { - for (auto item : plate_data.second.gcodes) { + if (m_model.plates_custom_gcodes.find(m_model.curr_plate_index) != m_model.plates_custom_gcodes.end()) { + for (auto item : m_model.plates_custom_gcodes.at(m_model.curr_plate_index).gcodes) { if (item.type == CustomGCode::Type::ToolChange && item.extruder <= num_extruders) extruders.push_back((unsigned int)(item.extruder - 1)); } @@ -576,6 +568,11 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print polygons->clear(); std::vector intersecting_idxs; + bool all_objects_are_short = print.is_all_objects_are_short(); + // 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 obj_distance = all_objects_are_short ? scale_(0.5*MAX_OUTER_NOZZLE_DIAMETER-0.1) : scale_(0.5*print.config().extruder_clearance_radius.value-0.1); + for (const PrintObject *print_object : print.objects()) { assert(! print_object->model_object()->instances.empty()); assert(! print_object->instances().empty()); @@ -601,11 +598,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print // Now we check that no instance of convex_hull intersects any of the previously checked object instances. for (const PrintInstance &instance : print_object->instances()) { Polygon convex_hull_no_offset = convex_hull0, convex_hull; - 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 - 0.1)), - jtRound, scale_(0.1)); + auto tmp = offset(convex_hull_no_offset, obj_distance, jtRound, scale_(0.1)); if (!tmp.empty()) { // tmp may be empty due to clipper's bug, see STUDIO-2452 convex_hull = tmp.front(); // instance.shift is a position of a centered object, while model object may not be centered. @@ -680,12 +673,12 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print float unsafe_dist = scale_(print_config.extruder_clearance_max_radius.value - print_config.extruder_clearance_radius.value); struct VecHash { - size_t operator()(const Vec2i &n1) const + size_t operator()(const Vec2i32 &n1) const { return std::hash()(int(n1(0) * 100 + 100)) + std::hash()(int(n1(1) * 100 + 100)) * 101; } }; - std::unordered_set left_right_pair; // pairs in this vector must strictly obey the left-right order + std::unordered_set left_right_pair; // pairs in this vector must strictly obey the left-right order for (size_t i = 0; i < print_instance_with_bounding_box.size();i++) { auto &inst = print_instance_with_bounding_box[i]; inst.index = i; @@ -840,7 +833,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print break; } } - if (height < inst->print_object->height()) + if (height < inst->print_object->max_z()) too_tall_instances[inst] = std::make_pair(print_instance_with_bounding_box[k].hull_polygon, unscaled(height)); } @@ -1088,7 +1081,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* if (m_config.spiral_mode) { size_t total_copies_count = 0; - for (const PrintObject *object : m_objects) + for (const PrintObject* object : m_objects) total_copies_count += object->instances().size(); // #4043 if (total_copies_count > 1 && m_config.print_sequence != PrintSequence::ByObject) @@ -1117,7 +1110,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* for (size_t print_object_idx = 0; print_object_idx < m_objects.size(); ++ print_object_idx) { const PrintObject &print_object = *m_objects[print_object_idx]; //FIXME It is quite expensive to generate object layers just to get the print height! - if (auto layers = generate_object_layers(print_object.slicing_parameters(), layer_height_profile(print_object_idx)); + if (auto layers = generate_object_layers(print_object.slicing_parameters(), layer_height_profile(print_object_idx), print_object.config().precise_z_height.value); ! layers.empty() && layers.back() > this->config().printable_height + EPSILON) { return // Test whether the last slicing plane is below or above the print volume. @@ -1220,6 +1213,13 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* // BBS: remove obsolete logics and _L() if (has_custom_layering) { + std::vector> layer_z_series; + layer_z_series.assign(m_objects.size(), std::vector()); + + for (size_t idx_object = 0; idx_object < m_objects.size(); ++idx_object) { + layer_z_series[idx_object] = generate_object_layers(m_objects[idx_object]->slicing_parameters(), layer_height_profiles[idx_object], m_objects[idx_object]->config().precise_z_height.value); + } + for (size_t idx_object = 0; idx_object < m_objects.size(); ++idx_object) { if (idx_object == tallest_object_idx) continue; // Check that the layer height profiles are equal. This will happen when one object is @@ -2312,15 +2312,15 @@ void Print::_make_skirt() ))); eloop.paths.back().polyline = loop.split_at_first_point(); m_skirt.append(eloop); - if (Print::min_skirt_length > 0) { + if (m_config.min_skirt_length.value > 0) { // The skirt length is limited. Sum the total amount of filament length extruded, in mm. extruded_length[extruder_idx] += unscale(loop.length()) * extruders_e_per_mm[extruder_idx]; - if (extruded_length[extruder_idx] < Print::min_skirt_length) { + if (extruded_length[extruder_idx] < m_config.min_skirt_length.value) { // Not extruded enough yet with the current extruder. Add another loop. if (i == 1) ++ i; } else { - assert(extruded_length[extruder_idx] >= Print::min_skirt_length); + assert(extruded_length[extruder_idx] >= m_config.min_skirt_length.value); // Enough extruded with the current extruder. Extrude with the next one, // until the prescribed number of skirt loops is extruded. if (extruder_idx + 1 < extruders.size()) @@ -2452,9 +2452,9 @@ FilamentTempType Print::get_filament_temp_type(const std::string& filament_type) catch (const json::parse_error& err){ in.close(); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file_path.string() << " got a nlohmann::detail::parse_error, reason = " << err.what(); - filament_temp_type_map[HighTempFilamentStr] = {"ABS","ASA","PC","PA","PA-CF","PA6-CF","PET-CF","PPS","PPS-CF","PPA-GF","PPA-CF"}; - filament_temp_type_map[LowTempFilamentStr] = {"PLA","TPU","PLA-CF","PLA-AERO","PVA"}; - filament_temp_type_map[HighLowCompatibleFilamentStr] = { "HIPS","PETG" }; + filament_temp_type_map[HighTempFilamentStr] = {"ABS","ASA","PC","PA","PA-CF","PA-GF","PA6-CF","PET-CF","PPS","PPS-CF","PPA-GF","PPA-CF","ABS-Aero","ABS-GF"}; + filament_temp_type_map[LowTempFilamentStr] = {"PLA","TPU","PLA-CF","PLA-AERO","PVA","BVOH"}; + filament_temp_type_map[HighLowCompatibleFilamentStr] = { "HIPS","PETG","PCTG","PE","PP","EVA","PE-CF","PP-CF","PP-GF","PHA"}; } } @@ -2472,7 +2472,8 @@ int Print::get_hrc_by_nozzle_type(const NozzleType&type) static std::mapnozzle_type_to_hrc; if (nozzle_type_to_hrc.empty()) { fs::path file_path = fs::path(resources_dir()) / "info" / "nozzle_info.json"; - std::ifstream in(file_path.string()); + boost::nowide::ifstream in(file_path.string()); + //std::ifstream in(file_path.string()); json j; try { j = json::parse(in); @@ -2819,10 +2820,30 @@ std::string Print::output_filename(const std::string &filename_base) const DynamicConfig config = this->finished() ? this->print_statistics().config() : this->print_statistics().placeholders(); config.set_key_value("num_filaments", new ConfigOptionInt((int)m_config.nozzle_diameter.size())); config.set_key_value("plate_name", new ConfigOptionString(get_plate_name())); + config.set_key_value("plate_number", new ConfigOptionString(get_plate_number_formatted())); + config.set_key_value("model_name", new ConfigOptionString(get_model_name())); return this->PrintBase::output_filename(m_config.filename_format.value, ".gcode", filename_base, &config); } +std::string Print::get_model_name() const +{ + if (model().model_info != nullptr) + { + return model().model_info->model_name; + } else { + return ""; + } +} + +std::string Print::get_plate_number_formatted() const +{ + std::string plate_number = std::to_string(get_plate_index() + 1); + static const size_t n_zero = 2; + + return std::string(n_zero - std::min(n_zero, plate_number.length()), '0') + plate_number; +} + //BBS: add gcode file preload logic void Print::set_gcode_file_ready() { diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 231761f957..bd7b867b99 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -38,6 +38,8 @@ class SupportLayer; class TreeSupportData; class TreeSupport; +#define MARGIN_HEIGHT 1.5 +#define MAX_OUTER_NOZZLE_DIAMETER 4 // BBS: move from PrintObjectSlice.cpp struct VolumeSlices { @@ -331,6 +333,7 @@ public: // Height is used for slicing, for sorting the objects by height for sequential printing and for checking vertical clearence in sequential print mode. // The height is snug. coord_t height() const { return m_size.z(); } + double max_z() const { return m_max_z; } // Centering offset of the sliced mesh from the scaled and rotated mesh of the model. const Point& center_offset() const { return m_center_offset; } @@ -505,6 +508,7 @@ private: // XYZ in scaled coordinates Vec3crd m_size; + double m_max_z; PrintObjectConfig m_config; // Translation in Z + Rotation + Scaling / Mirroring. Transform3d m_trafo = Transform3d::Identity(); @@ -899,6 +903,9 @@ public: std::string output_filename(const std::string &filename_base = std::string()) const override; + std::string get_model_name() const; + std::string get_plate_number_formatted() const; + size_t num_print_regions() const throw() { return m_print_regions.size(); } const PrintRegion& get_print_region(size_t idx) const { return *m_print_regions[idx]; } const ToolOrdering& get_tool_ordering() const { return m_wipe_tower_data.tool_ordering; } @@ -954,7 +961,11 @@ public: // Unset types are just ignored. static int get_compatible_filament_type(const std::set& types); - protected: + bool is_all_objects_are_short() const { + return std::all_of(this->objects().begin(), this->objects().end(), [&](PrintObject* obj) { return obj->height() < scale_(this->config().nozzle_height.value); }); + } + +protected: // Invalidates the step, and its depending steps in Print. bool invalidate_step(PrintStep step); @@ -1019,7 +1030,8 @@ private: public: //BBS: this was a print config and now seems to be useless so we move it to here - static float min_skirt_length; + // ORCA: parameter below is now back to being a user option (min_skirt_length) + //static float min_skirt_length; }; diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index 50fdee7cb9..b6fd173c03 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -235,11 +235,16 @@ static t_config_option_keys print_config_diffs( bool overriden = opt_new->overriden_by(opt_new_filament); if (overriden || *opt_old != *opt_new) { auto opt_copy = opt_new->clone(); - opt_copy->apply_override(opt_new_filament); + if (!((opt_key == "long_retractions_when_cut" || opt_key == "retraction_distances_when_cut") + && new_full_config.option("enable_long_retraction_when_cut")->value != LongRectrationLevel::EnableFilament)) // ugly code, remove it later if firmware supports + opt_copy->apply_override(opt_new_filament); bool changed = *opt_old != *opt_copy; if (changed) print_diff.emplace_back(opt_key); if (changed || overriden) { + if ((opt_key == "long_retractions_when_cut" || opt_key == "retraction_distances_when_cut") + && new_full_config.option("enable_long_retraction_when_cut")->value != LongRectrationLevel::EnableFilament) + continue; // filament_overrides will be applied to the placeholder parser, which layers these parameters over full_print_config. filament_overrides.set_key_value(opt_key, opt_copy); } else diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2edde94c42..8669592f82 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1,29 +1,9 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros, Oleksandra Iushchenko @YuSanka, Pavel Mikuš @Godrak, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2023 Pedro Lamas @PedroLamas -///|/ Copyright (c) 2023 Mimoja @Mimoja -///|/ Copyright (c) 2020 - 2021 Sergey Kovalev @RandoMan70 -///|/ Copyright (c) 2021 Niall Sheridan @nsheridan -///|/ Copyright (c) 2021 Martin Budden -///|/ Copyright (c) 2021 Ilya @xorza -///|/ Copyright (c) 2020 Paul Arden @ardenpm -///|/ Copyright (c) 2020 rongith -///|/ Copyright (c) 2019 Spencer Owen @spuder -///|/ Copyright (c) 2019 Stephan Reichhelm @stephanr -///|/ Copyright (c) 2018 Martin Loidl @LoidlM -///|/ Copyright (c) SuperSlicer 2018 Remi Durand @supermerill -///|/ Copyright (c) 2016 - 2017 Joseph Lenox @lordofhyphens -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2016 Vanessa Ezekowitz @VanessaE -///|/ Copyright (c) 2015 Alexander Rössler @machinekoder -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "PrintConfig.hpp" #include "ClipperUtils.hpp" #include "Config.hpp" #include "I18N.hpp" +#include "GCode/Thumbnails.hpp" #include #include #include @@ -103,6 +83,7 @@ static t_config_enum_values s_keys_map_PrintHostType { { "astrobox", htAstroBox }, { "repetier", htRepetier }, { "mks", htMKS }, + { "esp3d", htESP3D }, { "obico", htObico }, { "flashforge", htFlashforge }, { "simplyprint", htSimplyPrint }, @@ -160,7 +141,8 @@ static t_config_enum_values s_keys_map_InfillPattern { { "archimedeanchords", ipArchimedeanChords }, { "octagramspiral", ipOctagramSpiral }, { "supportcubic", ipSupportCubic }, - { "lightning", ipLightning } + { "lightning", ipLightning }, + { "crosshatch", ipCrossHatch} }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(InfillPattern) @@ -370,11 +352,11 @@ static const t_config_enum_values s_keys_map_BedType = { CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BedType) // BBS -static const t_config_enum_values s_keys_map_FirstLayerSeq = { +static const t_config_enum_values s_keys_map_LayerSeq = { { "Auto", flsAuto }, { "Customize", flsCutomize }, }; -CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FirstLayerSeq) +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(LayerSeq) static t_config_enum_values s_keys_map_NozzleType { { "undefine", int(NozzleType::ntUndefine) }, @@ -420,7 +402,7 @@ static const t_config_enum_values s_keys_map_GCodeThumbnailsFormat = { { "JPG", int(GCodeThumbnailsFormat::JPG) }, { "QOI", int(GCodeThumbnailsFormat::QOI) }, { "BTT_TFT", int(GCodeThumbnailsFormat::BTT_TFT) }, - { "ColPic", int(GCodeThumbnailsFormat::ColPic) } + { "COLPIC", int(GCodeThumbnailsFormat::ColPic) } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(GCodeThumbnailsFormat) @@ -522,7 +504,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 = 214700; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(100.0)); @@ -567,7 +549,6 @@ void PrintConfigDef::init_common_params() def->cli = ConfigOptionDef::nocli; def->set_default_value(new ConfigOptionString("")); - def = this->add("printhost_apikey", coString); def->label = L("API Key / Password"); def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain " @@ -770,16 +751,37 @@ void PrintConfigDef::init_fff_params() def->max = 16; def->set_default_value(new ConfigOptionInts{0}); + def = this->add("other_layers_print_sequence", coInts); + def->label = L("Other layers print sequence"); + def->min = 0; + def->max = 16; + def->set_default_value(new ConfigOptionInts{0}); + + def = this->add("other_layers_print_sequence_nums", coInt); + def->label = L("The number of other layers print sequence"); + def->set_default_value(new ConfigOptionInt{0}); + def = this->add("first_layer_sequence_choice", coEnum); def->category = L("Quality"); def->label = L("First layer filament sequence"); - def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("Auto"); def->enum_values.push_back("Customize"); def->enum_labels.push_back(L("Auto")); def->enum_labels.push_back(L("Customize")); def->mode = comSimple; - def->set_default_value(new ConfigOptionEnum(flsAuto)); + def->set_default_value(new ConfigOptionEnum(flsAuto)); + + def = this->add("other_layers_sequence_choice", coEnum); + def->category = L("Quality"); + def->label = L("Other layers filament sequence"); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("Auto"); + def->enum_values.push_back("Customize"); + def->enum_labels.push_back(L("Auto")); + def->enum_labels.push_back(L("Customize")); + def->mode = comSimple; + def->set_default_value(new ConfigOptionEnum(flsAuto)); def = this->add("before_layer_change_gcode", coString); def->label = L("Before layer change G-code"); @@ -793,6 +795,7 @@ void PrintConfigDef::init_fff_params() def = this->add("bottom_shell_layers", coInt); def->label = L("Bottom shell layers"); def->category = L("Strength"); + def->sidetext = L("layers"); // ORCA add side text def->tooltip = L("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"); @@ -828,7 +831,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Top and bottom surfaces")); def->enum_labels.push_back(L("Nowhere")); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionEnum(gftEverywhere)); + def->set_default_value(new ConfigOptionEnum(gftNowhere)); def = this->add("enable_overhang_bridge_fan", coBools); @@ -1440,7 +1443,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(ipMonotonicLine)); def = this->add("bottom_surface_pattern", coEnum); def->label = L("Bottom surface pattern"); @@ -1519,7 +1522,7 @@ void PrintConfigDef::init_fff_params() def = this->add("is_infill_first",coBool); def->label = L("Print infill first"); - def->tooltip = L("Order of wall/infill. When the tickbox is unchecked the walls are printed first, which works best in most cases.\n\nPrinting walls first may help with extreme overhangs as the walls have the neighbouring infill to adhere to. However, the infill will slighly push out the printed walls where it is attached to them, resulting in a worse external surface finish. It can also cause the infill to shine through the external surfaces of the part."); + def->tooltip = L("Order of wall/infill. When the tickbox is unchecked the walls are printed first, which works best in most cases.\n\nPrinting infill first may help with extreme overhangs as the walls have the neighbouring infill to adhere to. However, the infill will slighly push out the printed walls where it is attached to them, resulting in a worse external surface finish. It can also cause the infill to shine through the external surfaces of the part."); def->category = L("Quality"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool{false}); @@ -1580,6 +1583,14 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(40)); + def = this->add("nozzle_height", coFloat); + def->label = L("Nozzle height"); + def->tooltip = L("The height of nozzle tip."); + def->sidetext = L("mm"); + def->min = 0; + def->mode = comDevelop; + def->set_default_value(new ConfigOptionFloat(4)); + def = this->add("bed_mesh_min", coPoint); def->label = L("Bed mesh min"); def->tooltip = L( @@ -1588,6 +1599,7 @@ void PrintConfigDef::init_fff_params() "set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max " "points. This information can usually be obtained from your printer manufacturer. The default setting is (-99999, -99999), which " "means there are no limits, thus allowing probing across the entire bed."); + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoint(Vec2d(-99999, -99999))); @@ -1599,6 +1611,7 @@ void PrintConfigDef::init_fff_params() "set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max " "points. This information can usually be obtained from your printer manufacturer. The default setting is (99999, 99999), which " "means there are no limits, thus allowing probing across the entire bed."); + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoint(Vec2d(99999, 99999))); @@ -1607,12 +1620,14 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("This option sets the preferred distance between probe points (grid size) for the X and Y directions, with the " "default being 50mm for both X and Y."); def->min = 0; + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoint(Vec2d(50, 50))); def = this->add("adaptive_bed_mesh_margin", coFloat); def->label = L("Mesh margin"); def->tooltip = L("This option determines the additional distance by which the adaptive bed mesh area should be expanded in the XY directions."); + def->sidetext = L("mm"); // ORCA add side text def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -1684,6 +1699,15 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("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"); def->set_default_value(new ConfigOptionBools { false }); + + def = this->add("dont_slow_down_outer_wall", coBools); + def->label = L("Don't slow down outer walls"); + def->tooltip = L("If enabled, this setting will ensure external perimeters are not slowed down to meet the minimum layer time. " + "This is particularly helpful in the below scenarios:\n\n " + "1. To avoid changes in shine when printing glossy filaments \n" + "2. To avoid changes in external wall speed which may create slight wall artefacts that appear like z banding \n" + "3. To avoid printing at speeds which cause VFAs (fine artefacts) on the external walls\n\n"); + def->set_default_value(new ConfigOptionBools { false }); def = this->add("fan_cooling_layer_time", coFloats); def->label = L("Layer time"); @@ -1774,7 +1798,7 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionPercents{ 100 }); -def = this->add("filament_loading_speed", coFloats); + def = this->add("filament_loading_speed", coFloats); def->label = L("Loading speed"); def->tooltip = L("Speed used for loading the filament on the wipe tower."); def->sidetext = L("mm/s"); @@ -1913,25 +1937,42 @@ def = this->add("filament_loading_speed", coFloats); def->tooltip = L("The material type of filament"); def->gui_type = ConfigOptionDef::GUIType::f_enum_open; def->gui_flags = "show_value"; - def->enum_values.push_back("PLA"); + def->enum_values.push_back("ABS"); + def->enum_values.push_back("ABS-GF"); def->enum_values.push_back("ASA"); - def->enum_values.push_back("PETG"); - def->enum_values.push_back("TPU"); - def->enum_values.push_back("PC"); + def->enum_values.push_back("ASA-Aero"); + def->enum_values.push_back("BVOH"); + def->enum_values.push_back("PCTG"); + def->enum_values.push_back("EVA"); + def->enum_values.push_back("HIPS"); def->enum_values.push_back("PA"); def->enum_values.push_back("PA-CF"); + def->enum_values.push_back("PA-GF"); def->enum_values.push_back("PA6-CF"); - def->enum_values.push_back("PLA-CF"); + def->enum_values.push_back("PA11-CF"); + def->enum_values.push_back("PC"); + def->enum_values.push_back("PC-CF"); + def->enum_values.push_back("PCTG"); + def->enum_values.push_back("PE"); + def->enum_values.push_back("PE-CF"); def->enum_values.push_back("PET-CF"); + def->enum_values.push_back("PETG"); def->enum_values.push_back("PETG-CF"); - def->enum_values.push_back("PVA"); - def->enum_values.push_back("HIPS"); + def->enum_values.push_back("PHA"); + def->enum_values.push_back("PLA"); def->enum_values.push_back("PLA-AERO"); - def->enum_values.push_back("PPS"); - def->enum_values.push_back("PPS-CF"); + def->enum_values.push_back("PLA-CF"); + def->enum_values.push_back("PP"); + def->enum_values.push_back("PP-CF"); + def->enum_values.push_back("PP-GF"); def->enum_values.push_back("PPA-CF"); def->enum_values.push_back("PPA-GF"); + def->enum_values.push_back("PPS"); + def->enum_values.push_back("PPS-CF"); + def->enum_values.push_back("PVA"); + def->enum_values.push_back("PVB"); + def->enum_values.push_back("TPU"); def->mode = comSimple; def->set_default_value(new ConfigOptionStrings { "PLA" }); @@ -1951,6 +1992,7 @@ def = this->add("filament_loading_speed", coFloats); def = this->add("temperature_vitrification", coInts); def->label = L("Softening temperature"); def->tooltip = L("The material softens at this temperature, so when the bed temperature is equal to or greater than it, it's highly recommended to open the front door and/or remove the upper glass to avoid cloggings."); + def->sidetext = L("°C"); // ORCA add side text def->mode = comSimple; def->set_default_value(new ConfigOptionInts{ 100 }); @@ -1979,7 +2021,7 @@ def = this->add("filament_loading_speed", coFloats); def->cli = ConfigOptionDef::nocli; def = this->add("infill_direction", coFloat); - def->label = L("Infill direction"); + def->label = L("Sparse infill direction"); def->category = L("Strength"); def->tooltip = L("Angle for sparse infill pattern, which controls the start or main direction of line"); def->sidetext = L("°"); @@ -1988,6 +2030,23 @@ def = this->add("filament_loading_speed", coFloats); def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(45)); + def = this->add("solid_infill_direction", coFloat); + def->label = L("Solid infill direction"); + def->category = L("Strength"); + def->tooltip = L("Angle for solid infill pattern, which controls the start or main direction of line"); + def->sidetext = L("°"); + def->min = 0; + def->max = 360; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(45)); + + def = this->add("rotate_solid_infill_direction", coBool); + def->label = L("Rotate solid infill direction"); + def->category = L("Strength"); + def->tooltip = L("Rotate the solid infill direction by 90° for each layer."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("sparse_infill_density", coPercent); def->label = L("Sparse infill density"); def->category = L("Strength"); @@ -2020,6 +2079,7 @@ def = this->add("filament_loading_speed", coFloats); def->enum_values.push_back("octagramspiral"); def->enum_values.push_back("supportcubic"); def->enum_values.push_back("lightning"); + def->enum_values.push_back("crosshatch"); def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Grid")); @@ -2037,7 +2097,8 @@ def = this->add("filament_loading_speed", coFloats); def->enum_labels.push_back(L("Octagram Spiral")); def->enum_labels.push_back(L("Support Cubic")); def->enum_labels.push_back(L("Lightning")); - def->set_default_value(new ConfigOptionEnum(ipCubic)); + def->enum_labels.push_back(L("Cross Hatch")); + def->set_default_value(new ConfigOptionEnum(ipCrossHatch)); auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent); def->label = L("Sparse infill anchor length"); @@ -2294,6 +2355,7 @@ def = this->add("filament_loading_speed", coFloats); 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->sidetext = L("layers"); // ORCA add side text def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(0)); @@ -2313,6 +2375,7 @@ def = this->add("filament_loading_speed", coFloats); "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->sidetext = L("layer"); // ORCA add side text def->min = 0; def->max = 1000; def->mode = comAdvanced; @@ -2378,6 +2441,7 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Filter out tiny gaps"); def->category = L("Layers and Perimeters"); def->tooltip = L("Filter out gaps smaller than the threshold specified"); + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -2390,11 +2454,24 @@ def = this->add("filament_loading_speed", coFloats); def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(30)); + // BBS + def = this->add("precise_z_height", coBool); + def->label = L("Precise Z height"); + def->tooltip = L("Enable this to get precise z height of object after slicing. " + "It will get the precise object height by fine-tuning the layer heights of the last few layers. " + "Note that this is an experimental parameter."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(0)); + // BBS def = this->add("enable_arc_fitting", coBool); def->label = L("Arc fitting"); def->tooltip = L("Enable this to get a G-code file which has G2 and G3 moves. " - "And the fitting tolerance is same with resolution"); + "The fitting tolerance is same as the resolution. \n\n" + "Note: For klipper machines, this option is recomended to be disabled. Klipper does not benefit from " + "arc commands as these are split again into line segments by the firmware. This results in a reduction " + "in surface quality as line segments are converted to arcs by the slicer and then back to line segments " + "by the firmware."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(0)); // BBS @@ -2621,11 +2698,22 @@ def = this->add("filament_loading_speed", coFloats); def = this->add("infill_wall_overlap", coPercent); def->label = L("Infill/Wall overlap"); def->category = L("Strength"); - def->tooltip = L("Infill area is enlarged slightly to overlap with wall for better bonding. The percentage value is relative to line width of sparse infill"); + // xgettext:no-c-format, no-boost-format + def->tooltip = L("Infill area is enlarged slightly to overlap with wall for better bonding. The percentage value is relative to line width of sparse infill. Set this value to ~10-15% to minimize potential over extrusion and accumulation of material resulting in rough top surfaces."); def->sidetext = L("%"); def->ratio_over = "inner_wall_line_width"; def->mode = comAdvanced; def->set_default_value(new ConfigOptionPercent(15)); + + def = this->add("top_bottom_infill_wall_overlap", coPercent); + def->label = L("Top/Bottom solid infill/wall overlap"); + def->category = L("Strength"); + // xgettext:no-c-format, no-boost-format + def->tooltip = L("Top solid infill area is enlarged slightly to overlap with wall for better bonding and to minimize the appearance of pinholes where the top infill meets the walls. A value of 25-30% is a good starting point, minimising the appearance of pinholes. The percentage value is relative to line width of sparse infill"); + def->sidetext = L("%"); + def->ratio_over = "inner_wall_line_width"; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionPercent(25)); def = this->add("sparse_infill_speed", coFloat); def->label = L("Sparse infill"); @@ -3074,6 +3162,7 @@ def = this->add("filament_loading_speed", coFloats); def->enum_values.push_back("astrobox"); def->enum_values.push_back("repetier"); def->enum_values.push_back("mks"); + def->enum_values.push_back("esp3d"); def->enum_values.push_back("obico"); def->enum_values.push_back("flashforge"); def->enum_values.push_back("simplyprint"); @@ -3085,6 +3174,7 @@ def = this->add("filament_loading_speed", coFloats); def->enum_labels.push_back("AstroBox"); def->enum_labels.push_back("Repetier"); def->enum_labels.push_back("MKS"); + def->enum_labels.push_back("ESP3D"); def->enum_labels.push_back("Obico"); def->enum_labels.push_back("Flashforge"); def->enum_labels.push_back("SimplyPrint"); @@ -3393,6 +3483,25 @@ def = this->add("filament_loading_speed", coFloats); def->mode = comSimple; def->set_default_value(new ConfigOptionFloats { 0.8 }); + def = this->add("enable_long_retraction_when_cut",coInt); + def->mode = comDevelop; + def->set_default_value(new ConfigOptionInt {0}); + + def = this->add("long_retractions_when_cut", coBools); + def->label = L("Long retraction when cut(experimental)"); + def->tooltip = L("Experimental feature.Retracting and cutting off the filament at a longer distance during changes to minimize purge." + "While this reduces flush significantly, it may also raise the risk of nozzle clogs or other printing problems."); + def->mode = comDevelop; + def->set_default_value(new ConfigOptionBools {false}); + + def = this->add("retraction_distances_when_cut",coFloats); + def->label = L("Retraction distance when cut"); + def->tooltip = L("Experimental feature.Retraction length before cutting off during filament change"); + def->mode = comDevelop; + def->min = 10; + def->max = 18; + def->set_default_value(new ConfigOptionFloats {18}); + def = this->add("retract_length_toolchange", coFloats); def->label = L("Length"); //def->full_label = L("Retraction Length (Toolchange)"); @@ -3445,7 +3554,7 @@ def = this->add("filament_loading_speed", coFloats); 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::zhtSlope }); def = this->add("retract_lift_above", coFloats); def->label = L("Only lift Z above"); @@ -3711,20 +3820,22 @@ def = this->add("filament_loading_speed", coFloats); def->set_default_value(new ConfigOptionInt(1)); def = this->add("draft_shield", coEnum); - //def->label = L("Draft shield"); - def->label = "Draft shield"; - //def->tooltip = L("With draft shield active, the skirt will be printed skirt_distance from the object, possibly intersecting brim.\n" - // "Enabled = skirt is as tall as the highest printed object.\n" - // "Limited = skirt is as tall as specified by skirt_height.\n" - // "This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."); + def->label = L("Draft shield"); + def->tooltip = L("A draft shield is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft. " + "It is usually needed only with open frame printers, i.e. without an enclosure. \n\n" + "Options:\n" + "Enabled = skirt is as tall as the highest printed object.\n" + "Limited = skirt is as tall as specified by skirt height.\n\n" + "Note: With the draft shield active, the skirt will be printed at skirt distance from the object. Therefore, if brims " + "are active it may intersect with them. To avoid this, increase the skirt distance value.\n"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("disabled"); def->enum_values.push_back("limited"); def->enum_values.push_back("enabled"); - def->enum_labels.push_back("Disabled"); - def->enum_labels.push_back("Limited"); - def->enum_labels.push_back("Enabled"); - def->mode = comDevelop; + def->enum_labels.push_back(L("Disabled")); + def->enum_labels.push_back(L("Limited")); + def->enum_labels.push_back(L("Enabled")); + def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(dsDisabled)); def = this->add("skirt_loops", coInt); @@ -3744,6 +3855,16 @@ def = this->add("filament_loading_speed", coFloats); def->sidetext = L("mm/s"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(50.0)); + + def = this->add("min_skirt_length", coFloat); + def->label = L("Skirt minimum extrusion length"); + def->full_label = L("Skirt minimum extrusion length"); + def->tooltip = L("Minimum filament extrusion length in mm when printing the skirt. Zero means this feature is disabled.\n\n" + "Using a non zero value is useful if the printer is set up to print without a prime line."); + def->min = 0; + def->sidetext = L("mm"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(0.0)); def = this->add("slow_down_layer_time", coFloats); def->label = L("Layer time"); @@ -4529,6 +4650,7 @@ def = this->add("filament_loading_speed", coFloats); def = this->add("top_shell_layers", coInt); def->label = L("Top shell layers"); def->category = L("Strength"); + def->sidetext = L("layers"); // ORCA add side text def->tooltip = L("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"); @@ -4679,6 +4801,19 @@ def = this->add("filament_loading_speed", coFloats); def->min = 100.; def->max = 300.; def->set_default_value(new ConfigOptionPercent(100.)); + + def = this->add("wipe_tower_max_purge_speed", coFloat); + def->label = L("Maximum wipe tower print speed"); + def->tooltip = L("The maximum print speed when purging in the wipe tower and printing the wipe tower sparse layers. " + "When purging, if the sparse infill speed or calculated speed from the filament max volumetric speed is lower, the lowest will be used instead.\n\n" + "When printing the sparse layers, if the internal perimeter speed or calculated speed from the filament max volumetric speed is lower, the lowest will be used instead.\n\n" + "Increasing this speed may affect the tower's stability as well as increase the force with which the nozzle collides with any blobs that may have formed on the wipe tower.\n\n" + "Before increasing this parameter beyond the default of 90mm/sec, make sure your printer can reliably bridge at the increased speeds and that ooze when tool changing is well controlled.\n\n" + "For the wipe tower external perimeters the internal perimeter speed is used regardless of this setting."); + def->sidetext = L("mm/s"); + def->mode = comAdvanced; + def->min = 10; + def->set_default_value(new ConfigOptionFloat(90.)); def = this->add("wipe_tower_extruder", coInt); def->label = L("Wipe tower extruder"); @@ -4777,12 +4912,12 @@ def = this->add("filament_loading_speed", coFloats); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(true)); - def = this->add("thumbnails", coPoints); + def = this->add("thumbnails", coString); 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->set_default_value(new ConfigOptionString("48x48/PNG,300x300/PNG")); def = this->add("thumbnails_format", coEnum); def->label = L("Format of G-code thumbnails"); @@ -4793,7 +4928,7 @@ def = this->add("filament_loading_speed", coFloats); def->enum_values.push_back("JPG"); def->enum_values.push_back("QOI"); def->enum_values.push_back("BTT_TFT"); - def->enum_values.push_back("ColPic"); + def->enum_values.push_back("COLPIC"); def->enum_labels.push_back("PNG"); def->enum_labels.push_back("JPG"); def->enum_labels.push_back("QOI"); @@ -4892,7 +5027,7 @@ def = this->add("filament_loading_speed", coFloats); "NOTE: Bottom and top surfaces will not be affected by this value to prevent visual gaps on the ouside of the model. " "Adjust 'One wall threshold' in the Advanced settings below to adjust the sensitivity of what is considered a top-surface. " "'One wall threshold' is only visibile if this setting is set above the default value of 0.5, or if single-wall top surfaces is enabled."); - def->sidetext = ""; + def->sidetext = L("mm"); // ORCA add side text def->mode = comAdvanced; def->min = 0.0; def->max = 25.0; @@ -4929,7 +5064,10 @@ def = this->add("filament_loading_speed", coFloats); // bools "retract_when_changing_layer", "wipe", // percents - "retract_before_wipe"}) { + "retract_before_wipe", + "long_retractions_when_cut", + "retraction_distances_when_cut" + }) { auto it_opt = options.find(opt_key); assert(it_opt != options.end()); def = this->add_nullable(std::string("filament_") + opt_key, it_opt->second.type); @@ -4940,9 +5078,13 @@ def = this->add("filament_loading_speed", coFloats); def->enum_keys_map = it_opt->second.enum_keys_map; def->enum_labels = it_opt->second.enum_labels; def->enum_values = it_opt->second.enum_values; + def->min = it_opt->second.min; + def->max = it_opt->second.max; //BBS: shown specific filament retract config because we hide the machine retract into comDevelop mode if ((strcmp(opt_key, "retraction_length") == 0) || - (strcmp(opt_key, "z_hop") == 0)) + (strcmp(opt_key, "z_hop") == 0)|| + (strcmp(opt_key, "long_retractions_when_cut") == 0)|| + (strcmp(opt_key, "retraction_distances_when_cut") == 0)) def->mode = comSimple; else def->mode = comAdvanced; @@ -4973,17 +5115,19 @@ void PrintConfigDef::init_extruder_option_keys() "retraction_length", "z_hop", "z_hop_types", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "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" + "default_filament_profile","retraction_distances_when_cut","long_retractions_when_cut" }; m_extruder_retract_keys = { "deretraction_speed", + "long_retractions_when_cut", "retract_before_wipe", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retract_restart_extra", "retract_when_changing_layer", + "retraction_distances_when_cut", "retraction_length", "retraction_minimum_travel", "retraction_speed", @@ -5002,17 +5146,19 @@ void PrintConfigDef::init_filament_option_keys() "retraction_length", "z_hop", "z_hop_types", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "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","retraction_distances_when_cut","long_retractions_when_cut"/*,"filament_seam_gap"*/ }; m_filament_retract_keys = { "deretraction_speed", + "long_retractions_when_cut", "retract_before_wipe", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retract_restart_extra", "retract_when_changing_layer", + "retraction_distances_when_cut", "retraction_length", "retraction_minimum_travel", "retraction_speed", @@ -5792,7 +5938,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va "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", "bed_temperature_difference", + "z_hop_type", "z_lift_type", "bed_temperature_difference","long_retraction_when_cut", + "retraction_distance_when_cut", "extruder_type", "internal_bridge_support_thickness","extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill" }; @@ -5808,6 +5955,60 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va } } +// Called after a config is loaded as a whole. +// Perform composite conversions, for example merging multiple keys into one key. +// Don't convert single options here, implement such conversion in PrintConfigDef::handle_legacy() instead. +void PrintConfigDef::handle_legacy_composite(DynamicPrintConfig &config) +{ + if (config.has("thumbnails")) { + std::string extention; + if (config.has("thumbnails_format")) { + if (const ConfigOptionDef* opt = config.def()->get("thumbnails_format")) { + extention = opt->enum_values.at(config.option("thumbnails_format")->getInt()); + } + } + + std::string thumbnails_str = config.opt_string("thumbnails"); + auto [thumbnails_list, errors] = GCodeThumbnails::make_and_check_thumbnail_list(thumbnails_str, extention); + + if (errors != enum_bitmask()) { + std::string error_str = "\n" + format("Invalid value provided for parameter %1%: %2%", "thumbnails", thumbnails_str); + error_str += GCodeThumbnails::get_error_string(errors); + throw BadOptionValueException(error_str); + } + + if (!thumbnails_list.empty()) { + const auto& extentions = ConfigOptionEnum::get_enum_names(); + thumbnails_str.clear(); + for (const auto& [ext, size] : thumbnails_list) + thumbnails_str += format("%1%x%2%/%3%, ", size.x(), size.y(), extentions[int(ext)]); + thumbnails_str.resize(thumbnails_str.length() - 2); + + config.set_key_value("thumbnails", new ConfigOptionString(thumbnails_str)); + } + } + + if (config.has("wiping_volumes_matrix") && !config.has("wiping_volumes_use_custom_matrix")) { + // This is apparently some pre-2.7.3 config, where the wiping_volumes_matrix was always used. + // The 2.7.3 introduced an option to use defaults derived from config. In case the matrix + // contains only default values, switch it to default behaviour. The default values + // were zeros on the diagonal and 140 otherwise. + std::vector matrix = config.opt("wiping_volumes_matrix")->values; + int num_of_extruders = int(std::sqrt(matrix.size()) + 0.5); + int i = -1; + bool custom = false; + for (int j = 0; j < int(matrix.size()); ++j) { + if (j % num_of_extruders == 0) + ++i; + if (i != j % num_of_extruders && !is_approx(matrix[j], 140.)) { + custom = true; + break; + } + } + config.set_key_value("wiping_volumes_use_custom_matrix", new ConfigOptionBool(custom)); + } +} + const PrintConfigDef print_config_def; DynamicPrintConfig DynamicPrintConfig::full_print_config() @@ -6287,6 +6488,8 @@ std::map validate(const FullPrintConfig &cfg, bool und if (cfg.extruder_clearance_height_to_lid <= 0) { error_message.emplace("extruder_clearance_height_to_lid", L("invalid value ") + std::to_string(cfg.extruder_clearance_height_to_lid)); } + if (cfg.nozzle_height <= 0) + error_message.emplace("nozzle_height", L("invalid value ") + std::to_string(cfg.nozzle_height)); // --extrusion-multiplier for (double em : cfg.filament_flow_ratio.values) @@ -6463,9 +6666,14 @@ CLIActionsConfigDef::CLIActionsConfigDef() def = this->add("export_stl", coBool); def->label = "Export STL"; - def->tooltip = "Export the objects as multiple STL."; + def->tooltip = "Export the objects as single STL."; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("export_stls", coString); + def->label = "Export multiple stls"; + def->tooltip = "Export the objects as multiple stls to directory"; + def->set_default_value(new ConfigOptionString("stl_path")); + /*def = this->add("export_gcode", coBool); def->label = L("Export G-code"); def->tooltip = L("Slice the model and export toolpaths as G-code."); @@ -6498,6 +6706,12 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->cli = "uptodate"; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("downward_check", coStrings); + def->label = "downward machines check"; + def->tooltip = "check whether current machine downward compatible with the machines in the list"; + def->cli_params = "\"machine1.json;machine2.json;...\""; + def->set_default_value(new ConfigOptionStrings()); + def = this->add("load_defaultfila", coBool); def->label = "Load default filaments"; def->tooltip = "Load first filament as default for those not loaded"; @@ -6751,6 +6965,17 @@ CLIMiscConfigDef::CLIMiscConfigDef() def->cli_params = "\"filament1.json;filament2.json;...\""; def->set_default_value(new ConfigOptionStrings()); + def = this->add("downward_check", coBool); + def->label = "downward machines check"; + def->tooltip = "if enabled, check whether current machine downward compatible with the machines in the list"; + def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("downward_settings", coStrings); + def->label = "downward machines settings"; + def->tooltip = "the machine settings list need to do downward checking"; + def->cli_params = "\"machine1.json;machine2.json;...\""; + def->set_default_value(new ConfigOptionStrings()); + def = this->add("load_assemble_list", coString); def->label = "Load assemble list"; def->tooltip = "Load assemble object list from config file"; @@ -6848,6 +7073,24 @@ CLIMiscConfigDef::CLIMiscConfigDef() def->tooltip = "MakerLab version to generate this 3mf"; def->cli_params = "version"; def->set_default_value(new ConfigOptionString()); + + def = this->add("metadata_name", coStrings); + def->label = "metadata name list"; + def->tooltip = "matadata name list added into 3mf"; + def->cli_params = "\"name1;name2;...\""; + def->set_default_value(new ConfigOptionStrings()); + + def = this->add("metadata_value", coStrings); + def->label = "metadata value list"; + def->tooltip = "matadata value list added into 3mf"; + def->cli_params = "\"value1;value2;...\""; + def->set_default_value(new ConfigOptionStrings()); + + def = this->add("allow_newer_file", coBool); + def->label = "Allow 3mf with newer version to be sliced"; + def->tooltip = "Allow 3mf with newer version to be sliced"; + def->cli_params = "option"; + def->set_default_value(new ConfigOptionBool(false)); } const CLIActionsConfigDef cli_actions_config_def; diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 28e9d00923..ec2b924996 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1,20 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros, Pavel Mikuš @Godrak, David Kocík @kocikdav, Oleksandra Iushchenko @YuSanka, Vojtěch Král @vojtechkral, Enrico Turri @enricoturri1966 -///|/ Copyright (c) 2023 Pedro Lamas @PedroLamas -///|/ Copyright (c) 2020 Sergey Kovalev @RandoMan70 -///|/ Copyright (c) 2021 Martin Budden -///|/ Copyright (c) 2021 Ilya @xorza -///|/ Copyright (c) 2020 Paul Arden @ardenpm -///|/ Copyright (c) 2019 Spencer Owen @spuder -///|/ Copyright (c) 2019 Stephan Reichhelm @stephanr -///|/ Copyright (c) 2018 Martin Loidl @LoidlM -///|/ Copyright (c) SuperSlicer 2018 Remi Durand @supermerill -///|/ Copyright (c) 2016 - 2017 Joseph Lenox @lordofhyphens -///|/ Copyright (c) Slic3r 2013 - 2015 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ Copyright (c) 2015 Alexander Rössler @machinekoder -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Configuration store of Slic3r. // // The configuration store is either static or dynamic. @@ -59,7 +42,7 @@ enum class FuzzySkinType { }; enum PrintHostType { - htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htObico, htFlashforge, htSimplyPrint + htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htESP3D, htObico, htFlashforge, htSimplyPrint }; enum AuthorizationType { @@ -69,7 +52,7 @@ enum AuthorizationType { enum InfillPattern : int { ipConcentric, ipRectilinear, ipGrid, ipLine, ipCubic, ipTriangles, ipStars, ipGyroid, ipHoneycomb, ipAdaptiveCubic, ipMonotonic, ipMonotonicLine, ipAlignedRectilinear, ip3DHoneycomb, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricInternal, - ipLightning, + ipLightning, ipCrossHatch, ipCount, }; @@ -144,6 +127,13 @@ enum SupportMaterialStyle { smsDefault, smsGrid, smsSnug, smsTreeSlim, smsTreeStrong, smsTreeHybrid, smsOrganic, }; +enum LongRectrationLevel +{ + Disabled=0, + EnableMachine, + EnableFilament +}; + enum SupportMaterialInterfacePattern { smipAuto, smipRectilinear, smipConcentric, smipRectilinearInterlaced, smipGrid }; @@ -268,7 +258,7 @@ enum BedType { }; // BBS -enum FirstLayerSeq { +enum LayerSeq { flsAuto, flsCutomize }; @@ -412,6 +402,8 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(AuthorizationType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PerimeterGeneratorType) #undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS +class DynamicPrintConfig; + // Defines each and every confiuration option of Slic3r, including the properties of the GUI dialogs. // Does not store the actual values, but defines default values. class PrintConfigDef : public ConfigDef @@ -420,6 +412,7 @@ public: PrintConfigDef(); static void handle_legacy(t_config_option_key &opt_key, std::string &value); + static void handle_legacy_composite(DynamicPrintConfig &config); // Array options growing with the number of extruders const std::vector& extruder_option_keys() const { return m_extruder_option_keys; } @@ -502,6 +495,12 @@ public: void handle_legacy(t_config_option_key &opt_key, std::string &value) const override { PrintConfigDef::handle_legacy(opt_key, value); } + // Called after a config is loaded as a whole. + // Perform composite conversions, for example merging multiple keys into one key. + // For conversion of single options, the handle_legacy() method above is called. + void handle_legacy_composite() override + { PrintConfigDef::handle_legacy_composite(*this); } + //BBS special case Support G/ Support W std::string get_filament_type(std::string &displayed_filament_type, int id = 0); @@ -854,6 +853,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, top_surface_jerk)) ((ConfigOptionFloat, initial_layer_jerk)) ((ConfigOptionFloat, travel_jerk)) + ((ConfigOptionBool, precise_z_height)) ) // This object is mapped to Perl as Slic3r::Config::PrintRegion. @@ -874,6 +874,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatOrPercent, outer_wall_line_width)) ((ConfigOptionFloat, outer_wall_speed)) ((ConfigOptionFloat, infill_direction)) + ((ConfigOptionFloat, solid_infill_direction)) + ((ConfigOptionBool, rotate_solid_infill_direction)) ((ConfigOptionPercent, sparse_infill_density)) ((ConfigOptionEnum, sparse_infill_pattern)) ((ConfigOptionEnum, fuzzy_skin)) @@ -884,6 +886,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionInt, sparse_infill_filament)) ((ConfigOptionFloatOrPercent, sparse_infill_line_width)) ((ConfigOptionPercent, infill_wall_overlap)) + ((ConfigOptionPercent, top_bottom_infill_wall_overlap)) ((ConfigOptionFloat, sparse_infill_speed)) //BBS ((ConfigOptionBool, infill_combination)) @@ -1051,6 +1054,9 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionPercents, retract_before_wipe)) ((ConfigOptionFloats, retraction_length)) ((ConfigOptionFloats, retract_length_toolchange)) + ((ConfigOptionInt, enable_long_retraction_when_cut)) + ((ConfigOptionFloats, retraction_distances_when_cut)) + ((ConfigOptionBools, long_retractions_when_cut)) ((ConfigOptionFloats, z_hop)) // BBS ((ConfigOptionEnumsGeneric, z_hop_types)) @@ -1156,15 +1162,19 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionEnum,print_sequence)) ((ConfigOptionEnum, print_order)) ((ConfigOptionInts, first_layer_print_sequence)) + ((ConfigOptionInts, other_layers_print_sequence)) + ((ConfigOptionInt, other_layers_print_sequence_nums)) ((ConfigOptionBools, slow_down_for_layer_cooling)) ((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, nozzle_height)) ((ConfigOptionStrings, extruder_colour)) ((ConfigOptionPoints, extruder_offset)) ((ConfigOptionBools, reduce_fan_stop_start_freq)) + ((ConfigOptionBools, dont_slow_down_outer_wall)) ((ConfigOptionFloats, fan_cooling_layer_time)) ((ConfigOptionStrings, filament_colour)) ((ConfigOptionBools, activate_air_filtration)) @@ -1198,6 +1208,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionInt, skirt_height)) ((ConfigOptionInt, skirt_loops)) ((ConfigOptionFloat, skirt_speed)) + ((ConfigOptionFloat, min_skirt_length)) ((ConfigOptionFloats, slow_down_layer_time)) ((ConfigOptionBool, spiral_mode)) ((ConfigOptionBool, spiral_mode_smooth)) @@ -1224,6 +1235,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( // Orca: mmu support ((ConfigOptionFloat, wipe_tower_cone_angle)) ((ConfigOptionPercent, wipe_tower_extra_spacing)) + ((ConfigOptionFloat, wipe_tower_max_purge_speed)) ((ConfigOptionInt, wipe_tower_extruder)) ((ConfigOptionFloats, wiping_volumes_extruders)) @@ -1237,7 +1249,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionFloat, nozzle_volume)) ((ConfigOptionPoints, start_end_points)) ((ConfigOptionEnum, timelapse_type)) - ((ConfigOptionPoints, thumbnails)) + ((ConfigOptionString, thumbnails)) // BBS: move from PrintObjectConfig ((ConfigOptionBool, independent_support_layer_height)) // SoftFever diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 077b226668..d4ae44c967 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1,12 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Lukáš Hejl @hejllukas, Pavel Mikuš @Godrak, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, David Kocík @kocikdav, Roman Beránek @zavorka -///|/ Copyright (c) 2021 Justin Schuh @jschuh -///|/ Copyright (c) 2021 Ilya @xorza -///|/ Copyright (c) 2016 Joseph Lenox @lordofhyphens -///|/ Copyright (c) Slic3r 2014 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Exception.hpp" #include "Print.hpp" #include "BoundingBox.hpp" @@ -97,6 +88,7 @@ PrintObject::PrintObject(Print* print, ModelObject* model_object, const Transfor // snug height and an approximate bounding box in XY. BoundingBoxf3 bbox = model_object->raw_bounding_box(); Vec3d bbox_center = bbox.center(); + // We may need to rotate the bbox / bbox_center from the original instance to the current instance. double z_diff = Geometry::rotation_diff_z(model_object->instances.front()->get_rotation(), instances.front().model_instance->get_rotation()); if (std::abs(z_diff) > EPSILON) { @@ -109,7 +101,7 @@ PrintObject::PrintObject(Print* print, ModelObject* model_object, const Transfor m_center_offset = Point::new_scale(bbox_center.x(), bbox_center.y()); // Size of the transformed mesh. This bounding may not be snug in XY plane, but it is snug in Z. m_size = (bbox.size() * (1. / SCALING_FACTOR)).cast(); - m_size.z() = coord_t(model_object->max_z() * (1. / SCALING_FACTOR)); + m_max_z = scaled(model_object->instance_bounding_box(0).max(2)); this->set_instances(std::move(instances)); } @@ -925,6 +917,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "initial_layer_line_width" || opt_key == "inner_wall_line_width" || opt_key == "infill_wall_overlap" + || opt_key == "top_bottom_infill_wall_overlap" || opt_key == "seam_gap" || opt_key == "role_based_wipe_speed" || opt_key == "wipe_on_loops" @@ -1044,8 +1037,8 @@ bool PrintObject::invalidate_state_by_config_options( opt_key == "bottom_shell_layers" || opt_key == "top_shell_layers") { - steps.emplace_back(posPrepareInfill); - + steps.emplace_back(posSlice); +#if (0) const auto *old_shell_layers = old_config.option(opt_key); const auto *new_shell_layers = new_config.option(opt_key); assert(old_shell_layers && new_shell_layers); @@ -1061,6 +1054,7 @@ bool PrintObject::invalidate_state_by_config_options( // Otherwise, holes in the bottom layers could be filled, as is reported in GH #5528. steps.emplace_back(posSlice); } +#endif } else if ( opt_key == "interface_shells" || opt_key == "infill_combination" @@ -1071,6 +1065,8 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "solid_infill_filament" || opt_key == "sparse_infill_line_width" || opt_key == "infill_direction" + || opt_key == "solid_infill_direction" + || opt_key == "rotate_solid_infill_direction" || opt_key == "ensure_vertical_shell_thickness" || opt_key == "bridge_angle" //BBS @@ -2332,9 +2328,17 @@ void PrintObject::bridge_over_infill() }; // LAMBDA do determine optimal bridging angle - auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern) { + auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern, double infill_direction) { AABBTreeLines::LinesDistancer lines_tree(anchors); + // Check it the infill that require a fixed infill angle. + switch (dominant_pattern) { + case ip3DHoneycomb: + case ipCrossHatch: + return (infill_direction + 45.0) * 2.0 * M_PI / 360.; + default: break; + } + std::map counted_directions; for (const Polygon &p : bridged_area) { double acc_distance = 0; @@ -2714,11 +2718,12 @@ void PrintObject::bridge_over_infill() double bridging_angle = 0; if (!anchors.empty()) { bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors), - candidate.region->region().config().sparse_infill_pattern.value); + candidate.region->region().config().sparse_infill_pattern.value, + candidate.region->region().config().infill_direction.value); } else { // use expansion boundaries as anchors. // Also, use Infill pattern that is neutral for angle determination, since there are no infill lines. - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine); + bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine, 0); } boundary_plines.insert(boundary_plines.end(), anchors.begin(), anchors.end()); @@ -2907,14 +2912,14 @@ PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &defau } else { // default_or_parent_region_config contains parent PrintRegion config, which already contains ModelVolume's config. } + apply_to_print_region_config(config, volume.config.get()); + if (! volume.material_id().empty()) + apply_to_print_region_config(config, volume.material()->config.get()); if (layer_range_config != nullptr) { // Not applicable to modifiers. assert(volume.is_model_part()); apply_to_print_region_config(config, *layer_range_config); } - apply_to_print_region_config(config, volume.config.get()); - if (! volume.material_id().empty()) - apply_to_print_region_config(config, volume.material()->config.get()); // Clamp invalid extruders to the default extruder (with index 1). clamp_exturder_to_default(config.sparse_infill_filament, num_extruders); clamp_exturder_to_default(config.wall_filament, num_extruders); @@ -3138,7 +3143,7 @@ void PrintObject::clip_fill_surfaces() } // Merge the new overhangs, find new internal infill. polygons_append(upper_internal, std::move(overhangs)); - static constexpr const auto closing_radius = scaled(2.f); + const auto closing_radius = scaled(2.f); upper_internal = intersection( // Regularize the overhang regions, so that the infill areas will not become excessively jagged. smooth_outward( diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 78dd620eba..31fc6e544f 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -215,7 +215,9 @@ static inline bool overlap_in_xy(const PrintObjectRegions::BoundingBox &l, const static std::vector::const_iterator layer_range_first(const std::vector &layer_ranges, double z) { auto it = lower_bound_by_predicate(layer_ranges.begin(), layer_ranges.end(), - [z](const PrintObjectRegions::LayerRangeRegions &lr) { return lr.layer_height_range.second < z; }); + [z](const PrintObjectRegions::LayerRangeRegions &lr) { + return lr.layer_height_range.second < z && abs(lr.layer_height_range.second - z) > EPSILON; + }); assert(it != layer_ranges.end() && it->layer_height_range.first <= z && z <= it->layer_height_range.second); if (z == it->layer_height_range.second) if (auto it_next = it; ++ it_next != layer_ranges.end() && it_next->layer_height_range.first == z) @@ -229,7 +231,7 @@ static std::vector::const_iterator layer_ std::vector::const_iterator it, double z) { - for (; it->layer_height_range.second <= z; ++ it) + for (; it->layer_height_range.second <= z + EPSILON; ++ it) assert(it != layer_ranges.end()); assert(it != layer_ranges.end() && it->layer_height_range.first <= z && z < it->layer_height_range.second); return it; @@ -810,7 +812,7 @@ void PrintObject::slice() m_print->throw_if_canceled(); m_typed_slices = false; this->clear_layers(); - m_layers = new_layers(this, generate_object_layers(m_slicing_params, layer_height_profile)); + m_layers = new_layers(this, generate_object_layers(m_slicing_params, layer_height_profile, m_config.precise_z_height.value)); this->slice_volumes(); m_print->throw_if_canceled(); int firstLayerReplacedBy = 0; diff --git a/src/libslic3r/ProjectTask.hpp b/src/libslic3r/ProjectTask.hpp index 103d82073f..05f39f9b2c 100644 --- a/src/libslic3r/ProjectTask.hpp +++ b/src/libslic3r/ProjectTask.hpp @@ -46,6 +46,8 @@ struct FilamentInfo float used_g; int tray_id; // start with 0 float distance; + int ctype = 0; + std::vector colors = std::vector(); int mapping_result = 0; }; diff --git a/src/libslic3r/QuadricEdgeCollapse.cpp b/src/libslic3r/QuadricEdgeCollapse.cpp index 48a72e6d84..5d0e3c17e8 100644 --- a/src/libslic3r/QuadricEdgeCollapse.cpp +++ b/src/libslic3r/QuadricEdgeCollapse.cpp @@ -263,13 +263,13 @@ void Slic3r::its_quadric_edge_collapse( is_flipped(new_vertex0, ti0, ti1, v_info1, t_infos, e_infos, its)) { // try other triangle's edge Vec3d errors = calculate_3errors(t0, its.vertices, v_infos); - Vec3i ord = (errors[0] < errors[1]) ? + Vec3i32 ord = (errors[0] < errors[1]) ? ((errors[0] < errors[2])? - ((errors[1] < errors[2]) ? Vec3i(0, 1, 2) : Vec3i(0, 2, 1)) : - Vec3i(2, 0, 1)): + ((errors[1] < errors[2]) ? Vec3i32(0, 1, 2) : Vec3i32(0, 2, 1)) : + Vec3i32(2, 0, 1)): ((errors[1] < errors[2])? - ((errors[0] < errors[2]) ? Vec3i(1, 0, 2) : Vec3i(1, 2, 0)) : - Vec3i(2, 1, 0)); + ((errors[0] < errors[2]) ? Vec3i32(1, 0, 2) : Vec3i32(1, 2, 0)) : + Vec3i32(2, 1, 0)); if (t_info0.min_index == ord[0]) { t_info0.min_index = ord[1]; e.value = errors[t_info0.min_index]; @@ -880,7 +880,7 @@ void QuadricEdgeCollapse::store_surround(const char *obj_filename, triangles.insert(ti); if (item.second == 0) continue; - const Vec3i &t = its.indices[ti]; + const Vec3i32 &t = its.indices[ti]; for (size_t i = 0; i < 3; ++i) { const auto &v_info = v_infos[t[i]]; for (size_t d = 0; d < v_info.count; ++d) { diff --git a/src/libslic3r/SLA/AGGRaster.hpp b/src/libslic3r/SLA/AGGRaster.hpp index 8d86962fcc..7c8e71c2ae 100644 --- a/src/libslic3r/SLA/AGGRaster.hpp +++ b/src/libslic3r/SLA/AGGRaster.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef AGGRASTER_HPP #define AGGRASTER_HPP diff --git a/src/libslic3r/SLA/Hollowing.cpp b/src/libslic3r/SLA/Hollowing.cpp index b0d33a0cad..df62127770 100644 --- a/src/libslic3r/SLA/Hollowing.cpp +++ b/src/libslic3r/SLA/Hollowing.cpp @@ -365,7 +365,7 @@ double get_distance(const Vec3f &p, const Interior &interior) // part of that mesh and the vertices it consists of. enum { NEW_FACE = -1}; struct DivFace { - Vec3i indx; + Vec3i32 indx; std::array verts; long faceid = NEW_FACE; long parent = NEW_FACE; @@ -511,7 +511,7 @@ void remove_inside_triangles(TriangleMesh &mesh, const Interior &interior, interior.reset_accessor(); exec_policy::for_each(size_t(0), faces.size(), [&] (size_t face_idx) { - const Vec3i &face = faces[face_idx]; + const Vec3i32 &face = faces[face_idx]; // If the triangle is excluded, we need to keep it. if (is_excluded(face_idx)) @@ -532,7 +532,7 @@ void remove_inside_triangles(TriangleMesh &mesh, const Interior &interior, }, exec_policy::max_concurreny()); - auto new_faces = reserve_vector(faces.size() + + auto new_faces = reserve_vector(faces.size() + mesh_mods.new_triangles.size()); for (size_t face_idx = 0; face_idx < faces.size(); ++face_idx) { diff --git a/src/libslic3r/SLA/IndexedMesh.cpp b/src/libslic3r/SLA/IndexedMesh.cpp index cd1c28278d..60255195bb 100644 --- a/src/libslic3r/SLA/IndexedMesh.cpp +++ b/src/libslic3r/SLA/IndexedMesh.cpp @@ -116,7 +116,7 @@ const std::vector& IndexedMesh::vertices() const -const std::vector& IndexedMesh::indices() const +const std::vector& IndexedMesh::indices() const { return m_tm->indices; } @@ -130,7 +130,7 @@ const Vec3f& IndexedMesh::vertices(size_t idx) const -const Vec3i& IndexedMesh::indices(size_t idx) const +const Vec3i32& IndexedMesh::indices(size_t idx) const { return m_tm->indices[idx]; } @@ -394,7 +394,7 @@ PointSet normals(const PointSet& points, if (ic >= 0) { // The point is right on a vertex of the triangle for (size_t n = 0; n < mesh.indices().size(); ++n) { thr(); - Vec3i ni = mesh.indices(n); + Vec3i32 ni = mesh.indices(n); if ((ni(X) == ic || ni(Y) == ic || ni(Z) == ic)) neigh.emplace_back(n); } @@ -402,7 +402,7 @@ PointSet normals(const PointSet& points, // now get all the neigboring triangles for (size_t n = 0; n < mesh.indices().size(); ++n) { thr(); - Vec3i ni = mesh.indices(n); + Vec3i32 ni = mesh.indices(n); if ((ni(X) == ia || ni(Y) == ia || ni(Z) == ia) && (ni(X) == ib || ni(Y) == ib || ni(Z) == ib)) neigh.emplace_back(n); diff --git a/src/libslic3r/SLA/IndexedMesh.hpp b/src/libslic3r/SLA/IndexedMesh.hpp index 9348a97c9b..bb2dee034c 100644 --- a/src/libslic3r/SLA/IndexedMesh.hpp +++ b/src/libslic3r/SLA/IndexedMesh.hpp @@ -64,9 +64,9 @@ public: inline double ground_level_offset() const { return m_gnd_offset; } const std::vector& vertices() const; - const std::vector& indices() const; + const std::vector& indices() const; const Vec3f& vertices(size_t idx) const; - const Vec3i& indices(size_t idx) const; + const Vec3i32& indices(size_t idx) const; // Result of a raycast class hit_result { diff --git a/src/libslic3r/SLA/RasterBase.cpp b/src/libslic3r/SLA/RasterBase.cpp index 9f599e0486..7240b198da 100644 --- a/src/libslic3r/SLA/RasterBase.cpp +++ b/src/libslic3r/SLA/RasterBase.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) 2022 ole00 @ole00 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef SLARASTER_CPP #define SLARASTER_CPP diff --git a/src/libslic3r/SLA/RasterBase.hpp b/src/libslic3r/SLA/RasterBase.hpp index 5f2826aec4..33d39eafbd 100644 --- a/src/libslic3r/SLA/RasterBase.hpp +++ b/src/libslic3r/SLA/RasterBase.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv -///|/ Copyright (c) 2022 ole00 @ole00 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef SLA_RASTERBASE_HPP #define SLA_RASTERBASE_HPP diff --git a/src/libslic3r/SLA/RasterToPolygons.cpp b/src/libslic3r/SLA/RasterToPolygons.cpp index cd84a3cb4a..79c21fe726 100644 --- a/src/libslic3r/SLA/RasterToPolygons.cpp +++ b/src/libslic3r/SLA/RasterToPolygons.cpp @@ -33,7 +33,7 @@ template void foreach_vertex(ExPolygon &poly, Fn &&fn) for (auto &p : h.points) fn(p); } -ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i windowsize) +ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i32 windowsize) { size_t rows = rst.resolution().height_px, cols = rst.resolution().width_px; diff --git a/src/libslic3r/SLA/RasterToPolygons.hpp b/src/libslic3r/SLA/RasterToPolygons.hpp index c0e1f41145..e7e554fbb7 100644 --- a/src/libslic3r/SLA/RasterToPolygons.hpp +++ b/src/libslic3r/SLA/RasterToPolygons.hpp @@ -8,7 +8,7 @@ namespace sla { class RasterGrayscaleAA; -ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i windowsize = {2, 2}); +ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i32 windowsize = {2, 2}); }} // namespace Slic3r::sla diff --git a/src/libslic3r/SLA/SupportPointGenerator.cpp b/src/libslic3r/SLA/SupportPointGenerator.cpp index c7a1b65c6b..7c6c8d1f6b 100644 --- a/src/libslic3r/SLA/SupportPointGenerator.cpp +++ b/src/libslic3r/SLA/SupportPointGenerator.cpp @@ -439,8 +439,8 @@ static inline std::vector poisson_disk_from_samples(const std::vector(raw_samples.size()); @@ -464,7 +464,7 @@ static inline std::vector poisson_disk_from_samples(const std::vector()(cell_id.x()) ^ std::hash()(cell_id.y() * 593); } }; @@ -472,11 +472,11 @@ static inline std::vector poisson_disk_from_samples(const std::vector Cells; + typedef std::unordered_map Cells; Cells cells; { typename Cells::iterator last_cell_id_it; - Vec2i last_cell_id(-1, -1); + Vec2i32 last_cell_id(-1, -1); for (size_t i = 0; i < raw_samples_sorted.size(); ++ i) { const RawSample &sample = raw_samples_sorted[i]; if (sample.cell_id == last_cell_id) { @@ -500,7 +500,7 @@ static inline std::vector poisson_disk_from_samples(const std::vector poisson_disk_from_samples(const std::vectorsecond; for (int i_sample = 0; i_sample < neighbor.num_poisson_samples; ++ i_sample) diff --git a/src/libslic3r/SLA/SupportPointGenerator.hpp b/src/libslic3r/SLA/SupportPointGenerator.hpp index 441b82de1f..17daed9f30 100644 --- a/src/libslic3r/SLA/SupportPointGenerator.hpp +++ b/src/libslic3r/SLA/SupportPointGenerator.hpp @@ -139,17 +139,17 @@ public: struct PointGrid3D { struct GridHash { - std::size_t operator()(const Vec3i &cell_id) const { + std::size_t operator()(const Vec3i32 &cell_id) const { return std::hash()(cell_id.x()) ^ std::hash()(cell_id.y() * 593) ^ std::hash()(cell_id.z() * 7919); } }; - typedef std::unordered_multimap Grid; + typedef std::unordered_multimap Grid; Vec3f cell_size; Grid grid; - Vec3i cell_id(const Vec3f &pos) { - return Vec3i(int(floor(pos.x() / cell_size.x())), + Vec3i32 cell_id(const Vec3f &pos) { + return Vec3i32(int(floor(pos.x() / cell_size.x())), int(floor(pos.y() / cell_size.y())), int(floor(pos.z() / cell_size.z()))); } @@ -163,7 +163,7 @@ public: bool collides_with(const Vec2f &pos, float print_z, float radius) { Vec3f pos3d(pos.x(), pos.y(), print_z); - Vec3i cell = cell_id(pos3d); + Vec3i32 cell = cell_id(pos3d); std::pair it_pair = grid.equal_range(cell); if (collides_with(pos3d, radius, it_pair.first, it_pair.second)) return true; @@ -172,7 +172,7 @@ public: for (int k = -1; k < 1; ++ k) { if (i == 0 && j == 0 && k == 0) continue; - it_pair = grid.equal_range(cell + Vec3i(i, j, k)); + it_pair = grid.equal_range(cell + Vec3i32(i, j, k)); if (collides_with(pos3d, radius, it_pair.first, it_pair.second)) return true; } diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 4de75edc42..12eb2226e8 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -183,7 +183,7 @@ struct FaceHash { return ret; } - static std::string facekey(const Vec3i &face, const std::vector &vertices) + static std::string facekey(const Vec3i32 &face, const std::vector &vertices) { // Scale to integer to avoid floating points std::array, 3> pts = { @@ -204,7 +204,7 @@ struct FaceHash { FaceHash (const indexed_triangle_set &its): facehash(its.indices.size()) { - for (const Vec3i &face : its.indices) + for (const Vec3i32 &face : its.indices) facehash.insert(facekey(face, its.vertices)); } @@ -231,7 +231,7 @@ static std::vector create_exclude_mask( VertexFaceIndex neighbor_index{its}; - auto exclude_neighbors = [&neighbor_index, &exclude_mask](const Vec3i &face) + auto exclude_neighbors = [&neighbor_index, &exclude_mask](const Vec3i32 &face) { for (int i = 0; i < 3; ++i) { const auto &neighbors_range = neighbor_index[face(i)]; diff --git a/src/libslic3r/Shape/TextShape.cpp b/src/libslic3r/Shape/TextShape.cpp index 63c5f96df2..dce731af19 100644 --- a/src/libslic3r/Shape/TextShape.cpp +++ b/src/libslic3r/Shape/TextShape.cpp @@ -241,6 +241,9 @@ static void MakeMesh(TopoDS_Shape& theSolid, TriangleMesh& theMesh) void load_text_shape(const char*text, const char* font, const float text_height, const float thickness, bool is_bold, bool is_italic, TextResult &text_result) { + if (thickness <= 0) + return; + Handle(Font_FontMgr) aFontMgr = Font_FontMgr::GetInstance(); if (aFontMgr->GetAvailableFonts().IsEmpty()) aFontMgr->InitFontDataBase(); diff --git a/src/libslic3r/ShortEdgeCollapse.cpp b/src/libslic3r/ShortEdgeCollapse.cpp index 0c940cb475..3397daf55c 100644 --- a/src/libslic3r/ShortEdgeCollapse.cpp +++ b/src/libslic3r/ShortEdgeCollapse.cpp @@ -33,7 +33,7 @@ void its_short_edge_collpase(indexed_triangle_set &mesh, size_t target_triangle_ // if face is removed, mark it here std::vector face_removal_flags(mesh.indices.size(), false); - std::vector triangles_neighbors = its_face_neighbors_par(mesh); + std::vector triangles_neighbors = its_face_neighbors_par(mesh); // now compute vertices dot product - this is used during edge collapse, // to determine which vertex to remove and which to keep; We try to keep the one with larger angle, because it defines the shape "more". @@ -46,7 +46,7 @@ void its_short_edge_collpase(indexed_triangle_set &mesh, size_t target_triangle_ std::vector vertex_normals = NormalUtils::create_normals(mesh); for (size_t face_idx = 0; face_idx < mesh.indices.size(); ++face_idx) { - Vec3i t = mesh.indices[face_idx]; + Vec3i32 t = mesh.indices[face_idx]; Vec3f n = face_normals[face_idx]; min_vertex_dot_product[t[0]] = std::min(min_vertex_dot_product[t[0]], n.dot(vertex_normals[t[0]])); min_vertex_dot_product[t[1]] = std::min(min_vertex_dot_product[t[1]], n.dot(vertex_normals[t[1]])); @@ -60,7 +60,7 @@ void its_short_edge_collpase(indexed_triangle_set &mesh, size_t target_triangle_ return; } face_removal_flags[face_idx] = true; - Vec3i neighbors = triangles_neighbors[face_idx]; + Vec3i32 neighbors = triangles_neighbors[face_idx]; int n_a = neighbors[0] != other_face_idx ? neighbors[0] : neighbors[1]; int n_b = neighbors[2] != other_face_idx ? neighbors[2] : neighbors[1]; if (n_a > 0) @@ -157,10 +157,10 @@ void its_short_edge_collpase(indexed_triangle_set &mesh, size_t target_triangle_ //Extract the result mesh std::unordered_map final_vertices_mapping; std::vector final_vertices; - std::vector final_indices; + std::vector final_indices; final_indices.reserve(face_indices.size()); for (size_t idx : face_indices) { - Vec3i final_face; + Vec3i32 final_face; for (size_t i = 0; i < 3; ++i) { final_face[i] = get_final_index(mesh.indices[idx][i]); } diff --git a/src/libslic3r/Slicing.cpp b/src/libslic3r/Slicing.cpp index 72e231c314..636a3c471f 100644 --- a/src/libslic3r/Slicing.cpp +++ b/src/libslic3r/Slicing.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, David Kocík @kocikdav, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include "libslic3r.h" @@ -631,10 +627,104 @@ void adjust_layer_height_profile( #endif /* _DEBUG */ } +bool adjust_layer_series_to_align_object_height(const SlicingParameters &slicing_params, std::vector& layer_series) +{ + coordf_t object_height = slicing_params.object_print_z_height(); + if (is_approx(layer_series.back(), object_height)) + return true; + + // need at least 5 + 1(first_layer) layers to adjust the height + size_t layer_size = layer_series.size(); + if (layer_size < 12) + return false; + + std::vector last_5_layers_heght; + for (size_t i = 0; i < 5; ++i) { + last_5_layers_heght.emplace_back(layer_series[layer_size - 10 + 2 * i + 1] - layer_series[layer_size - 10 + 2 * i]); + } + + coordf_t gap = abs(layer_series.back() - object_height); + std::vector can_adjust(5, true); // to record whether every layer can adjust layer height + bool taller_than_object = layer_series.back() < object_height; + + auto get_valid_size = [&can_adjust]() -> int { + int valid_size = 0; + for (auto b_adjust : can_adjust) { + valid_size += b_adjust ? 1 : 0; + } + return valid_size; + }; + + auto adjust_layer_height = [&slicing_params, &last_5_layers_heght, &can_adjust, &get_valid_size, &taller_than_object](coordf_t gap) -> coordf_t { + coordf_t delta_gap = gap / get_valid_size(); + coordf_t remain_gap = 0; + for (size_t i = 0; i < last_5_layers_heght.size(); ++i) { + coordf_t& l_height = last_5_layers_heght[i]; + if (taller_than_object) { + if (can_adjust[i] && is_approx(l_height, slicing_params.max_layer_height)) { + remain_gap += delta_gap; + can_adjust[i] = false; + continue; + } + + if (can_adjust[i] && l_height + delta_gap > slicing_params.max_layer_height) { + remain_gap += l_height + delta_gap - slicing_params.max_layer_height; + l_height = slicing_params.max_layer_height; + can_adjust[i] = false; + } + else { + l_height += delta_gap; + } + } + else { + if (can_adjust[i] && is_approx(l_height, slicing_params.min_layer_height)) { + remain_gap += delta_gap; + can_adjust[i] = false; + continue; + } + + if (can_adjust[i] && l_height - delta_gap < slicing_params.min_layer_height) { + remain_gap += slicing_params.min_layer_height + delta_gap - l_height; + l_height = slicing_params.min_layer_height; + can_adjust[i] = false; + } + else { + l_height -= delta_gap; + } + } + } + return remain_gap; + }; + + while (gap > 0) { + int valid_size = get_valid_size(); + if (valid_size == 0) { + // 5 layers can not adjust z within valid layer height + return false; + } + + gap = adjust_layer_height(gap); + if (is_approx(gap, 0.0)) { + // adjust succeed + break; + } + } + + for (size_t i = 0; i < last_5_layers_heght.size(); ++i) { + if (i > 0) { + layer_series[layer_size - 10 + 2 * i] = layer_series[layer_size - 10 + 2 * i - 1]; + } + layer_series[layer_size - 10 + 2 * i + 1] = layer_series[layer_size - 10 + 2 * i] + last_5_layers_heght[i]; + } + + return true; +} + // Produce object layers as pairs of low / high layer boundaries, stored into a linear vector. std::vector generate_object_layers( const SlicingParameters &slicing_params, - const std::vector &layer_height_profile) + const std::vector &layer_height_profile, + bool is_precise_z_height) { assert(! layer_height_profile.empty()); @@ -683,7 +773,8 @@ std::vector generate_object_layers( out.push_back(print_z); } - //FIXME Adjust the last layer to align with the top object layer exactly? + if (is_precise_z_height) + adjust_layer_series_to_align_object_height(slicing_params, out); return out; } diff --git a/src/libslic3r/Slicing.hpp b/src/libslic3r/Slicing.hpp index 464a05ba44..c519a3d194 100644 --- a/src/libslic3r/Slicing.hpp +++ b/src/libslic3r/Slicing.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Based on implementation by @platsch #ifndef slic3r_Slicing_hpp_ @@ -177,7 +173,8 @@ void adjust_layer_height_profile( // The object layers are based at z=0, ignoring the raft layers. std::vector generate_object_layers( const SlicingParameters &slicing_params, - const std::vector &layer_height_profile); + const std::vector &layer_height_profile, + bool is_precise_z_height); // Check whether the layer height profile describes a fixed layer height profile. bool check_object_layers_fixed( diff --git a/src/libslic3r/Support/OrganicSupport.cpp b/src/libslic3r/Support/OrganicSupport.cpp index 69cc0cf7e1..05e515d94e 100644 --- a/src/libslic3r/Support/OrganicSupport.cpp +++ b/src/libslic3r/Support/OrganicSupport.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "OrganicSupport.hpp" #include "SupportCommon.hpp" diff --git a/src/libslic3r/Support/OrganicSupport.hpp b/src/libslic3r/Support/OrganicSupport.hpp index c7b13b9db5..f86caabe99 100644 --- a/src/libslic3r/Support/OrganicSupport.hpp +++ b/src/libslic3r/Support/OrganicSupport.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_OrganicSupport_hpp #define slic3r_OrganicSupport_hpp diff --git a/src/libslic3r/Support/SupportCommon.cpp b/src/libslic3r/Support/SupportCommon.cpp index c494507c78..f51e992256 100644 --- a/src/libslic3r/Support/SupportCommon.cpp +++ b/src/libslic3r/Support/SupportCommon.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "../ClipperUtils.hpp" // #include "../ClipperZUtils.hpp" #include "../ExtrusionEntityCollection.hpp" diff --git a/src/libslic3r/Support/SupportCommon.hpp b/src/libslic3r/Support/SupportCommon.hpp index f8df25e503..753665e596 100644 --- a/src/libslic3r/Support/SupportCommon.hpp +++ b/src/libslic3r/Support/SupportCommon.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SupportCommon_hpp_ #define slic3r_SupportCommon_hpp_ diff --git a/src/libslic3r/Support/SupportDebug.cpp b/src/libslic3r/Support/SupportDebug.cpp index 24e92a0eb1..5c18bc7694 100644 --- a/src/libslic3r/Support/SupportDebug.cpp +++ b/src/libslic3r/Support/SupportDebug.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #if 1 //#ifdef SLIC3R_DEBUG #include "../ClipperUtils.hpp" diff --git a/src/libslic3r/Support/SupportDebug.hpp b/src/libslic3r/Support/SupportDebug.hpp index fb2375efbd..22a43bc4ea 100644 --- a/src/libslic3r/Support/SupportDebug.hpp +++ b/src/libslic3r/Support/SupportDebug.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SupportCommon_hpp_ #define slic3r_SupportCommon_hpp_ diff --git a/src/libslic3r/Support/SupportLayer.hpp b/src/libslic3r/Support/SupportLayer.hpp index e017d7421c..a3c60b9fd8 100644 --- a/src/libslic3r/Support/SupportLayer.hpp +++ b/src/libslic3r/Support/SupportLayer.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SupportLayer_hpp_ #define slic3r_SupportLayer_hpp_ diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index 7e1e98c193..c6d250e420 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -1,9 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Lukáš Hejl @hejllukas, Roman Beránek @zavorka, Lukáš Matěna @lukasmatena, Vojtěch Král @vojtechkral -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ Copyright (c) 2016 Sakari Kapanen @Flannelhead -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "../ClipperUtils.hpp" #include "../ExtrusionEntityCollection.hpp" #include "../Layer.hpp" @@ -72,7 +66,7 @@ namespace Slic3r { #define SUPPORT_SURFACES_OFFSET_PARAMETERS ClipperLib::jtSquare, 0. #ifdef SUPPORT_USE_AGG_RASTERIZER -static std::vector rasterize_polygons(const Vec2i &grid_size, const double pixel_size, const Point &left_bottom, const Polygons &polygons) +static std::vector rasterize_polygons(const Vec2i32 &grid_size, const double pixel_size, const Point &left_bottom, const Polygons &polygons) { std::vector data(grid_size.x() * grid_size.y()); agg::rendering_buffer rendering_buffer(data.data(), unsigned(grid_size.x()), unsigned(grid_size.y()), grid_size.x()); @@ -106,7 +100,7 @@ static std::vector rasterize_polygons(const Vec2i &grid_size, con return data; } // Grid has to have the boundary pixels unset. -static Polygons contours_simplified(const Vec2i &grid_size, const double pixel_size, Point left_bottom, const std::vector &grid, coord_t offset, bool fill_holes) +static Polygons contours_simplified(const Vec2i32 &grid_size, const double pixel_size, Point left_bottom, const std::vector &grid, coord_t offset, bool fill_holes) { assert(std::abs(2 * offset) < pixel_size - 10); @@ -542,13 +536,13 @@ public: // Add one empty column / row boundaries. m_bbox.offset(m_pixel_size); // Grid size fitting the support polygons plus one pixel boundary around the polygons. - Vec2i grid_size_raw(int(ceil((m_bbox.max.x() - m_bbox.min.x()) / m_pixel_size)), + Vec2i32 grid_size_raw(int(ceil((m_bbox.max.x() - m_bbox.min.x()) / m_pixel_size)), int(ceil((m_bbox.max.y() - m_bbox.min.y()) / m_pixel_size))); // Overlay macro blocks of (oversampling x oversampling) over the grid. - Vec2i grid_blocks((grid_size_raw.x() + oversampling - 1 - 2) / oversampling, + Vec2i32 grid_blocks((grid_size_raw.x() + oversampling - 1 - 2) / oversampling, (grid_size_raw.y() + oversampling - 1 - 2) / oversampling); // and resize the grid to fit the macro blocks + one pixel boundary. - m_grid_size = grid_blocks * oversampling + Vec2i(2, 2); + m_grid_size = grid_blocks * oversampling + Vec2i32(2, 2); assert(m_grid_size.x() >= grid_size_raw.x()); assert(m_grid_size.y() >= grid_size_raw.y()); m_grid2 = rasterize_polygons(m_grid_size, m_pixel_size, m_bbox.min, *m_support_polygons); @@ -837,7 +831,7 @@ private: #ifdef SUPPORT_USE_AGG_RASTERIZER // Dilate the trimming region (unmask the boundary pixels). - static std::vector dilate_trimming_region(const std::vector &trimming, const Vec2i &grid_size) + static std::vector dilate_trimming_region(const std::vector &trimming, const Vec2i32 &grid_size) { std::vector dilated(trimming.size(), 0); for (int r = 1; r + 1 < grid_size.y(); ++ r) @@ -858,7 +852,7 @@ private: } // Seed fill each of the (oversampling x oversampling) block up to the dilated trimming region. - static void seed_fill_block(std::vector &grid, Vec2i grid_size, const std::vector &trimming,const Vec2i &grid_blocks, int oversampling) + static void seed_fill_block(std::vector &grid, Vec2i32 grid_size, const std::vector &trimming,const Vec2i32 &grid_blocks, int oversampling) { int size = oversampling; int stride = grid_size.x(); @@ -968,7 +962,7 @@ private: coordf_t m_support_material_closing_radius; #ifdef SUPPORT_USE_AGG_RASTERIZER - Vec2i m_grid_size; + Vec2i32 m_grid_size; double m_pixel_size; BoundingBox m_bbox; std::vector m_grid2; diff --git a/src/libslic3r/Support/SupportMaterial.hpp b/src/libslic3r/Support/SupportMaterial.hpp index 1b421959ed..f626150f04 100644 --- a/src/libslic3r/Support/SupportMaterial.hpp +++ b/src/libslic3r/Support/SupportMaterial.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena -///|/ Copyright (c) Slic3r 2014 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SupportMaterial_hpp_ #define slic3r_SupportMaterial_hpp_ diff --git a/src/libslic3r/Support/SupportParameters.cpp b/src/libslic3r/Support/SupportParameters.cpp index c4cf2bee1c..8508206cb9 100644 --- a/src/libslic3r/Support/SupportParameters.cpp +++ b/src/libslic3r/Support/SupportParameters.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "../Print.hpp" #include "../PrintConfig.hpp" #include "../Slicing.hpp" diff --git a/src/libslic3r/Support/SupportParameters.hpp b/src/libslic3r/Support/SupportParameters.hpp index b042e7640f..8a63d9f3f0 100644 --- a/src/libslic3r/Support/SupportParameters.hpp +++ b/src/libslic3r/Support/SupportParameters.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SupportParameters_hpp_ #define slic3r_SupportParameters_hpp_ diff --git a/src/libslic3r/Support/TreeModelVolumes.cpp b/src/libslic3r/Support/TreeModelVolumes.cpp index 2e14e81f49..d77400309b 100644 --- a/src/libslic3r/Support/TreeModelVolumes.cpp +++ b/src/libslic3r/Support/TreeModelVolumes.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Tree supports by Thomas Rahm, losely based on Tree Supports by CuraEngine. // Original source of Thomas Rahm's tree supports: // https://github.com/ThomasRahm/CuraEngine diff --git a/src/libslic3r/Support/TreeModelVolumes.hpp b/src/libslic3r/Support/TreeModelVolumes.hpp index 57ca9fae7a..abe0a5535b 100644 --- a/src/libslic3r/Support/TreeModelVolumes.hpp +++ b/src/libslic3r/Support/TreeModelVolumes.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv, Oleksandra Iushchenko @YuSanka -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Tree supports by Thomas Rahm, losely based on Tree Supports by CuraEngine. // Original source of Thomas Rahm's tree supports: // https://github.com/ThomasRahm/CuraEngine @@ -34,8 +30,8 @@ namespace FFFTreeSupport { static constexpr const double SUPPORT_TREE_EXPONENTIAL_FACTOR = 1.5; -static constexpr const coord_t SUPPORT_TREE_EXPONENTIAL_THRESHOLD = scaled(1. * SUPPORT_TREE_EXPONENTIAL_FACTOR); -static constexpr const coord_t SUPPORT_TREE_COLLISION_RESOLUTION = scaled(0.5); +#define SUPPORT_TREE_EXPONENTIAL_THRESHOLD scaled(1. * SUPPORT_TREE_EXPONENTIAL_FACTOR) +#define SUPPORT_TREE_COLLISION_RESOLUTION scaled(0.5) static constexpr const bool SUPPORT_TREE_AVOID_SUPPORT_BLOCKER = true; class TreeModelVolumes diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index 24970e1347..1de97173dd 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Tree supports by Thomas Rahm, losely based on Tree Supports by CuraEngine. // Original source of Thomas Rahm's tree supports: // https://github.com/ThomasRahm/CuraEngine @@ -26,6 +22,7 @@ #include "../Polygon.hpp" #include "../Polyline.hpp" #include "../MutablePolygon.hpp" +#include "libslic3r.h" #include #include @@ -473,7 +470,7 @@ static std::optional> polyline_sample_next_point_at_dis { const double dist2 = sqr(dist); const auto dist2i = int64_t(dist2); - static constexpr const auto eps = scaled(0.01); + const auto eps = scaled(0.01); for (size_t i = start_idx + 1; i < polyline.size(); ++ i) { const Point p1 = polyline[i]; @@ -771,7 +768,7 @@ static std::optional> polyline_sample_next_point_at_dis Polygons collision_trimmed_buffer; auto collision_trimmed = [&collision_trimmed_buffer, &collision, &ret, distance]() -> const Polygons& { if (collision_trimmed_buffer.empty() && ! collision.empty()) - collision_trimmed_buffer = ClipperUtils::clip_clipper_polygons_with_subject_bbox(collision, get_extents(ret).inflated(std::max(0, distance) + SCALED_EPSILON)); + collision_trimmed_buffer = ClipperUtils::clip_clipper_polygons_with_subject_bbox(collision, get_extents(ret).inflated(std::max((coord_t)0, distance) + SCALED_EPSILON)); return collision_trimmed_buffer; }; @@ -835,6 +832,9 @@ public: { m_already_inserted.assign(num_support_layers, {}); this->min_xy_dist = this->config.xy_distance > this->config.xy_min_distance; + m_base_radius = scaled(0.01); + m_base_circle = Polygon{ make_circle(m_base_radius, SUPPORT_TREE_CIRCLE_RESOLUTION) }; + } const TreeModelVolumes &volumes; // Radius of the tree tip is large enough to be covered by an interface. @@ -970,8 +970,8 @@ private: std::vector &move_bounds; // Temps - static constexpr const auto m_base_radius = scaled(0.01); - const Polygon m_base_circle { make_circle(m_base_radius, SUPPORT_TREE_CIRCLE_RESOLUTION) }; + coord_t m_base_radius; + Polygon m_base_circle; // Mutexes, guards std::mutex m_mutex_movebounds; @@ -1566,6 +1566,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di current_elem.effective_radius_height += 1; coord_t radius = support_element_collision_radius(config, current_elem); + const auto _tiny_area_threshold = tiny_area_threshold(); if (settings.move) { increased = relevant_offset; if (overspeed > 0) { @@ -1586,7 +1587,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di if (mergelayer || current_elem.to_buildplate) { to_bp_data = safe_union(diff_clipped(increased, volumes.getAvoidance(radius, layer_idx - 1, settings.type, false, settings.use_min_distance))); - if (! current_elem.to_buildplate && area(to_bp_data) > tiny_area_threshold) { + if (! current_elem.to_buildplate && area(to_bp_data) > _tiny_area_threshold) { // mostly happening in the tip, but with merges one should check every time, just to be sure. current_elem.to_buildplate = true; // sometimes nodes that can reach the buildplate are marked as cant reach, tainting subtrees. This corrects it. BOOST_LOG_TRIVIAL(debug) << "Corrected taint leading to a wrong to model value on layer " << layer_idx - 1 << " targeting " << @@ -1598,7 +1599,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di to_model_data = safe_union(diff_clipped(increased, volumes.getAvoidance(radius, layer_idx - 1, settings.type, true, settings.use_min_distance))); if (!current_elem.to_model_gracious) { - if (mergelayer && area(to_model_data) >= tiny_area_threshold) { + if (mergelayer && area(to_model_data) >= _tiny_area_threshold) { current_elem.to_model_gracious = true; BOOST_LOG_TRIVIAL(debug) << "Corrected taint leading to a wrong non gracious value on layer " << layer_idx - 1 << " targeting " << current_elem.target_height << " with radius " << radius; @@ -1610,7 +1611,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di check_layer_data = current_elem.to_buildplate ? to_bp_data : to_model_data; - if (settings.increase_radius && area(check_layer_data) > tiny_area_threshold) { + if (settings.increase_radius && area(check_layer_data) > _tiny_area_threshold) { auto validWithRadius = [&](coord_t next_radius) { if (volumes.ceilRadius(next_radius, settings.use_min_distance) <= volumes.ceilRadius(radius, settings.use_min_distance)) return true; @@ -1626,7 +1627,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di volumes.getAvoidance(next_radius, layer_idx - 1, settings.type, true, settings.use_min_distance) : volumes.getCollision(next_radius, layer_idx - 1, settings.use_min_distance)); Polygons check_layer_data_2 = current_elem.to_buildplate ? to_bp_data_2 : to_model_data_2; - return area(check_layer_data_2) > tiny_area_threshold; + return area(check_layer_data_2) > _tiny_area_threshold; }; coord_t ceil_radius_before = volumes.ceilRadius(radius, settings.use_min_distance); @@ -1669,7 +1670,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di volumes.getCollision(radius, layer_idx - 1, settings.use_min_distance) )); check_layer_data = current_elem.to_buildplate ? to_bp_data : to_model_data; - if (area(check_layer_data) < tiny_area_threshold) { + if (area(check_layer_data) < _tiny_area_threshold) { BOOST_LOG_TRIVIAL(error) << "Lost area by doing catch up from " << ceil_radius_before << " to radius " << volumes.ceilRadius(support_element_collision_radius(config, current_elem), settings.use_min_distance); tree_supports_show_error("Area lost catching up radius. May not cause visible malformation."sv, true); @@ -1677,7 +1678,7 @@ static Point move_inside_if_outside(const Polygons &polygons, Point from, int di } } - return area(check_layer_data) > tiny_area_threshold ? std::optional(current_elem) : std::optional(); + return area(check_layer_data) > _tiny_area_threshold ? std::optional(current_elem) : std::optional(); } struct SupportElementInfluenceAreas { @@ -2146,13 +2147,14 @@ static bool merge_influence_areas_two_elements( merging_to_bp ? smaller_rad.areas.to_bp_areas : smaller_rad.areas.to_model_areas, merging_to_bp ? bigger_rad.areas.to_bp_areas : bigger_rad.areas.to_model_areas); + const auto _tiny_area_threshold = tiny_area_threshold(); // dont use empty as a line is not empty, but for this use-case it very well may be (and would be one layer down as union does not keep lines) // check if the overlap is large enough (Small ares tend to attract rounding errors in clipper). - if (area(intersect) <= tiny_area_threshold) + if (area(intersect) <= _tiny_area_threshold) return false; // While 0.025 was guessed as enough, i did not have reason to change it. - if (area(offset(intersect, scaled(-0.025), jtMiter, 1.2)) <= tiny_area_threshold) + if (area(offset(intersect, scaled(-0.025), jtMiter, 1.2)) <= _tiny_area_threshold) return false; #ifdef TREES_MERGE_RATHER_LATER @@ -2416,6 +2418,7 @@ static void create_layer_pathing(const TreeModelVolumes &volumes, const TreeSupp LayerIndex last_merge_layer_idx = move_bounds.size(); bool new_element = false; + const auto _tiny_area_threshold = tiny_area_threshold(); // Ensures at least one merge operation per 3mm height, 50 layers, 1 mm movement of slow speed or 5mm movement of fast speed (whatever is lowest). Values were guessed. size_t max_merge_every_x_layers = std::min(std::min(5000 / (std::max(config.maximum_move_distance, coord_t(100))), 1000 / std::max(config.maximum_move_distance_slow, coord_t(20))), 3000 / config.layer_height); @@ -2446,12 +2449,12 @@ static void create_layer_pathing(const TreeModelVolumes &volumes, const TreeSupp // Place already fully constructed elements to the output, remove them from influence_areas. SupportElements &this_layer = move_bounds[layer_idx - 1]; influence_areas.erase(std::remove_if(influence_areas.begin(), influence_areas.end(), - [&this_layer, layer_idx](SupportElementMerging &elem) { + [&this_layer, &_tiny_area_threshold, layer_idx](SupportElementMerging &elem) { if (elem.areas.influence_areas.empty()) // This area was removed completely due to collisions. return true; if (elem.areas.to_bp_areas.empty() && elem.areas.to_model_areas.empty()) { - if (area(elem.areas.influence_areas) < tiny_area_threshold) { + if (area(elem.areas.influence_areas) < _tiny_area_threshold) { BOOST_LOG_TRIVIAL(error) << "Insert Error of Influence area bypass on layer " << layer_idx - 1; tree_supports_show_error("Insert error of area after bypassing merge.\n"sv, true); } @@ -2484,7 +2487,7 @@ static void create_layer_pathing(const TreeModelVolumes &volumes, const TreeSupp for (SupportElementMerging &elem : influence_areas) if (! elem.areas.influence_areas.empty()) { Polygons new_area = safe_union(elem.areas.influence_areas); - if (area(new_area) < tiny_area_threshold) { + if (area(new_area) < _tiny_area_threshold) { BOOST_LOG_TRIVIAL(error) << "Insert Error of Influence area on layer " << layer_idx - 1 << ". Origin of " << elem.parents.size() << " areas. Was to bp " << elem.state.to_buildplate; tree_supports_show_error("Insert error of area after merge.\n"sv, true); } @@ -3049,6 +3052,7 @@ static void drop_non_gracious_areas( std::vector &support_layer_storage, std::function throw_on_cancel) { + const auto _tiny_area_threshold = tiny_area_threshold(); std::vector>> dropped_down_areas(linear_data.size()); tbb::parallel_for(tbb::blocked_range(0, linear_data.size()), [&](const tbb::blocked_range &range) { @@ -3057,7 +3061,7 @@ static void drop_non_gracious_areas( if (const DrawArea &draw_element = linear_data[idx]; ! draw_element.element->state.to_model_gracious && draw_element.child_element == nullptr) { Polygons rest_support; const LayerIndex layer_idx_first = draw_element.element->state.layer_idx - 1; - for (LayerIndex layer_idx = layer_idx_first; area(rest_support) > tiny_area_threshold && layer_idx >= 0; -- layer_idx) { + for (LayerIndex layer_idx = layer_idx_first; area(rest_support) > _tiny_area_threshold && layer_idx >= 0; -- layer_idx) { rest_support = diff_clipped(layer_idx == layer_idx_first ? draw_element.polygons : rest_support, volumes.getCollision(0, layer_idx, false)); dropped_down_areas[idx].emplace_back(layer_idx, rest_support); } diff --git a/src/libslic3r/Support/TreeSupport.hpp b/src/libslic3r/Support/TreeSupport.hpp index 76387146f7..c79f1d4a3a 100644 --- a/src/libslic3r/Support/TreeSupport.hpp +++ b/src/libslic3r/Support/TreeSupport.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Tree supports by Thomas Rahm, losely based on Tree Supports by CuraEngine. // Original source of Thomas Rahm's tree supports: // https://github.com/ThomasRahm/CuraEngine diff --git a/src/libslic3r/Support/TreeSupport3D.cpp b/src/libslic3r/Support/TreeSupport3D.cpp index 434036e500..ba3b1810ce 100644 --- a/src/libslic3r/Support/TreeSupport3D.cpp +++ b/src/libslic3r/Support/TreeSupport3D.cpp @@ -133,7 +133,7 @@ static inline void check_self_intersections(const ExPolygon &expoly, const std:: #endif // TREE_SUPPORT_SHOW_ERRORS_WIN32 } -static constexpr const auto tiny_area_threshold = sqr(scaled(0.001)); +// static constexpr const auto tiny_area_threshold = sqr(scaled(0.001)); static std::vector>> group_meshes(const Print &print, const std::vector &print_object_ids) { diff --git a/src/libslic3r/Support/TreeSupportCommon.cpp b/src/libslic3r/Support/TreeSupportCommon.cpp index 34928a9182..98796784b1 100644 --- a/src/libslic3r/Support/TreeSupportCommon.cpp +++ b/src/libslic3r/Support/TreeSupportCommon.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Tree supports by Thomas Rahm, losely based on Tree Supports by CuraEngine. // Original source of Thomas Rahm's tree supports: // https://github.com/ThomasRahm/CuraEngine @@ -78,7 +74,7 @@ TreeSupportMeshGroupSettings::TreeSupportMeshGroupSettings(const PrintObject &pr this->support_tree_branch_diameter_angle = std::clamp(config.tree_support_branch_diameter_angle * M_PI / 180., 0., 0.5 * M_PI - EPSILON); this->support_tree_top_rate = config.tree_support_top_rate.value; // percent // this->support_tree_tip_diameter = this->support_line_width; - this->support_tree_tip_diameter = std::clamp(scaled(config.tree_support_tip_diameter.value), 0, this->support_tree_branch_diameter); + this->support_tree_tip_diameter = std::clamp(scaled(config.tree_support_tip_diameter.value), (coord_t)0, this->support_tree_branch_diameter); std::cout << "\n---------------\n" << "layer_height: " << layer_height << "\nresolution: " << resolution << "\nmin_feature_size: " << min_feature_size diff --git a/src/libslic3r/Support/TreeSupportCommon.hpp b/src/libslic3r/Support/TreeSupportCommon.hpp index 52cfe48522..ee7d4b3338 100644 --- a/src/libslic3r/Support/TreeSupportCommon.hpp +++ b/src/libslic3r/Support/TreeSupportCommon.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // Tree supports by Thomas Rahm, losely based on Tree Supports by CuraEngine. // Original source of Thomas Rahm's tree supports: // https://github.com/ThomasRahm/CuraEngine @@ -452,7 +448,7 @@ private: static constexpr const bool polygons_strictly_simple = false; -static constexpr const auto tiny_area_threshold = sqr(scaled(0.001)); +inline double tiny_area_threshold() { return sqr(scaled(0.001)); } void tree_supports_show_error(std::string_view message, bool critical); diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 762a7ecf04..b022607bf7 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -167,7 +167,7 @@ void export_print_z_polygons_and_extrusions_to_svg( #endif /* SLIC3R_DEBUG */ #ifdef SUPPORT_USE_AGG_RASTERIZER -static std::vector rasterize_polygons(const Vec2i &grid_size, const double pixel_size, const Point &left_bottom, const Polygons &polygons) +static std::vector rasterize_polygons(const Vec2i32 &grid_size, const double pixel_size, const Point &left_bottom, const Polygons &polygons) { std::vector data(grid_size.x() * grid_size.y()); agg::rendering_buffer rendering_buffer(data.data(), unsigned(grid_size.x()), unsigned(grid_size.y()), grid_size.x()); @@ -201,7 +201,7 @@ static std::vector rasterize_polygons(const Vec2i &grid_size, con return data; } // Grid has to have the boundary pixels unset. -static Polygons contours_simplified(const Vec2i &grid_size, const double pixel_size, Point left_bottom, const std::vector &grid, coord_t offset, bool fill_holes) +static Polygons contours_simplified(const Vec2i32 &grid_size, const double pixel_size, Point left_bottom, const std::vector &grid, coord_t offset, bool fill_holes) { assert(std::abs(2 * offset) < pixel_size - 10); @@ -862,13 +862,13 @@ public: // Add one empty column / row boundaries. m_bbox.offset(m_pixel_size); // Grid size fitting the support polygons plus one pixel boundary around the polygons. - Vec2i grid_size_raw(int(ceil((m_bbox.max.x() - m_bbox.min.x()) / m_pixel_size)), + Vec2i32 grid_size_raw(int(ceil((m_bbox.max.x() - m_bbox.min.x()) / m_pixel_size)), int(ceil((m_bbox.max.y() - m_bbox.min.y()) / m_pixel_size))); // Overlay macro blocks of (oversampling x oversampling) over the grid. - Vec2i grid_blocks((grid_size_raw.x() + oversampling - 1 - 2) / oversampling, + Vec2i32 grid_blocks((grid_size_raw.x() + oversampling - 1 - 2) / oversampling, (grid_size_raw.y() + oversampling - 1 - 2) / oversampling); // and resize the grid to fit the macro blocks + one pixel boundary. - m_grid_size = grid_blocks * oversampling + Vec2i(2, 2); + m_grid_size = grid_blocks * oversampling + Vec2i32(2, 2); assert(m_grid_size.x() >= grid_size_raw.x()); assert(m_grid_size.y() >= grid_size_raw.y()); m_grid2 = rasterize_polygons(m_grid_size, m_pixel_size, m_bbox.min, *m_support_polygons); @@ -1150,7 +1150,7 @@ private: #ifdef SUPPORT_USE_AGG_RASTERIZER // Dilate the trimming region (unmask the boundary pixels). - static std::vector dilate_trimming_region(const std::vector &trimming, const Vec2i &grid_size) + static std::vector dilate_trimming_region(const std::vector &trimming, const Vec2i32 &grid_size) { std::vector dilated(trimming.size(), 0); for (int r = 1; r + 1 < grid_size.y(); ++ r) @@ -1171,7 +1171,7 @@ private: } // Seed fill each of the (oversampling x oversampling) block up to the dilated trimming region. - static void seed_fill_block(std::vector &grid, Vec2i grid_size, const std::vector &trimming,const Vec2i &grid_blocks, int oversampling) + static void seed_fill_block(std::vector &grid, Vec2i32 grid_size, const std::vector &trimming,const Vec2i32 &grid_blocks, int oversampling) { int size = oversampling; int stride = grid_size.x(); @@ -1281,7 +1281,7 @@ private: coordf_t m_support_material_closing_radius; #ifdef SUPPORT_USE_AGG_RASTERIZER - Vec2i m_grid_size; + Vec2i32 m_grid_size; double m_pixel_size; BoundingBox m_bbox; std::vector m_grid2; diff --git a/src/libslic3r/SupportSpotsGenerator.cpp b/src/libslic3r/SupportSpotsGenerator.cpp index c7c205fc45..057a64b0f8 100644 --- a/src/libslic3r/SupportSpotsGenerator.cpp +++ b/src/libslic3r/SupportSpotsGenerator.cpp @@ -224,7 +224,7 @@ private: Vec3f cell_size; Vec3f origin; Vec3f size; - Vec3i cell_count; + Vec3i32 cell_count; std::unordered_set taken_cells{}; @@ -239,16 +239,16 @@ public: origin = min; size = max - min; - cell_count = size.cwiseQuotient(cell_size).cast() + Vec3i::Ones(); + cell_count = size.cwiseQuotient(cell_size).cast() + Vec3i32::Ones(); } - Vec3i to_cell_coords(const Vec3f &position) const + Vec3i32 to_cell_coords(const Vec3f &position) const { - Vec3i cell_coords = (position - this->origin).cwiseQuotient(this->cell_size).cast(); + Vec3i32 cell_coords = (position - this->origin).cwiseQuotient(this->cell_size).cast(); return cell_coords; } - size_t to_cell_index(const Vec3i &cell_coords) const + size_t to_cell_index(const Vec3i32 &cell_coords) const { #ifdef DETAILED_DEBUG_LOGS assert(cell_coords.x() >= 0); @@ -261,7 +261,7 @@ public: return cell_coords.z() * cell_count.x() * cell_count.y() + cell_coords.y() * cell_count.x() + cell_coords.x(); } - Vec3f get_cell_center(const Vec3i &cell_coords) const + Vec3f get_cell_center(const Vec3i32 &cell_coords) const { return origin + cell_coords.cast().cwiseProduct(this->cell_size) + this->cell_size.cwiseQuotient(Vec3f(2.0f, 2.0f, 2.0f)); } diff --git a/src/libslic3r/SurfaceMesh.hpp b/src/libslic3r/SurfaceMesh.hpp index 976387c21f..82dff2e22d 100644 --- a/src/libslic3r/SurfaceMesh.hpp +++ b/src/libslic3r/SurfaceMesh.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Lukáš Matěna @lukasmatena -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SurfaceMesh_hpp_ #define slic3r_SurfaceMesh_hpp_ @@ -153,12 +149,12 @@ public: bool is_border(Halfedge_index h) const { return m_face_neighbors[h.m_face][h.m_side] == -1; } bool is_same_vertex(const Vertex_index& a, const Vertex_index& b) const { return m_its.indices[a.m_face][a.m_vertex_idx] == m_its.indices[b.m_face][b.m_vertex_idx]; } - Vec3i get_face_neighbors(Face_index face_id) const { assert(int(face_id) < int(m_face_neighbors.size())); return m_face_neighbors[face_id]; } + Vec3i32 get_face_neighbors(Face_index face_id) const { assert(int(face_id) < int(m_face_neighbors.size())); return m_face_neighbors[face_id]; } private: - const std::vector m_face_neighbors; + const std::vector m_face_neighbors; const indexed_triangle_set& m_its; }; diff --git a/src/libslic3r/TextConfiguration.hpp b/src/libslic3r/TextConfiguration.hpp index 8da67cdd0a..40c8c836ac 100644 --- a/src/libslic3r/TextConfiguration.hpp +++ b/src/libslic3r/TextConfiguration.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_TextConfiguration_hpp_ #define slic3r_TextConfiguration_hpp_ diff --git a/src/libslic3r/Timer.cpp b/src/libslic3r/Timer.cpp index 18dd844bc8..91f3b0f09e 100644 --- a/src/libslic3r/Timer.cpp +++ b/src/libslic3r/Timer.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Timer.hpp" #include diff --git a/src/libslic3r/Timer.hpp b/src/libslic3r/Timer.hpp index 2fd63f234e..f2e5dde1a8 100644 --- a/src/libslic3r/Timer.hpp +++ b/src/libslic3r/Timer.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2023 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef libslic3r_Timer_hpp_ #define libslic3r_Timer_hpp_ diff --git a/src/libslic3r/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp index 973d6c6d33..ecb99bf643 100644 --- a/src/libslic3r/TriangleMesh.cpp +++ b/src/libslic3r/TriangleMesh.cpp @@ -1,18 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2019 Jason Tibbitts @jasontibbitts -///|/ Copyright (c) 2019 Sijmen Schoon -///|/ Copyright (c) 2016 Joseph Lenox @lordofhyphens -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2015 Maksim Derbasov @ntfshard -///|/ Copyright (c) 2014 Miro Hrončok @hroncok -///|/ Copyright (c) 2014 Petr Ledvina @ledvinap -///|/ -///|/ ported from lib/Slic3r/TriangleMesh.pm: -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 - 2013 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Exception.hpp" #include "TriangleMesh.hpp" #include "TriangleMeshSlicer.hpp" @@ -63,17 +48,17 @@ static void fill_initial_stats(const indexed_triangle_set &its, TriangleMeshStat out.volume = its_volume(its); update_bounding_box(its, out); - const std::vector face_neighbors = its_face_neighbors(its); + const std::vector face_neighbors = its_face_neighbors(its); out.number_of_parts = its_number_of_patches(its, face_neighbors); out.open_edges = its_num_open_edges(face_neighbors); } -TriangleMesh::TriangleMesh(const std::vector &vertices, const std::vector &faces) : its { faces, vertices } +TriangleMesh::TriangleMesh(const std::vector &vertices, const std::vector &faces) : its { faces, vertices } { fill_initial_stats(this->its, m_stats); } -TriangleMesh::TriangleMesh(std::vector &&vertices, const std::vector &&faces) : its { std::move(faces), std::move(vertices) } +TriangleMesh::TriangleMesh(std::vector &&vertices, const std::vector &&faces) : its { std::move(faces), std::move(vertices) } { fill_initial_stats(this->its, m_stats); } @@ -224,21 +209,21 @@ bool TriangleMesh::from_stl(stl_file& stl, bool repair) return true; } -bool TriangleMesh::ReadSTLFile(const char* input_file, bool repair, ImportstlProgressFn stlFn) -{ +bool TriangleMesh::ReadSTLFile(const char *input_file, bool repair, ImportstlProgressFn stlFn, int custom_header_length) +{ stl_file stl; - if (! stl_open(&stl, input_file, stlFn)) + if (!stl_open(&stl, input_file, stlFn, custom_header_length)) return false; return from_stl(stl, repair); } bool TriangleMesh::write_ascii(const char* output_file) -{ +{ return its_write_stl_ascii(output_file, "", this->its); } bool TriangleMesh::write_binary(const char* output_file) -{ +{ return its_write_stl_binary(output_file, "", this->its); } @@ -578,9 +563,9 @@ static std::vector create_edge_map( // Map from a face edge to a unique edge identifier or -1 if no neighbor exists. // Two neighbor faces share a unique edge identifier even if they are flipped. template -static inline std::vector its_face_edge_ids_impl(const indexed_triangle_set &its, FaceFilter face_filter, ThrowOnCancelCallback throw_on_cancel) +static inline std::vector its_face_edge_ids_impl(const indexed_triangle_set &its, FaceFilter face_filter, ThrowOnCancelCallback throw_on_cancel) { - std::vector out(its.indices.size(), Vec3i(-1, -1, -1)); + std::vector out(its.indices.size(), Vec3i32(-1, -1, -1)); std::vector edges_map = create_edge_map(its, face_filter, throw_on_cancel); @@ -628,36 +613,36 @@ static inline std::vector its_face_edge_ids_impl(const indexed_triangle_s return out; } -std::vector its_face_edge_ids(const indexed_triangle_set &its) +std::vector its_face_edge_ids(const indexed_triangle_set &its) { return its_face_edge_ids_impl(its, [](const uint32_t){ return true; }, [](){}); } -std::vector its_face_edge_ids(const indexed_triangle_set &its, std::function throw_on_cancel_callback) +std::vector its_face_edge_ids(const indexed_triangle_set &its, std::function throw_on_cancel_callback) { return its_face_edge_ids_impl(its, [](const uint32_t){ return true; }, throw_on_cancel_callback); } -std::vector its_face_edge_ids(const indexed_triangle_set &its, const std::vector &face_mask) +std::vector its_face_edge_ids(const indexed_triangle_set &its, const std::vector &face_mask) { return its_face_edge_ids_impl(its, [&face_mask](const uint32_t idx){ return face_mask[idx]; }, [](){}); } // Having the face neighbors available, assign unique edge IDs to face edges for chaining of polygons over slices. -std::vector its_face_edge_ids(const indexed_triangle_set &its, std::vector &face_neighbors, bool assign_unbound_edges, int *num_edges) +std::vector its_face_edge_ids(const indexed_triangle_set &its, std::vector &face_neighbors, bool assign_unbound_edges, int *num_edges) { // out elements are not initialized! - std::vector out(face_neighbors.size()); + std::vector out(face_neighbors.size()); int last_edge_id = 0; for (int i = 0; i < int(face_neighbors.size()); ++ i) { const stl_triangle_vertex_indices &triangle = its.indices[i]; - const Vec3i &neighbors = face_neighbors[i]; + const Vec3i32 &neighbors = face_neighbors[i]; for (int j = 0; j < 3; ++ j) { int n = neighbors[j]; if (n > i) { const stl_triangle_vertex_indices &triangle2 = its.indices[n]; int edge_id = last_edge_id ++; - Vec2i edge = its_triangle_edge(triangle, j); + Vec2i32 edge = its_triangle_edge(triangle, j); // First find an edge with opposite orientation. std::swap(edge(0), edge(1)); int k = its_triangle_edge_index(triangle2, edge); @@ -804,7 +789,7 @@ bool its_store_triangle(const indexed_triangle_set &its, size_t triangle_index) { if (its.indices.size() <= triangle_index) return false; - Vec3i t = its.indices[triangle_index]; + Vec3i32 t = its.indices[triangle_index]; indexed_triangle_set its2; its2.indices = {{0, 1, 2}}; its2.vertices = {its.vertices[t[0]], its.vertices[t[1]], @@ -822,8 +807,8 @@ bool its_store_triangles(const indexed_triangle_set &its, std::map vertex_map; for (auto ti : triangles) { if (its.indices.size() <= ti) return false; - Vec3i t = its.indices[ti]; - Vec3i new_t; + Vec3i32 t = its.indices[ti]; + Vec3i32 new_t; for (size_t i = 0; i < 3; ++i) { size_t vi = t[i]; auto it = vertex_map.find(vi); @@ -1301,7 +1286,7 @@ indexed_triangle_set its_make_snap(double r, double h, float space_proportion, f indexed_triangle_set its_convex_hull(const std::vector &pts) { std::vector dst_vertices; - std::vector dst_facets; + std::vector dst_facets; if (! pts.empty()) { // The qhull call: @@ -1337,7 +1322,7 @@ indexed_triangle_set its_convex_hull(const std::vector &pts) #endif // NDEBUG for (const orgQhull::QhullFacet &facet : qhull.facetList()) { // Collect face vertices first, allocate unique vertices in dst_vertices based on QHull's vertex ID. - Vec3i indices; + Vec3i32 indices; int cnt = 0; for (const orgQhull::QhullVertex vertex : facet.vertices()) { int id = vertex.id(); @@ -1397,7 +1382,7 @@ void its_merge(indexed_triangle_set &A, const indexed_triangle_set &B) A.indices.insert(A.indices.end(), B.indices.begin(), B.indices.end()); for(size_t n = N_f; n < A.indices.size(); n++) - A.indices[n] += Vec3i{N, N, N}; + A.indices[n] += Vec3i32{N, N, N}; } void its_merge(indexed_triangle_set &A, const std::vector &triangles) @@ -1466,7 +1451,7 @@ size_t its_number_of_patches(const indexed_triangle_set &its) { return its_number_of_patches<>(its); } -size_t its_number_of_patches(const indexed_triangle_set &its, const std::vector &face_neighbors) +size_t its_number_of_patches(const indexed_triangle_set &its, const std::vector &face_neighbors) { return its_number_of_patches<>(ItsNeighborsWrapper{ its, face_neighbors }); } @@ -1476,15 +1461,15 @@ bool its_is_splittable(const indexed_triangle_set &its) { return its_is_splittable<>(its); } -bool its_is_splittable(const indexed_triangle_set &its, const std::vector &face_neighbors) +bool its_is_splittable(const indexed_triangle_set &its, const std::vector &face_neighbors) { return its_is_splittable<>(ItsNeighborsWrapper{ its, face_neighbors }); } -size_t its_num_open_edges(const std::vector &face_neighbors) +size_t its_num_open_edges(const std::vector &face_neighbors) { size_t num_open_edges = 0; - for (Vec3i neighbors : face_neighbors) + for (Vec3i32 neighbors : face_neighbors) for (int n : neighbors) if (n < 0) ++ num_open_edges; @@ -1521,12 +1506,12 @@ void VertexFaceIndex::create(const indexed_triangle_set &its) m_vertex_to_face_start.front() = 0; } -std::vector its_face_neighbors(const indexed_triangle_set &its) +std::vector its_face_neighbors(const indexed_triangle_set &its) { return create_face_neighbors_index(ex_seq, its); } -std::vector its_face_neighbors_par(const indexed_triangle_set &its) +std::vector its_face_neighbors_par(const indexed_triangle_set &its) { return create_face_neighbors_index(ex_tbb, its); } diff --git a/src/libslic3r/TriangleMesh.hpp b/src/libslic3r/TriangleMesh.hpp index fb6951c1df..a30d8836ea 100644 --- a/src/libslic3r/TriangleMesh.hpp +++ b/src/libslic3r/TriangleMesh.hpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2017 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966, Filip Sykala @Jony01 -///|/ Copyright (c) 2019 Sijmen Schoon -///|/ Copyright (c) 2016 Joseph Lenox @lordofhyphens -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/TriangleMesh.pm: -///|/ Copyright (c) Slic3r 2011 - 2014 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2012 - 2013 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_TriangleMesh_hpp_ #define slic3r_TriangleMesh_hpp_ @@ -99,13 +88,13 @@ class TriangleMesh { public: TriangleMesh() = default; - TriangleMesh(const std::vector &vertices, const std::vector &faces); - TriangleMesh(std::vector &&vertices, const std::vector &&faces); + TriangleMesh(const std::vector &vertices, const std::vector &faces); + TriangleMesh(std::vector &&vertices, const std::vector &&faces); explicit TriangleMesh(const indexed_triangle_set &M); explicit TriangleMesh(indexed_triangle_set &&M, const RepairedMeshErrors& repaired_errors = RepairedMeshErrors()); void clear() { this->its.clear(); this->m_stats.clear(); } bool from_stl(stl_file& stl, bool repair = true); - bool ReadSTLFile(const char* input_file, bool repair = true, ImportstlProgressFn stlFn = nullptr); + bool ReadSTLFile(const char *input_file, bool repair = true, ImportstlProgressFn stlFn = nullptr, int custom_header_length = 80); bool write_ascii(const char* output_file); bool write_binary(const char* output_file); float volume(); @@ -201,15 +190,15 @@ private: // Map from a face edge to a unique edge identifier or -1 if no neighbor exists. // Two neighbor faces share a unique edge identifier even if they are flipped. // Used for chaining slice lines into polygons. -std::vector its_face_edge_ids(const indexed_triangle_set &its); -std::vector its_face_edge_ids(const indexed_triangle_set &its, std::function throw_on_cancel_callback); -std::vector its_face_edge_ids(const indexed_triangle_set &its, const std::vector &face_mask); +std::vector its_face_edge_ids(const indexed_triangle_set &its); +std::vector its_face_edge_ids(const indexed_triangle_set &its, std::function throw_on_cancel_callback); +std::vector its_face_edge_ids(const indexed_triangle_set &its, const std::vector &face_mask); // Having the face neighbors available, assign unique edge IDs to face edges for chaining of polygons over slices. -std::vector its_face_edge_ids(const indexed_triangle_set &its, std::vector &face_neighbors, bool assign_unbound_edges = false, int *num_edges = nullptr); +std::vector its_face_edge_ids(const indexed_triangle_set &its, std::vector &face_neighbors, bool assign_unbound_edges = false, int *num_edges = nullptr); // Create index that gives neighbor faces for each face. Ignores face orientations. -std::vector its_face_neighbors(const indexed_triangle_set &its); -std::vector its_face_neighbors_par(const indexed_triangle_set &its); +std::vector its_face_neighbors(const indexed_triangle_set &its); +std::vector its_face_neighbors_par(const indexed_triangle_set &its); // After applying a transformation with negative determinant, flip the faces to keep the transformed mesh volume positive. void its_flip_triangles(indexed_triangle_set &its); @@ -230,18 +219,18 @@ bool its_store_triangle(const indexed_triangle_set &its, const char *obj_filenam bool its_store_triangles(const indexed_triangle_set &its, const char *obj_filename, const std::vector& triangles); std::vector its_split(const indexed_triangle_set &its); -std::vector its_split(const indexed_triangle_set &its, std::vector &face_neighbors); +std::vector its_split(const indexed_triangle_set &its, std::vector &face_neighbors); // Number of disconnected patches (faces are connected if they share an edge, shared edge defined with 2 shared vertex indices). size_t its_number_of_patches(const indexed_triangle_set &its); -size_t its_number_of_patches(const indexed_triangle_set &its, const std::vector &face_neighbors); +size_t its_number_of_patches(const indexed_triangle_set &its, const std::vector &face_neighbors); // Same as its_number_of_patches(its) > 1, but faster. bool its_is_splittable(const indexed_triangle_set &its); -bool its_is_splittable(const indexed_triangle_set &its, const std::vector &face_neighbors); +bool its_is_splittable(const indexed_triangle_set &its, const std::vector &face_neighbors); // Calculate number of unconnected face edges. There should be no unconnected edge in a manifold mesh. size_t its_num_open_edges(const indexed_triangle_set &its); -size_t its_num_open_edges(const std::vector &face_neighbors); +size_t its_num_open_edges(const std::vector &face_neighbors); // Shrink the vectors of its.vertices and its.faces to a minimum size by reallocating the two vectors. void its_shrink_to_fit(indexed_triangle_set &its); @@ -262,14 +251,14 @@ inline int its_triangle_vertex_index(const stl_triangle_vertex_indices &triangle vertex_idx == triangle_indices[2] ? 2 : -1; } -inline Vec2i its_triangle_edge(const stl_triangle_vertex_indices &triangle_indices, int edge_idx) +inline Vec2i32 its_triangle_edge(const stl_triangle_vertex_indices &triangle_indices, int edge_idx) { int next_edge_idx = (edge_idx == 2) ? 0 : edge_idx + 1; return { triangle_indices[edge_idx], triangle_indices[next_edge_idx] }; } // Index of an edge inside triangle. -inline int its_triangle_edge_index(const stl_triangle_vertex_indices &triangle_indices, const Vec2i &triangle_edge) +inline int its_triangle_edge_index(const stl_triangle_vertex_indices &triangle_indices, const Vec2i32 &triangle_edge) { return triangle_edge(0) == triangle_indices[0] && triangle_edge(1) == triangle_indices[1] ? 0 : triangle_edge(0) == triangle_indices[1] && triangle_edge(1) == triangle_indices[2] ? 1 : diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index ac01d0e0c9..4e102887e3 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Pavel Mikuš @Godrak, Lukáš Hejl @hejllukas -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "ClipperUtils.hpp" #include "Geometry.hpp" #include "Tesselate.hpp" @@ -163,7 +159,7 @@ static FacetSliceType slice_facet( // 3 vertices of the triangle, XY scaled. Z scaled or unscaled (same as slice_z). const stl_vertex *vertices, const stl_triangle_vertex_indices &indices, - const Vec3i &edge_ids, + const Vec3i32 &edge_ids, const int idx_vertex_lowest, const bool horizontal, IntersectionLine &line_out) @@ -330,7 +326,7 @@ static FacetSliceType slice_facet_for_cut_mesh( // 3 vertices of the triangle, XY scaled. Z scaled or unscaled (same as slice_z). const stl_vertex * vertices, const stl_triangle_vertex_indices &indices, - const Vec3i & edge_ids, + const Vec3i32 & edge_ids, const int idx_vertex_lowest, const bool horizontal, IntersectionLine & line_out) @@ -482,7 +478,7 @@ void slice_facet_at_zs( const std::vector &mesh_vertices, const TransformVertex &transform_vertex_fn, const stl_triangle_vertex_indices &indices, - const Vec3i &edge_ids, + const Vec3i32 &edge_ids, // Scaled or unscaled zs. If vertices have their zs scaled or transform_vertex_fn scales them, then zs have to be scaled as well. const std::vector &zs, std::vector &lines, @@ -516,7 +512,7 @@ static inline std::vector slice_make_lines( const std::vector &vertices, const TransformVertex &transform_vertex_fn, const std::vector &indices, - const std::vector &face_edge_ids, + const std::vector &face_edge_ids, const std::vector &zs, const ThrowOnCancel throw_on_cancel_fn) { @@ -540,14 +536,14 @@ static inline IntersectionLines slice_make_lines( const std::vector &mesh_vertices, const TransformVertex &transform_vertex_fn, const std::vector &mesh_faces, - const std::vector &face_edge_ids, + const std::vector &face_edge_ids, const float plane_z, FaceFilter face_filter) { IntersectionLines lines; for (int face_idx = 0; face_idx < int(mesh_faces.size()); ++ face_idx) if (face_filter(face_idx)) { - const Vec3i &indices = mesh_faces[face_idx]; + const Vec3i32 &indices = mesh_faces[face_idx]; stl_vertex vertices[3] { transform_vertex_fn(mesh_vertices[indices(0)]), transform_vertex_fn(mesh_vertices[indices(1)]), transform_vertex_fn(mesh_vertices[indices(2)]) }; // find facet extents const float min_z = fminf(vertices[0].z(), fminf(vertices[1].z(), vertices[2].z())); @@ -593,8 +589,8 @@ void slice_facet_with_slabs( const std::vector &mesh_vertices, const std::vector &mesh_triangles, const size_t facet_idx, - const Vec3i &facet_neighbors, - const Vec3i &facet_edge_ids, + const Vec3i32 &facet_neighbors, + const Vec3i32 &facet_edge_ids, // Increase edge_ids at the top plane of the slab edges by num_edges to allow chaining // from bottom plane of the slab to the top plane of the slab and vice versa. const int num_edges, @@ -915,8 +911,8 @@ template inline std::pair slice_slabs_make_lines( const std::vector &vertices, const std::vector &indices, - const std::vector &face_neighbors, - const std::vector &face_edge_ids, + const std::vector &face_neighbors, + const std::vector &face_edge_ids, // Total number of edges. All face_edge_ids are lower than num_edges. // num_edges will be used to distinguish between intersections with the top and bottom plane. const int num_edges, @@ -949,9 +945,9 @@ inline std::pair slice_slabs_make_lines( if ((face_idx & 0x0ffff) == 0) throw_on_cancel_fn(); FaceOrientation fo = face_orientation[face_idx]; - Vec3i edge_ids = face_edge_ids[face_idx]; + Vec3i32 edge_ids = face_edge_ids[face_idx]; if (top && (fo == FaceOrientation::Up || fo == FaceOrientation::Degenerate)) { - Vec3i neighbors = face_neighbors[face_idx]; + Vec3i32 neighbors = face_neighbors[face_idx]; // Reset neighborship of this triangle in case the other triangle is oriented backwards from this one. for (int i = 0; i < 3; ++ i) if (neighbors(i) != -1) { @@ -963,7 +959,7 @@ inline std::pair slice_slabs_make_lines( } // BBS: add vertical faces option if (bottom && (fo == FaceOrientation::Down || fo == FaceOrientation::Degenerate)) { - Vec3i neighbors = face_neighbors[face_idx]; + Vec3i32 neighbors = face_neighbors[face_idx]; // Reset neighborship of this triangle in case the other triangle is oriented backwards from this one. for (int i = 0; i < 3; ++ i) if (neighbors(i) != -1) { @@ -1832,7 +1828,7 @@ static void make_expolygons(const Polygons &loops, const float closing_radius, c static inline Transform3f make_trafo_for_slicing(const Transform3d &trafo) { auto t = trafo; - static constexpr const double s = 1. / SCALING_FACTOR; + const double s = 1. / SCALING_FACTOR; t.prescale(Vec3d(s, s, 1.)); return t.cast(); } @@ -1846,7 +1842,7 @@ static std::vector transform_mesh_vertices_for_slicing(const indexed { // Copy and scale vertices in XY, don't scale in Z. // Possibly apply the transformation. - static constexpr const double s = 1. / SCALING_FACTOR; + const double s = 1. / SCALING_FACTOR; std::vector out(mesh.vertices); if (is_identity(trafo)) { // Identity. @@ -1882,7 +1878,7 @@ std::vector slice_mesh( // Instead of edge identifiers, one shall use a sorted pair of edge vertex indices. // However facets_edges assigns a single edge ID to two triangles only, thus when factoring facets_edges out, one will have // to make sure that no code relies on it. - std::vector face_edge_ids = its_face_edge_ids(mesh); + std::vector face_edge_ids = its_face_edge_ids(mesh); if (zs.size() <= 1) { // It likely is not worthwile to copy the vertices. Apply the transformation in place. if (is_identity(params.trafo)) { @@ -1977,14 +1973,14 @@ Polygons slice_mesh( // 2) Mark faces crossing the plane. for (size_t i = 0; i < mesh.indices.size(); ++ i) { - const Vec3i &face = mesh.indices[i]; + const Vec3i32 &face = mesh.indices[i]; int sides[3] = { vertex_side[face(0)], vertex_side[face(1)], vertex_side[face(2)] }; face_mask[i] = sides[0] * sides[1] <= 0 || sides[1] * sides[2] <= 0 || sides[0] * sides[2] <= 0; } } // 3) Calculate face neighbors for just the faces in face_mask. - std::vector face_edge_ids = its_face_edge_ids(mesh, face_mask); + std::vector face_edge_ids = its_face_edge_ids(mesh, face_mask); // 4) Slice "face_mask" triangles, collect line segments. // It likely is not worthwile to copy the vertices. Apply the transformation in place. @@ -2141,9 +2137,9 @@ void slice_mesh_slabs( face_orientation[&tri - mesh.indices.data()] = fo; } - std::vector face_neighbors = its_face_neighbors_par(mesh); + std::vector face_neighbors = its_face_neighbors_par(mesh); int num_edges; - std::vector face_edge_ids = its_face_edge_ids(mesh, face_neighbors, true, &num_edges); + std::vector face_edge_ids = its_face_edge_ids(mesh, face_neighbors, true, &num_edges); std::pair lines = slice_slabs_make_lines( vertices_transformed, mesh.indices, face_neighbors, face_edge_ids, num_edges, face_orientation, zs, out_top != nullptr, out_bottom != nullptr, throw_on_cancel); @@ -2346,7 +2342,7 @@ void cut_mesh(const indexed_triangle_set& mesh, float z, indexed_triangle_set* u // To triangulate the caps after slicing. IntersectionLines upper_lines, lower_lines; std::vector upper_slice_vertices, lower_slice_vertices; - std::vector facets_edge_ids = its_face_edge_ids(mesh); + std::vector facets_edge_ids = its_face_edge_ids(mesh); std::map section_vertices_map; for (int facet_idx = 0; facet_idx < int(mesh.indices.size()); ++ facet_idx) { diff --git a/src/libslic3r/TriangleMeshSlicer.hpp b/src/libslic3r/TriangleMeshSlicer.hpp index a7ad62acd9..ea6a7262cc 100644 --- a/src/libslic3r/TriangleMeshSlicer.hpp +++ b/src/libslic3r/TriangleMeshSlicer.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_TriangleMeshSlicer_hpp_ #define slic3r_TriangleMeshSlicer_hpp_ diff --git a/src/libslic3r/TriangleSelector.cpp b/src/libslic3r/TriangleSelector.cpp index e78dd878d9..329e50f329 100644 --- a/src/libslic3r/TriangleSelector.cpp +++ b/src/libslic3r/TriangleSelector.cpp @@ -134,7 +134,7 @@ bool TriangleSelector::verify_triangle_midpoints(const Triangle &tr) const return true; } -bool TriangleSelector::verify_triangle_neighbors(const Triangle &tr, const Vec3i &neighbors) const +bool TriangleSelector::verify_triangle_neighbors(const Triangle &tr, const Vec3i32 &neighbors) const { assert(neighbors(0) >= -1); assert(neighbors(1) >= -1); @@ -187,7 +187,7 @@ inline bool is_point_inside_triangle(const Vec3f &pt, const Vec3f &p1, const Vec return std::all_of(begin(barycentric_cords), end(barycentric_cords), [](float cord) { return 0.f <= cord && cord <= 1.0; }); } -int TriangleSelector::select_unsplit_triangle(const Vec3f &hit, int facet_idx, const Vec3i &neighbors) const +int TriangleSelector::select_unsplit_triangle(const Vec3f &hit, int facet_idx, const Vec3i32 &neighbors) const { assert(facet_idx < int(m_triangles.size())); const Triangle *tr = &m_triangles[facet_idx]; @@ -226,7 +226,7 @@ int TriangleSelector::select_unsplit_triangle(const Vec3f &hit, int facet_idx) c if (!m_triangles[facet_idx].valid()) return -1; - Vec3i neighbors = m_neighbors[facet_idx]; + Vec3i32 neighbors = m_neighbors[facet_idx]; assert(this->verify_triangle_neighbors(m_triangles[facet_idx], neighbors)); return this->select_unsplit_triangle(hit, facet_idx, neighbors); } @@ -372,7 +372,7 @@ void TriangleSelector::seed_fill_select_triangles(const Vec3f &hit, int facet_st } } -void TriangleSelector::precompute_all_neighbors_recursive(const int facet_idx, const Vec3i &neighbors, const Vec3i &neighbors_propagated, std::vector &neighbors_out, std::vector &neighbors_propagated_out) const +void TriangleSelector::precompute_all_neighbors_recursive(const int facet_idx, const Vec3i32 &neighbors, const Vec3i32 &neighbors_propagated, std::vector &neighbors_out, std::vector &neighbors_propagated_out) const { assert(facet_idx < int(m_triangles.size())); @@ -392,7 +392,7 @@ void TriangleSelector::precompute_all_neighbors_recursive(const int facet_idx, c assert(tr->children[i] < int(m_triangles.size())); // Recursion, deep first search over the children of this triangle. // All children of this triangle were created by splitting a single source triangle of the original mesh. - const Vec3i child_neighbors = this->child_neighbors(*tr, neighbors, i); + const Vec3i32 child_neighbors = this->child_neighbors(*tr, neighbors, i); this->precompute_all_neighbors_recursive(tr->children[i], child_neighbors, this->child_neighbors_propagated(*tr, neighbors_propagated, i, child_neighbors), neighbors_out, neighbors_propagated_out); @@ -401,10 +401,10 @@ void TriangleSelector::precompute_all_neighbors_recursive(const int facet_idx, c } } -std::pair, std::vector> TriangleSelector::precompute_all_neighbors() const +std::pair, std::vector> TriangleSelector::precompute_all_neighbors() const { - std::vector neighbors(m_triangles.size(), Vec3i(-1, -1, -1)); - std::vector neighbors_propagated(m_triangles.size(), Vec3i(-1, -1, -1)); + std::vector neighbors(m_triangles.size(), Vec3i32(-1, -1, -1)); + std::vector neighbors_propagated(m_triangles.size(), Vec3i32(-1, -1, -1)); for (int facet_idx = 0; facet_idx < this->m_orig_size_indices; ++facet_idx) { neighbors[facet_idx] = m_neighbors[facet_idx]; neighbors_propagated[facet_idx] = neighbors[facet_idx]; @@ -442,7 +442,7 @@ void TriangleSelector::append_touching_subtriangles(int itriangle, int vertexi, // It appends all edges that are touching the edge (vertexi, vertexj) of the triangle and are not selected by seed fill // It doesn't append the edges that are touching the triangle only by part of the edge that means the triangles are from lower depth. -void TriangleSelector::append_touching_edges(int itriangle, int vertexi, int vertexj, std::vector &touching_edges_out) const +void TriangleSelector::append_touching_edges(int itriangle, int vertexi, int vertexj, std::vector &touching_edges_out) const { if (itriangle == -1) return; @@ -497,11 +497,11 @@ void TriangleSelector::bucket_fill_select_triangles(const Vec3f& hit, int facet_ // seed_fill_angle < 0.f to disable edge detection const double facet_angle_limit = (seed_fill_angle < 0.f ? -1.f : cos(Geometry::deg2rad(seed_fill_angle))) - EPSILON; - auto get_all_touching_triangles = [this](int facet_idx, const Vec3i &neighbors, const Vec3i &neighbors_propagated) -> std::vector { + auto get_all_touching_triangles = [this](int facet_idx, const Vec3i32 &neighbors, const Vec3i32 &neighbors_propagated) -> std::vector { assert(facet_idx != -1 && facet_idx < int(m_triangles.size())); assert(this->verify_triangle_neighbors(m_triangles[facet_idx], neighbors)); std::vector touching_triangles; - Vec3i vertices = {m_triangles[facet_idx].verts_idxs[0], m_triangles[facet_idx].verts_idxs[1], m_triangles[facet_idx].verts_idxs[2]}; + Vec3i32 vertices = {m_triangles[facet_idx].verts_idxs[0], m_triangles[facet_idx].verts_idxs[1], m_triangles[facet_idx].verts_idxs[2]}; append_touching_subtriangles(neighbors(0), vertices(1), vertices(0), touching_triangles); append_touching_subtriangles(neighbors(1), vertices(2), vertices(1), touching_triangles); append_touching_subtriangles(neighbors(2), vertices(0), vertices(2), touching_triangles); @@ -557,7 +557,7 @@ bool TriangleSelector::select_triangle(int facet_idx, EnforcerBlockerType type, if (! m_triangles[facet_idx].valid()) return false; - Vec3i neighbors = m_neighbors[facet_idx]; + Vec3i32 neighbors = m_neighbors[facet_idx]; assert(this->verify_triangle_neighbors(m_triangles[facet_idx], neighbors)); if (! select_triangle_recursive(facet_idx, neighbors, type, triangle_splitting)) @@ -741,7 +741,7 @@ int TriangleSelector::triangle_midpoint_or_allocate(int itriangle, int vertexi, // Returns -1 if such a neighbor does not exist at all, or it does not exist // at the same depth as the ith child. // Using the same splitting strategy as TriangleSelector::split_triangle() -Vec3i TriangleSelector::child_neighbors(const Triangle &tr, const Vec3i &neighbors, int child_idx) const +Vec3i32 TriangleSelector::child_neighbors(const Triangle &tr, const Vec3i32 &neighbors, int child_idx) const { assert(this->verify_triangle_neighbors(tr, neighbors)); @@ -750,7 +750,7 @@ Vec3i TriangleSelector::child_neighbors(const Triangle &tr, const Vec3i &neighbo int j = next_idx_modulo(i, 3); int k = next_idx_modulo(j, 3); - Vec3i out; + Vec3i32 out; switch (tr.number_of_split_sides()) { case 1: switch (child_idx) { @@ -828,13 +828,13 @@ Vec3i TriangleSelector::child_neighbors(const Triangle &tr, const Vec3i &neighbo // Return neighbors of the ith child of a triangle given neighbors of the triangle. // If such a neighbor doesn't exist, return the neighbor from the previous depth. -Vec3i TriangleSelector::child_neighbors_propagated(const Triangle &tr, const Vec3i &neighbors_propagated, int child_idx, const Vec3i &child_neighbors) const +Vec3i32 TriangleSelector::child_neighbors_propagated(const Triangle &tr, const Vec3i32 &neighbors_propagated, int child_idx, const Vec3i32 &child_neighbors) const { int i = tr.special_side(); int j = next_idx_modulo(i, 3); int k = next_idx_modulo(j, 3); - Vec3i out = child_neighbors; + Vec3i32 out = child_neighbors; auto replace_if_not_exists = [&out, &neighbors_propagated](int index_to_replace, int neighbor_idx) { if (out(index_to_replace) == -1) out(index_to_replace) = neighbors_propagated(neighbor_idx); @@ -900,7 +900,7 @@ Vec3i TriangleSelector::child_neighbors_propagated(const Triangle &tr, const Vec return out; } -bool TriangleSelector::select_triangle_recursive(int facet_idx, const Vec3i &neighbors, EnforcerBlockerType type, bool triangle_splitting) +bool TriangleSelector::select_triangle_recursive(int facet_idx, const Vec3i32 &neighbors, EnforcerBlockerType type, bool triangle_splitting) { assert(facet_idx < int(m_triangles.size())); @@ -963,7 +963,7 @@ void TriangleSelector::set_facet(int facet_idx, EnforcerBlockerType state) // called by select_patch()->select_triangle()...select_triangle() // to decide which sides of the triangle to split and to actually split it calling set_division() and perform_split(). -void TriangleSelector::split_triangle(int facet_idx, const Vec3i &neighbors) +void TriangleSelector::split_triangle(int facet_idx, const Vec3i32 &neighbors) { if (m_triangles[facet_idx].is_split()) { // The triangle is divided already. @@ -1320,7 +1320,7 @@ int TriangleSelector::push_triangle(int a, int b, int c, int source_triangle, co // Split a triangle based on Triangle::number_of_split_sides() and Triangle::special_side() // by allocating child triangles and midpoint vertices. // Midpoint vertices are possibly reused by traversing children of neighbor triangles. -void TriangleSelector::perform_split(int facet_idx, const Vec3i &neighbors, EnforcerBlockerType old_state) +void TriangleSelector::perform_split(int facet_idx, const Vec3i32 &neighbors, EnforcerBlockerType old_state) { // Reserve space for the new triangles upfront, so that the reference to this triangle will not change. { @@ -1381,7 +1381,7 @@ void TriangleSelector::perform_split(int facet_idx, const Vec3i &neighbors, Enfo #ifndef NDEBUG assert(this->verify_triangle_neighbors(tr, neighbors)); for (int i = 0; i <= tr.number_of_split_sides(); ++i) { - Vec3i n = this->child_neighbors(tr, neighbors, i); + Vec3i32 n = this->child_neighbors(tr, neighbors, i); assert(this->verify_triangle_neighbors(m_triangles[tr.children[i]], n)); } #endif // NDEBUG @@ -1480,7 +1480,7 @@ indexed_triangle_set TriangleSelector::get_facets_strict(EnforcerBlockerType sta void TriangleSelector::get_facets_strict_recursive( const Triangle &tr, - const Vec3i &neighbors, + const Vec3i32 &neighbors, EnforcerBlockerType state, std::vector &out_triangles) const { @@ -1494,10 +1494,10 @@ void TriangleSelector::get_facets_strict_recursive( this->get_facets_split_by_tjoints({tr.verts_idxs[0], tr.verts_idxs[1], tr.verts_idxs[2]}, neighbors, out_triangles); } -void TriangleSelector::get_facets_split_by_tjoints(const Vec3i &vertices, const Vec3i &neighbors, std::vector &out_triangles) const +void TriangleSelector::get_facets_split_by_tjoints(const Vec3i32 &vertices, const Vec3i32 &neighbors, std::vector &out_triangles) const { // Export this triangle, but first collect the T-joint vertices along its edges. - Vec3i midpoints( + Vec3i32 midpoints( this->triangle_midpoint(neighbors(0), vertices(1), vertices(0)), this->triangle_midpoint(neighbors(1), vertices(2), vertices(1)), this->triangle_midpoint(neighbors(2), vertices(0), vertices(2))); @@ -1578,10 +1578,10 @@ void TriangleSelector::get_facets_split_by_tjoints(const Vec3i &vertices, const } } -std::vector TriangleSelector::get_seed_fill_contour() const { - std::vector edges_out; +std::vector TriangleSelector::get_seed_fill_contour() const { + std::vector edges_out; for (int facet_idx = 0; facet_idx < this->m_orig_size_indices; ++facet_idx) { - const Vec3i neighbors = m_neighbors[facet_idx]; + const Vec3i32 neighbors = m_neighbors[facet_idx]; assert(this->verify_triangle_neighbors(m_triangles[facet_idx], neighbors)); this->get_seed_fill_contour_recursive(facet_idx, neighbors, neighbors, edges_out); } @@ -1589,7 +1589,7 @@ std::vector TriangleSelector::get_seed_fill_contour() const { return edges_out; } -void TriangleSelector::get_seed_fill_contour_recursive(const int facet_idx, const Vec3i &neighbors, const Vec3i &neighbors_propagated, std::vector &edges_out) const { +void TriangleSelector::get_seed_fill_contour_recursive(const int facet_idx, const Vec3i32 &neighbors, const Vec3i32 &neighbors_propagated, std::vector &edges_out) const { assert(facet_idx != -1 && facet_idx < int(m_triangles.size())); assert(this->verify_triangle_neighbors(m_triangles[facet_idx], neighbors)); const Triangle *tr = &m_triangles[facet_idx]; @@ -1604,13 +1604,13 @@ void TriangleSelector::get_seed_fill_contour_recursive(const int facet_idx, cons assert(tr->children[i] < int(m_triangles.size())); // Recursion, deep first search over the children of this triangle. // All children of this triangle were created by splitting a single source triangle of the original mesh. - const Vec3i child_neighbors = this->child_neighbors(*tr, neighbors, i); + const Vec3i32 child_neighbors = this->child_neighbors(*tr, neighbors, i); this->get_seed_fill_contour_recursive(tr->children[i], child_neighbors, this->child_neighbors_propagated(*tr, neighbors_propagated, i, child_neighbors), edges_out); } } } else if (tr->is_selected_by_seed_fill()) { - Vec3i vertices = {m_triangles[facet_idx].verts_idxs[0], m_triangles[facet_idx].verts_idxs[1], m_triangles[facet_idx].verts_idxs[2]}; + Vec3i32 vertices = {m_triangles[facet_idx].verts_idxs[0], m_triangles[facet_idx].verts_idxs[1], m_triangles[facet_idx].verts_idxs[2]}; append_touching_edges(neighbors(0), vertices(1), vertices(0), edges_out); append_touching_edges(neighbors(1), vertices(2), vertices(1), edges_out); append_touching_edges(neighbors(2), vertices(0), vertices(2), edges_out); @@ -1720,7 +1720,7 @@ void TriangleSelector::deserialize(const std::pairchild_neighbors(tr, last.neighbors, child_idx); + Vec3i32 neighbors = this->child_neighbors(tr, last.neighbors, child_idx); int this_idx = tr.children[child_idx]; m_triangles[this_idx].set_division(num_of_split_sides, special_side); perform_split(this_idx, neighbors, EnforcerBlockerType::NONE); diff --git a/src/libslic3r/TriangleSelector.hpp b/src/libslic3r/TriangleSelector.hpp index 39ede77b35..b73283c0e1 100644 --- a/src/libslic3r/TriangleSelector.hpp +++ b/src/libslic3r/TriangleSelector.hpp @@ -208,8 +208,8 @@ public: } }; - std::pair, std::vector> precompute_all_neighbors() const; - void precompute_all_neighbors_recursive(int facet_idx, const Vec3i &neighbors, const Vec3i &neighbors_propagated, std::vector &neighbors_out, std::vector &neighbors_normal_out) const; + std::pair, std::vector> precompute_all_neighbors() const; + void precompute_all_neighbors_recursive(int facet_idx, const Vec3i32 &neighbors, const Vec3i32 &neighbors_propagated, std::vector &neighbors_out, std::vector &neighbors_normal_out) const; // Set a limit to the edge length, below which the edge will not be split by select_patch(). // Called by select_patch() internally. Made public for debugging purposes, see TriangleSelectorGUI::render_debug(). @@ -221,7 +221,7 @@ public: // Returns the facet_idx of the unsplit triangle containing the "hit". Returns -1 if the triangle isn't found. [[nodiscard]] int select_unsplit_triangle(const Vec3f &hit, int facet_idx) const; - [[nodiscard]] int select_unsplit_triangle(const Vec3f &hit, int facet_idx, const Vec3i &neighbors) const; + [[nodiscard]] int select_unsplit_triangle(const Vec3f &hit, int facet_idx, const Vec3i32 &neighbors) const; // Select all triangles fully inside the circle, subdivide where needed. void select_patch(int facet_start, // facet of the original mesh (unsplit) that the hit point belongs to @@ -254,7 +254,7 @@ public: // Get facets at a given state. Triangulate T-joints. indexed_triangle_set get_facets_strict(EnforcerBlockerType state) const; // Get edges around the selected area by seed fill. - std::vector get_seed_fill_contour() const; + std::vector get_seed_fill_contour() const; // BBS void get_facets(std::vector& facets_per_type) const; @@ -351,14 +351,14 @@ protected: }; void append_touching_subtriangles(int itriangle, int vertexi, int vertexj, std::vector& touching_subtriangles_out) const; - bool verify_triangle_neighbors(const Triangle& tr, const Vec3i& neighbors) const; + bool verify_triangle_neighbors(const Triangle& tr, const Vec3i32& neighbors) const; // Lists of vertices and triangles, both original and new std::vector m_vertices; std::vector m_triangles; const TriangleMesh &m_mesh; - const std::vector m_neighbors; + const std::vector m_neighbors; const std::vector m_face_normals; // BBS @@ -381,15 +381,15 @@ protected: // Private functions: private: bool select_triangle(int facet_idx, EnforcerBlockerType type, bool triangle_splitting); - bool select_triangle_recursive(int facet_idx, const Vec3i &neighbors, EnforcerBlockerType type, bool triangle_splitting); + bool select_triangle_recursive(int facet_idx, const Vec3i32 &neighbors, EnforcerBlockerType type, bool triangle_splitting); void undivide_triangle(int facet_idx); - void split_triangle(int facet_idx, const Vec3i &neighbors); + void split_triangle(int facet_idx, const Vec3i32 &neighbors); void remove_useless_children(int facet_idx); // No hidden meaning. Triangles are meant. bool is_facet_clipped(int facet_idx, const ClippingPlane &clp) const; int push_triangle(int a, int b, int c, int source_triangle, EnforcerBlockerType state = EnforcerBlockerType{0}); - void perform_split(int facet_idx, const Vec3i &neighbors, EnforcerBlockerType old_state); - Vec3i child_neighbors(const Triangle &tr, const Vec3i &neighbors, int child_idx) const; - Vec3i child_neighbors_propagated(const Triangle &tr, const Vec3i &neighbors_propagated, int child_idx, const Vec3i &child_neighbors) const; + void perform_split(int facet_idx, const Vec3i32 &neighbors, EnforcerBlockerType old_state); + Vec3i32 child_neighbors(const Triangle &tr, const Vec3i32 &neighbors, int child_idx) const; + Vec3i32 child_neighbors_propagated(const Triangle &tr, const Vec3i32 &neighbors_propagated, int child_idx, const Vec3i32 &child_neighbors) const; // Return child of itriangle at a CCW oriented side (vertexi, vertexj), either first or 2nd part. // If itriangle == -1 or if the side sharing (vertexi, vertexj) is not split, return -1. enum class Partition { @@ -406,21 +406,21 @@ private: std::pair triangle_subtriangles(int itriangle, int vertexi, int vertexj) const; //void append_touching_subtriangles(int itriangle, int vertexi, int vertexj, std::vector &touching_subtriangles_out) const; - void append_touching_edges(int itriangle, int vertexi, int vertexj, std::vector &touching_edges_out) const; + void append_touching_edges(int itriangle, int vertexi, int vertexj, std::vector &touching_edges_out) const; #ifndef NDEBUG - //bool verify_triangle_neighbors(const Triangle& tr, const Vec3i& neighbors) const; + //bool verify_triangle_neighbors(const Triangle& tr, const Vec3i32& neighbors) const; bool verify_triangle_midpoints(const Triangle& tr) const; #endif // NDEBUG void get_facets_strict_recursive( const Triangle &tr, - const Vec3i &neighbors, + const Vec3i32 &neighbors, EnforcerBlockerType state, std::vector &out_triangles) const; - void get_facets_split_by_tjoints(const Vec3i &vertices, const Vec3i &neighbors, std::vector &out_triangles) const; + void get_facets_split_by_tjoints(const Vec3i32 &vertices, const Vec3i32 &neighbors, std::vector &out_triangles) const; - void get_seed_fill_contour_recursive(int facet_idx, const Vec3i &neighbors, const Vec3i &neighbors_propagated, std::vector &edges_out) const; + void get_seed_fill_contour_recursive(int facet_idx, const Vec3i32 &neighbors, const Vec3i32 &neighbors_propagated, std::vector &edges_out) const; int m_free_triangles_head { -1 }; int m_free_vertices_head { -1 }; diff --git a/src/libslic3r/TriangulateWall.cpp b/src/libslic3r/TriangulateWall.cpp index eb710d9a57..b8746ef0d2 100644 --- a/src/libslic3r/TriangulateWall.cpp +++ b/src/libslic3r/TriangulateWall.cpp @@ -75,16 +75,16 @@ namespace Slic3r { // offring->init(imin); // } -// void emplace_indices(std::vector &indices) +// void emplace_indices(std::vector &indices) // { -// Vec3i tr{int(onring->pos().first), int(onring->pos().second), +// Vec3i32 tr{int(onring->pos().first), int(onring->pos().second), // int(offring->pos().first)}; // if (onring->is_lower()) std::swap(tr(0), tr(1)); // indices.emplace_back(tr); // } //public: -// void run(std::vector &indices) +// void run(std::vector &indices) // { // synchronize_rings(); diff --git a/src/libslic3r/TriangulateWall.hpp b/src/libslic3r/TriangulateWall.hpp index c64a75e63c..fcdb842f9b 100644 --- a/src/libslic3r/TriangulateWall.hpp +++ b/src/libslic3r/TriangulateWall.hpp @@ -79,16 +79,16 @@ class Triangulator { offring->init(imin); } - void emplace_indices(std::vector &indices) + void emplace_indices(std::vector &indices) { - Vec3i tr{int(onring->pos().first), int(onring->pos().second), + Vec3i32 tr{int(onring->pos().first), int(onring->pos().second), int(offring->pos().first)}; if (onring->is_lower()) std::swap(tr(0), tr(1)); indices.emplace_back(tr); } public: - void run(std::vector &indices) + void run(std::vector &indices) { synchronize_rings(); @@ -138,7 +138,7 @@ void triangulate_wall(std::vector> &pts, t.run(ind); } -//using Wall = std::pair, std::vector>; +//using Wall = std::pair, std::vector>; //Wall triangulate_wall( // const Polygon & lower, diff --git a/src/libslic3r/Triangulation.cpp b/src/libslic3r/Triangulation.cpp index 72275a4094..f290442bf1 100644 --- a/src/libslic3r/Triangulation.cpp +++ b/src/libslic3r/Triangulation.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Triangulation.hpp" #include "IntersectionPoints.hpp" #include @@ -165,7 +161,7 @@ Triangulation::Indices Triangulation::triangulate(const Points &points, }; #ifdef VISUALIZE_TRIANGULATION - std::vector indices2; + std::vector indices2; indices2.reserve(num_faces); for (CDT::Face_handle fh : faces) if (inside(fh)) indices2.emplace_back(fh->vertex(0)->info(), fh->vertex(1)->info(), fh->vertex(2)->info()); @@ -196,7 +192,7 @@ Triangulation::Indices Triangulation::triangulate(const Points &points, } } - std::vector indices; + std::vector indices; indices.reserve(num_faces); for (CDT::Face_handle fh : faces) if (inside(fh)) @@ -257,7 +253,7 @@ Triangulation::Indices Triangulation::triangulate(const ExPolygons &expolygons){ changes2[changes[i]] = i; // convert indices into expolygons indicies - for (Vec3i &t : indices) + for (Vec3i32 &t : indices) for (size_t ti = 0; ti < 3; ti++) t[ti] = changes2[t[ti]]; return indices; diff --git a/src/libslic3r/Triangulation.hpp b/src/libslic3r/Triangulation.hpp index 1fb7b67824..6a168d1d20 100644 --- a/src/libslic3r/Triangulation.hpp +++ b/src/libslic3r/Triangulation.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Vojtěch Bubník @bubnikv, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef libslic3r_Triangulation_hpp_ #define libslic3r_Triangulation_hpp_ @@ -21,7 +17,7 @@ public: // define oriented connection of 2 vertices(defined by its index) using HalfEdge = std::pair; using HalfEdges = std::vector; - using Indices = std::vector; + using Indices = std::vector; /// /// Connect points by triangulation to create filled surface by triangles diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index b03f27d187..9f249246f4 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2019 Sijmen Schoon -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Utils_hpp_ #define slic3r_Utils_hpp_ @@ -12,6 +7,7 @@ #include #include #include +#include #include #include @@ -50,6 +46,7 @@ #define CLI_OBJECT_ARRANGE_FAILED -21 #define CLI_OBJECT_ORIENT_FAILED -22 #define CLI_MODIFIED_PARAMS_TO_PRINTER -23 +#define CLI_FILE_VERSION_NOT_SUPPORTED -24 #define CLI_NO_SUITABLE_OBJECTS -50 @@ -219,6 +216,30 @@ extern bool is_shapes_dir(const std::string& dir); //BBS: add json support extern bool is_json_file(const std::string& path); +// Orca: custom protocal support utils +inline bool is_orca_open(const std::string& url) { return boost::starts_with(url, "orcaslicer://open"); } +inline bool is_prusaslicer_open(const std::string& url) { return boost::starts_with(url, "prusaslicer://open"); } +inline bool is_bambustudio_open(const std::string& url) { return boost::starts_with(url, "bambustudio://open"); } +inline bool is_cura_open(const std::string& url) { return boost::starts_with(url, "cura://open"); } +inline bool is_supported_open_protocol(const std::string& url) { return is_orca_open(url) || is_prusaslicer_open(url) || is_bambustudio_open(url) || is_cura_open(url); } +inline bool is_printables_link(const std::string& url) { + const std::regex url_regex("(http|https)://printables.com", std::regex_constants::icase); + return std::regex_match(url, url_regex); +} +inline bool is_makerworld_link(const std::string& url) { + const std::regex url_regex("(http|https)://makerworld.com", std::regex_constants::icase); + return std::regex_match(url, url_regex); +} +inline bool is_thingiverse_link(const std::string& url) { + const std::regex url_regex("(http|https)://www.thingiverse.com", std::regex_constants::icase); + return std::regex_match(url, url_regex); +} + +// sanitize a string to be used as a filename +inline std::string sanitize_filename(const std::string &filename){ + const std::regex special_chars("[/\\\\:*?\"<>|]"); + return std::regex_replace(filename, special_chars, "_"); +} // File path / name / extension splitting utilities, working with UTF-8, // to be published to Perl. namespace PerlUtils { diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index e5e0923c7d..f3890dd6dc 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -37,7 +37,7 @@ double CalibPressureAdvance::e_per_mm( 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; + return line_flow.mm3_per_mm() * print_flow_ratio / filament_area ; } std::string CalibPressureAdvance::convert_number_to_string(double num) const diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index 3d0146e2b8..af5bbb81d5 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -34,6 +34,11 @@ struct Calib_Params CalibMode mode; }; +enum FlowRatioCalibrationType { + COMPLETE_CALIBRATION = 0, + FINE_CALIBRATION, +}; + class X1CCalibInfos { public: @@ -78,6 +83,7 @@ struct PrinterCaliInfo bool cali_finished = true; float cache_flow_ratio; std::vector selected_presets; + FlowRatioCalibrationType cache_flow_rate_calibration_type = FlowRatioCalibrationType::COMPLETE_CALIBRATION; }; class PACalibResult diff --git a/src/libslic3r/libslic3r.cpp b/src/libslic3r/libslic3r.cpp new file mode 100644 index 0000000000..e94d99dcd0 --- /dev/null +++ b/src/libslic3r/libslic3r.cpp @@ -0,0 +1,3 @@ +#include "libslic3r.h" + +double SCALING_FACTOR = SCALING_FACTOR_INTERNAL; diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index d177e69572..3e71ada5ab 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -35,12 +35,12 @@ #include "Technologies.hpp" #include "Semver.hpp" -#if 1 +#if 0 // Saves around 32% RAM after slicing step, 6.7% after G-code export (tested on PrusaSlicer 2.2.0 final). using coord_t = int32_t; #else //FIXME At least FillRectilinear2 and std::boost Voronoi require coord_t to be 32bit. -typedef int64_t coord_t; +using coord_t = int64_t; #endif using coordf_t = double; @@ -55,7 +55,13 @@ static constexpr double EPSILON = 1e-4; // 0..4294mm with 1nm resolution // int32_t fits an interval of (-2147.48mm, +2147.48mm) // with int64_t we don't have to worry anymore about the size of the int. -static constexpr double SCALING_FACTOR = 0.000001; + +// Orca todo: might be better to use 1e-5 for all, namometer resolution is not needed for 3D printing +static constexpr double SCALING_FACTOR_INTERNAL = 0.000001; +static constexpr double SCALING_FACTOR_INTERNAL_LARGE_PRINTER = 0.00001; +static constexpr double LARGE_BED_THRESHOLD = 2147; + +extern double SCALING_FACTOR; // for creating circles (for brim_ear) #define POLY_SIDES 24 static constexpr double PI = 3.141592653589793238; diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 3a620a9e73..733ac626f4 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -1,9 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Pavel Mikuš @Godrak, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, David Kocík @kocikdav, Roman Beránek @zavorka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2021 Justin Schuh @jschuh -///|/ Copyright (c) Slic3r 2013 - 2015 Alessandro Ranellucci @alranel -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Utils.hpp" #include "I18N.hpp" diff --git a/src/miniz/miniz.c b/src/miniz/miniz.c index e75a797ee3..c6cd29e003 100644 --- a/src/miniz/miniz.c +++ b/src/miniz/miniz.c @@ -2987,6 +2987,14 @@ extern "C" { #include #if defined(_MSC_VER) || defined(__MINGW64__) +#ifdef WIN32 +static FILE *mz_wfopen(const wchar_t *pFilename, const char *pMode) +{ + FILE *pFile = NULL; + _wfopen_s(&pFile, pFilename, pMode); + return pFile; +} +#endif static FILE *mz_fopen(const char *pFilename, const char *pMode) { FILE *pFile = NULL; @@ -3004,6 +3012,9 @@ static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) #include #endif #define MZ_FOPEN mz_fopen +#ifdef WIN32 +#define MZ_WFOPEN mz_wfopen +#endif #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite @@ -5117,9 +5128,9 @@ mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); pFile = MZ_FOPEN(pDst_filename, "wb"); - if (!pFile) + if (!pFile) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); - + } status = mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); if (MZ_FCLOSE(pFile) == EOF) @@ -5137,6 +5148,39 @@ mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, return status; } +#ifdef WIN32 +mz_bool mz_zip_reader_extract_to_file_w(mz_zip_archive *pZip, mz_uint file_index, const wchar_t *pDst_filename, mz_uint flags) +{ + mz_bool status; + mz_zip_archive_file_stat file_stat; + MZ_FILE * pFile; + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); + + pFile = MZ_WFOPEN(pDst_filename, "w"); + if (!pFile) { + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + } + status = mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); + + if (MZ_FCLOSE(pFile) == EOF) { + if (status) + mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); + status = MZ_FALSE; + } + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) + if (status) + mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); +#endif + + return status; +} +#endif mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags) { @@ -7956,6 +8000,40 @@ mz_uint mz_zip_reader_get_extra(mz_zip_archive* pZip, mz_uint file_index, char* return ne + 1; } +mz_uint mz_zip_reader_get_filename_from_extra(mz_zip_archive* pZip, mz_uint file_index, char* buffer, mz_uint extra_buf_size) +{ + if (extra_buf_size == 0) + return 0; + mz_uint nf; + mz_uint ne; + const mz_uint8* p = mz_zip_get_cdh(pZip, file_index); + if (!p) + { + if (extra_buf_size) + buffer[0] = '\0'; + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return 0; + } + nf = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + ne = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); + + int copy = 0; + char const* p_nf = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + nf; + char const* e = p_nf + ne + 1; + while (p_nf + 4 < e) { + mz_uint16 len = ((mz_uint16)p_nf[2]) | ((mz_uint16)p_nf[3] << 8); + if (p_nf[0] == '\x75' && p_nf[1] == '\x70' && len >= 5 && p_nf + 4 + len < e && p_nf[4] == '\x01') { + mz_uint length = MZ_MIN(len - 5, extra_buf_size - 1); + memcpy(buffer, p_nf + 9, length); + return length; + } + else { + p_nf += 4 + len; + } + } + return 0; +} + mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat) { return mz_zip_file_stat_internal(pZip, file_index, mz_zip_get_cdh(pZip, file_index), pStat, NULL); diff --git a/src/miniz/miniz.h b/src/miniz/miniz.h index fdf54092dc..f0549f3de2 100644 --- a/src/miniz/miniz.h +++ b/src/miniz/miniz.h @@ -1171,6 +1171,9 @@ mz_uint mz_zip_reader_get_extra(mz_zip_archive *pZip, mz_uint file_index, char * int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); int mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *file_index); +/* Retrieves the filename of an archive file entry from EXTRA ID. */ +mz_uint mz_zip_reader_get_filename_from_extra(mz_zip_archive * pZip, mz_uint file_index, char* buffer, mz_uint extra_buf_size); + /* Returns detailed information about an archive file entry. */ mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); @@ -1211,6 +1214,9 @@ mz_bool mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state* pState /* Extracts a archive file to a disk file and sets its last accessed and modified times. */ /* This function only extracts files, not archive directory records. */ mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); +#ifdef WIN32 +mz_bool mz_zip_reader_extract_to_file_w(mz_zip_archive *pZip, mz_uint file_index, const wchar_t *pDst_filename, mz_uint flags); +#endif mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); /* Extracts a archive file starting at the current position in the destination FILE stream. */ diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in index e58a3d0681..a2621d2521 100644 --- a/src/platform/osx/Info.plist.in +++ b/src/platform/osx/Info.plist.in @@ -23,6 +23,8 @@ CFBundleVersion @SLIC3R_BUILD_ID@ CFBundleURLTypes + ATSApplicationFontsPath + fonts/ CFBundleURLName @@ -30,6 +32,7 @@ CFBundleURLSchemes orcasliceropen + orcaslicer diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 94a3b53e98..87d9396578 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -1,12 +1,3 @@ -#/|/ Copyright (c) Prusa Research 2018 - 2023 Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Oleksandra Iushchenko @YuSanka, Lukáš Hejl @hejllukas, Vojtěch Král @vojtechkral -#/|/ Copyright (c) 2023 Pedro Lamas @PedroLamas -#/|/ Copyright (c) 2020 Sergey Kovalev @RandoMan70 -#/|/ Copyright (c) 2021 Boleslaw Ciesielski -#/|/ Copyright (c) 2019 Spencer Owen @spuder -#/|/ Copyright (c) 2019 Stephan Reichhelm @stephanr -#/|/ -#/|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -#/|/ cmake_minimum_required(VERSION 3.13) project(libslic3r_gui) @@ -111,7 +102,7 @@ set(SLIC3R_GUI_SOURCES GUI/GLCanvas3D.hpp GUI/GLCanvas3D.cpp GUI/SceneRaycaster.hpp - GUI/SceneRaycaster.cpp + GUI/SceneRaycaster.cpp GUI/OpenGLManager.hpp GUI/OpenGLManager.cpp GUI/Selection.hpp @@ -208,6 +199,8 @@ set(SLIC3R_GUI_SOURCES GUI/Plater.hpp GUI/PartPlate.cpp GUI/PartPlate.hpp + GUI/UserNotification.cpp + GUI/UserNotification.hpp GUI/PresetComboBoxes.hpp GUI/PresetComboBoxes.cpp GUI/BitmapComboBox.hpp @@ -288,6 +281,8 @@ set(SLIC3R_GUI_SOURCES GUI/ConfigManipulation.hpp GUI/Field.cpp GUI/Field.hpp + GUI/FileArchiveDialog.cpp + GUI/FileArchiveDialog.hpp GUI/OptionsGroup.cpp GUI/OptionsGroup.hpp GUI/OG_CustomCtrl.cpp @@ -304,6 +299,8 @@ set(SLIC3R_GUI_SOURCES GUI/CameraUtils.hpp GUI/wxExtensions.cpp GUI/wxExtensions.hpp + GUI/ObjColorDialog.cpp + GUI/ObjColorDialog.hpp GUI/WipeTowerDialog.cpp GUI/RammingChart.cpp GUI/RammingChart.hpp @@ -321,6 +318,8 @@ set(SLIC3R_GUI_SOURCES GUI/ImGuiWrapper.cpp GUI/DeviceManager.hpp GUI/DeviceManager.cpp + GUI/UserManager.hpp + GUI/UserManager.cpp GUI/HttpServer.hpp GUI/HttpServer.cpp Config/Snapshot.cpp @@ -336,6 +335,10 @@ set(SLIC3R_GUI_SOURCES GUI/ConfigWizard_private.hpp GUI/MsgDialog.cpp GUI/MsgDialog.hpp + GUI/Downloader.hpp + GUI/Downloader.cpp + GUI/DownloaderFileGet.hpp + GUI/DownloaderFileGet.cpp GUI/DownloadProgressDialog.hpp GUI/DownloadProgressDialog.cpp GUI/UpdateDialogs.cpp @@ -399,8 +402,8 @@ set(SLIC3R_GUI_SOURCES GUI/ObjectDataViewModel.hpp GUI/AuxiliaryDataViewModel.cpp GUI/AuxiliaryDataViewModel.hpp - #GUI/InstanceCheck.cpp - #GUI/InstanceCheck.hpp + GUI/InstanceCheck.cpp + GUI/InstanceCheck.hpp GUI/Search.cpp GUI/Search.hpp GUI/NotificationManager.cpp @@ -467,6 +470,24 @@ set(SLIC3R_GUI_SOURCES Utils/json_diff.cpp GUI/KBShortcutsDialog.hpp GUI/KBShortcutsDialog.cpp + GUI/MultiMachine.hpp + GUI/MultiMachine.cpp + GUI/MultiMachinePage.hpp + GUI/MultiMachinePage.cpp + GUI/MultiMachineManagerPage.cpp + GUI/MultiMachineManagerPage.hpp + GUI/MultiPrintJob.cpp + GUI/MultiPrintJob.hpp + GUI/MultiSendMachineModel.hpp + GUI/MultiSendMachineModel.cpp + GUI/MultiTaskManagerPage.hpp + GUI/MultiTaskManagerPage.cpp + GUI/MultiTaskModel.hpp + GUI/MultiTaskModel.cpp + GUI/SendMultiMachinePage.hpp + GUI/SendMultiMachinePage.cpp + GUI/TaskManager.cpp + GUI/TaskManager.hpp Utils/Http.cpp Utils/Http.hpp Utils/FixModelByWin10.cpp @@ -512,6 +533,8 @@ set(SLIC3R_GUI_SOURCES Utils/SerialMessage.hpp Utils/MKS.cpp Utils/MKS.hpp + Utils/ESP3D.cpp + Utils/ESP3D.hpp Utils/WxFontUtils.cpp Utils/WxFontUtils.hpp Utils/Duet.cpp @@ -526,6 +549,7 @@ set(SLIC3R_GUI_SOURCES GUI/calib_dlg.cpp Utils/CalibUtils.cpp Utils/CalibUtils.hpp + Utils/ProfileDescription.hpp GUI/PrinterCloudAuthDialog.cpp GUI/PrinterCloudAuthDialog.hpp Utils/Obico.cpp @@ -558,8 +582,8 @@ if (APPLE) GUI/RemovableDriveManagerMM.mm GUI/RemovableDriveManagerMM.h GUI/Mouse3DHandlerMac.mm - #GUI/InstanceCheckMac.mm - #GUI/InstanceCheckMac.h + GUI/InstanceCheckMac.mm + GUI/InstanceCheckMac.h GUI/wxMediaCtrl2.mm GUI/wxMediaCtrl2.h ) @@ -589,7 +613,6 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo 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) target_link_libraries(libslic3r_gui Setupapi.lib) @@ -633,9 +656,18 @@ endif () # link these libraries. if (UNIX AND NOT APPLE) find_package(GTK${SLIC3R_GTK} REQUIRED) + if (FLATPAK) + # I don't know why this is needed, but for whatever reason slic3r isn't + # linking to X11 and webkit2gtk. force it. + find_package(X11 REQUIRED) + find_package(PkgConfig REQUIRED) + pkg_check_modules(webkit2gtk REQUIRED webkit2gtk-4.1) + target_link_libraries (libslic3r_gui ${X11_LIBRARIES} ${webkit2gtk_LIBRARIES}) + endif() target_include_directories(libslic3r_gui PRIVATE ${GTK${SLIC3R_GTK}_INCLUDE_DIRS}) target_link_libraries(libslic3r_gui ${GTK${SLIC3R_GTK}_LIBRARIES} fontconfig) + # We add GStreamer for bambu:/// support. pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) pkg_check_modules(GST_BASE REQUIRED gstreamer-base-1.0) @@ -644,4 +676,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/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index aebb56f97c..86ab5d2239 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2016 - 2023 Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2017 Eyal Soha @eyal0 -///|/ Copyright (c) Slic3r 2015 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/GUI/3DScene.pm: -///|/ Copyright (c) Prusa Research 2016 - 2019 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2013 Guillaume Seguin @iXce -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include "3DScene.hpp" @@ -77,17 +66,22 @@ void glAssertRecentCallImpl(const char* file_name, unsigned int line, const char // BBS std::vector get_extruders_colors() { - Slic3r::ColorRGBA rgba_color; - std::vector colors = Slic3r::GUI::wxGetApp().plater()->get_extruder_colors_from_plater_config(); + unsigned char rgba_color[4] = {}; + std::vector colors = Slic3r::GUI::wxGetApp().plater()->get_extruder_colors_from_plater_config(); std::vector colors_out(colors.size()); for (const std::string &color : colors) { - Slic3r::decode_color(color, rgba_color); + Slic3r::GUI::BitmapCache::parse_color4(color, rgba_color); size_t color_idx = &color - &colors.front(); - colors_out[color_idx] = rgba_color; + colors_out[color_idx] = { + float(rgba_color[0]) / 255.f, + float(rgba_color[1]) / 255.f, + float(rgba_color[2]) / 255.f, + float(rgba_color[3]) / 255.f, + }; } - return colors_out; } + float FullyTransparentMaterialThreshold = 0.1f; float FullTransparentModdifiedToFixAlpha = 0.3f; float FULL_BLACK_THRESHOLD = 0.18f; @@ -475,7 +469,7 @@ void GLVolume::render_with_outline(const Transform3d &view_model_matrix) } //BBS add render for simple case -void GLVolume::simple_render(GLShaderProgram* shader, ModelObjectPtrs& model_objects, std::vector extruder_colors) +void GLVolume::simple_render(GLShaderProgram* shader, ModelObjectPtrs& model_objects, std::vector& extruder_colors, bool ban_light) { if (this->is_left_handed()) glFrontFace(GL_CW); @@ -521,22 +515,36 @@ void GLVolume::simple_render(GLShaderProgram* shader, ModelObjectPtrs& model_obj if (!m.is_initialized()) continue; - if (idx == 0) { - int extruder_id = model_volume->extruder_id(); - //to make black not too hard too see - ColorRGBA new_color = adjust_color_for_rendering(extruder_colors[extruder_id - 1]); - m.set_color(new_color); - } - else { - if (idx <= extruder_colors.size()) { + if (shader) { + if (idx == 0) { + int extruder_id = model_volume->extruder_id(); //to make black not too hard too see - ColorRGBA new_color = adjust_color_for_rendering(extruder_colors[idx - 1]); + ColorRGBA new_color = adjust_color_for_rendering(extruder_colors[extruder_id - 1]); + if (ban_light) { + new_color[3] = (255 - (extruder_id - 1))/255.0f; + } m.set_color(new_color); + // shader->set_uniform("uniform_color", new_color); } else { - //to make black not too hard too see - ColorRGBA new_color = adjust_color_for_rendering(extruder_colors[0]); - m.set_color(new_color); + if (idx <= extruder_colors.size()) { + //to make black not too hard too see + ColorRGBA new_color = adjust_color_for_rendering(extruder_colors[idx - 1]); + if (ban_light) { + new_color[3] = (255 - (idx - 1))/255.0f; + } + m.set_color(new_color); + // shader->set_uniform("uniform_color", new_color); + } + else { + //to make black not too hard too see + ColorRGBA new_color = adjust_color_for_rendering(extruder_colors[0]); + if (ban_light) { + new_color[3] = (255 - 0) / 255.0f; + } + m.set_color(new_color); + // shader->set_uniform("uniform_color", new_color); + } } } if (tverts_range == std::make_pair(0, -1)) diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index a67127739a..4479c24632 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2017 - 2023 Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, David Kocík @kocikdav, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2017 Eyal Soha @eyal0 -///|/ Copyright (c) Slic3r 2015 Alessandro Ranellucci @alranel -///|/ -///|/ ported from lib/Slic3r/GUI/3DScene.pm: -///|/ Copyright (c) Prusa Research 2016 - 2019 Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka -///|/ Copyright (c) Slic3r 2013 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2013 Guillaume Seguin @iXce -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_3DScene_hpp_ #define slic3r_3DScene_hpp_ @@ -336,7 +325,7 @@ public: virtual void render_with_outline(const Transform3d &view_model_matrix); //BBS: add simple render function for thumbnail - void simple_render(GLShaderProgram* shader, ModelObjectPtrs& model_objects, std::vector extruder_colors); + void simple_render(GLShaderProgram* shader, ModelObjectPtrs& model_objects, std::vector& extruder_colors, bool ban_light =false); void set_bounding_boxes_as_dirty() { m_transformed_bounding_box.reset(); diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index ddbf120b21..f44dc19917 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -8,12 +8,19 @@ #include #include #include "CalibUtils.hpp" - +#include "../Utils/ColorSpaceConvert.hpp" namespace Slic3r { namespace GUI { wxDEFINE_EVENT(EVT_SELECTED_COLOR, wxCommandEvent); -AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) +static std::string float_to_string_with_precision(float value, int precision = 3) +{ + std::stringstream stream; + stream << std::fixed << std::setprecision(precision) << value; + return stream.str(); +} + +AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) : DPIDialog(parent, id, _L("AMS Materials Setting"), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) , m_color_picker_popup(ColorPickerPopup(this)) { @@ -251,8 +258,11 @@ void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) m_panel_SN->Fit(); wxBoxSizer* m_tip_sizer = new wxBoxSizer(wxHORIZONTAL); - m_tip_readonly = new wxStaticText(parent, wxID_ANY, _L("Setting AMS slot information while printing is not supported"), wxDefaultPosition, wxSize(-1, AMS_MATERIALS_SETTING_INPUT_SIZE.y)); + m_tip_readonly = new Label(parent, _L("Setting AMS slot information while printing is not supported")); m_tip_readonly->SetForegroundColour(*wxBLACK); + m_tip_readonly->SetBackgroundColour(*wxWHITE); + m_tip_readonly->SetMinSize(wxSize(FromDIP(380), -1)); + m_tip_readonly->SetMaxSize(wxSize(FromDIP(380), -1)); m_tip_readonly->Hide(); m_tip_sizer->Add(m_tip_readonly, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); @@ -278,6 +288,14 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) m_ratio_text->SetForegroundColour(wxColour(50, 58, 61)); m_ratio_text->SetFont(Label::Head_14); + m_ratio_text->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_ratio_text->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + m_ratio_text->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + wxLaunchDefaultBrowser(wxT("https://wiki.bambulab.com/en/software/bambu-studio/calibration_pa")); + }); + + 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); @@ -409,6 +427,7 @@ void AMSMaterialsSetting::enable_confirm_button(bool en) else { m_tip_readonly->SetLabelText(_L("Setting Virtual slot information while printing is not supported")); } + m_tip_readonly->Wrap(FromDIP(380)); m_tip_readonly->Show(!en); } } @@ -443,7 +462,7 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) { } // set k / n value - if (obj->get_printer_series() != PrinterSeries::SERIES_X1) { + if (obj->cali_version <= -1 && obj->get_printer_series() == PrinterSeries::SERIES_P1P) { // set extrusion cali ratio int cali_tray_id = ams_id * 4 + tray_id; @@ -561,9 +580,9 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) wxString k_text = m_input_k_val->GetTextCtrl()->GetValue(); wxString n_text = m_input_n_val->GetTextCtrl()->GetValue(); - if ((obj->get_printer_series() != PrinterSeries::SERIES_X1) && !ExtrusionCalibration::check_k_validation(k_text)) { - wxString k_tips = _L("Please input a valid value (K in 0~0.3)"); - wxString kn_tips = _L("Please input a valid value (K in 0~0.3, N in 0.6~2.0)"); + if (obj->cali_version <= -1 && (obj->get_printer_series() != PrinterSeries::SERIES_X1) && !ExtrusionCalibration::check_k_validation(k_text)) { + wxString k_tips = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE); + wxString kn_tips = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE, 0.6, 2.0); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; @@ -586,7 +605,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) ; } - if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (obj->cali_version >= 0) { PACalibIndexInfo select_index_info; select_index_info.tray_id = tray_id; select_index_info.nozzle_diameter = obj->nozzle_diameter; @@ -625,7 +644,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) ; } - if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (obj->cali_version >= 0) { PACalibIndexInfo select_index_info; select_index_info.tray_id = cali_tray_id; select_index_info.nozzle_diameter = obj->nozzle_diameter; @@ -728,7 +747,7 @@ void AMSMaterialsSetting::update_widgets() else m_panel_normal->Hide(); m_panel_kn->Show(); - } else if (obj && (obj->ams_support_virtual_tray || (obj->get_printer_series() == PrinterSeries::SERIES_X1))) { + } else if (obj && (obj->ams_support_virtual_tray || obj->cali_version >= 0)) { m_panel_normal->Show(); m_panel_kn->Show(); } else { @@ -746,6 +765,16 @@ 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) || obj->is_high_printer_type())) { + m_ratio_text->Show(); + m_k_param->Show(); + m_input_k_val->Show(); + } + else { + 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(); @@ -771,11 +800,15 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi int selection_idx = -1, idx = 0; wxArrayString filament_items; - + wxString bambu_filament_name; std::set filament_id_set; - - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle * preset_bundle = wxGetApp().preset_bundle; + std::ostringstream stream; + stream << std::fixed << std::setprecision(1) << obj->nozzle_diameter; + std::string nozzle_diameter_str = stream.str(); + std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle(MachineObject::get_preset_printer_model_name(obj->printer_type), nozzle_diameter_str); + 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++) { @@ -787,79 +820,66 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi if (preset_bundle->filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && !obj->is_support_user_preset)) { 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_names.find(printer_str) != printer_names.end()) { + 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 + if (filament_it->is_system) { + filament_items.push_back(filament_it->alias); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[filament_it->alias] = filament_infos; + } else { + char target = '@'; + size_t pos = filament_it->name.find(target); + if (pos != std::string::npos) { + std::string user_preset_alias = filament_it->name.substr(0, pos - 1); + wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); + user_preset_alias = wx_user_preset_alias.ToStdString(); - 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 ) - 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 - if (filament_it->is_system) { - filament_items.push_back(filament_it->alias); + filament_items.push_back(user_preset_alias); FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[filament_it->alias] = filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[user_preset_alias] = filament_infos; } - else { - char target = '@'; - size_t pos = filament_it->name.find(target); - if (pos != std::string::npos) { - std::string user_preset_alias = filament_it->name.substr(0, pos-1); - wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); - user_preset_alias = wx_user_preset_alias.ToStdString(); - - filament_items.push_back(user_preset_alias); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[user_preset_alias] = filament_infos; - } - - } - - 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); - } - } - } - idx++; } + + if (filament_it->filament_id == ams_filament_id) { + selection_idx = idx; + bambu_filament_name = filament_it->alias; + + + // 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++; } } } + } } @@ -875,7 +895,13 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi if (!m_is_third) { m_comboBox_filament->Hide(); m_readonly_filament->Show(); - m_readonly_filament->SetLabel("Bambu " + filament); + if (bambu_filament_name.empty()) { + m_readonly_filament->SetLabel("Bambu " + filament); + } + else { + m_readonly_filament->SetLabel(bambu_filament_name); + } + m_input_nozzle_min->GetTextCtrl()->SetValue(temp_min); m_input_nozzle_max->GetTextCtrl()->SetValue(temp_max); } @@ -884,7 +910,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_readonly_filament->Hide(); } - if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (obj->cali_version >= 0) { m_title_pa_profile->Show(); m_comboBox_cali_result->Show(); m_input_k_val->Disable(); @@ -929,8 +955,8 @@ 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)); + m_input_k_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[m_pa_cali_select_id].k_value)); + m_input_n_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[m_pa_cali_select_id].n_coef)); } else{ m_input_k_val->GetTextCtrl()->SetValue(std::to_string(0.00)); @@ -943,12 +969,26 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) m_filament_type = ""; PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { + std::ostringstream stream; + if (obj) + stream << std::fixed << std::setprecision(1) << obj->nozzle_diameter; + std::string nozzle_diameter_str = stream.str(); + std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle(MachineObject::get_preset_printer_model_name(obj->printer_type), + nozzle_diameter_str); for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { if (!m_comboBox_filament->GetValue().IsEmpty()) { auto filament_item = map_filament_items[m_comboBox_filament->GetValue().ToStdString()]; std::string filament_id = filament_item.filament_id; if (it->filament_id.compare(filament_id) == 0) { - + bool has_compatible_printer = false; + std::string preset_name = it->name; + for (std::string printer_name : printer_names) { + if (preset_name.find(printer_name) != std::string::npos) { + has_compatible_printer = true; + break; + } + } + if (!it->is_system && !has_compatible_printer) continue; // ) if nozzle_temperature_range is found ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); if (opt_min) { @@ -1005,6 +1045,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90)); m_comboBox_cali_result->Clear(); m_comboBox_cali_result->SetValue(wxEmptyString); + m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString); + m_input_n_val->GetTextCtrl()->SetValue(wxEmptyString); return; } else { @@ -1039,7 +1081,7 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) m_pa_profile_items.clear(); m_comboBox_cali_result->SetValue(wxEmptyString); - if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (obj->cali_version >= 0) { m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString); std::vector cali_history = this->obj->pa_calib_tab; for (auto cali_item : cali_history) { @@ -1069,8 +1111,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) } 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)); + m_input_k_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[cali_select_idx].k_value)); + m_input_n_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[cali_select_idx].n_coef)); } } else { @@ -1114,7 +1156,6 @@ ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25); m_bitmap_border_dark = create_scaled_bitmap("color_picker_border_dark", nullptr, 25); - m_bitmap_transparent_def = create_scaled_bitmap("transparent_color_picker", nullptr, 25); m_bitmap_transparent = create_scaled_bitmap("transparent_color_picker", nullptr, 25); } @@ -1178,12 +1219,12 @@ void ColorPicker::doRender(wxDC& dc) if (m_selected) radius -= FromDIP(1); if (alpha == 0) { - dc.DrawBitmap(m_bitmap_transparent_def, 0, 0); + dc.DrawBitmap(m_bitmap_transparent, 0, 0); } else if (alpha != 254 && alpha != 255) { if (transparent_changed) { std::string rgb = (m_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString(); - if (rgb.size() == 9) { + if (rgb.size() == 8) { //delete alpha value rgb = rgb.substr(0, rgb.size() - 2); } @@ -1194,8 +1235,8 @@ void ColorPicker::doRender(wxDC& dc) replace.push_back(fill_replace); m_bitmap_transparent = ScalableBitmap(this, "transparent_color_picker", 25, false, false, true, replace).bmp(); transparent_changed = false; + dc.DrawBitmap(m_bitmap_transparent, 0, 0); } - dc.DrawBitmap(m_bitmap_transparent, 0, 0); } else { dc.SetPen(wxPen(m_colour)); @@ -1432,17 +1473,28 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) void ColorPickerPopup::on_custom_clr_picker(wxMouseEvent& event) { + std::vector colors = wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < colors.size(); i++) { + m_clrData->SetCustomColour(i, string_to_wxColor(colors[i])); + } auto clr_dialog = new wxColourDialog(nullptr, m_clrData); wxColour picker_color; if (clr_dialog->ShowModal() == wxID_OK) { m_clrData = &(clr_dialog->GetColourData()); + if (colors.size() != CUSTOM_COLOR_COUNT) { + colors.resize(CUSTOM_COLOR_COUNT); + } + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { + colors[i] = color_to_string(m_clrData->GetCustomColour(i)); + } + wxGetApp().app_config->save_custom_color_to_config(colors); picker_color = wxColour( m_clrData->GetColour().Red(), m_clrData->GetColour().Green(), m_clrData->GetColour().Blue(), - 254 + 255 ); if (picker_color.Alpha() == 0) { diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index c66052a077..c058ac769f 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -5,8 +5,8 @@ #include "wxExtensions.hpp" #include "GUI_Utils.hpp" #include "DeviceManager.hpp" -#include "wx/colourdata.h" #include "wx/clrpicker.h" +#include "wx/colourdata.h" #include "Widgets/RadioBox.hpp" #include "Widgets/Button.hpp" #include "Widgets/RoundedRectangle.hpp" @@ -36,7 +36,6 @@ public: wxBitmap m_bitmap_border; wxBitmap m_bitmap_border_dark; wxBitmap m_bitmap_transparent; - wxBitmap m_bitmap_transparent_def; //default transparent material wxColour m_colour; std::vector m_cols; @@ -166,7 +165,7 @@ protected: wxStaticBitmap * bitmap_min_degree; Button * m_button_reset; Button * m_button_confirm; - wxStaticText* m_tip_readonly; + Label* m_tip_readonly; Button * m_button_close; wxColourData * m_clrData; diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index ac62d1ebaf..2b273ae00a 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -21,29 +21,31 @@ void AMSSetting::create() auto m_static_ams_settings = new wxStaticText(this, wxID_ANY, _L("AMS Settings"), wxDefaultPosition, wxDefaultSize, 0); m_static_ams_settings->SetFont(::Label::Head_14); m_static_ams_settings->SetForegroundColour(AMS_SETTING_GREY800); - m_sizer_main->Add(0,0,0,wxTOP,FromDIP(10)); - m_sizer_main->Add(m_static_ams_settings, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(24)); + m_panel_body = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, -1), wxTAB_TRAVERSAL); m_panel_body->SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizerl_body = new wxBoxSizer(wxVERTICAL); + m_panel_Insert_material = new wxPanel(m_panel_body, wxID_ANY, wxDefaultPosition, wxSize(-1, -1), wxTAB_TRAVERSAL); + m_panel_Insert_material->SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_main_Insert_material = new wxBoxSizer(wxVERTICAL); // checkbox area 1 wxBoxSizer *m_sizer_Insert_material = new wxBoxSizer(wxHORIZONTAL); - m_checkbox_Insert_material_auto_read = new ::CheckBox(m_panel_body); + m_checkbox_Insert_material_auto_read = new ::CheckBox(m_panel_Insert_material); m_checkbox_Insert_material_auto_read->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_insert_material_read, this); m_sizer_Insert_material->Add(m_checkbox_Insert_material_auto_read, 0, wxTOP, 1); m_sizer_Insert_material->Add(0, 0, 0, wxLEFT, 12); - m_title_Insert_material_auto_read = new wxStaticText(m_panel_body, wxID_ANY, _L("Insertion update"), + m_title_Insert_material_auto_read = new wxStaticText(m_panel_Insert_material, wxID_ANY, _L("Insertion update"), wxDefaultPosition, wxDefaultSize, 0); m_title_Insert_material_auto_read->SetFont(::Label::Head_13); m_title_Insert_material_auto_read->SetForegroundColour(AMS_SETTING_GREY800); m_title_Insert_material_auto_read->Wrap(AMS_SETTING_BODY_WIDTH); - m_sizer_Insert_material->Add(m_title_Insert_material_auto_read, 1, wxALL | wxEXPAND, 0); + m_sizer_Insert_material->Add(m_title_Insert_material_auto_read, 0, wxALL | wxEXPAND, 0); @@ -53,7 +55,7 @@ void AMSSetting::create() m_sizer_Insert_material_tip->Add(0, 0, 0, wxLEFT, 10); // tip line1 - m_tip_Insert_material_line1 = new Label(m_panel_body, + m_tip_Insert_material_line1 = new Label(m_panel_Insert_material, _L("The AMS will automatically read the filament information when inserting a new Bambu Lab filament. This takes about 20 seconds.") ); m_tip_Insert_material_line1->SetFont(::Label::Body_13); @@ -64,8 +66,8 @@ void AMSSetting::create() m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line1, 0, wxEXPAND, 0); // tip line2 - m_tip_Insert_material_line2 = new Label(m_panel_body, - _L("Note: if new filament is inserted during printing, the AMS will not automatically read any information until printing is completed.") + m_tip_Insert_material_line2 = new Label(m_panel_Insert_material, + _L("Note: if a new filament is inserted during printing, the AMS will not automatically read any information until printing is completed.") ); m_tip_Insert_material_line2->SetFont(::Label::Body_13); m_tip_Insert_material_line2->SetForegroundColour(AMS_SETTING_GREY700); @@ -74,8 +76,8 @@ void AMSSetting::create() m_tip_Insert_material_line2->Hide(); m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line2, 0, wxEXPAND | wxTOP, 8); - // tip line2 - m_tip_Insert_material_line3 = new Label(m_panel_body, + // tip line3 + m_tip_Insert_material_line3 = new Label(m_panel_Insert_material, _L("When inserting a new filament, the AMS will not automatically read its information, leaving it blank for you to enter manually.") ); m_tip_Insert_material_line3->SetFont(::Label::Body_13); @@ -87,7 +89,10 @@ void AMSSetting::create() m_sizer_Insert_material_tip->Add(m_sizer_Insert_material_tip_inline, 1, wxALIGN_CENTER, 0); - + m_sizer_main_Insert_material->Add(m_sizer_Insert_material, 0, wxEXPAND | wxTOP, FromDIP(4)); + m_sizer_main_Insert_material->Add(m_sizer_Insert_material_tip, 0, wxEXPAND | wxLEFT | wxTOP, 18); + m_panel_Insert_material->SetSizer(m_sizer_main_Insert_material); + // checkbox area 2 wxBoxSizer *m_sizer_starting = new wxBoxSizer(wxHORIZONTAL); m_checkbox_starting_auto_read = new ::CheckBox(m_panel_body); @@ -188,6 +193,40 @@ void AMSSetting::create() m_sizer_switch_filament_tip->Add(m_sizer_switch_filament_inline, 1, wxALIGN_CENTER, 0); + + // checkbox area 5 + wxBoxSizer* m_sizer_air_print = new wxBoxSizer(wxHORIZONTAL); + m_checkbox_air_print = new ::CheckBox(m_panel_body); + m_checkbox_air_print->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_air_print_detect, this); + m_sizer_air_print->Add(m_checkbox_air_print, 0, wxTOP, 1); + m_sizer_air_print->Add(0, 0, 0, wxLEFT, 12); + m_title_air_print = new wxStaticText(m_panel_body, wxID_ANY, _L("Air Printing Detection"), wxDefaultPosition, wxDefaultSize, 0); + m_title_air_print->SetFont(::Label::Head_13); + m_title_air_print->SetForegroundColour(AMS_SETTING_GREY800); + m_title_air_print->Wrap(AMS_SETTING_BODY_WIDTH); + m_sizer_air_print->Add(m_title_air_print, 1, wxEXPAND, 0); + + wxBoxSizer* m_sizer_air_print_tip = new wxBoxSizer(wxHORIZONTAL); + m_sizer_air_print_tip->Add(0, 0, 0, wxLEFT, 10); + + // tip line + auto m_sizer_air_print_inline = new wxBoxSizer(wxVERTICAL); + + m_tip_air_print_line = new Label(m_panel_body, + _L("Detects clogging and filament grinding, halting printing immediately to conserve time and filament.") + ); + m_tip_air_print_line->SetFont(::Label::Body_13); + m_tip_air_print_line->SetForegroundColour(AMS_SETTING_GREY700); + m_tip_air_print_line->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); + m_tip_air_print_line->Wrap(AMS_SETTING_BODY_WIDTH); + m_sizer_air_print_inline->Add(m_tip_air_print_line, 0, wxEXPAND, 0); + m_sizer_air_print_tip->Add(m_sizer_air_print_inline, 1, wxALIGN_CENTER, 0); + + m_checkbox_air_print->Hide(); + m_title_air_print->Hide(); + m_tip_air_print_line->Hide(); + + // panel img wxPanel* m_panel_img = new wxPanel(m_panel_body, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_panel_img->SetBackgroundColour(AMS_SETTING_GREY200); @@ -205,10 +244,7 @@ void AMSSetting::create() m_sizer_remain_block->Add(m_sizer_remain_tip, 0, wxLEFT, 18); m_sizer_remain_block->Add(0, 0, 0, wxTOP, 15); - m_sizerl_body->Add(m_sizer_Insert_material, 0, wxEXPAND, 0); - m_sizerl_body->Add(0, 0, 0, wxTOP, 8); - m_sizerl_body->Add(m_sizer_Insert_material_tip, 0, wxEXPAND | wxLEFT, 18); - m_sizerl_body->Add(0, 0, 0, wxTOP, 15); + m_sizerl_body->Add(m_panel_Insert_material, 0, 0, 0); m_sizerl_body->Add(m_sizer_starting, 0, wxEXPAND | wxTOP, FromDIP(8)); m_sizerl_body->Add(0, 0, 0, wxTOP, 8); m_sizerl_body->Add(m_sizer_starting_tip, 0, wxLEFT, 18); @@ -219,12 +255,20 @@ void AMSSetting::create() m_sizerl_body->Add(m_sizer_switch_filament_tip, 0, wxLEFT, 18); m_sizerl_body->Add(0, 0, 0, wxTOP, 6); m_sizerl_body->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizerl_body->Add(m_sizer_air_print, 0, wxEXPAND | wxTOP, FromDIP(8)); + m_sizerl_body->Add(0, 0, 0, wxTOP, 8); + m_sizerl_body->Add(m_sizer_air_print_tip, 0, wxLEFT, 18); + m_sizerl_body->Add(0, 0, 0, wxTOP, 6); + m_sizerl_body->Add(0, 0, 0, wxTOP, FromDIP(5)); m_sizerl_body->Add(m_panel_img, 1, wxEXPAND | wxALL, FromDIP(5)); m_panel_body->SetSizer(m_sizerl_body); m_panel_body->Layout(); m_sizerl_body->Fit(m_panel_body); - m_sizer_main->Add(m_panel_body, 1, wxALL | wxEXPAND, FromDIP(24)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10)); + m_sizer_main->Add(m_static_ams_settings, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(24)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10)); + m_sizer_main->Add(m_panel_body, 1, wxBottom | wxLEFT | wxRIGHT | wxEXPAND, FromDIP(24)); this->SetSizer(m_sizer_main); this->Layout(); @@ -245,18 +289,34 @@ void AMSSetting::create() }); } -void AMSSetting::update_insert_material_read_mode(bool selected) +void AMSSetting::update_insert_material_read_mode(bool selected, std::string version) { - m_checkbox_Insert_material_auto_read->SetValue(selected); - if (selected) { - m_tip_Insert_material_line1->Show(); - m_tip_Insert_material_line2->Show(); - m_tip_Insert_material_line3->Hide(); - } else { + if (!version.empty() && version >= AMS_F1_SUPPORT_INSERTION_UPDATE_DEFAULT) { + m_checkbox_Insert_material_auto_read->SetValue(true); + m_checkbox_Insert_material_auto_read->Hide(); + m_title_Insert_material_auto_read->Hide(); m_tip_Insert_material_line1->Hide(); m_tip_Insert_material_line2->Hide(); - m_tip_Insert_material_line3->Show(); + m_tip_Insert_material_line3->Hide(); + m_panel_Insert_material->Hide(); } + else { + m_panel_Insert_material->Show(); + m_checkbox_Insert_material_auto_read->SetValue(selected); + m_checkbox_Insert_material_auto_read->Show(); + m_title_Insert_material_auto_read->Show(); + if (selected) { + m_tip_Insert_material_line1->Show(); + m_tip_Insert_material_line2->Show(); + m_tip_Insert_material_line3->Hide(); + } + else { + m_tip_Insert_material_line1->Hide(); + m_tip_Insert_material_line2->Hide(); + m_tip_Insert_material_line3->Show(); + } + } + m_panel_Insert_material->Layout(); m_sizer_Insert_material_tip_inline->Layout(); Layout(); Fit(); @@ -264,6 +324,9 @@ void AMSSetting::update_insert_material_read_mode(bool selected) void AMSSetting::update_ams_img(std::string ams_icon_str) { + if (wxGetApp().dark_mode()&& ams_icon_str=="extra_icon") { + ams_icon_str += "_dark"; + } m_am_img->SetBitmap(create_scaled_bitmap(ams_icon_str, nullptr, 126)); } @@ -315,6 +378,22 @@ void AMSSetting::update_switch_filament(bool selected) m_checkbox_switch_filament->SetValue(selected); } +void AMSSetting::update_air_printing_detection(bool selected) +{ + if (false/*obj->is_support_air_print_detection*/) { + m_checkbox_air_print->Show(); + m_title_air_print->Show(); + m_tip_air_print_line->Show(); + } + else { + m_checkbox_air_print->Hide(); + m_title_air_print->Hide(); + m_tip_air_print_line->Hide(); + } + Layout(); + m_checkbox_air_print->SetValue(selected); +} + void AMSSetting::on_select_ok(wxMouseEvent &event) { @@ -394,6 +473,13 @@ void AMSSetting::on_switch_filament(wxCommandEvent& event) event.Skip(); } +void AMSSetting::on_air_print_detect(wxCommandEvent& event) +{ + bool air_print_detect = m_checkbox_air_print->GetValue(); + obj->command_ams_air_print_detect(air_print_detect); + event.Skip(); +} + wxString AMSSetting::append_title(wxString text) { wxString lab; diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index 4fddf47660..464afffe7b 100644 --- a/src/slic3r/GUI/AMSSetting.hpp +++ b/src/slic3r/GUI/AMSSetting.hpp @@ -17,6 +17,7 @@ #define AMS_SETTING_GREY200 wxColour(248, 248, 248) #define AMS_SETTING_BODY_WIDTH FromDIP(380) #define AMS_SETTING_BUTTON_SIZE wxSize(FromDIP(150), FromDIP(24)) +#define AMS_F1_SUPPORT_INSERTION_UPDATE_DEFAULT std::string("00.00.07.89") namespace Slic3r { namespace GUI { @@ -27,16 +28,18 @@ public: ~AMSSetting(); void create(); - void update_insert_material_read_mode(bool selected); + void update_insert_material_read_mode(bool selected, std::string version); void update_ams_img(std::string ams_icon_str); void update_starting_read_mode(bool selected); void update_remain_mode(bool selected); void update_switch_filament(bool selected); + void update_air_printing_detection(bool selected); void on_select_ok(wxMouseEvent& event); void on_insert_material_read(wxCommandEvent &event); void on_starting_read(wxCommandEvent &event); void on_remain(wxCommandEvent& event); void on_switch_filament(wxCommandEvent& event); + void on_air_print_detect(wxCommandEvent& event); wxString append_title(wxString text); wxStaticText *append_text(wxString text); MachineObject *obj{nullptr}; @@ -49,6 +52,7 @@ protected: protected: wxPanel * m_panel_body; + wxPanel* m_panel_Insert_material; CheckBox * m_checkbox_Insert_material_auto_read; wxStaticText *m_title_Insert_material_auto_read; Label* m_tip_Insert_material_line1; @@ -68,6 +72,10 @@ protected: wxStaticText* m_title_switch_filament; Label* m_tip_switch_filament_line1; + CheckBox* m_checkbox_air_print; + wxStaticText* m_title_air_print; + Label* m_tip_air_print_line; + wxStaticText *m_tip_ams_img; Button * m_button_auto_demarcate; diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 53d7c559a9..f4e69dd587 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -151,7 +151,7 @@ wxString CopyrightsDialog::get_html_text() _L("License"), _L("Orca Slicer is licensed under "), "https://www.gnu.org/licenses/agpl-3.0.html",_L("GNU Affero General Public License, version 3"), - _L("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"), + _L("Orca Slicer is based on PrusaSlicer and BambuStudio"), _L("Libraries"), _L("This software uses open source components whose copyright and other proprietary rights belong to their respective owners")); @@ -244,7 +244,7 @@ AboutDialog::AboutDialog() vesizer->Add(0, FromDIP(165), 1, wxEXPAND, FromDIP(5)); auto version_string = _L("Orca Slicer ") + " " + std::string(SoftFever_VERSION); wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize); - wxStaticText* bs_version = new wxStaticText(this, wxID_ANY, wxString::Format("Based on BambuStudio and PrusaSlicer"), wxDefaultPosition, wxDefaultSize); + wxStaticText* bs_version = new wxStaticText(this, wxID_ANY, wxString::Format("Based on PrusaSlicer and BambuStudio"), wxDefaultPosition, wxDefaultSize); bs_version->SetFont(Label::Body_12); wxFont version_font = GetFont(); #ifdef __WXMSW__ diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 1c4c186816..492926b952 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -58,11 +58,13 @@ void MaterialItem::msw_rescale() { m_transparent_mitem = ScalableBitmap(this, "transparent_material_item", FromDIP(32)); } -void MaterialItem::set_ams_info(wxColour col, wxString txt) +void MaterialItem::set_ams_info(wxColour col, wxString txt, int ctype, std::vector cols) { auto need_refresh = false; + if (m_ams_cols != cols) { m_ams_cols = cols; need_refresh = true; } + if (m_ams_ctype != ctype) { m_ams_ctype = ctype; need_refresh = true; } if (m_ams_coloul != col) { m_ams_coloul = col; need_refresh = true;} - if (m_ams_name != txt) {m_ams_name = txt;need_refresh = true;} + if (m_ams_name != txt) { m_ams_name = txt; need_refresh = true; } if (need_refresh) { Refresh();} } @@ -140,14 +142,11 @@ void MaterialItem::render(wxDC &dc) auto mcolor = m_material_coloul; auto acolor = m_ams_coloul; + change_the_opacity(acolor); 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); @@ -183,8 +182,10 @@ void MaterialItem::render(wxDC &dc) void MaterialItem::doRender(wxDC &dc) { + wxSize size = GetSize(); auto mcolor = m_material_coloul; auto acolor = m_ams_coloul; + change_the_opacity(acolor); if (mcolor.Alpha() == 0 || acolor.Alpha() == 0) { dc.DrawBitmap(m_transparent_mitem.bmp(), FromDIP(1), FromDIP(1)); @@ -194,10 +195,6 @@ void MaterialItem::doRender(wxDC &dc) mcolor = wxColour(0x90, 0x90, 0x90); acolor = wxColour(0x90, 0x90, 0x90); } - else { - mcolor = m_material_coloul; - acolor = m_ams_coloul; - } //top dc.SetPen(*wxTRANSPARENT_PEN); @@ -205,18 +202,48 @@ void MaterialItem::doRender(wxDC &dc) dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(18), 5); //bottom - dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(wxBrush(wxColour(acolor))); - dc.DrawRoundedRectangle(FromDIP(1), FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(16), 5); + if (m_ams_cols.size() > 1) { + int left = FromDIP(1); + int gwidth = std::round(MATERIAL_ITEM_REAL_SIZE.x / (m_ams_cols.size() - 1)); + //gradient + if (m_ams_ctype == 0) { + for (int i = 0; i < m_ams_cols.size() - 1; i++) { + auto rect = wxRect(left, FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(16)); + dc.GradientFillLinear(rect, m_ams_cols[i], m_ams_cols[i + 1], wxEAST); + left += gwidth; + } + } + else { + int cols_size = m_ams_cols.size(); + for (int i = 0; i < cols_size; i++) { + dc.SetBrush(wxBrush(m_ams_cols[i])); + float x = left + ((float)MATERIAL_ITEM_REAL_SIZE.x) * i / cols_size; + if (i != cols_size - 1) { + dc.DrawRoundedRectangle(x, FromDIP(18), ((float)MATERIAL_ITEM_REAL_SIZE.x) / cols_size + FromDIP(3), FromDIP(16), 3); + } + else { + dc.DrawRoundedRectangle(x, FromDIP(18), ((float)MATERIAL_ITEM_REAL_SIZE.x) / cols_size , FromDIP(16), 3); + } + } + + } + } + else { + + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(wxColour(acolor))); + dc.DrawRoundedRectangle(FromDIP(1), FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(16), 5); + ////middle - ////middle + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(acolor)); + dc.DrawRectangle(FromDIP(1), FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(8)); + } dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(wxBrush(mcolor)); dc.DrawRectangle(FromDIP(1), FromDIP(11), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(8)); - dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(wxBrush(acolor)); - dc.DrawRectangle(FromDIP(1), FromDIP(18), MATERIAL_ITEM_REAL_SIZE.x, FromDIP(8)); + ////border #if __APPLE__ @@ -247,10 +274,10 @@ void MaterialItem::doRender(wxDC &dc) //arrow if ( (acolor.Red() > 160 && acolor.Green() > 160 && acolor.Blue() > 160) && (acolor.Red() < 180 && acolor.Green() < 180 && acolor.Blue() < 180)) { - dc.DrawBitmap(m_arraw_bitmap_white.bmp(), GetSize().x - m_arraw_bitmap_white.GetBmpSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_white.GetBmpSize().y); + dc.DrawBitmap(m_arraw_bitmap_white.bmp(), size.x - m_arraw_bitmap_white.GetBmpSize().x - FromDIP(7), size.y - m_arraw_bitmap_white.GetBmpSize().y); } else { - dc.DrawBitmap(m_arraw_bitmap_gray.bmp(), GetSize().x - m_arraw_bitmap_gray.GetBmpSize().x - FromDIP(7), GetSize().y - m_arraw_bitmap_gray.GetBmpSize().y); + dc.DrawBitmap(m_arraw_bitmap_gray.bmp(), size.x - m_arraw_bitmap_gray.GetBmpSize().x - FromDIP(7), size.y - m_arraw_bitmap_gray.GetBmpSize().y); } @@ -385,6 +412,48 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) } } +void AmsMapingPopup::update_ams_data_multi_machines() +{ + m_has_unmatch_filament = false; + for (auto& ams_container : m_amsmapping_container_list) { + ams_container->Hide(); + } + + for (wxWindow* mitem : m_mapping_item_list) { + mitem->Destroy(); + mitem = nullptr; + } + m_mapping_item_list.clear(); + + if (m_amsmapping_container_sizer_list.size() > 0) { + for (wxBoxSizer* siz : m_amsmapping_container_sizer_list) { + siz->Clear(true); + } + } + + int m_amsmapping_container_list_index = 0; + std::vector tray_datas; + + for (int i = 0; i < 4; ++i) { + TrayData td; + td.id = i; + td.type = EMPTY; + td.colour = wxColour(166, 169, 170); + td.name = ""; + td.filament_type = ""; + td.ctype = 0; + tray_datas.push_back(td); + } + + m_amsmapping_container_list[m_amsmapping_container_list_index]->Show(); + add_ams_mapping(tray_datas, m_amsmapping_container_list[m_amsmapping_container_list_index], m_amsmapping_container_sizer_list[m_amsmapping_container_list_index]); + + m_warning_text->Show(m_has_unmatch_filament); + + Layout(); + Fit(); +} + void AmsMapingPopup::update_ams_data(std::map amsList) { m_has_unmatch_filament = false; @@ -437,6 +506,10 @@ void AmsMapingPopup::update_ams_data(std::map amsList) td.colour = AmsTray::decode_color(tray_data->color); td.name = tray_data->get_display_filament_type(); td.filament_type = tray_data->get_filament_type(); + td.ctype = tray_data->ctype; + for (auto col : tray_data->cols) { + td.material_cols.push_back(AmsTray::decode_color(col)); + } } } @@ -518,7 +591,7 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data, wxWindow* m_mapping_item_list.push_back(m_mapping_item); if (tray_data[i].type == NORMAL) { - if (is_match_material(tray_data[i].filament_type)) { + if (is_match_material(tray_data[i].filament_type)) { m_mapping_item->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); } else { m_mapping_item->set_data(wxColour(0xEE,0xEE,0xEE), tray_data[i].name, tray_data[i], true); @@ -673,14 +746,38 @@ void MappingItem::set_data(wxColour colour, wxString name, TrayData data, bool u void MappingItem::doRender(wxDC &dc) { - dc.SetPen(m_coloul); - dc.SetBrush(wxBrush(m_coloul)); + wxSize size = GetSize(); + wxColour color = m_coloul; + change_the_opacity(color); - if (m_coloul.Alpha() == 0) { - dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2); + dc.SetPen(color); + dc.SetBrush(wxBrush(color)); + + if (m_tray_data.material_cols.size() > 1) { + int left = 0; + int gwidth = std::round(MAPPING_ITEM_REAL_SIZE.x / (m_tray_data.material_cols.size() - 1)); + //gradient + if (m_tray_data.ctype == 0) { + for (int i = 0; i < m_tray_data.material_cols.size() - 1; i++) { + auto rect = wxRect(left, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); + dc.GradientFillLinear(rect, m_tray_data.material_cols[i], m_tray_data.material_cols[i + 1], wxEAST); + left += gwidth; + } + } + else { + int cols_size = m_tray_data.material_cols.size(); + for (int i = 0; i < cols_size; i++) { + dc.SetBrush(wxBrush(m_tray_data.material_cols[i])); + float x = (float)MAPPING_ITEM_REAL_SIZE.x * i / cols_size; + dc.DrawRectangle(x, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2, (float)MAPPING_ITEM_REAL_SIZE.x / cols_size, MAPPING_ITEM_REAL_SIZE.y); + } + } + } + else if (color.Alpha() == 0) { + dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (size.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); + dc.DrawRectangle(0, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); } @@ -689,11 +786,11 @@ void MappingItem::doRender(wxDC &dc) dc.SetPen(side_colour); dc.SetBrush(wxBrush(side_colour)); #ifdef __APPLE__ - dc.DrawRectangle(0, 0, FromDIP(4), GetSize().y); - dc.DrawRectangle(GetSize().x - FromDIP(4), 0, FromDIP(4), GetSize().y); + dc.DrawRectangle(0, 0, FromDIP(4), size.y); + dc.DrawRectangle(size.x - FromDIP(4), 0, FromDIP(4), size.y); #else - dc.DrawRectangle(0, 0, FromDIP(4), GetSize().y); - dc.DrawRectangle(GetSize().x - FromDIP(4), 0, FromDIP(4), GetSize().y); + dc.DrawRectangle(0, 0, FromDIP(4), size.y); + dc.DrawRectangle(size.x - FromDIP(4), 0, FromDIP(4), size.y); #endif // __APPLE__ } @@ -806,98 +903,52 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) { SetBackgroundColour(*wxWHITE); - wxBoxSizer* main_sizer; - main_sizer = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + close_img = ScalableBitmap(this, "hum_popup_close", 24); - main_sizer->Add(0, 0, 0, wxTOP, 28); + m_staticText = new Label(this, _L("Current Cabin humidity")); + m_staticText->SetFont(::Label::Head_24); - wxBoxSizer* m_sizer_body; - m_sizer_body = new wxBoxSizer(wxHORIZONTAL); + humidity_level_list = new AmsHumidityLevelList(this); + curr_humidity_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("hum_level1_light", this, 132), wxDefaultPosition, wxSize(FromDIP(132), FromDIP(132)), 0); - m_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("ams_humidity_tips", this, 125), wxDefaultPosition, wxSize(FromDIP(125), FromDIP(145)), 0); - - m_sizer_body->Add(m_img, 0, wxEXPAND | wxALL, 2); - - - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(18)); - - wxBoxSizer* m_sizer_tips = new wxBoxSizer(wxVERTICAL); - - m_staticText1 = new Label(this, _L("Cabin humidity")); - m_staticText1->SetFont(::Label::Head_13); + m_staticText_note = new Label(this, _L("Please change the desiccant when it is too wet. The indicator may not represent accurately in following cases : when the lid is open or the desiccant pack is changed. it take hours to absorb the moisture, low temperatures also slow down the process.")); + m_staticText_note->SetMinSize(wxSize(FromDIP(680), -1)); + m_staticText_note->SetMaxSize(wxSize(FromDIP(680), -1)); + m_staticText_note->Wrap(FromDIP(680)); - m_staticText2 = new Label(this, _L("Green means that AMS humidity is normal, orange represent humidity is high, red represent humidity is too high.(Hygrometer: lower the better.)")); - m_staticText2->SetFont(::Label::Body_13); - m_staticText2->SetSize(wxSize(FromDIP(357), -1)); - m_staticText2->SetMinSize(wxSize(FromDIP(357), -1)); - m_staticText2->SetMaxSize(wxSize(FromDIP(357), -1)); - m_staticText2->Wrap(FromDIP(357)); - - - m_staticText3 = new Label(this, _L("Desiccant status")); - m_staticText3->SetFont(::Label::Head_13); - - - m_staticText4 = new Label(this, _L("A desiccant status lower than two bars indicates that desiccant may be inactive. Please change the desiccant.(The bars: higher the better.)")); - m_staticText4->SetFont(::Label::Body_13); - m_staticText4->SetSize(wxSize(FromDIP(357), -1)); - m_staticText4->SetMinSize(wxSize(FromDIP(357), -1)); - m_staticText4->SetMaxSize(wxSize(FromDIP(357), -1)); - m_staticText4->Wrap(FromDIP(357)); - - m_sizer_tips->Add(m_staticText1, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,2); - m_sizer_tips->Add(m_staticText2, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,8); - m_sizer_tips->Add(m_staticText3, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,2); - m_sizer_tips->Add(m_staticText4, 0, wxLEFT|wxRIGHT, 3); - - - m_sizer_body->Add(m_sizer_tips, 0, wxEXPAND, 0); - - - main_sizer->Add(m_sizer_body, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); - - m_staticText_note = new Label(this, _L("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.")); - m_staticText4->SetFont(::Label::Body_13); - m_staticText_note->SetMinSize(wxSize(FromDIP(523), -1)); - m_staticText_note->SetMaxSize(wxSize(FromDIP(523), -1)); - m_staticText_note->Wrap(FromDIP(523)); - main_sizer->Add(m_staticText_note, 0, wxALL | wxLEFT | wxRIGHT, 22); - - m_button_confirm = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_button_confirm->SetBackgroundColor(btn_bg_green); - m_button_confirm->SetBorderColor(wxColour(0, 150, 136)); - m_button_confirm->SetTextColor(wxColour(0xFFFFFE)); - m_button_confirm->SetSize(wxSize(FromDIP(72), FromDIP(24))); - m_button_confirm->SetMinSize(wxSize(FromDIP(72), FromDIP(24))); - m_button_confirm->SetCornerRadius(FromDIP(12)); - - - m_button_confirm->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { - Dismiss(); - }); - Bind(wxEVT_LEFT_UP, [this](auto& e) { + + auto rect = ClientToScreen(wxPoint(0, 0)); + + auto close_left = rect.x + GetSize().x - close_img.GetBmpWidth() - FromDIP(38); + auto close_right = close_left + close_img.GetBmpWidth(); + auto close_top = rect.y + FromDIP(24); + auto close_bottom = close_top + close_img.GetBmpHeight(); + auto mouse_pos = ClientToScreen(e.GetPosition()); - auto rect = m_button_confirm->ClientToScreen(wxPoint(0, 0)); - if (mouse_pos.x > rect.x && mouse_pos.y > rect.y - && mouse_pos.x < (rect.x + m_button_confirm->GetSize().x) - && mouse_pos.y < (rect.y + m_button_confirm->GetSize().y)) + if (mouse_pos.x > close_left + && mouse_pos.y > close_top + && mouse_pos.x < close_right + && mouse_pos.y < close_bottom + ) { Dismiss(); } - }); - main_sizer->Add(m_button_confirm, 0, wxALIGN_CENTER | wxALL, 0); - - - main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, 18); - + }); + main_sizer->Add(0, 0, 0, wxTOP, FromDIP(24)); + main_sizer->Add(m_staticText, 0, wxALIGN_CENTER, 0); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(28)); + main_sizer->Add(curr_humidity_img, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(35)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(15)); + main_sizer->Add(humidity_level_list, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(35)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6)); + main_sizer->Add(m_staticText_note, 0, wxALIGN_CENTER, 0); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(5)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(25)); SetSizer(main_sizer); Layout(); Fit(); @@ -909,9 +960,7 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) void AmsHumidityTipPopup::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); - dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); + render(dc); } void AmsHumidityTipPopup::OnDismiss() {} @@ -920,6 +969,50 @@ bool AmsHumidityTipPopup::ProcessLeftDown(wxMouseEvent& event) { return PopupWindow::ProcessLeftDown(event); } +void AmsHumidityTipPopup::set_humidity_level(int level) +{ + current_humidity_level = level; + if (current_humidity_level<= 0) {return;} + + std::string mode_string = wxGetApp().dark_mode()?"_dark":"_light"; + + curr_humidity_img->SetBitmap(create_scaled_bitmap("hum_level" + std::to_string(current_humidity_level) + mode_string, this, 132)); + curr_humidity_img->Refresh(); + curr_humidity_img->Update(); +} + +void AmsHumidityTipPopup::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 AmsHumidityTipPopup::doRender(wxDC& dc) +{ + //close + dc.DrawBitmap(close_img.bmp(), GetSize().x - close_img.GetBmpWidth() - FromDIP(38), FromDIP(24)); + + //background + dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); +} + AmsTutorialPopup::AmsTutorialPopup(wxWindow* parent) :PopupWindow(parent, wxBORDER_NONE) { @@ -1507,7 +1600,11 @@ void AmsRMGroup::doRender(wxDC& dc) int x = size.x / 2; int y = size.y / 2; - int radius = size.x / 2 - FromDIP(2); + int radius; + if (wxGetApp().dark_mode()) + radius = size.x / 2 - int(size.x * 0.02); + else + radius = size.x / 2; endAngle += ev_angle; @@ -1589,4 +1686,90 @@ void AmsRMGroup::doRender(wxDC& dc) dc.DrawText(m_group_index, (size.x - text_size.x) / 2, (size.y - text_size.y) / 2 + FromDIP(10)); } +AmsHumidityLevelList::AmsHumidityLevelList(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + SetSize(wxSize(FromDIP(680), FromDIP(104))); + SetMinSize(wxSize(FromDIP(680), FromDIP(104))); + SetMaxSize(wxSize(FromDIP(680), FromDIP(104))); + SetBackgroundColour(*wxWHITE); + + background_img = ScalableBitmap(this, "humidity_list_background", 104); + + for (int i = 5; i > 0; i--) { + hum_level_img_light.push_back(ScalableBitmap(this, ("hum_level" + std::to_string(i) + "_light"), 54)); + hum_level_img_dark.push_back(ScalableBitmap(this, ("hum_level" + std::to_string(i) + "_dark"), 54)); + } + + Bind(wxEVT_PAINT, &AmsHumidityLevelList::paintEvent, this); + wxGetApp().UpdateDarkUI(this); +} + +void AmsHumidityLevelList::msw_rescale() +{ + +} + +void AmsHumidityLevelList::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AmsHumidityLevelList::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 AmsHumidityLevelList::doRender(wxDC& dc) +{ + dc.DrawBitmap(background_img.bmp(), 0,0); + + auto width_center = GetSize().x / 2; + auto left = width_center - FromDIP(27) - FromDIP(46) * 2 - FromDIP(54) * 2; + + + //dry / wet + dc.SetTextForeground(wxColour(0x989898)); + dc.SetFont(::Label::Head_20); + + auto font_top = GetSize().y - dc.GetTextExtent(_L("DRY")).GetHeight(); + dc.DrawText(_L("DRY"), wxPoint(FromDIP(38), font_top / 2)); + dc.DrawText(_L("WET"), wxPoint(( GetSize().x - FromDIP(38) - dc.GetTextExtent(_L("DRY")).GetWidth()), font_top / 2)); + + + //level list + + for (int i = 0; i < hum_level_img_light.size(); i++) { + if (wxGetApp().dark_mode()) { + dc.DrawBitmap(hum_level_img_dark[i].bmp(), left, (GetSize().y - FromDIP(54)) / 2); + } + else { + dc.DrawBitmap(hum_level_img_light[i].bmp(), left, (GetSize().y - FromDIP(54)) / 2); + } + + left += FromDIP(46) + FromDIP(54); + } +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index acfc8cd3e9..75f274ba0b 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -55,9 +55,11 @@ struct TrayData { TrayType type; int id; + int ctype = 0; std::string name; std::string filament_type; wxColour colour; + std::vector material_cols = std::vector(); }; class MaterialItem: public wxPanel @@ -72,6 +74,8 @@ public: wxColour m_ams_coloul; wxString m_ams_name; + int m_ams_ctype = 0; + std::vector m_ams_cols = std::vector(); ScalableBitmap m_arraw_bitmap_gray; ScalableBitmap m_arraw_bitmap_white; @@ -81,7 +85,7 @@ public: bool m_warning{false}; void msw_rescale(); - void set_ams_info(wxColour col, wxString txt); + void set_ams_info(wxColour col, wxString txt, int ctype=0, std::vector cols= std::vector()); void disable(); void enable(); @@ -153,6 +157,7 @@ public: void update_materials_list(std::vector list); void set_tag_texture(std::string texture); void update_ams_data(std::map amsList); + void update_ams_data_multi_machines(); void add_ams_mapping(std::vector tray_data, wxWindow* container, wxBoxSizer* sizer); void set_current_filament_id(int id){m_current_filament_id = id;}; int get_current_filament_id(){return m_current_filament_id;}; @@ -185,6 +190,33 @@ public: wxStaticText * m_tip_disable_ams; }; +class AmsHumidityLevelList : public wxPanel +{ +public: + AmsHumidityLevelList(wxWindow* parent); + ~AmsHumidityLevelList() {}; + + ScalableBitmap background_img; + ScalableBitmap hum_level1_img; + ScalableBitmap hum_level2_img; + ScalableBitmap hum_level3_img; + ScalableBitmap hum_level4_img; + + std::vector hum_level_img_light; + std::vector hum_level_img_dark; + + wxStaticBitmap* hum_level1_bitmap; + wxStaticBitmap* hum_level2_bitmap; + wxStaticBitmap* hum_level3_bitmap; + wxStaticBitmap* hum_level4_bitmap; + wxStaticBitmap* hum_level5_bitmap; + + void msw_rescale(); + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); +}; + class AmsHumidityTipPopup : public PopupWindow { public: @@ -195,14 +227,19 @@ public: virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; + void set_humidity_level(int level); + void render(wxDC& dc); + void doRender(wxDC& dc); + public: + int current_humidity_level; + + ScalableBitmap close_img; + wxStaticBitmap* curr_humidity_img; + AmsHumidityLevelList* humidity_level_list{nullptr}; wxStaticBitmap* m_img; - Label* m_staticText1; - Label* m_staticText2; - Label* m_staticText3; - Label* m_staticText4; + Label* m_staticText;; Label* m_staticText_note; - Button* m_button_confirm; }; class AmsTutorialPopup : public PopupWindow diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index ee7c380a69..0bf251d729 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -134,19 +134,19 @@ void BBLTopbarArt::DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& i { if (item.GetState() & wxAUI_BUTTON_STATE_PRESSED) { - dc.SetPen(wxPen(m_highlightColour)); - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(20))); + dc.SetPen(wxPen(StateColor::darkModeColorFor("#009688"))); // ORCA + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA dc.DrawRectangle(rect); } else if ((item.GetState() & wxAUI_BUTTON_STATE_HOVER) || item.IsSticky()) { - dc.SetPen(wxPen(m_highlightColour)); - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(40))); + dc.SetPen(wxPen(StateColor::darkModeColorFor("#009688"))); // ORCA + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA // draw an even lighter background for checked item hovers (since // the hover background is the same color as the check background) if (item.GetState() & wxAUI_BUTTON_STATE_CHECKED) - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(50))); + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA dc.DrawRectangle(rect); } @@ -154,8 +154,8 @@ void BBLTopbarArt::DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& i { // it's important to put this code in an else statement after the // hover, otherwise hovers won't draw properly for checked items - dc.SetPen(wxPen(m_highlightColour)); - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(40))); + dc.SetPen(wxPen(StateColor::darkModeColorFor("#009688"))); // ORCA + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA dc.DrawRectangle(rect); } } diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 0ae0ef4ce8..ca8c7a1663 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -238,12 +238,18 @@ void BackgroundSlicingProcess::process_fff() //BBS: add plate index into render params m_temp_output_path = this->get_current_plate()->get_tmp_gcode_path(); m_fff_print->export_gcode(m_temp_output_path, m_gcode_result, [this](const ThumbnailsParams& params) { return this->render_thumbnails(params); }); + if(m_fff_print->is_BBL_printer()) + run_post_process_scripts(m_temp_output_path, false, "File", m_temp_output_path, m_fff_print->full_print_config()); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": export gcode finished"); } if (this->set_step_started(bspsGCodeFinalize)) { if (! m_export_path.empty()) { wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); - finalize_gcode(); + if(!m_fff_print->is_BBL_printer()) + finalize_gcode(); + else + export_gcode(); } else if (! m_upload_job.empty()) { wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); prepare_upload(); @@ -772,16 +778,14 @@ bool BackgroundSlicingProcess::invalidate_all_steps() // Copy the final G-code to target location (possibly a SD card, if it is a removable media, then verify that the file was written without an error). void BackgroundSlicingProcess::finalize_gcode() { - //BBS: don't support running user-defined post-processing scripts - //m_print->set_status(95, _utf8(L("Running post-processing scripts"))); + m_print->set_status(95, _u8L("Running post-processing scripts")); // Perform the final post-processing of the export path by applying the print statistics over the file name. std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path); std::string output_path = m_temp_output_path; - // Both output_path and export_path ar in-out parameters. // If post processed, output_path will differ from m_temp_output_path as run_post_process_scripts() will make a copy of the G-code to not - // collide with the G-code viewer memory mapping of the unprocessed G-code. G-code viewer maps unprocessed G-code, because m_gcode_result + // collide with the G-code viewer memory mapping of the unprocessed G-code. G-code viewer maps unprocessed G-code, because m_gcode_result // is calculated for the unprocessed G-code and it references lines in the memory mapped G-code file by line numbers. // export_path may be changed by the post-processing script as well if the post processing script decides so, see GH #6042. bool post_processed = run_post_process_scripts(output_path, true, "File", export_path, m_fff_print->full_print_config()); @@ -793,6 +797,7 @@ void BackgroundSlicingProcess::finalize_gcode() BOOST_LOG_TRIVIAL(error) << "Failed to remove temp file " << output_path << ": " << ex.what(); } }; + m_print->set_status(99, _utf8(L("Successfully executed post-processing script"))); //FIXME localize the messages std::string error_message; @@ -805,6 +810,52 @@ void BackgroundSlicingProcess::finalize_gcode() catch (...) { remove_post_processed_temp_file(); + throw Slic3r::ExportError(_u8L("Unknown error occured during exporting G-code.")); + } + switch (copy_ret_val) { + case CopyFileResult::SUCCESS: break; // no error + case CopyFileResult::FAIL_COPY_FILE: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%"), error_message)); + break; + case CopyFileResult::FAIL_FILES_DIFFERENT: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."), export_path)); + break; + case CopyFileResult::FAIL_RENAMING: + throw Slic3r::ExportError(GUI::format(_L("Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."), export_path)); + break; + case CopyFileResult::FAIL_CHECK_ORIGIN_NOT_OPENED: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."), output_path, export_path)); + break; + case CopyFileResult::FAIL_CHECK_TARGET_NOT_OPENED: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."), export_path)); + break; + default: + throw Slic3r::ExportError(_u8L("Unknown error occured during exporting G-code.")); + BOOST_LOG_TRIVIAL(error) << "Unexpected fail code(" << (int)copy_ret_val << ") durring copy_file() to " << export_path << "."; + break; + } + + m_print->set_status(100, GUI::format(_L("G-code file exported to %1%"), export_path)); +} + +// G-code is generated in m_temp_output_path. +// Optionally run a post-processing script on a copy of m_temp_output_path. +// Copy the final G-code to target location (possibly a SD card, if it is a removable media, then verify that the file was written without an error). +void BackgroundSlicingProcess::export_gcode() +{ + // Perform the final post-processing of the export path by applying the print statistics over the file name. + std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path); + std::string output_path = m_temp_output_path; + + //FIXME localize the messages + std::string error_message; + int copy_ret_val = CopyFileResult::SUCCESS; + try + { + copy_ret_val = copy_file(output_path, export_path, error_message, m_export_path_on_removable_media); + } + catch (...) + { throw Slic3r::ExportError(_utf8(L("Unknown error when export G-code."))); } switch (copy_ret_val) { @@ -840,7 +891,6 @@ void BackgroundSlicingProcess::finalize_gcode() // BBS: to be checked. Whether use export_path or output_path. gcode_add_line_number(export_path, m_fff_print->full_print_config()); - m_print->set_status(100, (boost::format(_utf8(L("Succeed to export G-code to %1%"))) % export_path).str()); } // A print host upload job has been scheduled, enqueue it to the printhost job queue @@ -851,17 +901,27 @@ void BackgroundSlicingProcess::prepare_upload() / boost::filesystem::unique_path("." SLIC3R_APP_KEY ".upload.%%%%-%%%%-%%%%-%%%%"); if (m_print == m_fff_print) { - m_print->set_status(95, _utf8(L("Running post-processing scripts"))); - std::string error_message; - if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS) - throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed"))); - m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); - // Make a copy of the source path, as run_post_process_scripts() is allowed to change it when making a copy of the source file - // (not here, but when the final target is a file). - std::string source_path_str = source_path.string(); - std::string output_name_str = m_upload_job.upload_data.upload_path.string(); - if (run_post_process_scripts(source_path_str, false, m_upload_job.printhost->get_name(), output_name_str, m_fff_print->full_print_config())) - m_upload_job.upload_data.upload_path = output_name_str; + if (m_upload_job.upload_data.use_3mf) { + source_path = m_upload_job.upload_data.source_path; + } else { + m_print->set_status(95, _utf8(L("Running post-processing scripts"))); + std::string error_message; + if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS) + throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed"))); + m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); + // Orca: skip post-processing scripts for BBL printers as we have run them already in finalize_gcode() + // todo: do we need to copy the file? + + // Make a copy of the source path, as run_post_process_scripts() is allowed to change it when making a copy of the source file + // (not here, but when the final target is a file). + if (!m_fff_print->is_BBL_printer()) { + std::string source_path_str = source_path.string(); + std::string output_name_str = m_upload_job.upload_data.upload_path.string(); + if (run_post_process_scripts(source_path_str, false, m_upload_job.printhost->get_name(), output_name_str, + m_fff_print->full_print_config())) + m_upload_job.upload_data.upload_path = output_name_str; + } + } } else { m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp index b5b8ffcd7a..78e8971869 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -287,6 +287,7 @@ private: // If the background processing stop was requested, throw CanceledException. void throw_if_canceled() const { if (m_print->canceled()) throw CanceledException(); } void finalize_gcode(); + void export_gcode(); void prepare_upload(); // To be executed at the background thread. ThumbnailsList render_thumbnails(const ThumbnailsParams ¶ms); diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index 3d8fa092a3..2d229a3e39 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -44,7 +44,8 @@ void BedShape::append_option_line(ConfigOptionsGroupShp optgroup, Parameter para def.type = coPoints; def.set_default_value(new ConfigOptionPoints{ Vec2d(200, 200) }); def.min = 0; - def.max = 2147; + def.max = 214700; + def.width = 7; def.label = get_option_label(param); def.tooltip = L("Size in X and Y of the rectangular plate."); key = "rect_size"; @@ -52,8 +53,9 @@ void BedShape::append_option_line(ConfigOptionsGroupShp optgroup, Parameter para case Parameter::RectOrigin: def.type = coPoints; def.set_default_value(new ConfigOptionPoints{ Vec2d(0, 0) }); - def.min = -1073.5; - def.max = 1073.5; + def.min = -107350; + def.max = 107350; + def.width = 7; def.label = get_option_label(param); def.tooltip = L("Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."); key = "rect_origin"; diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index df52d84b14..134d91e7c5 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -54,6 +54,300 @@ wxString get_fail_reason(int code) return _L("Unknown Failure"); } +PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Bind with Pin Code"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL); + + + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + + m_simplebook = new wxSimplebook(this); + m_simplebook->SetSize(wxSize(FromDIP(460), FromDIP(240))); + m_simplebook->SetMinSize(wxSize(FromDIP(460), FromDIP(240))); + m_simplebook->SetMaxSize(wxSize(FromDIP(460), FromDIP(240))); + + + request_bind_panel = new wxPanel(m_simplebook); + binding_panel = new wxPanel(m_simplebook); + + request_bind_panel->SetSize(wxSize(FromDIP(460), FromDIP(240))); + request_bind_panel->SetMinSize(wxSize(FromDIP(460), FromDIP(240))); + request_bind_panel->SetMaxSize(wxSize(FromDIP(460), FromDIP(240))); + + binding_panel->SetSize(wxSize(FromDIP(460), FromDIP(240))); + binding_panel->SetMinSize(wxSize(FromDIP(460), FromDIP(240))); + binding_panel->SetMaxSize(wxSize(FromDIP(460), FromDIP(240))); + + + request_bind_panel->SetBackgroundColour(*wxWHITE); + binding_panel->SetBackgroundColour(*wxWHITE); + + m_status_text = new Label(request_bind_panel, _L("Please Find the Pin Code in Account page on printer screen,\n and type in the Pin Code below.")); + m_status_text->SetBackgroundColour(*wxWHITE); + m_status_text->SetFont(Label::Body_14); + m_status_text->SetMaxSize(wxSize(FromDIP(440), -1)); + m_status_text->Wrap(FromDIP(440)); + m_status_text->SetForegroundColour(wxColour(38, 46, 48)); + + m_link_show_ping_code_wiki = new wxStaticText(request_bind_panel, wxID_ANY, _L("Can't find Pin Code?")); + m_link_show_ping_code_wiki->SetFont(Label::Body_14); + m_link_show_ping_code_wiki->SetBackgroundColour(*wxWHITE); + m_link_show_ping_code_wiki->SetForegroundColour(wxColour(31, 142, 234)); + + m_link_show_ping_code_wiki->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_link_show_ping_code_wiki->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + m_link_show_ping_code_wiki->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_ping_code_wiki = "https://wiki.bambulab.com/en/bambu-studio/manual/pin-code"; + wxLaunchDefaultBrowser(m_ping_code_wiki); + }); + + m_text_input_title = new wxStaticText(request_bind_panel, wxID_ANY, _L("Pin Code")); + m_text_input_title->SetFont(Label::Body_14); + m_text_input_title->SetBackgroundColour(*wxWHITE); + + wxBoxSizer* ping_code_input = new wxBoxSizer(wxHORIZONTAL); + + + for (int i = 0; i < PING_CODE_LENGTH; i++) { + m_text_input_single_code[i] = new TextInput(request_bind_panel, wxEmptyString, "", "", wxDefaultPosition, wxSize(FromDIP(38), FromDIP(38)), wxTE_PROCESS_ENTER | wxTE_CENTER); + wxTextAttr textAttr; + textAttr.SetAlignment(wxTEXT_ALIGNMENT_CENTER); + textAttr.SetTextColour(wxColour(34, 139, 34)); + m_text_input_single_code[i]->GetTextCtrl()->SetDefaultStyle(textAttr); + m_text_input_single_code[i]->SetFont(Label::Body_16); + m_text_input_single_code[i]->GetTextCtrl()->SetMaxLength(1); + m_text_input_single_code[i]->GetTextCtrl()->Bind(wxEVT_TEXT, &PingCodeBindDialog::on_text_changed, this); + m_text_input_single_code[i]->GetTextCtrl()->Bind(wxEVT_KEY_DOWN, &PingCodeBindDialog::on_key_backspace, this); + m_text_input_single_code[i]->GetTextCtrl()->Bind(wxEVT_CHAR, &PingCodeBindDialog::on_key_input, this); + ping_code_input->Add(m_text_input_single_code[i], 0, wxALL, FromDIP(5)); + } + + wxBoxSizer* m_sizer_button = new wxBoxSizer(wxHORIZONTAL); + m_sizer_button->Add(0, 0, 1, wxEXPAND, 5); + m_button_bind = new Button(request_bind_panel, _L("Confirm")); + + StateColor btn_bg_green(std::pair(wxColour(206, 206, 206), StateColor::Disabled), + 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_button_bind->SetBackgroundColor(btn_bg_green); + 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), + std::pair(*wxWHITE, StateColor::Normal)); + + m_button_cancel = new Button(request_bind_panel, _L("Cancel")); + m_button_cancel->SetBackgroundColor(btn_bg_white); + m_button_cancel->SetBorderColor(BIND_DIALOG_GREY900); + m_button_cancel->SetSize(BIND_DIALOG_BUTTON_SIZE); + m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE); + m_button_cancel->SetTextColor(BIND_DIALOG_GREY900); + m_button_cancel->SetCornerRadius(FromDIP(12)); + + m_sizer_button->Add(m_button_bind, 0, wxALIGN_CENTER, 0); + m_sizer_button->Add(0, 0, 0, wxLEFT, FromDIP(13)); + m_sizer_button->Add(m_button_cancel, 0, wxALIGN_CENTER, 0); + + + + m_simplebook->AddPage(request_bind_panel, wxEmptyString, true); + m_simplebook->AddPage(binding_panel, wxEmptyString, false); + + + auto sizer_request = new wxBoxSizer(wxVERTICAL); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_request->Add(m_status_text, 0, wxLEFT, FromDIP(13)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_request->Add(m_link_show_ping_code_wiki, 0, wxLEFT, FromDIP(13)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(15)); + sizer_request->Add(m_text_input_title, 0, wxLEFT, FromDIP(13)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(5)); + sizer_request->Add(ping_code_input, 0, wxLEFT, FromDIP(10)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_request->Add(m_sizer_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, FromDIP(15)); + request_bind_panel->SetSizer(sizer_request); + request_bind_panel->Layout(); + request_bind_panel->Fit(); + + + + auto m_loading_txt = new Label(binding_panel, _L("Binding...")); + m_loading_txt->SetBackgroundColour(*wxWHITE); + m_loading_txt->SetFont(Label::Head_16); + auto m_loading_tip_txt = new Label(binding_panel, _L("Please confirm on the printer screen")); + m_loading_tip_txt->SetBackgroundColour(*wxWHITE); + m_loading_tip_txt->SetFont(Label::Body_15); + + wxBoxSizer* m_sizer_binding_button = new wxBoxSizer(wxHORIZONTAL); + m_sizer_binding_button->Add(0, 0, 1, wxEXPAND, 5); + + m_button_close = new Button(binding_panel, _L("Close")); + m_button_close->SetBackgroundColor(btn_bg_white); + m_button_close->SetBorderColor(BIND_DIALOG_GREY900); + m_button_close->SetSize(BIND_DIALOG_BUTTON_SIZE); + m_button_close->SetMinSize(BIND_DIALOG_BUTTON_SIZE); + m_button_close->SetTextColor(BIND_DIALOG_GREY900); + m_button_close->SetCornerRadius(FromDIP(12)); + m_sizer_binding_button->Add(m_button_close, 0, wxALIGN_CENTER, 0); + + auto sizer_binding = new wxBoxSizer(wxVERTICAL); + sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(80)); + sizer_binding->Add(m_loading_txt, 0, wxALIGN_CENTER, 0); + sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_binding->Add(m_loading_tip_txt, 0, wxALIGN_CENTER, 0); + sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(30)); + sizer_binding->Add(m_sizer_binding_button, 0, wxALIGN_RIGHT | wxRIGHT, FromDIP(20)); + binding_panel->SetSizer(sizer_binding); + binding_panel->Layout(); + binding_panel->Fit(); + + + + sizer_main->Add(m_line_top, 0, wxEXPAND, 0); + sizer_main->Add(m_simplebook, 0, wxEXPAND, 0); + + + + SetSizer(sizer_main); + Layout(); + Fit(); + + m_button_bind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_bind_printer), NULL, this); + m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); + m_button_close->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); + + m_simplebook->SetSelection(0); +} + +void PingCodeBindDialog::on_key_input(wxKeyEvent& evt) +{ + int keyCode = evt.GetKeyCode(); + + if (keyCode == WXK_BACK || (keyCode >= '0' && keyCode <= '9') || (keyCode >= 'a' && keyCode <= 'z') || (keyCode >= 'A' && keyCode <= 'Z')) + { + evt.Skip(); + } + else + { + wxBell(); + return; + } +} + +void PingCodeBindDialog::on_text_changed(wxCommandEvent& event) { + //switch focus to the text text input + wxTextCtrl* text_input = static_cast(event.GetEventObject()); + int idx = -1; + for (int i = 0; i < PING_CODE_LENGTH; i++) { + if (text_input == m_text_input_single_code[i]->GetTextCtrl()) { + idx = i; + break; + } + } + + if (idx != -1 && text_input->GetValue().Length() == 1) { + if (idx < PING_CODE_LENGTH-1) { + m_text_input_single_code[idx + 1]->SetFocus(); + } + + auto has_empty = false; + for (int i = 0; i < PING_CODE_LENGTH; i++) { + if (m_text_input_single_code[i]->GetTextCtrl()->GetValue().ToStdString().empty()) { + has_empty = true; + } + } + + if (has_empty) { + m_button_bind->Enable(false); + } + else { + m_button_bind->Enable(true); + } + + /*if (idx == PING_CODE_LENGTH - 1) { + m_button_bind->Enable(true); + }*/ + } + +} + +void PingCodeBindDialog::on_key_backspace(wxKeyEvent& event) +{ + wxTextCtrl* text_input = static_cast(event.GetEventObject()); + int idx = -1; + for (int i = 0; i < 6; i++) { + if (text_input == m_text_input_single_code[i]->GetTextCtrl()) { + idx = i; + break; + } + } + + if (event.GetKeyCode() == WXK_BACK && idx >= 0) { + CallAfter([this, idx]() { + m_text_input_single_code[idx - 1]->SetFocus(); + m_button_bind->Enable(false); + }); + } + event.Skip(); +} + +void PingCodeBindDialog::on_bind_printer(wxCommandEvent& event) +{ + wxString ping_code; + + for (int i = 0; i < PING_CODE_LENGTH; i++) { + ping_code += m_text_input_single_code[i]->GetTextCtrl()->GetValue().ToStdString(); + } + + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent && agent->is_user_login() && ping_code.length() == PING_CODE_LENGTH) { + auto result = agent->ping_bind(ping_code.ToStdString()); + + if(result < 0){ + MessageDialog msg_wingow(nullptr, _L("Log in failed. Please check the Pin Code."), "", wxAPPLY | wxOK); + msg_wingow.ShowModal(); + return; + } + m_simplebook->SetSelection(1); + } +} + +void PingCodeBindDialog::on_cancel(wxCommandEvent& event) +{ + EndModal(wxCLOSE); +} + +void PingCodeBindDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + + Fit(); + Refresh(); +} + + +PingCodeBindDialog::~PingCodeBindDialog() { + m_button_bind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_bind_printer), NULL, this); + m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); + m_button_close->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); +} + BindMachineDialog::BindMachineDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Log in printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) { diff --git a/src/slic3r/GUI/BindDialog.hpp b/src/slic3r/GUI/BindDialog.hpp index 636d088112..a4ffd8fbff 100644 --- a/src/slic3r/GUI/BindDialog.hpp +++ b/src/slic3r/GUI/BindDialog.hpp @@ -19,7 +19,6 @@ #include #include #include "wxExtensions.hpp" -#include "Plater.hpp" #include "Widgets/StepCtrl.hpp" #include "Widgets/ProgressDialog.hpp" #include "Widgets/Button.hpp" @@ -29,15 +28,21 @@ #include "BBLStatusBar.hpp" #include "BBLStatusBarBind.hpp" #include "Jobs/Worker.hpp" +#include "GUI_Utils.hpp" +#include "Widgets/TextInput.hpp" +#include "Jobs/PrintJob.hpp" +#include "Jobs/SendJob.hpp" +#include "DeviceManager.hpp" #define BIND_DIALOG_GREY200 wxColour(248, 248, 248) #define BIND_DIALOG_GREY800 wxColour(50, 58, 61) #define BIND_DIALOG_GREY900 wxColour(38, 46, 48) #define BIND_DIALOG_BUTTON_SIZE wxSize(FromDIP(68), FromDIP(24)) #define BIND_DIALOG_BUTTON_PANEL_SIZE wxSize(FromDIP(450), FromDIP(30)) +#define PING_CODE_LENGTH 6 namespace Slic3r { namespace GUI { - +class Plater; struct MemoryStruct { char * memory; @@ -45,6 +50,47 @@ struct MemoryStruct size_t size; }; +class PingCodeBindDialog : public DPIDialog +{ +private: + + Label* m_status_text; + wxStaticText* m_text_input_title; + wxStaticText* m_link_show_ping_code_wiki; + TextInput* m_text_input_single_code[PING_CODE_LENGTH]; + Button* m_button_bind; + Button* m_button_cancel; + Button* m_button_close; + wxSimplebook* m_simplebook; + wxPanel* request_bind_panel; + wxPanel* binding_panel; + + 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 }; + wxHyperlinkCtrl* m_link_network_state{ nullptr }; + wxString m_result_info; + wxString m_result_extra; + wxString m_ping_code_wiki; + bool m_show_error_info_state = true; + + int m_result_code; + std::shared_ptr m_status_bar; + +public: + PingCodeBindDialog(Plater* plater = nullptr); + ~PingCodeBindDialog(); + + void on_key_input(wxKeyEvent& evt); + void on_text_changed(wxCommandEvent& event); + void on_key_backspace(wxKeyEvent& event); + void on_cancel(wxCommandEvent& event); + void on_bind_printer(wxCommandEvent& event); + void on_dpi_changed(const wxRect& suggested_rect) override; +}; + class BindMachineDialog : public DPIDialog { private: diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp index d5facd3f3f..ae0678f6b1 100644 --- a/src/slic3r/GUI/BitmapCache.cpp +++ b/src/slic3r/GUI/BitmapCache.cpp @@ -323,7 +323,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_ // map of color replaces std::map replaces; -replaces["\"#0x00AE42\""] = "\"#009688\""; + replaces["\"#0x00AE42\""] = "\"#009688\""; replaces["\"#00FF00\""] = "\"#52c7b8\""; if (dark_mode) { replaces["\"#262E30\""] = "\"#EFEFF0\""; @@ -334,8 +334,17 @@ replaces["\"#0x00AE42\""] = "\"#009688\""; replaces["\"#6B6B6B\""] = "\"#818182\""; replaces["\"#909090\""] = "\"#FFFFFF\""; replaces["\"#00FF00\""] = "\"#FF0000\""; -replaces["\"#009688\""] = "\"#00675b\""; + replaces["\"#009688\""] = "\"#00675b\""; + replaces["#DBDBDB"] = "#4A4A51"; // ORCA border color + replaces["#F0F0F1"] = "#404040"; // ORCA disabled background color + replaces["#262E30"] = "#EFEFF0"; // ORCA + } else { + replaces["#949494"] = "#7C8282"; // ORCA replace icon line color for light theme } + + if (strstr(bitmap_name.c_str(), "toggle_on") != NULL && dark_mode) // ORCA only replace color of toggle button + replaces["#009688"] = "#00675b"; + //if (!new_color.empty()) // replaces["\"#ED6B21\""] = "\"" + new_color + "\""; diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index e1d0d8e073..7224ec34e2 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -14,8 +14,8 @@ namespace GUI { #define HISTORY_WINDOW_SIZE wxSize(FromDIP(700), FromDIP(600)) #define EDIT_HISTORY_DIALOG_INPUT_SIZE wxSize(FromDIP(160), FromDIP(24)) +#define NEW_HISTORY_DIALOG_INPUT_SIZE wxSize(FromDIP(250), FromDIP(24)) #define HISTORY_WINDOW_ITEMS_COUNT 5 -static const wxString k_tips = "Please input a valid value (K in 0~0.3)"; static wxString get_preset_name_by_filament_id(std::string filament_id) { @@ -54,9 +54,10 @@ static wxString get_preset_name_by_filament_id(std::string filament_id) return preset_name; } -HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& calib_results_history) +HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& calib_results_history, bool& show) : DPIDialog(parent, wxID_ANY, _L("Flow Dynamics Calibration Result"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) , m_calib_results_history(calib_results_history) + , m_show_history_dialog(show) { this->SetBackgroundColour(*wxWHITE); auto main_sizer = new wxBoxSizer(wxVERTICAL); @@ -71,6 +72,21 @@ HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& auto scroll_sizer = new wxBoxSizer(wxVERTICAL); scroll_window->SetSizer(scroll_sizer); + Button * mew_btn = new Button(scroll_window, _L("New")); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + mew_btn->SetBackgroundColour(*wxWHITE); + mew_btn->SetBackgroundColor(btn_bg_green); + mew_btn->SetBorderColor(wxColour(0, 150, 136)); + mew_btn->SetTextColor(wxColour("#FFFFFE")); + mew_btn->SetMinSize(wxSize(FromDIP(100), FromDIP(24))); + mew_btn->SetMaxSize(wxSize(FromDIP(100), FromDIP(24))); + mew_btn->SetCornerRadius(FromDIP(12)); + mew_btn->Bind(wxEVT_BUTTON, &HistoryWindow::on_click_new_button, this); + + scroll_sizer->Add(mew_btn, 0, wxLEFT, FromDIP(20)); + scroll_sizer->AddSpacer(FromDIP(15)); + wxPanel* comboBox_panel = new wxPanel(scroll_window); comboBox_panel->SetBackgroundColour(wxColour(238, 238, 238)); auto comboBox_sizer = new wxBoxSizer(wxVERTICAL); @@ -122,11 +138,14 @@ HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& m_refresh_timer->SetOwner(this); m_refresh_timer->Start(200); Bind(wxEVT_TIMER, &HistoryWindow::on_timer, this); + + m_show_history_dialog = true; } HistoryWindow::~HistoryWindow() { m_refresh_timer->Stop(); + m_show_history_dialog = false; } void HistoryWindow::sync_history_result(MachineObject* obj) @@ -346,6 +365,17 @@ float HistoryWindow::get_nozzle_value() return nozzle_value; } +void HistoryWindow::on_click_new_button(wxCommandEvent& event) +{ + if (curr_obj && curr_obj->get_printer_series() == PrinterSeries::SERIES_P1P && m_calib_results_history.size() >= 16) { + MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold %d history results per nozzle."), 16), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + NewCalibrationHistoryDialog dlg(this, m_calib_results_history); + dlg.ShowModal(); +} EditCalibrationHistoryDialog::EditCalibrationHistoryDialog(wxWindow* parent, const PACalibResult& result) : DPIDialog(parent, wxID_ANY, _L("Edit Flow Dynamics Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) @@ -434,18 +464,14 @@ PACalibResult EditCalibrationHistoryDialog::get_result() { void EditCalibrationHistoryDialog::on_save(wxCommandEvent& event) { wxString name = m_name_value->GetTextCtrl()->GetValue(); - if (name.IsEmpty()) + if (!CalibUtils::validate_input_name(name)) return; - if (name.Length() > 40) { - MessageDialog msg_dlg(nullptr, _L("The name cannot exceed 40 characters."), wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - return; - } + m_new_result.name = m_name_value->GetTextCtrl()->GetValue().ToUTF8().data(); float k = 0.0f; if (!CalibUtils::validate_input_k_value(m_k_value->GetTextCtrl()->GetValue(), &k)) { - MessageDialog msg_dlg(nullptr, _L(k_tips), wxEmptyString, wxICON_WARNING | wxOK); + MessageDialog msg_dlg(nullptr, wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE), wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; } @@ -465,5 +491,249 @@ void EditCalibrationHistoryDialog::on_dpi_changed(const wxRect& suggested_rect) { } +wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject *obj) +{ + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + + wxArrayString filament_items; + std::set filament_id_set; + std::set printer_names; + std::ostringstream stream; + stream << std::fixed << std::setprecision(1) << obj->nozzle_diameter; + std::string nozzle_diameter_str = stream.str(); + + 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) + continue; + + // use printer_model as printer type + if (printer_model_str->value != MachineObject::get_preset_printer_model_name(obj->printer_type)) + continue; + + if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) + printer_names.insert(printer_it->name); + } + + 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 + Preset &preset = *filament_it; + /*The situation where the user preset is not displayed is as follows: + 1. Not a root preset + 2. Not system preset and the printer firmware does not support user preset */ + if (preset_bundle->filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && ! obj->is_support_user_preset)) { 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_names.find(printer_str) != printer_names.end()) { + 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 + if (filament_it->is_system) { + filament_items.push_back(filament_it->alias); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[filament_it->alias] = filament_infos; + } else { + char target = '@'; + size_t pos = filament_it->name.find(target); + if (pos != std::string::npos) { + std::string user_preset_alias = filament_it->name.substr(0, pos - 1); + wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); + user_preset_alias = wx_user_preset_alias.ToStdString(); + + filament_items.push_back(user_preset_alias); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[user_preset_alias] = filament_infos; + } + } + } + } + } + } + } + return filament_items; +} + +NewCalibrationHistoryDialog::NewCalibrationHistoryDialog(wxWindow *parent, const std::vector history_results) + : DPIDialog(parent, wxID_ANY, _L("New Flow Dynamic Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) + , m_history_results(history_results) +{ + Slic3r::DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) + return; + MachineObject *obj = dev->get_selected_machine(); + if (!obj) + return; + + curr_obj = obj; + + 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")); + m_name_value = new TextInput(top_panel, "", "", "", wxDefaultPosition, NEW_HISTORY_DIALOG_INPUT_SIZE, wxTE_PROCESS_ENTER); + + // Name + flex_sizer->Add(name_title); + flex_sizer->Add(m_name_value); + + Label * preset_name_title = new Label(top_panel, _L("Filament")); + m_comboBox_filament = new ::ComboBox(top_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, NEW_HISTORY_DIALOG_INPUT_SIZE, 0, nullptr, wxCB_READONLY); + + wxArrayString filament_items = get_all_filaments(obj); + m_comboBox_filament->Set(filament_items); + m_comboBox_filament->SetSelection(-1); + + // Filament + flex_sizer->Add(preset_name_title); + flex_sizer->Add(m_comboBox_filament); + + Label *nozzle_diameter_title = new Label(top_panel, _L("Nozzle Diameter")); + m_comboBox_nozzle_diameter = new ::ComboBox(top_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, NEW_HISTORY_DIALOG_INPUT_SIZE, 0, nullptr, wxCB_READONLY); + static std::array nozzle_diameter_list = {0.2f, 0.4f, 0.6f, 0.8f}; + for (int i = 0; i < nozzle_diameter_list.size(); i++) { + m_comboBox_nozzle_diameter->AppendString(wxString::Format("%1.1f mm", nozzle_diameter_list[i])); + if (abs(obj->nozzle_diameter - nozzle_diameter_list[i]) < 1e-3) { + m_comboBox_nozzle_diameter->SetSelection(i); + } + } + + // Nozzle Diameter + flex_sizer->Add(nozzle_diameter_title); + flex_sizer->Add(m_comboBox_nozzle_diameter); + + Label *k_title = new Label(top_panel, _L("Factor K")); + auto k_str = wxString::Format("%.3f", m_new_result.k_value); + m_k_value = new TextInput(top_panel, k_str, "", "", wxDefaultPosition, NEW_HISTORY_DIALOG_INPUT_SIZE, wxTE_PROCESS_ENTER); + + // Factor K + flex_sizer->Add(k_title); + flex_sizer->Add(m_k_value); + + panel_sizer->Add(flex_sizer); + + panel_sizer->AddSpacer(FromDIP(25)); + + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + Button * ok_btn = new Button(top_panel, _L("Ok")); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + ok_btn->SetBackgroundColour(*wxWHITE); + ok_btn->SetBackgroundColor(btn_bg_green); + ok_btn->SetBorderColor(wxColour(0, 150, 136)); + ok_btn->SetTextColor(wxColour("#FFFFFE")); + ok_btn->SetMinSize(wxSize(-1, FromDIP(24))); + ok_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)); + ok_btn->Bind(wxEVT_BUTTON, &NewCalibrationHistoryDialog::on_ok, this); + cancel_btn->Bind(wxEVT_BUTTON, &NewCalibrationHistoryDialog::on_cancel, this); + btn_sizer->AddStretchSpacer(); + btn_sizer->Add(ok_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); +} + +void NewCalibrationHistoryDialog::on_ok(wxCommandEvent &event) +{ + wxString name = m_name_value->GetTextCtrl()->GetValue(); + if (!CalibUtils::validate_input_name(name)) + return; + + float k = 0.0f; + if (!CalibUtils::validate_input_k_value(m_k_value->GetTextCtrl()->GetValue(), &k)) { + MessageDialog msg_dlg(nullptr, wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + wxString k_str = wxString::Format("%.3f", k); + m_k_value->GetTextCtrl()->SetValue(k_str); + + double nozzle_value = 0.0; + wxString nozzle_value_str = m_comboBox_nozzle_diameter->GetValue(); + nozzle_value_str.ToDouble(&nozzle_value); + + std::string filament_name = m_comboBox_filament->GetValue().ToStdString(); + if (filament_name.empty()) { + MessageDialog msg_dlg(nullptr, _L("The filament must be selected."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + auto filament_item = map_filament_items[m_comboBox_filament->GetValue().ToStdString()]; + std::string filament_id = filament_item.filament_id; + std::string setting_id = filament_item.setting_id; + + m_new_result.name = name.ToUTF8().data(); + m_new_result.k_value = k; + m_new_result.tray_id = -1; + m_new_result.cali_idx = -1; + + m_new_result.nozzle_diameter = nozzle_value; + m_new_result.filament_id = filament_id; + m_new_result.setting_id = setting_id; + + // Check for duplicate names from history + { + auto iter = std::find_if(m_history_results.begin(), m_history_results.end(), [this](const PACalibResult &item) { + return item.name == m_new_result.name && item.filament_id == m_new_result.filament_id; + }); + + if (iter != m_history_results.end()) { + 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 override the historical result?"), + m_new_result.name), + wxEmptyString, wxICON_WARNING | wxYES_NO); + if (msg_dlg.ShowModal() != wxID_YES) + return; + } + } + + CalibUtils::set_PA_calib_result({m_new_result}, true); + + EndModal(wxID_OK); +} + +void NewCalibrationHistoryDialog::on_cancel(wxCommandEvent &event) +{ + EndModal(wxID_CANCEL); +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/CaliHistoryDialog.hpp b/src/slic3r/GUI/CaliHistoryDialog.hpp index c44d4399e5..8f7b49a25a 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.hpp +++ b/src/slic3r/GUI/CaliHistoryDialog.hpp @@ -11,7 +11,7 @@ namespace GUI { class HistoryWindow : public DPIDialog { public: - HistoryWindow(wxWindow* parent, const std::vector& calib_results_history); + HistoryWindow(wxWindow* parent, const std::vector& calib_results_history, bool& show); ~HistoryWindow(); void on_dpi_changed(const wxRect& suggested_rect) {} void on_select_nozzle(wxCommandEvent& evt); @@ -25,12 +25,15 @@ protected: void enbale_action_buttons(bool enable); float get_nozzle_value(); + void on_click_new_button(wxCommandEvent &event); + wxPanel* m_history_data_panel; ComboBox* m_comboBox_nozzle_dia; Label* m_tips; wxTimer* m_refresh_timer { nullptr }; + bool& m_show_history_dialog; std::vector m_calib_results_history; MachineObject* curr_obj { nullptr }; int history_version = -1; @@ -55,6 +58,39 @@ protected: TextInput* m_k_value{ nullptr }; }; +class NewCalibrationHistoryDialog : public DPIDialog +{ +public: + NewCalibrationHistoryDialog(wxWindow *parent, const std::vector history_results); + ~NewCalibrationHistoryDialog(){}; + void on_dpi_changed(const wxRect &suggested_rect) override{}; + +protected: + virtual void on_ok(wxCommandEvent &event); + virtual void on_cancel(wxCommandEvent &event); + + + wxArrayString get_all_filaments(const MachineObject *obj); + +protected: + PACalibResult m_new_result; + std::vector m_history_results; + MachineObject * curr_obj; + + TextInput *m_name_value{nullptr}; + TextInput *m_k_value{nullptr}; + + ComboBox *m_comboBox_nozzle_diameter; + ComboBox *m_comboBox_filament; + + struct FilamentInfos + { + std::string filament_id; + std::string setting_id; + }; + std::map map_filament_items; +}; + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index a96cc93f1d..f6cbbc3065 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -15,24 +15,8 @@ wxDEFINE_EVENT(EVT_DEVICE_CHANGED, wxCommandEvent); wxDEFINE_EVENT(EVT_CALIBRATION_JOB_FINISHED, wxCommandEvent); static const wxString NA_STR = _L("N/A"); -static const float MIN_PA_K_VALUE = 0.0; -static const float MAX_PA_K_VALUE = 0.3; static const float MIN_PA_K_VALUE_STEP = 0.001; - -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; -} +static const int MAX_PA_HISTORY_RESULTS_NUMS = 16; std::map get_cached_selected_filament(MachineObject* obj) { std::map selected_filament_map; @@ -90,6 +74,28 @@ CalibrationWizard::CalibrationWizard(wxWindow* parent, CalibMode mode, wxWindowI main_sizer->Fit(this); Bind(EVT_CALIBRATION_JOB_FINISHED, &CalibrationWizard::on_cali_job_finished, this); + +#if !BBL_RELEASE_TO_PUBLIC + this->Bind(wxEVT_CHAR_HOOK, [this](auto& evt) { + const int keyCode = evt.GetKeyCode(); + switch (keyCode) + { + case WXK_PAGEUP: + { + show_step(m_curr_step->prev); + break; + } + case WXK_PAGEDOWN: + { + show_step(m_curr_step->next); + break; + } + default: + evt.Skip(); + break; + } + }); +#endif } CalibrationWizard::~CalibrationWizard() @@ -295,17 +301,22 @@ void CalibrationWizard::recover_preset_info(MachineObject *obj) obj->cali_finished = back_info.cali_finished; obj->cache_flow_ratio = back_info.cache_flow_ratio; obj->selected_cali_preset = back_info.selected_presets; + obj->flow_ratio_calibration_type = back_info.cache_flow_rate_calibration_type; } } } void CalibrationWizard::back_preset_info(MachineObject *obj, bool cali_finish, bool back_cali_flag) { + if (!obj) + return; + 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; + printer_cali_info.cache_flow_rate_calibration_type = obj->flow_ratio_calibration_type; wxGetApp().app_config->save_printer_cali_infos(printer_cali_info, back_cali_flag); } @@ -420,7 +431,7 @@ 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); + HistoryWindow history_dialog(this, m_calib_results_history, m_show_result_dialog); history_dialog.on_device_connected(curr_obj); history_dialog.ShowModal(); } @@ -459,6 +470,16 @@ void PressureAdvanceWizard::on_cali_action(wxCommandEvent& evt) void PressureAdvanceWizard::update(MachineObject* obj) { CalibrationWizard::update(obj); + + if (!obj) + return; + + if (!m_show_result_dialog) { + if (obj->cali_version != -1 && obj->cali_version != cali_version) { + cali_version = obj->cali_version; + CalibUtils::emit_get_PA_calib_info(obj->nozzle_diameter, ""); + } + } } void PressureAdvanceWizard::on_device_connected(MachineObject* obj) @@ -639,11 +660,21 @@ void PressureAdvanceWizard::on_cali_start() cali_page->set_pa_cali_image(int(pa_cali_method)); curr_obj->manual_pa_cali_method = pa_cali_method; - CalibUtils::calib_generic_PA(calib_info, wx_err_string); + if (curr_obj->get_printer_series() != PrinterSeries::SERIES_X1 && curr_obj->pa_calib_tab.size() >= MAX_PA_HISTORY_RESULTS_NUMS) { + MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold 16 history results per nozzle. " + "You can delete the existing historical results and then start calibration. " + "Or you can continue the calibration, but you cannot create new calibration historical results. \n" + "Do you still want to continue the calibration?"), MAX_PA_HISTORY_RESULTS_NUMS), wxEmptyString, wxICON_WARNING | wxYES | wxCANCEL); + if (msg_dlg.ShowModal() != wxID_YES) { + return; + } + } - if (!wx_err_string.empty()) { - MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); + if (!CalibUtils::calib_generic_PA(calib_info, wx_err_string)) { + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } return; } @@ -698,34 +729,68 @@ void PressureAdvanceWizard::on_cali_save() 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; - } + if (curr_obj->cali_version >= 0) { + PACalibResult new_pa_cali_result; + auto save_page = static_cast(save_step->page); + if (!save_page->get_manual_result(new_pa_cali_result)) { + 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; - } + auto iter = std::find_if(curr_obj->pa_calib_tab.begin(), curr_obj->pa_calib_tab.end(), [&new_pa_cali_result](const PACalibResult &item) { + return item.name == new_pa_cali_result.name && item.filament_id == item.filament_id; + }); + + if (iter != curr_obj->pa_calib_tab.end()) { + 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 override the historical result?"), + new_pa_cali_result.name), + wxEmptyString, wxICON_WARNING | wxYES_NO); + if (msg_dlg.ShowModal() != wxID_YES) + return; + } + else if (curr_obj->pa_calib_tab.size() >= MAX_PA_HISTORY_RESULTS_NUMS) { + MessageDialog msg_dlg(nullptr, + wxString::Format(_L("This machine type can only hold %d history results per nozzle. This result will not be saved."), MAX_PA_HISTORY_RESULTS_NUMS), + wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } - curr_obj->command_extrusion_cali_set(tray_id, setting_id, "", new_k_value, new_n_value, bed_temp, nozzle_temp, max_volumetric_speed); + CalibUtils::set_PA_calib_result({new_pa_cali_result}, false); + } else { + 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(); @@ -1001,7 +1066,13 @@ void FlowRateWizard::on_cali_start(CaliPresetStage stage, float cali_value, Flow calib_info.filament_prest = temp_filament_preset; if (cali_stage > 0) { - CalibUtils::calib_flowrate(cali_stage, calib_info, wx_err_string); + if (!CalibUtils::calib_flowrate(cali_stage, calib_info, wx_err_string)) { + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + return; + } } else { wx_err_string = _L("Internal Error") + wxString(": Invalid calibration stage"); @@ -1098,7 +1169,7 @@ void FlowRateWizard::on_cali_save() return; } - if (!check_preset_name_valid(new_preset_name)) + if (!CalibUtils::validate_input_name(new_preset_name)) return; std::string old_preset_name; @@ -1385,7 +1456,7 @@ void MaxVolumetricSpeedWizard::on_cali_save() return; } - if (!check_preset_name_valid(new_preset_name)) + if (!CalibUtils::validate_input_name(new_preset_name)) return; std::map key_value_map; diff --git a/src/slic3r/GUI/CalibrationWizard.hpp b/src/slic3r/GUI/CalibrationWizard.hpp index 14cfd50a95..34550b4b7f 100644 --- a/src/slic3r/GUI/CalibrationWizard.hpp +++ b/src/slic3r/GUI/CalibrationWizard.hpp @@ -121,7 +121,9 @@ protected: void on_device_connected(MachineObject* obj) override; + bool m_show_result_dialog = false; std::vector m_calib_results_history; + int cali_version = -1; }; class FlowRateWizard : public CalibrationWizard { diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp index 6279cc6048..cd63eaf38a 100644 --- a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp @@ -21,6 +21,7 @@ CalibrationCaliPage::CalibrationCaliPage(wxWindow* parent, CalibMode cali_mode, create_page(this); this->SetSizer(m_top_sizer); + Layout(); m_top_sizer->Fit(this); } @@ -63,8 +64,6 @@ void CalibrationCaliPage::create_page(wxWindow* parent) 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) @@ -383,7 +382,7 @@ void CalibrationCaliPage::update_subtask(MachineObject* obj) 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)); + m_printing_panel->show_profile_info(wxString::FromUTF8(obj->get_modeltask()->profile_name)); } else { m_printing_panel->show_profile_info(false); @@ -395,6 +394,7 @@ void CalibrationCaliPage::update_subtask(MachineObject* obj) } this->Layout(); + this->Fit(); } void CalibrationCaliPage::update_basic_print_data(bool def, float weight, int prediction) @@ -424,6 +424,7 @@ void CalibrationCaliPage::reset_printing_values() m_printing_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); update_basic_print_data(false); this->Layout(); + this->Fit(); } void CalibrationCaliPage::on_device_connected(MachineObject* obj) @@ -501,4 +502,4 @@ float CalibrationCaliPage::get_selected_calibration_nozzle_dia(MachineObject* ob return 0.4; } -}} +}} \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index b428110c75..482ce61a12 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -1,3 +1,4 @@ +#include #include "CalibrationWizardPresetPage.hpp" #include "I18N.hpp" #include "Widgets/Label.hpp" @@ -35,16 +36,16 @@ void CaliPresetCaliStagePanel::create_panel(wxWindow* parent) 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 = new wxPanel(parent); input_panel->Hide(); auto input_sizer = new wxBoxSizer(wxHORIZONTAL); input_panel->SetSizer(input_sizer); @@ -58,15 +59,16 @@ void CaliPresetCaliStagePanel::create_panel(wxWindow* parent) m_top_sizer->Add(input_panel); m_top_sizer->AddSpacer(PRESET_GAP); - // events - m_complete_radioBox->Bind(wxEVT_RADIOBUTTON, [this, input_panel](auto& e) { + m_complete_radioBox->Bind(wxEVT_RADIOBUTTON, [this](auto& e) { + m_stage_panel_parent->get_current_object()->flow_ratio_calibration_type = COMPLETE_CALIBRATION; 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) { + m_fine_radioBox->Bind(wxEVT_RADIOBUTTON, [this](auto& e) { + m_stage_panel_parent->get_current_object()->flow_ratio_calibration_type = FINE_CALIBRATION; input_panel->Show(); m_stage = CALI_MANUAL_STAGE_2; GetParent()->Layout(); @@ -127,6 +129,21 @@ void CaliPresetCaliStagePanel::set_flow_ratio_value(float flow_ratio) m_flow_ratio_value = flow_ratio; } +void CaliPresetCaliStagePanel::set_flow_ratio_calibration_type(FlowRatioCalibrationType type) { + if (type == COMPLETE_CALIBRATION) { + m_complete_radioBox->SetValue(true); + m_stage = CaliPresetStage::CALI_MANUAL_STAGE_1; + input_panel->Hide(); + } + else if (type == FINE_CALIBRATION) { + m_fine_radioBox->SetValue(true); + m_stage = CaliPresetStage::CALI_MANUAL_STAGE_2; + input_panel->Show(); + } + GetParent()->Layout(); + GetParent()->Fit(); +} + CaliComboBox::CaliComboBox(wxWindow* parent, wxString title, wxArrayString values, @@ -285,7 +302,6 @@ 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); @@ -297,8 +313,40 @@ void CaliPresetCustomRangePanel::create_panel(wxWindow* parent) 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] = new TextInput(parent, wxEmptyString, wxString::FromUTF8("°C"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, 0); m_value_inputs[i]->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_value_inputs[i]->GetTextCtrl()->Bind(wxEVT_TEXT, [this, i](wxCommandEvent& event) { + std::string number = m_value_inputs[i]->GetTextCtrl()->GetValue().ToStdString(); + std::string decimal_point; + std::string expression = "^[-+]?[0-9]+([,.][0-9]+)?$"; + std::regex decimalRegex(expression); + int decimal_number; + if (std::regex_match(number, decimalRegex)) { + std::smatch match; + if (std::regex_search(number, match, decimalRegex)) { + std::string decimalPart = match[1].str(); + if (decimalPart != "") + decimal_number = decimalPart.length() - 1; + else + decimal_number = 0; + } + int max_decimal_length; + if (i <= 1) + max_decimal_length = 3; + else if (i >= 2) + max_decimal_length = 4; + if (decimal_number > max_decimal_length) { + int allowed_length = number.length() - decimal_number + max_decimal_length; + number = number.substr(0, allowed_length); + m_value_inputs[i]->GetTextCtrl()->SetValue(number); + m_value_inputs[i]->GetTextCtrl()->SetInsertionPointEnd(); + } + } + // input is not a number, invalid. + else + BOOST_LOG_TRIVIAL(trace) << "The K input string is not a valid number when calibrating. "; + + }); item_sizer->Add(m_value_inputs[i], 0, wxALL, 0); horiz_sizer->Add(item_sizer, 0, wxEXPAND, 0); } @@ -344,7 +392,7 @@ void CaliPresetTipsPanel::create_panel(wxWindow* parent) 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 = new TextInput(parent, wxEmptyString, wxString::FromUTF8("°C"), "", 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); @@ -359,7 +407,7 @@ void CaliPresetTipsPanel::create_panel(wxWindow* parent) 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 = new Label(parent, wxString::FromUTF8("- °C")); 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); @@ -367,7 +415,7 @@ void CaliPresetTipsPanel::create_panel(wxWindow* parent) 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 = new TextInput(parent, wxEmptyString, wxString::FromUTF8("mm³"), "", 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); @@ -390,10 +438,8 @@ void CaliPresetTipsPanel::set_params(int nozzle_temp, int bed_temp, float max_vo 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")); + std::string bed_temp_text = bed_temp==0 ? "-": std::to_string(bed_temp); + m_bed_temp->SetLabel(wxString::FromUTF8(bed_temp_text + "°C")); wxString flow_val_text = wxString::Format("%0.2f", max_volumetric); m_max_volumetric_speed->GetTextCtrl()->SetValue(flow_val_text); @@ -676,6 +722,7 @@ void CalibrationPresetPage::create_page(wxWindow* parent) m_top_sizer->Add(m_step_panel, 0, wxEXPAND, 0); m_cali_stage_panel = new CaliPresetCaliStagePanel(parent); + m_cali_stage_panel->set_parent(this); m_top_sizer->Add(m_cali_stage_panel, 0); m_selection_panel = new wxPanel(parent); @@ -1040,11 +1087,6 @@ void CalibrationPresetPage::update_plate_type_collection(CalibrationMethod metho 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); @@ -1163,7 +1205,7 @@ void CalibrationPresetPage::update_show_status() show_status(CaliPresetPageStatus::CaliPresetStatusInPrinting); return; } - else if (need_check_sdcard(obj_) && obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) { + else if (!obj_->is_support_print_without_sd && (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD)) { show_status(CaliPresetPageStatus::CaliPresetStatusNoSdcard); return; } @@ -1383,10 +1425,10 @@ void CalibrationPresetPage::set_cali_method(CalibrationMethod method) m_custom_range_panel->set_titles(titles); wxArrayString values; - values.push_back(_L("0")); - values.push_back(_L("0.5")); - values.push_back(_L("0.005")); - m_custom_range_panel->set_values(values); + values.push_back(wxString::Format(wxT("%.0f"), 0)); + values.push_back(wxString::Format(wxT("%.2f"), 0.05)); + values.push_back(wxString::Format(wxT("%.3f"), 0.005)); + m_custom_range_panel->set_values(values); m_custom_range_panel->set_unit(""); m_custom_range_panel->Show(); @@ -1438,7 +1480,7 @@ void CalibrationPresetPage::on_cali_cancel_job() { BOOST_LOG_TRIVIAL(info) << "CalibrationWizard::print_job: enter canceled"; if (CalibUtils::print_worker) { - BOOST_LOG_TRIVIAL(info) << "calibration_print_job: canceled"; + BOOST_LOG_TRIVIAL(info) << "calibration_print_job: canceled"; CalibUtils::print_worker->cancel_all(); CalibUtils::print_worker->wait_for_idle(); } @@ -1458,6 +1500,8 @@ void CalibrationPresetPage::init_with_machine(MachineObject* obj) { if (!obj) return; + //set flow ratio calibration type + m_cali_stage_panel->set_flow_ratio_calibration_type(obj->flow_ratio_calibration_type); // set nozzle value from machine bool nozzle_is_set = false; for (int i = 0; i < NOZZLE_LIST_COUNT; i++) { @@ -1482,8 +1526,8 @@ void CalibrationPresetPage::init_with_machine(MachineObject* obj) } // set bed type collection from machine - if (m_cali_mode == CalibMode::Calib_PA_Line) - update_plate_type_collection(m_cali_method); + //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 @@ -1870,7 +1914,7 @@ MaxVolumetricSpeedPresetPage::MaxVolumetricSpeedPresetPage( titles.push_back(_L("Step")); m_custom_range_panel->set_titles(titles); - m_custom_range_panel->set_unit(_L("mm\u00B3/s")); + m_custom_range_panel->set_unit("mm³/s"); } } }} diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp index 9096c7a34a..4adcd858f3 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp @@ -16,6 +16,8 @@ enum FlowRatioCaliSource { FROM_COARSE_PAGE, }; +class CalibrationPresetPage; + class CaliPresetCaliStagePanel : public wxPanel { public: @@ -30,14 +32,17 @@ public: void get_cali_stage(CaliPresetStage& stage, float& value); void set_flow_ratio_value(float flow_ratio); - + void set_parent(CalibrationPresetPage* parent) { m_stage_panel_parent = parent; } + void set_flow_ratio_calibration_type(FlowRatioCalibrationType type); protected: CaliPresetStage m_stage; wxBoxSizer* m_top_sizer; wxRadioButton* m_complete_radioBox; wxRadioButton* m_fine_radioBox; TextInput * flow_ratio_input; + wxPanel* input_panel; float m_flow_ratio_value; + CalibrationPresetPage* m_stage_panel_parent; }; class CaliComboBox : public wxPanel @@ -162,6 +167,7 @@ public: void stripWhiteSpace(std::string& str); void update_priner_status_msg(wxString msg, bool is_warning); void update(MachineObject* obj) override; + void update_flow_ratio_type(FlowRatioCalibrationType type) { curr_obj->flow_ratio_calibration_type = type; } void on_device_connected(MachineObject* obj) override; @@ -206,7 +212,7 @@ public: CalibMode get_pa_cali_method(); CaliPresetPageStatus get_page_status() { return m_page_status; } - + MachineObject* get_current_object() { return curr_obj; } void msw_rescale() override; void on_sys_color_changed() override; @@ -306,4 +312,4 @@ public: }} // namespace Slic3r::GUI -#endif \ No newline at end of file +#endif diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp index 77637bc10d..246623fffe 100644 --- a/src/slic3r/GUI/CalibrationWizardSavePage.cpp +++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp @@ -8,7 +8,6 @@ namespace Slic3r { namespace GUI { #define CALIBRATION_SAVE_INPUT_SIZE wxSize(FromDIP(240), FromDIP(24)) #define FLOW_RATE_MAX_VALUE 1.15 -static const wxString k_tips = "Please input a valid value (K in 0~0.3)"; static wxString get_default_name(wxString filament_name, CalibMode mode){ PresetBundle* preset_bundle = wxGetApp().preset_bundle; @@ -362,7 +361,7 @@ void CaliPASaveAutoPanel::save_to_result_from_widgets(wxWindow* window, bool* ou 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.3)"); + *out_msg = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE); *out_is_valid = false; } else @@ -408,7 +407,7 @@ bool CaliPASaveAutoPanel::get_result(std::vector& out_result) { 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); + MessageDialog msg_dlg(nullptr, _L("Only one of the results with the same name will be saved. Are you sure you want to override the other results?"), wxEmptyString, wxICON_WARNING | wxYES_NO); if (msg_dlg.ShowModal() != wxID_YES) { return false; } @@ -420,7 +419,7 @@ bool CaliPASaveAutoPanel::get_result(std::vector& out_result) { // 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); + 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 override the historical result?"), result.name), wxEmptyString, wxICON_WARNING | wxYES_NO); if (msg_dlg.ShowModal() != wxID_YES) { return false; } @@ -529,7 +528,7 @@ void CaliPASaveManualPanel::set_pa_cali_method(ManualPaCaliMethod method) m_complete_text->SetLabel(_L("Please find the best line on your plate")); set_save_img(); } else if (method == ManualPaCaliMethod::PA_PATTERN) { - m_complete_text->SetLabel(_L("Please find the cornor with perfect degree of extrusion")); + m_complete_text->SetLabel(_L("Please find the corner with perfect degree of extrusion")); if (wxGetApp().app_config->get_language_code() == "zh-cn") { m_picture_panel->set_bmp(ScalableBitmap(this, "fd_pattern_manual_result_CN", 350)); } else { @@ -546,22 +545,14 @@ 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(k_tips), wxEmptyString, wxICON_WARNING | wxOK); + MessageDialog msg_dlg(nullptr, wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE), 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(); + if (!CalibUtils::validate_input_name(name)) 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); @@ -589,7 +580,6 @@ bool CaliPASaveManualPanel::get_result(PACalibResult& out_result) { 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); @@ -691,7 +681,7 @@ void CaliPASaveP1PPanel::set_pa_cali_method(ManualPaCaliMethod method) set_save_img(); } else if (method == ManualPaCaliMethod::PA_PATTERN) { - m_complete_text->SetLabel(_L("Please find the cornor with perfect degree of extrusion")); + m_complete_text->SetLabel(_L("Please find the corner with perfect degree of extrusion")); if (wxGetApp().app_config->get_language_code() == "zh-cn") { m_picture_panel->set_bmp(ScalableBitmap(this, "fd_pattern_manual_result_CN", 350)); } else { @@ -703,7 +693,7 @@ void CaliPASaveP1PPanel::set_pa_cali_method(ManualPaCaliMethod method) 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(k_tips), wxEmptyString, wxICON_WARNING | wxOK); + MessageDialog msg_dlg(nullptr, wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE), wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return false; } @@ -874,11 +864,11 @@ void CalibrationPASavePage::show_panels(CalibrationMethod method, const PrinterS } m_p1p_panel->Show(false); } - else if (printer_ser == PrinterSeries::SERIES_P1P) { + else if (curr_obj->cali_version >= 0) { m_auto_panel->Show(false); - m_manual_panel->Show(false); - m_p1p_panel->set_pa_cali_method(curr_obj->manual_pa_cali_method); - m_p1p_panel->Show(); + m_manual_panel->set_pa_cali_method(curr_obj->manual_pa_cali_method); + m_manual_panel->Show(); + m_p1p_panel->Show(false); } else { m_auto_panel->Show(false); m_manual_panel->Show(false); diff --git a/src/slic3r/GUI/CalibrationWizardStartPage.cpp b/src/slic3r/GUI/CalibrationWizardStartPage.cpp index 3857d0983e..c2e6c683b2 100644 --- a/src/slic3r/GUI/CalibrationWizardStartPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardStartPage.cpp @@ -16,10 +16,12 @@ void CalibrationStartPage::create_when(wxWindow* parent, wxString title, wxStrin 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_title->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); m_when_content = new Label(this, content);; m_when_content->SetFont(Label::Body_14); m_when_content->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + m_when_content->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); } void CalibrationStartPage::create_about(wxWindow* parent, wxString title, wxString content) @@ -27,10 +29,12 @@ void CalibrationStartPage::create_about(wxWindow* parent, wxString title, wxStri 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_title->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); m_about_content = new Label(this, content); m_about_content->SetFont(Label::Body_14); m_about_content->Wrap(CALIBRATION_START_PAGE_TEXT_MAX_LENGTH); + m_about_content->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); } void CalibrationStartPage::create_bitmap(wxWindow* parent, const wxBitmap& before_img, const wxBitmap& after_img) @@ -77,6 +81,7 @@ CalibrationPAStartPage::CalibrationPAStartPage(wxWindow* parent, wxWindowID id, create_page(this); this->SetSizer(m_top_sizer); + Layout(); m_top_sizer->Fit(this); } @@ -112,7 +117,7 @@ void CalibrationPAStartPage::create_page(wxWindow* 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\nPlease note that there are a few cases that can make the calibration results unreliable, such as insufficient adhesion on the build plate. Improving adhesion can be achieved by washing the build plate or applying glue. For more information on this topic, please refer to our Wiki.\ \n\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); @@ -124,8 +129,8 @@ void CalibrationPAStartPage::create_page(wxWindow* parent) #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 }); + m_when_content->SetMinSize(m_when_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() }); + m_about_content->SetMinSize(m_about_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() }); Layout(); Fit(); }); @@ -161,19 +166,24 @@ void CalibrationPAStartPage::on_device_connected(MachineObject* obj) m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANUAL_CALI, false); m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_AUTO_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); + } } else if (obj->get_printer_series() == PrinterSeries::SERIES_P1P || obj->get_printer_arch() == PrinterArch::ARCH_I3) { - m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + if (obj->cali_version >= 0) { + m_action_panel->show_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, true); + m_action_panel->bind_button(CaliPageActionType::CALI_ACTION_MANAGE_RESULT, false); + } + else + 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_pa_auto = (obj->home_flag >> 16 & 1) == 1; - if (!is_support_pa_auto) { - m_action_panel->show_button(CaliPageActionType::CALI_ACTION_AUTO_CALI, false); - } } void CalibrationPAStartPage::msw_rescale() @@ -195,6 +205,7 @@ CalibrationFlowRateStartPage::CalibrationFlowRateStartPage(wxWindow* parent, wxW create_page(this); this->SetSizer(m_top_sizer); + Layout(); m_top_sizer->Fit(this); } @@ -226,6 +237,7 @@ void CalibrationFlowRateStartPage::create_page(wxWindow* parent) 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); + extra_text->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); m_top_sizer->Add(extra_text); m_top_sizer->AddSpacer(PRESET_GAP); @@ -240,6 +252,7 @@ void CalibrationFlowRateStartPage::create_page(wxWindow* parent) 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_cali_title->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); 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.\ @@ -247,6 +260,7 @@ void CalibrationFlowRateStartPage::create_page(wxWindow* parent) \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); + auto_cali_content->SetMinSize({CALIBRATION_START_PAGE_TEXT_MAX_LENGTH, -1}); m_top_sizer->Add(auto_cali_title); m_top_sizer->Add(auto_cali_content); @@ -257,9 +271,10 @@ void CalibrationFlowRateStartPage::create_page(wxWindow* parent) 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 }); + wxGetApp().CallAfter([this, auto_cali_content, extra_text]() { + m_when_content->SetMinSize(m_when_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() }); + auto_cali_content->SetMinSize(auto_cali_content->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() }); + extra_text->SetMinSize(extra_text->GetSize() + wxSize{ 0, wxWindow::GetCharHeight() }); Layout(); Fit(); }); @@ -327,6 +342,7 @@ CalibrationMaxVolumetricSpeedStartPage::CalibrationMaxVolumetricSpeedStartPage(w create_page(this); this->SetSizer(m_top_sizer); + Layout(); m_top_sizer->Fit(this); } diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index 49a964b69e..328e8aa1a6 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -150,7 +150,7 @@ public: // returns true if the camera z axis (forward) is pointing in the negative direction of the world z axis bool is_looking_downward() const { return get_dir_forward().dot(Vec3d::UnitZ()) < 0.0; } - + bool is_looking_front() const { return abs(get_dir_up().dot(Vec3d::UnitZ())-1) < 0.001; } // forces camera right vector to be parallel to XY plane void recover_from_free_camera() { if (std::abs(get_dir_right()(2)) > EPSILON) diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 08e4801372..6ee0711137 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -8,6 +8,7 @@ #include #include #include "GUI_App.hpp" +#include namespace Slic3r { namespace GUI { @@ -65,6 +66,24 @@ CameraPopup::CameraPopup(wxWindow *parent) top_sizer->Add(m_text_vcamera, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); top_sizer->Add(m_switch_vcamera, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5)); +#if !BBL_RELEASE_TO_PUBLIC + m_text_liveview_retry = new wxStaticText(m_panel, wxID_ANY, _L("Liveview Retry")); + m_text_liveview_retry->Wrap(-1); + m_text_liveview_retry->SetFont(Label::Head_14); + m_text_liveview_retry->SetForegroundColour(TEXT_COL); + m_switch_liveview_retry = new SwitchButton(m_panel); + bool auto_retry = wxGetApp().app_config->get("liveview", "auto_retry") != "false"; + m_switch_liveview_retry->SetValue(auto_retry); + + top_sizer->Add(m_text_liveview_retry, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); + top_sizer->Add(m_switch_liveview_retry, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5)); + + m_switch_liveview_retry->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent &e) { + wxGetApp().app_config->set("liveview", "auto_retry", e.IsChecked()); + e.Skip(); + }); +#endif + //resolution m_text_resolution = new wxStaticText(m_panel, wxID_ANY, _L("Resolution")); m_text_resolution->Wrap(-1); diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index 8135f41fa4..dbdb81a9cb 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -72,6 +72,8 @@ private: SwitchButton* m_switch_recording; wxStaticText* m_text_vcamera; SwitchButton* m_switch_vcamera; + wxStaticText* m_text_liveview_retry; + SwitchButton* m_switch_liveview_retry; wxStaticText* m_custom_camera_hint; TextInput* m_custom_camera_input; Button* m_custom_camera_input_confirm; diff --git a/src/slic3r/GUI/CameraUtils.cpp b/src/slic3r/GUI/CameraUtils.cpp index 99d022e4bc..fb8e84fb8a 100644 --- a/src/slic3r/GUI/CameraUtils.cpp +++ b/src/slic3r/GUI/CameraUtils.cpp @@ -11,7 +11,7 @@ using namespace GUI; Points CameraUtils::project(const Camera & camera, const std::vector &points) { - Vec4i viewport(camera.get_viewport().data()); + Vec4i32 viewport(camera.get_viewport().data()); // Convert our std::vector to Eigen dynamic matrix. Eigen::Matrix @@ -100,7 +100,7 @@ void CameraUtils::ray_from_ortho_screen_pos(const Camera &camera, const Vec2d &p assert(camera.get_type() == Camera::EType::Ortho); Matrix4d modelview = camera.get_view_matrix().matrix(); Matrix4d projection = camera.get_projection_matrix().matrix(); - Vec4i viewport(camera.get_viewport().data()); + Vec4i32 viewport(camera.get_viewport().data()); igl::unproject(screen_point(camera,position), modelview, projection, viewport, point); direction = camera.get_dir_forward(); } @@ -109,7 +109,7 @@ void CameraUtils::ray_from_persp_screen_pos(const Camera &camera, const Vec2d &p assert(camera.get_type() == Camera::EType::Perspective); Matrix4d modelview = camera.get_view_matrix().matrix(); Matrix4d projection = camera.get_projection_matrix().matrix(); - Vec4i viewport(camera.get_viewport().data()); + Vec4i32 viewport(camera.get_viewport().data()); igl::unproject(screen_point(camera, position), modelview, projection, viewport, point); direction = point - camera.get_position(); } diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index d9405e76b8..4db54a93cf 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Pavel Mikuš @Godrak, Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ // #include "libslic3r/GCodeSender.hpp" #include "ConfigManipulation.hpp" #include "I18N.hpp" @@ -56,24 +52,42 @@ void ConfigManipulation::toggle_line(const std::string& opt_key, const bool togg cb_toggle_line(opt_key, toggle); } +void ConfigManipulation::check_nozzle_recommended_temperature_range(DynamicPrintConfig *config) { + if (is_msg_dlg_already_exist) + return; + + int temperature_range_low, temperature_range_high; + if (!get_temperature_range(config, temperature_range_low, temperature_range_high)) return; + + wxString msg_text; + bool need_check = false; + if (temperature_range_low < 190 || temperature_range_high > 300) { + msg_text += _L("The recommended minimum temperature is less than 190 degree or the recommended maximum temperature is greater than 300 degree.\n"); + need_check = true; + } + if (temperature_range_low > temperature_range_high) { + msg_text += _L("The recommended minimum temperature cannot be higher than the recommended maximum temperature.\n"); + need_check = true; + } + if (need_check) { + msg_text += _L("Please check.\n"); + MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); + is_msg_dlg_already_exist = true; + dialog.ShowModal(); + is_msg_dlg_already_exist = false; + } +} + void ConfigManipulation::check_nozzle_temperature_range(DynamicPrintConfig *config) { if (is_msg_dlg_already_exist) return; - int temperature_range_low = config->has("nozzle_temperature_range_low") ? - config->opt_int("nozzle_temperature_range_low", (unsigned int)0) : - 0; - int temperature_range_high = config->has("nozzle_temperature_range_high") ? - config->opt_int("nozzle_temperature_range_high", (unsigned int)0) : - 0; + int temperature_range_low, temperature_range_high; + if (!get_temperature_range(config, temperature_range_low, temperature_range_high)) return; - if (temperature_range_low != 0 && - temperature_range_high != 0 && - config->has("nozzle_temperature")) { - if (config->opt_int("nozzle_temperature", 0) < temperature_range_low || - config->opt_int("nozzle_temperature", 0) > temperature_range_high) - { + if (config->has("nozzle_temperature")) { + if (config->opt_int("nozzle_temperature", 0) < temperature_range_low || config->opt_int("nozzle_temperature", 0) > temperature_range_high) { wxString msg_text = _(L("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")); msg_text += wxString::Format(_L("Recommended nozzle temperature of this filament type is [%d, %d] degree centigrade"), temperature_range_low, temperature_range_high); @@ -90,16 +104,10 @@ void ConfigManipulation::check_nozzle_temperature_initial_layer_range(DynamicPri if (is_msg_dlg_already_exist) return; - int temperature_range_low = config->has("nozzle_temperature_range_low") ? - config->opt_int("nozzle_temperature_range_low", (unsigned int)0) : - 0; - int temperature_range_high = config->has("nozzle_temperature_range_high") ? - config->opt_int("nozzle_temperature_range_high", (unsigned int)0) : - 0; + int temperature_range_low, temperature_range_high; + if (!get_temperature_range(config, temperature_range_low, temperature_range_high)) return; - if (temperature_range_low != 0 && - temperature_range_high != 0 && - config->has("nozzle_temperature_initial_layer")) { + if (config->has("nozzle_temperature_initial_layer")) { if (config->opt_int("nozzle_temperature_initial_layer", 0) < temperature_range_low || config->opt_int("nozzle_temperature_initial_layer", 0) > temperature_range_high) { @@ -143,6 +151,7 @@ void ConfigManipulation::check_chamber_temperature(DynamicPrintConfig* config) {"PVA",45}, {"TPU",50}, {"PETG",55}, + {"PCTG",55}, {"PETG-CF",55} }; bool support_chamber_temp_control=GUI::wxGetApp().preset_bundle->printers.get_selected_preset().config.opt_bool("support_chamber_temp_control"); @@ -161,7 +170,7 @@ void ConfigManipulation::check_chamber_temperature(DynamicPrintConfig* config) } } -void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config) +void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config, const bool is_plate_config) { // #ys_FIXME_to_delete //! Temporary workaround for the correct updates of the TextCtrl (like "layer_height"): @@ -171,6 +180,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con if (is_msg_dlg_already_exist) return; + bool is_object_config = (!is_global_config && !is_plate_config); + // layer_height shouldn't be equal to zero auto layer_height = config->opt_float("layer_height"); auto gpreset = GUI::wxGetApp().preset_bundle->printers.get_edited_preset(); @@ -273,7 +284,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con double sparse_infill_density = config->option("sparse_infill_density")->value; auto timelapse_type = config->opt_enum("timelapse_type"); - if (config->opt_bool("spiral_mode") && + if (!is_plate_config && + config->opt_bool("spiral_mode") && ! (config->opt_int("wall_loops") == 1 && config->opt_int("top_shell_layers") == 0 && sparse_infill_density == 0 && @@ -284,24 +296,10 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con config->opt_enum("wall_direction") == WallDirection::Auto && config->opt_enum("timelapse_type") == TimelapseType::tlTraditional)) { - wxString msg_text = _(L("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.")); - - auto printer_structure_opt = wxGetApp().preset_bundle->printers.get_edited_preset().config.option>("printer_structure"); - if (printer_structure_opt && printer_structure_opt->value == PrinterStructure::psI3) { - msg_text += _(L(" But machines with I3 structure will not generate timelapse videos.")); - } - - if (is_global_config) - msg_text += "\n\n" + _(L("Change these settings automatically? \n" - "Yes - Change these settings and enable spiral mode automatically\n" - "No - Give up using spiral mode 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(); + auto answer = show_spiral_mode_settings_dialog(is_object_config); bool support = true; - if (!is_global_config || answer == wxID_YES) { + if (answer == wxID_YES) { new_conf.set_key_value("wall_loops", new ConfigOptionInt(1)); new_conf.set_key_value("top_shell_layers", new ConfigOptionInt(0)); new_conf.set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); @@ -549,7 +547,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co 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" }) + "sparse_infill_speed", "bridge_speed", "internal_bridge_speed", "bridge_angle","solid_infill_direction", "rotate_solid_infill_direction" }) toggle_field(el, have_infill || has_solid_infill); toggle_field("top_shell_thickness", ! has_spiral_vase && has_top_solid_infill); @@ -677,7 +675,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co bool purge_in_primetower = preset_bundle->printers.get_edited_preset().config.opt_bool("purge_in_prime_tower"); - for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_bridging", "wipe_tower_no_sparse_layers"}) + for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", "wipe_tower_bridging", "wipe_tower_no_sparse_layers"}) toggle_line(el, have_prime_tower && purge_in_primetower); toggle_line("prime_volume",have_prime_tower && !purge_in_primetower); @@ -843,5 +841,42 @@ void ConfigManipulation::toggle_print_sla_options(DynamicPrintConfig* config) toggle_field("pad_object_connector_penetration", zero_elev); } +int ConfigManipulation::show_spiral_mode_settings_dialog(bool is_object_config) +{ + wxString msg_text = _(L("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.")); + auto printer_structure_opt = wxGetApp().preset_bundle->printers.get_edited_preset().config.option>("printer_structure"); + if (printer_structure_opt && printer_structure_opt->value == PrinterStructure::psI3) { + msg_text += _(L(" But machines with I3 structure will not generate timelapse videos.")); + } + if (!is_object_config) + msg_text += "\n\n" + _(L("Change these settings automatically? \n" + "Yes - Change these settings and enable spiral mode automatically\n" + "No - Give up using spiral mode this time")); + + MessageDialog dialog(m_msg_dlg_parent, msg_text, "", + wxICON_WARNING | (!is_object_config ? wxYES | wxNO : wxOK)); + is_msg_dlg_already_exist = true; + auto answer = dialog.ShowModal(); + is_msg_dlg_already_exist = false; + if (is_object_config) + answer = wxID_YES; + return answer; +} + +bool ConfigManipulation::get_temperature_range(DynamicPrintConfig *config, int &range_low, int &range_high) +{ + bool range_low_exist = false, range_high_exist = false; + if (config->has("nozzle_temperature_range_low")) { + range_low = config->opt_int("nozzle_temperature_range_low", (unsigned int) 0); + range_low_exist = true; + } + if (config->has("nozzle_temperature_range_high")) { + range_high = config->opt_int("nozzle_temperature_range_high", (unsigned int) 0); + range_high_exist = true; + } + return range_low_exist && range_high_exist; +} + + } // GUI } // Slic3r diff --git a/src/slic3r/GUI/ConfigManipulation.hpp b/src/slic3r/GUI/ConfigManipulation.hpp index da856c416e..fec8d08f4d 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -69,11 +69,12 @@ public: void toggle_line(const std::string& field_key, const bool toggle); // FFF print - void update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config = false); + void update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config = false, const bool is_plate_config = false); void toggle_print_fff_options(DynamicPrintConfig* config, const bool is_global_config = false); void apply_null_fff_config(DynamicPrintConfig *config, std::vector const &keys, std::map const & configs); //BBS: FFF filament nozzle temperature range + void check_nozzle_recommended_temperature_range(DynamicPrintConfig *config); void check_nozzle_temperature_range(DynamicPrintConfig* config); void check_nozzle_temperature_initial_layer_range(DynamicPrintConfig* config); void check_filament_max_volumetric_speed(DynamicPrintConfig *config); @@ -89,10 +90,10 @@ public: m_is_initialized_support_material_overhangs_queried = true; m_support_material_overhangs_queried = queried; } + int show_spiral_mode_settings_dialog(bool is_object_config = false); private: - std::vector get_temperature_range_by_filament_type(const std::string &filament_type); - + bool get_temperature_range(DynamicPrintConfig *config, int &range_low, int &range_high); }; } // GUI diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 91a0a62108..9a79fd96d8 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -24,7 +24,7 @@ #define FILAMENT_LIST_SIZE wxSize(FromDIP(560), FromDIP(100)) #define FILAMENT_OPTION_SIZE wxSize(FromDIP(-1), FromDIP(30)) #define PRESET_TEMPLATE_SIZE wxSize(FromDIP(-1), FromDIP(100)) -#define PRINTER_SPACE_SIZE wxSize(FromDIP(80), FromDIP(24)) +#define PRINTER_SPACE_SIZE wxSize(FromDIP(100), FromDIP(24)) // ORCA Match size with other components #define ORIGIN_TEXT_SIZE wxSize(FromDIP(10), FromDIP(24)) #define PRINTER_PRESET_VENDOR_SIZE wxSize(FromDIP(150), FromDIP(24)) #define PRINTER_PRESET_MODEL_SIZE wxSize(FromDIP(280), FromDIP(24)) @@ -37,33 +37,45 @@ namespace Slic3r { namespace GUI { -static const std::vector filament_vendors = {"Polymaker", "OVERTURE", "Kexcelled", "HATCHBOX", "eSUN", "SUNLU", "Prusament", "Creality", "Protopasta", - "Anycubic", "Basf", "ELEGOO", "INLAND", "FLASHFORGE", "AMOLEN", "MIKA3D", "3DXTECH", "Duramic", - "Priline", "Eryone", "3Dgunius", "Novamaker", "Justmaker", "Giantarm", "iProspect"}; - -static const std::vector filament_types = {"PLA", "PLA+", "PLA Tough", "PETG", "ABS", "ASA", "FLEX", "HIPS", "PA", "PACF", - "NYLON", "PVA", "PC", "PCABS", "PCTG", "PCCF", "PP", "PEI", "PET", "PETG", - "PETGCF", "PTBA", "PTBA90A", "PEEK", "TPU93A", "TPU75D", "TPU", "TPU92A", "TPU98A", "Misc", +static const std::vector filament_vendors = + {"3Dgenius", "3DJake", "3DXTECH", "3D BEST-Q", "3D Hero", + "3D-Fuel", "Aceaddity", "AddNorth", "Amazon Basics", "AMOLEN", + "Ankermake", "Anycubic", "Atomic", "AzureFilm", "BASF", + "Bblife", "BCN3D", "Beyond Plastic", "California Filament", "Capricorn", + "CC3D", "colorFabb", "Comgrow", "Cookiecad", "Creality", + "CERPRiSE", "Das Filament", "DO3D", "DOW", "DSM", + "Duramic", "ELEGOO", "Eryone", "Essentium", "eSUN", + "Extrudr", "Fiberforce", "Fiberlogy", "FilaCube", "Filamentive", + "Fillamentum", "FLASHFORGE", "Formfutura", "Francofil", "FilamentOne", + "GEEETECH", "Giantarm", "Gizmo Dorks", "GreenGate3D", "HATCHBOX", + "Hello3D", "IC3D", "IEMAI", "IIID Max", "INLAND", + "iProspect", "iSANMATE", "Justmaker", "Keene Village Plastics", "Kexcelled", + "MakerBot", "MatterHackers", "MIKA3D", "NinjaTek", "Nobufil", + "Novamaker", "OVERTURE", "OVVNYXE", "Polymaker", "Priline", + "Printed Solid", "Protopasta", "Prusament", "Push Plastic", "R3D", + "Re-pet3D", "Recreus", "Regen", "Sain SMART", "SliceWorx", + "Snapmaker", "SnoLabs", "Spectrum", "SUNLU", "TTYT3D", + "Tianse", "UltiMaker", "Valment", "Verbatim", "VO3D", + "Voxelab", "VOXELPLA", "YOOPAI", "Yousu", "Ziro", + "Zyltech"}; + +static const std::vector filament_types = {"PLA", "rPLA", "PLA+", "PLA Tough", "PETG", "ABS", "ASA", "FLEX", "HIPS", "PA", "PACF", + "NYLON", "PVA", "PVB", "PC", "PCABS", "PCTG", "PCCF", "PHA", "PP", "PEI", "PET", "PETG", + "PETGCF", "PTBA", "PTBA90A", "PEEK", "TPU93A", "TPU75D", "TPU", "TPU92A", "TPU98A", "Misc", "TPE", "GLAZE", "Nylon", "CPE", "METAL", "ABST", "Carbon Fiber"}; -static const std::vector system_filament_types = {"PLA", "ABS", "TPU", "PC", "ASA", "PA-CF", "PA6-CF", "PET-CF", "PETG", "PETG-CF", - "PLA Aero", "PLA-CF", "PPA-CF", "PPA-GF", "PA", "HIPS", "PPS", "PPS-CF", "PVA"}; - -static std::unordered_map system_filament_types_map = {{"PLA", "PLA"}, {"ABS", "ABS"}, {"TPU", "TPU"}, - {"PC", "PC"}, {"ASA", "ASA"}, {"PA-CF", "PA-CF"}, - {"PA6-CF", "PA6-CF"}, {"PET-CF", "PET-CF"}, {"PETG", "PETG"}, - {"PETG-CF", "PETG-CF"}, {"PLA Aero", "PLA-AERO"}, {"PLA-CF", "PLA-CF"}, - {"PPA-CF", "PPA-CF"}, {"PPA-GF", "PPA-GF"}, {"PA", "PA"}, - {"HIPS", "HIPS"}, {"PPS", "PPS"}, {"PPS-CF", "PPS-CF"}, - {"PVA", "PVA"}}; - -static const std::vector printer_vendors = {"Anycubic", "Artillery", "BIBO", "BIQU", "Creality ENDER", "Creality CR", "Creality SERMOON", - "FLSun", "gCreate", "Geeetech", "INAT", "Infinity3D", "Jubilee", "LNL3D", - "LulzBot", "MakerGear", "Original Prusa", "Papapiu", "Print4Taste", "RatRig", "Rigid3D", - "Snapmaker", "Sovol", "TriLAB", "Trimaker", "Ultimaker", "Voron", "Zonestar"}; +static const std::vector printer_vendors = + {"Anker", "Anycubic", "Artillery", "Bambulab", "BIQU", + "Comgrow", "Creality", "Custom Printer", "Elegoo", "Flashforge", + "FLSun", "FlyingBear", "Folgertech", "InfiMech", "Kingroon", + "Orca Arena Printer", "Peopoly", "Prusa", "Qidi", "Raise3D", + "RatRig", "SecKit", "Snapmaker", "Sovol", "Tronxy", + "TwoTrees", "UltiMaker", "Vivedino", "Voron", "Voxelab", + "Vzbot", "Wanhao"}; static const std::unordered_map> printer_model_map = - {{"Anycubic", {"Kossel Linear Plus", "Kossel Pulley(Linear)", "Mega Zero", "i3 Mega", "Predator"}}, + {{"Anker", {"Anker M5", "Anker M5 All-Metal Hot End", "Anker M5C"}}, + {"Anycubic", {"Kossel Linear Plus", "Kossel Pulley(Linear)", "Mega Zero", "i3 Mega", "Predator"}}, {"Artillery", {"sidewinder X1", "Genius", "Hornet"}}, {"BIBO", {"BIBO2 Touch"}}, {"BIQU", {"BX"}}, @@ -104,10 +116,10 @@ static const std::unordered_map> printer_m "Zero 120mm3", "Switchwire"}}, {"Zonestar", {"Z5", "Z6", "Z5x", "Z8", "Z9"}}}; -static std::vector nozzle_diameter_vec = {"0.4", "0.2", "0.25", "0.3", "0.35", "0.5", "0.6", "0.75", "0.8", "1.0", "1.2"}; -static std::unordered_map nozzle_diameter_map = {{"0.2", 0.2}, {"0.25", 0.25}, {"0.3", 0.3}, {"0.35", 0.35}, - {"0.4", 0.4}, {"0.5", 0.5}, {"0.6", 0.6}, {"0.75", 0.75}, - {"0.8", 0.8}, {"1.0", 1.0}, {"1.2", 1.2}}; +static std::vector nozzle_diameter_vec = {"0.4", "0.15", "0.2", "0.25", "0.3", "0.35", "0.5", "0.6", "0.75", "0.8", "1.0", "1.2"}; +static std::unordered_map nozzle_diameter_map = {{"0.15", 0.15}, {"0.2", 0.2}, {"0.25", 0.25}, {"0.3", 0.3}, + {"0.35", 0.35}, {"0.4", 0.4}, {"0.5", 0.5}, {"0.6", 0.6}, + {"0.75", 0.75}, {"0.8", 0.8}, {"1.0", 1.0}, {"1.2", 1.2}}; static std::set cannot_input_key = {9, 10, 13, 33, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 59, 60, 62, 63, 64, 92, 94, 95, 124, 126}; @@ -520,6 +532,20 @@ static char* read_json_file(const std::string &preset_path) return json_contents; } +static std::string get_printer_nozzle_diameter(std::string printer_name) { + + size_t index = printer_name.find(" nozzle"); + if (std::string::npos == index) { + return ""; + } + std::string nozzle = printer_name.substr(0, index); + size_t last_space_index = nozzle.find_last_of(" "); + if (std::string::npos == index) { + return ""; + } + return nozzle.substr(last_space_index + 1); +} + static void adjust_dialog_in_screen(DPIDialog* dialog) { wxSize screen_size = wxGetDisplaySize(); int pos_x, pos_y, size_x, size_y, screen_width, screen_height, dialog_x, dialog_y; @@ -547,6 +573,7 @@ CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) { m_create_type.base_filament = _L("Create Based on Current Filament"); m_create_type.base_filament_preset = _L("Copy Current Filament Preset "); + get_all_filament_presets(); this->SetBackgroundColour(*wxWHITE); this->SetSize(wxSize(FromDIP(600), FromDIP(480))); @@ -595,7 +622,6 @@ CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) m_main_sizer->Add(m_scrolled_preset_panel, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(10)); m_main_sizer->Add(create_button_item(), 0, wxEXPAND | wxALL, FromDIP(10)); - get_all_filament_presets(); get_all_visible_printer_name(); select_curr_radiobox(m_create_type_btns, 0); @@ -670,6 +696,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item() for (const wxString &vendor : filament_vendors) { choices.push_back(vendor); } + choices.Sort(); wxBoxSizer *vendor_sizer = new wxBoxSizer(wxHORIZONTAL); m_filament_vendor_combobox = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); @@ -748,9 +775,10 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item() horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxArrayString filament_type; - for (const wxString &filament : system_filament_types) { + for (const wxString &filament : m_system_filament_types_set) { filament_type.Add(filament); } + filament_type.Sort(); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL); m_filament_type_combobox = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); @@ -851,13 +879,13 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item() continue; } for (std::string &compatible_printer_name : compatible_printers->values) { - if (m_visible_printers.find(compatible_printer_name) == m_visible_printers.end()) continue; - size_t index = compatible_printer_name.find("nozzle"); - if (index < 4) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " compatible printer name encounter exception and name is: " << compatible_printer_name; + if (m_visible_printers.find(compatible_printer_name) == m_visible_printers.end()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "there is a comppatible printer no exist: " << compatible_printer_name + << "and the preset name is: " << preset->name; continue; } - if (nozzle_diameter[compatible_printer_name.substr(index - 4, 3)] == 0) { + std::string nozzle = get_printer_nozzle_diameter(compatible_printer_name); + if (nozzle_diameter[nozzle] == 0) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " compatible printer nozzle encounter exception and name is: " << compatible_printer_name; continue; } @@ -1005,11 +1033,21 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() return; } - std::string filament_preset_name = vendor_name + " " + type_name + " " + serial_name; + std::string filament_preset_name = vendor_name + " " + (type_name == "PLA-AERO" ? "PLA Aero" : type_name) + " " + serial_name; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle->filaments.is_alias_exist(filament_preset_name)) { + MessageDialog dlg(this, + wxString::Format(_L("The Filament name %s you created already exists. \nIf you continue creating, the preset created will be displayed with its " + "full name. Do you want to continue?"), + from_u8(filament_preset_name)), + wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE); + if (wxID_YES != dlg.ShowModal()) { return; } + } + std::string user_filament_id = get_filament_id(filament_preset_name); const wxString &curr_create_type = curr_create_filament_type(); - PresetBundle * preset_bundle = wxGetApp().preset_bundle; + if (curr_create_type == m_create_type.base_filament) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":clone filament create type filament "; for (const std::pair<::CheckBox *, std::pair> &checkbox_preset : m_filament_preset) { @@ -1106,10 +1144,14 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices() for (std::pair filament_presets : m_all_presets_map) { Preset *preset = filament_presets.second; auto inherit = preset->config.option("inherits"); - if (inherit && !inherit->value.empty()) continue; + if (inherit && !inherit->value.empty()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " inherit user preset is:" << preset->name << " and inherits is: " << inherit->value; + continue; + } auto fila_type = preset->config.option("filament_type"); - if (!fila_type || fila_type->values.empty() || system_filament_types_map[type_name] != fila_type->values[0]) continue; + if (!fila_type || fila_type->values.empty() || type_name != fila_type->values[0]) continue; m_filament_choice_map[preset->filament_id].push_back(preset); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " base user preset is:" << preset->name; } int suffix = 0; @@ -1119,10 +1161,10 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices() for (Preset* filament_preset : preset.second) { std::string preset_name = filament_preset->name; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " filament_id: " << filament_preset->filament_id << " preset name: " << filament_preset->name; - size_t index_at = preset_name.find("@"); + size_t index_at = preset_name.find(" @"); if (std::string::npos != index_at) { - std::string cur_preset_name = preset_name.substr(0, index_at - 1); - preset_name_set.insert(wxString::FromUTF8(cur_preset_name)); + std::string cur_preset_name = preset_name.substr(0, index_at); + preset_name_set.insert(from_u8(cur_preset_name)); } } assert(1 == preset_name_set.size()); @@ -1261,12 +1303,8 @@ void CreateFilamentPresetDialog::get_filament_presets_by_machine() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " preset type is not selected type and preset name is: " << preset->name; continue; } - size_t index = compatible_printer_name.find("nozzle"); - if (index < 4) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " compatible printer name encounter exception and name is: " << compatible_printer_name; - continue; - } - if (nozzle_diameter[compatible_printer_name.substr(index - 4, 3)] == 0) { + std::string nozzle = get_printer_nozzle_diameter(compatible_printer_name); + if (nozzle_diameter[nozzle] == 0) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " compatible printer nozzle encounter exception and name is: " << compatible_printer_name; continue; } @@ -1310,8 +1348,11 @@ void CreateFilamentPresetDialog::get_all_filament_presets() const std::deque &temp_filament_presets = preset_bundle->filaments.get_presets(); for (const Preset& preset : temp_filament_presets) { if (preset.filament_id.empty() || "null" == preset.filament_id) continue; - std::string filament_preset_name = preset.name; + auto filament_type = preset.config.option("filament_type"); + if (filament_type && filament_type->values.size()) + m_system_filament_types_set.insert(filament_type->values[0]); if (!preset.is_visible) continue; + std::string filament_preset_name = preset.name; Preset *filament_preset = new Preset(preset); m_all_presets_map[filament_preset_name] = filament_preset; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " loaded preset name is: " << filament_preset->name; @@ -1352,14 +1393,18 @@ void CreateFilamentPresetDialog::sort_printer_by_nozzle(std::vector nozzle_diameter = nozzle_diameter_map; std::sort(printer_name_to_filament_preset.begin(), printer_name_to_filament_preset.end(), [&nozzle_diameter](const std::pair &a, const std::pair &b) { - size_t nozzle_index_a = a.first.find("nozzle"); - size_t nozzle_index_b = b.first.find("nozzle"); + size_t nozzle_index_a = a.first.find(" nozzle"); + size_t nozzle_index_b = b.first.find(" nozzle"); if (nozzle_index_a == std::string::npos || nozzle_index_b == std::string::npos) return a.first < b.first; std::string nozzle_str_a; std::string nozzle_str_b; try { - nozzle_str_a = a.first.substr(nozzle_index_a - 4, 3); - nozzle_str_b = b.first.substr(nozzle_index_b - 4, 3); + nozzle_str_a = a.first.substr(0, nozzle_index_a); + nozzle_str_b = b.first.substr(0, nozzle_index_b); + size_t last_space_index = nozzle_str_a.find_last_of(" "); + nozzle_str_a = nozzle_str_a.substr(last_space_index + 1); + last_space_index = nozzle_str_b.find_last_of(" "); + nozzle_str_b = nozzle_str_b.substr(last_space_index + 1); } catch (...) { BOOST_LOG_TRIVIAL(info) << "substr filed, and printer name is: " << a.first << " and " << b.first; return a.first < b.first; @@ -1748,26 +1793,20 @@ wxBoxSizer *CreatePrinterPresetDialog::create_bed_size_item(wxWindow *parent) horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer * length_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_length_text = new wxStaticText(parent, wxID_ANY, _L("X"), wxDefaultPosition, wxDefaultSize); - static_length_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_length_text->SetSize(ORIGIN_TEXT_SIZE); - length_sizer->Add(static_length_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *length_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_size_x_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_size_x_input = new TextInput(parent, "200", "mm", "inputbox_x", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); wxTextValidator validator(wxFILTER_DIGITS); m_bed_size_x_input->GetTextCtrl()->SetValidator(validator); - length_input_sizer->Add(m_bed_size_x_input, 0, wxEXPAND | wxALL, 0); + length_input_sizer->Add(m_bed_size_x_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxBoxSizer * width_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_width_text = new wxStaticText(parent, wxID_ANY, _L("Y"), wxDefaultPosition, wxDefaultSize); - static_width_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_width_text->SetSize(ORIGIN_TEXT_SIZE); - width_sizer->Add(static_width_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *width_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_size_y_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_size_y_input = new TextInput(parent, "200", "mm", "inputbox_y", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); m_bed_size_y_input->GetTextCtrl()->SetValidator(validator); width_input_sizer->Add(m_bed_size_y_input, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -1787,26 +1826,20 @@ wxBoxSizer *CreatePrinterPresetDialog::create_origin_item(wxWindow *parent) horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer * length_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_origin_x_text = new wxStaticText(parent, wxID_ANY, _L("X"), wxDefaultPosition, wxDefaultSize); - static_origin_x_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_origin_x_text->SetSize(ORIGIN_TEXT_SIZE); - length_sizer->Add(static_origin_x_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *length_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_origin_x_input = new TextInput(parent, "0", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_origin_x_input = new TextInput(parent, "0", "mm", "inputbox_x", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); wxTextValidator validator(wxFILTER_DIGITS); m_bed_origin_x_input->GetTextCtrl()->SetValidator(validator); - length_input_sizer->Add(m_bed_origin_x_input, 0, wxEXPAND | wxALL, 0); + length_input_sizer->Add(m_bed_origin_x_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); // Align with other horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxBoxSizer * width_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_origin_y_text = new wxStaticText(parent, wxID_ANY, _L("Y"), wxDefaultPosition, wxDefaultSize); - static_origin_y_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_origin_y_text->SetSize(ORIGIN_TEXT_SIZE); - width_sizer->Add(static_origin_y_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *width_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_origin_y_input = new TextInput(parent, "0", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_origin_y_input = new TextInput(parent, "0", "mm", "inputbox_y", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); m_bed_origin_y_input->GetTextCtrl()->SetValidator(validator); width_input_sizer->Add(m_bed_origin_y_input, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -1899,7 +1932,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_max_print_height_item(wxWindow *pa horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *hight_input_sizer = new wxBoxSizer(wxVERTICAL); - m_print_height_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_print_height_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); // Use same alignment with all other input boxes wxTextValidator validator(wxFILTER_DIGITS); m_print_height_input->GetTextCtrl()->SetValidator(validator); hight_input_sizer->Add(m_print_height_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); @@ -2854,6 +2887,8 @@ bool CreatePrinterPresetDialog::data_init() void CreatePrinterPresetDialog::set_current_visible_printer() { + //The entire process of creating a custom printer only needs to be done once + if (m_printer_name_to_preset.size() > 0) return; PresetBundle *preset_bundle = wxGetApp().preset_bundle; const std::deque &printer_presets = preset_bundle->printers.get_presets(); wxArrayString printer_choice; @@ -2861,7 +2896,7 @@ void CreatePrinterPresetDialog::set_current_visible_printer() for (const Preset &printer_preset : printer_presets) { if (printer_preset.is_system || !printer_preset.is_visible) continue; if (preset_bundle->printers.get_preset_base(printer_preset)->name != printer_preset.name) continue; - printer_choice.push_back(wxString::FromUTF8(printer_preset.name)); + printer_choice.push_back(from_u8(printer_preset.name)); m_printer_name_to_preset[printer_preset.name] = std::make_shared(printer_preset); } m_select_printer->Set(printer_choice); @@ -3189,6 +3224,7 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con wxBoxSizer *success_text_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *success_text; wxStaticText *next_step_text; + bool sync_user_preset_need_enabled = wxGetApp().getAgent() && wxGetApp().app_config->get("sync_user_preset") == "false"; switch (create_success_type) { case PRINTER: success_text = new wxStaticText(this, wxID_ANY, _L("Printer Created")); @@ -3196,11 +3232,14 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con break; case FILAMENT: success_text = new wxStaticText(this, wxID_ANY, _L("Filament Created")); - next_step_text = new wxStaticText(this, wxID_ANY, _L("Please go to filament setting to edit your presets if you need.\nPlease note that nozzle temperature, hot bed temperature, and maximum volumetric speed have a significant impact on printing quality. Please set them carefully.")); + wxString prompt_text = _L("Please go to filament setting to edit your presets if you need.\nPlease note that nozzle temperature, hot bed temperature, and maximum " + "volumetric speed has a significant impact on printing quality. Please set them carefully."); + wxString sync_text = sync_user_preset_need_enabled ? _L("\n\nOrca has detected that your user presets synchronization function is not enabled, which may result in unsuccessful Filament settings on " + "the Device page. \nClick \"Sync user presets\" to enable the synchronization function.") : ""; + next_step_text = new wxStaticText(this, wxID_ANY, prompt_text + sync_text); break; } success_text->SetFont(Label::Head_18); - //next_step_text->SetFont(Label::Body_14); success_text_sizer->Add(success_text, 0, wxEXPAND, 0); success_text_sizer->Add(next_step_text, 0, wxEXPAND | wxTOP, FromDIP(5)); horizontal_sizer->Add(success_text_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); @@ -3214,8 +3253,7 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con case PRINTER: m_button_ok = new Button(this, _L("Printer Setting")); break; - case FILAMENT: - m_button_ok = new Button(this, _L("OK")); + case FILAMENT: m_button_ok = sync_user_preset_need_enabled ? new Button(this, _L("Sync user presets")) : new Button(this, _L("OK")); break; } StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), @@ -3232,9 +3270,15 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con m_button_ok->SetCornerRadius(FromDIP(12)); btn_sizer->Add(m_button_ok, 0, wxRIGHT, FromDIP(10)); - m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_OK); }); + m_button_ok->Bind(wxEVT_LEFT_DOWN, [this, sync_user_preset_need_enabled](wxMouseEvent &e) { + if (sync_user_preset_need_enabled) { + wxGetApp().app_config->set("sync_user_preset", "true"); + wxGetApp().start_sync_user_preset(); + } + EndModal(wxID_OK); + }); - if (PRINTER == create_success_type) { + if (PRINTER == create_success_type || sync_user_preset_need_enabled) { m_button_cancel = new Button(this, _L("Cancel")); m_button_cancel->SetBackgroundColor(btn_bg_white); m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); @@ -3269,7 +3313,7 @@ void CreatePresetSuccessfulDialog::on_dpi_changed(const wxRect &suggested_rect) } ExportConfigsDialog::ExportConfigsDialog(wxWindow *parent) - : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Export Configs"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) + : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Export Preset Bundle"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { m_exprot_type.preset_bundle = _L("Printer config bundle(.orca_printer)"); m_exprot_type.filament_bundle = _L("Filament bundle(.orca_filament)"); @@ -3339,6 +3383,10 @@ ExportConfigsDialog::~ExportConfigsDialog() } } } + + // Delete the Temp folder + boost::filesystem::path temp_folder(data_dir() + "/" + PRESET_USER_DIR + "/" + "Temp"); + if (boost::filesystem::exists(temp_folder)) boost::filesystem::remove_all(temp_folder); } void ExportConfigsDialog::on_dpi_changed(const wxRect &suggested_rect) { @@ -3394,6 +3442,26 @@ bool ExportConfigsDialog::has_check_box_selected() return false; } +bool ExportConfigsDialog::earse_preset_fields_for_safe(Preset *preset) +{ + if (preset->type != Preset::Type::TYPE_PRINTER) return true; + + boost::filesystem::path file_path(data_dir() + "/" + PRESET_USER_DIR + "/" + "Temp" + "/" + (preset->name + ".json")); + preset->file = file_path.make_preferred().string(); + + DynamicPrintConfig &config = preset->config; + config.erase("print_host"); + config.erase("print_host_webui"); + config.erase("printhost_apikey"); + config.erase("printhost_cafile"); + config.erase("printhost_user"); + config.erase("printhost_password"); + config.erase("printhost_port"); + + preset->save(nullptr); + return true; +} + std::string ExportConfigsDialog::initial_file_path(const wxString &path, const std::string &sub_file_path) { std::string export_path = into_u8(path); @@ -3655,11 +3723,15 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi std::string printer_preset_name_ = printer_preset->name; json bundle_structure; + NetworkAgent *agent = wxGetApp().getAgent(); std::string clock = get_curr_timestmp(); - bundle_structure["user_name"] = ""; - bundle_structure["user_id"] = ""; - bundle_structure["version"] = SoftFever_VERSION; - bundle_structure["bundle_id"] = printer_preset_name_ + "_" + clock; + if (agent) { + bundle_structure["version"] = agent->get_version(); + bundle_structure["bundle_id"] = agent->get_user_id() + "_" + printer_preset_name_ + "_" + clock; + } else { + bundle_structure["version"] = ""; + bundle_structure["bundle_id"] = "offline_" + printer_preset_name_ + "_" + clock; + } bundle_structure["bundle_type"] = "printer config bundle"; bundle_structure["printer_preset_name"] = printer_preset_name_; json printer_config = json::array(); @@ -3770,11 +3842,15 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_ std::string filament_name = checkbox_filament_name.second; json bundle_structure; + NetworkAgent *agent = wxGetApp().getAgent(); std::string clock = get_curr_timestmp(); - bundle_structure["user_name"] = ""; - bundle_structure["user_id"] = ""; - bundle_structure["version"] = SoftFever_VERSION; - bundle_structure["bundle_id"] = filament_name + "_" + clock; + if (agent) { + bundle_structure["version"] = agent->get_version(); + bundle_structure["bundle_id"] = agent->get_user_id() + "_" + filament_name + "_" + clock; + } else { + bundle_structure["version"] = ""; + bundle_structure["bundle_id"] = "offline_" + filament_name + "_" + clock; + } bundle_structure["bundle_type"] = "filament config bundle"; bundle_structure["filament_name"] = filament_name; std::unordered_map vendor_structure; @@ -4068,19 +4144,45 @@ wxBoxSizer *ExportConfigsDialog::create_select_printer(wxWindow *parent) void ExportConfigsDialog::data_init() { + // Delete the Temp folder + boost::filesystem::path folder(data_dir() + "/" + PRESET_USER_DIR + "/" + "Temp"); + if (boost::filesystem::exists(folder)) boost::filesystem::remove_all(folder); + + boost::system::error_code ec; + boost::filesystem::path user_folder(data_dir() + "/" + PRESET_USER_DIR); + bool temp_folder_exist = true; + if (!boost::filesystem::exists(user_folder)) { + if (!boost::filesystem::create_directories(user_folder, ec)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << user_folder << " "< & printer_presets = preset_bundle.printers.get_presets(); for (const Preset &printer_preset : printer_presets) { std::string preset_name = printer_preset.name; - if (!printer_preset.is_visible || "Default Printer" == preset_name) continue; + if (!printer_preset.is_visible || printer_preset.is_default || printer_preset.is_project_embedded) continue; if (preset_bundle.printers.select_preset_by_name(preset_name, false)) { preset_bundle.update_compatible(PresetSelectCompatibleType::Always); const std::deque &filament_presets = preset_bundle.filaments.get_presets(); for (const Preset &filament_preset : filament_presets) { - if (filament_preset.is_system || filament_preset.is_default) continue; + if (filament_preset.is_system || filament_preset.is_default || filament_preset.is_project_embedded) continue; if (filament_preset.is_compatible) { Preset *new_filament_preset = new Preset(filament_preset); m_filament_presets[preset_name].push_back(new_filament_preset); @@ -4089,7 +4191,7 @@ void ExportConfigsDialog::data_init() const std::deque &process_presets = preset_bundle.prints.get_presets(); for (const Preset &process_preset : process_presets) { - if (process_preset.is_system || process_preset.is_default) continue; + if (process_preset.is_system || process_preset.is_default || process_preset.is_project_embedded) continue; if (process_preset.is_compatible) { Preset *new_prpcess_preset = new Preset(process_preset); m_process_presets[preset_name].push_back(new_prpcess_preset); @@ -4097,6 +4199,7 @@ void ExportConfigsDialog::data_init() } Preset *new_printer_preset = new Preset(printer_preset); + earse_preset_fields_for_safe(new_printer_preset); m_printer_presets[preset_name] = new_printer_preset; } } @@ -4159,9 +4262,10 @@ EditFilamentPresetDialog::EditFilamentPresetDialog(wxWindow *parent, FilamentInf if (vendor_names && !vendor_names->values.empty()) m_vendor_name = vendor_names->values[0]; auto filament_types = dynamic_cast(preset->config.option("filament_type")); if (filament_types && !filament_types->values.empty()) m_filament_type = filament_types->values[0]; - size_t index = m_filament_name.find(m_filament_type); - if (std::string::npos != index && index + m_filament_type.size() < m_filament_name.size()) { - m_filament_serial = m_filament_name.substr(index + m_filament_type.size()); + std::string filament_type = m_filament_type == "PLA-AERO" ? "PLA Aero" : m_filament_type; + size_t index = m_filament_name.find(filament_type); + if (std::string::npos != index && index + filament_type.size() < m_filament_name.size()) { + m_filament_serial = m_filament_name.substr(index + filament_type.size()); if (m_filament_serial.size() > 2 && m_filament_serial[0] == ' ') { m_filament_serial = m_filament_serial.substr(1); } @@ -4628,7 +4732,7 @@ void CreatePresetForPrinterDialog::get_visible_printer_and_compatible_filament_p m_preset_bundle->update_compatible(PresetSelectCompatibleType::Always); const std::deque &filament_presets = m_preset_bundle->filaments.get_presets(); for (const Preset &filament_preset : filament_presets) { - if (filament_preset.is_default || !filament_preset.is_compatible) continue; + if (filament_preset.is_default || !filament_preset.is_compatible || filament_preset.is_project_embedded) continue; ConfigOptionStrings *filament_types; const Preset * filament_preset_base = m_preset_bundle->filaments.get_preset_base(filament_preset); if (filament_preset_base == &filament_preset) { @@ -4639,8 +4743,7 @@ void CreatePresetForPrinterDialog::get_visible_printer_and_compatible_filament_p if (filament_types && filament_types->values.empty()) continue; const std::string filament_type = filament_types->values[0]; - std::string filament_type_ = system_filament_types_map[m_filament_type]; - if (filament_type_.empty()) filament_type_ = m_filament_type; + std::string filament_type_ = m_filament_type == "PLA Aero" ? "PLA-AERO" : m_filament_type; if (filament_type == filament_type_) { m_printer_compatible_filament_presets[printer_preset.name].push_back(std::make_shared(filament_preset)); } diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp index 9c79bc71f3..911caca5e1 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -70,12 +70,13 @@ private: std::unordered_map> m_filament_choice_map; std::unordered_map m_public_name_to_filament_id_map; std::unordered_map m_all_presets_map; + std::unordered_set m_system_filament_types_set; std::set m_visible_printers; CreateType m_create_type; Button * m_button_create = nullptr; Button * m_button_cancel = nullptr; ComboBox * m_filament_vendor_combobox = nullptr; - ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; + ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; ComboBox * m_filament_type_combobox = nullptr; ComboBox * m_exist_vendor_combobox = nullptr; ComboBox * m_filament_preset_combobox = nullptr; @@ -262,6 +263,7 @@ private: void on_dpi_changed(const wxRect &suggested_rect) override; void show_export_result(const ExportCase &export_case); bool has_check_box_selected(); + bool earse_preset_fields_for_safe(Preset *preset); std::string initial_file_path(const wxString &path, const std::string &sub_file_path); std::string initial_file_name(const wxString &path, const std::string file_name); wxBoxSizer *create_export_config_item(wxWindow *parent); @@ -314,7 +316,6 @@ private: std::string m_filament_vendor; std::string m_filament_type; std::shared_ptr m_preset_bundle; - std::string m_filamnt_type; ComboBox * m_selected_printer = nullptr; ComboBox * m_selected_filament = nullptr; Button * m_ok_btn = nullptr; diff --git a/src/slic3r/GUI/DesktopIntegrationDialog.cpp b/src/slic3r/GUI/DesktopIntegrationDialog.cpp index 05bedf536f..2948703ce9 100644 --- a/src/slic3r/GUI/DesktopIntegrationDialog.cpp +++ b/src/slic3r/GUI/DesktopIntegrationDialog.cpp @@ -455,6 +455,170 @@ void DesktopIntegrationDialog::undo_desktop_intgration() wxGetApp().plater()->get_notification_manager()->push_notification(NotificationType::UndoDesktopIntegrationSuccess); } +void DesktopIntegrationDialog::perform_downloader_desktop_integration(std::string url_prefix) +{ + BOOST_LOG_TRIVIAL(debug) << "performing downloader desktop integration. " << url_prefix ; + // Path to appimage + const char* appimage_env = std::getenv("APPIMAGE"); + std::string excutable_path; + if (appimage_env) { + try { + excutable_path = boost::filesystem::canonical(boost::filesystem::path(appimage_env)).string(); + } + catch (std::exception&) { + BOOST_LOG_TRIVIAL(error) << "Performing downloader desktop integration failed - boost::filesystem::canonical did not return appimage path."; + show_error(nullptr, _L("Performing downloader desktop integration failed - boost::filesystem::canonical did not return appimage path.")); + return; + } + } + else { + // not appimage - find executable + excutable_path = boost::dll::program_location().string(); + //excutable_path = wxStandardPaths::Get().GetExecutablePath().string(); + BOOST_LOG_TRIVIAL(debug) << "non-appimage path to executable: " << excutable_path; + if (excutable_path.empty()) + { + BOOST_LOG_TRIVIAL(error) << "Performing downloader desktop integration failed - no executable found."; + show_error(nullptr, _L("Performing downloader desktop integration failed - Could not find executable.")); + return; + } + } + + // Escape ' characters in appimage, other special symbols will be esacaped in desktop file by 'excutable_path' + //boost::replace_all(excutable_path, "'", "'\\''"); + excutable_path = escape_string(excutable_path); + + // Find directories icons and applications + // $XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. + // If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used. + // $XDG_DATA_DIRS defines the preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory. + // The directories in $XDG_DATA_DIRS should be seperated with a colon ':'. + // If $XDG_DATA_DIRS is either not set or empty, a value equal to /usr/local/share/:/usr/share/ should be used. + std::vectortarget_candidates; + resolve_path_from_var("XDG_DATA_HOME", target_candidates); + resolve_path_from_var("XDG_DATA_DIRS", target_candidates); + + AppConfig* app_config = wxGetApp().app_config; + // suffix string to create different desktop file for alpha, beta. + + std::string version_suffix; + std::string name_suffix; + std::string version(SLIC3R_VERSION); + if (version.find("alpha") != std::string::npos) + { + version_suffix = "-alpha"; + name_suffix = " - alpha"; + } + else if (version.find("beta") != std::string::npos) + { + version_suffix = "-beta"; + name_suffix = " - beta"; + } + + // theme path to icon destination + std::string icon_theme_path; + std::string icon_theme_dirs; + + if (platform_flavor() == PlatformFlavor::LinuxOnChromium) { + icon_theme_path = "hicolor/96x96/apps/"; + icon_theme_dirs = "/hicolor/96x96/apps"; + } + + std::string target_dir_desktop; + + // desktop file + // iterate thru target_candidates to find applications folder + + std::string desktop_file_downloader = GUI::format( + "[Desktop Entry]\n" + "Name=OrcaSlicer URL Protocol %1% %2%\n" + "Exec=%3% %%u\n" + "Terminal=false\n" + "Type=Application\n" + "MimeType=x-scheme-handler/%1%;\n" + "StartupNotify=false\n" + "NoDisplay=true\n" + , url_prefix, name_suffix, excutable_path); + + bool candidate_found = false; + for (size_t i = 0; i < target_candidates.size(); ++i) { + if (contains_path_dir(target_candidates[i], "applications")) { + target_dir_desktop = target_candidates[i]; + // Write slicer desktop file + std::string path = GUI::format("%1%/applications/OrcaSlicerURLProtocol-%2%%3%.desktop", target_dir_desktop, url_prefix, version_suffix); + if (create_desktop_file(path, desktop_file_downloader)) { + app_config->set("desktop_integration_URL_path", path); + candidate_found = true; + BOOST_LOG_TRIVIAL(debug) << "OrcaSlicerURLProtocol.desktop file installation success."; + break; + } + else { + // write failed - try another path + BOOST_LOG_TRIVIAL(debug) << "Attempt to OrcaSlicerURLProtocol.desktop file installation failed. failed path: " << target_candidates[i]; + target_dir_desktop.clear(); + } + } + } + // if all failed - try creating default home folder + if (!candidate_found) { + // create $HOME/.local/share + create_path(boost::nowide::narrow(wxFileName::GetHomeDir()), ".local/share/applications"); + // create desktop file + target_dir_desktop = GUI::format("%1%/.local/share", wxFileName::GetHomeDir()); + std::string path = GUI::format("%1%/applications/OrcaSlicerURLProtocol-%2%%3%.desktop", target_dir_desktop, url_prefix, version_suffix); + if (contains_path_dir(target_dir_desktop, "applications")) { + if (!create_desktop_file(path, desktop_file_downloader)) { + // Desktop file not written - end desktop integration + BOOST_LOG_TRIVIAL(error) << "Performing downloader desktop integration failed - could not create desktop file."; + return; + } + app_config->set("desktop_integration_URL_path", path); + } + else { + // Desktop file not written - end desktop integration + BOOST_LOG_TRIVIAL(error) << "Performing downloader desktop integration failed because the application directory was not found."; + return; + } + } + assert(!target_dir_desktop.empty()); + if (target_dir_desktop.empty()) { + // Desktop file not written - end desktop integration + BOOST_LOG_TRIVIAL(error) << "Performing downloader desktop integration failed because the application directory was not found."; + show_error(nullptr, _L("Performing downloader desktop integration failed because the application directory was not found.")); + return; + } + + // desktop file for downloader as part of main app + std::string desktop_path = GUI::format("%1%/applications/OrcaSlicerURLProtocol-%2%%3%.desktop", target_dir_desktop, url_prefix, version_suffix); + if (create_desktop_file(desktop_path, desktop_file_downloader)) { + // save path to desktop file + app_config->set("desktop_integration_URL_path", desktop_path); + // finish registration on mime type + std::string command = GUI::format("xdg-mime default OrcaSlicerURLProtocol-%1%%2%.desktop x-scheme-handler/%1%", url_prefix, version_suffix); + BOOST_LOG_TRIVIAL(debug) << "system command: " << command; + int r = system(command.c_str()); + BOOST_LOG_TRIVIAL(debug) << "system result: " << r; + } + + // finish registration on mime type + std::string command = GUI::format("xdg-mime default OrcaSlicerURLProtocol-%1%%2%.desktop x-scheme-handler/%1%", url_prefix, version_suffix); + BOOST_LOG_TRIVIAL(debug) << "system command: " << command; + int r = system(command.c_str()); + BOOST_LOG_TRIVIAL(debug) << "system result: " << r; + + wxGetApp().plater()->get_notification_manager()->push_notification(NotificationType::DesktopIntegrationSuccess); +} +void DesktopIntegrationDialog::undo_downloader_registration() +{ + const AppConfig *app_config = wxGetApp().app_config; + std::string path = std::string(app_config->get("desktop_integration_URL_path")); + if (!path.empty()) { + BOOST_LOG_TRIVIAL(debug) << "removing " << path; + std::remove(path.c_str()); + } + // There is no need to undo xdg-mime default command. It is done automatically when desktop file is deleted. +} + DesktopIntegrationDialog::DesktopIntegrationDialog(wxWindow *parent) : wxDialog(parent, wxID_ANY, _(L("Desktop Integration")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { @@ -503,4 +667,4 @@ DesktopIntegrationDialog::~DesktopIntegrationDialog() } // namespace GUI } // namespace Slic3r -#endif // __linux__ \ No newline at end of file +#endif // __linux__ diff --git a/src/slic3r/GUI/DesktopIntegrationDialog.hpp b/src/slic3r/GUI/DesktopIntegrationDialog.hpp index 4bb7c5e2c0..6eb9f5fa23 100644 --- a/src/slic3r/GUI/DesktopIntegrationDialog.hpp +++ b/src/slic3r/GUI/DesktopIntegrationDialog.hpp @@ -29,6 +29,9 @@ public: static void perform_desktop_integration(); // Deletes Desktop files and icons for both PrusaSlicer and GcodeViewer at paths stored in App Config. static void undo_desktop_intgration(); + + static void perform_downloader_desktop_integration(std::string url_prefix); + static void undo_downloader_registration(); private: }; @@ -36,4 +39,4 @@ private: } // namespace Slic3r #endif // slic3r_DesktopIntegrationDialog_hpp_ -#endif // __linux__ \ No newline at end of file +#endif // __linux__ diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index f3ffa85bdc..a79dd0a027 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -20,6 +20,8 @@ #include "fast_float/fast_float.h" #define CALI_DEBUG +#define MINUTE_30 1800000 //ms +#define TIME_OUT 5000 //ms namespace pt = boost::property_tree; @@ -335,15 +337,15 @@ wxString HMSItem::get_module_name(ModuleID module_id) switch (module_id) { case MODULE_MC: - return _L("MC"); + return "MC"; case MODULE_MAINBOARD: - return _L("MainBoard"); + return "MainBoard"; case MODULE_AMS: - return _L("AMS"); + return "AMS"; case MODULE_TH: - return _L("TH"); + return "TH"; case MODULE_XCAM: - return _L("XCam"); + return "XCam"; default: wxString text = _L("Unknown") + wxString::Format("0x%x", (unsigned)module_id); return text; @@ -452,7 +454,7 @@ void MachineObject::erase_user_access_code() AppConfig* config = GUI::wxGetApp().app_config; if (config) { GUI::wxGetApp().app_config->erase("user_access_code", dev_id); - GUI::wxGetApp().app_config->save(); + //GUI::wxGetApp().app_config->save(); } } @@ -784,7 +786,20 @@ 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]); } -int MachineObject::ams_filament_mapping(std::vector filaments, std::vector& result, std::vector exclude_id) +void MachineObject::get_ams_colors(std::vector &ams_colors) { + ams_colors.clear(); + ams_colors.reserve(amsList.size()); + for (auto ams = amsList.begin(); ams != amsList.end(); ams++) { + for (auto tray = ams->second->trayList.begin(); tray != ams->second->trayList.end(); tray++) { + if (tray->second->is_tray_info_ready()) { + auto ams_color = AmsTray::decode_color(tray->second->color); + ams_colors.emplace_back(ams_color); + } + } + } +} + +int MachineObject::ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id) { if (filaments.empty()) return -1; @@ -807,7 +822,9 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std info.color = tray->second->color; info.type = tray->second->get_filament_type(); info.id = tray_index; - info.filament_id=tray->second->setting_id; + info.filament_id = tray->second->setting_id; + info.ctype = tray->second->ctype; + info.colors = tray->second->cols; tray_filaments.emplace(std::make_pair(tray_index, info)); } } @@ -824,6 +841,8 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std info.tray_id = atoi(tray_it->first.c_str()) + atoi(it->first.c_str()) * 4; info.color = tray_it->second->color; info.type = tray_it->second->get_filament_type(); + info.ctype = tray_it->second->ctype; + info.colors = tray_it->second->cols; } else { info.id = -1; @@ -857,6 +876,9 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std if (filaments[i].type == tray_it->second->get_filament_type()) { info.color = tray_it->second->color; info.type = tray_it->second->get_filament_type(); + info.ctype = tray_it->second->ctype; + std::vector cols; + info.colors = tray_it->second->cols; } else { info.tray_id = -1; info.mapping_result = (int)MappingResult::MAPPING_RESULT_TYPE_MISMATCH; @@ -944,7 +966,8 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std picked_src_idx = i; picked_tar_idx = j; } - else if (min_val == distance_map[i][j].distance && filaments[i].filament_id == tray_filaments[j].filament_id) { + else if (min_val == distance_map[i][j].distance&& filaments[picked_src_idx].filament_id!= tray_filaments[picked_tar_idx].filament_id && filaments[i].filament_id == tray_filaments[j].filament_id) { + picked_src_idx = i; picked_tar_idx = j; } @@ -959,6 +982,8 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std result[picked_src_idx].type = tray->second.type; result[picked_src_idx].distance = tray->second.distance; result[picked_src_idx].filament_id = tray->second.filament_id; + result[picked_src_idx].ctype = tray->second.ctype; + result[picked_src_idx].colors = tray->second.colors; } else { FilamentInfo info; @@ -998,6 +1023,8 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std result[i].tray_id = tray_info_list[i].tray_id; result[i].color = tray_info_list[i].color; result[i].type = tray_info_list[i].type; + result[i].ctype = tray_info_list[i].ctype; + result[i].colors = tray_info_list[i].colors; } } } @@ -1132,24 +1159,26 @@ MachineObject::LIGHT_EFFECT MachineObject::light_effect_parse(std::string effect std::string MachineObject::get_firmware_type_str() { - if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) + /*if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) return "engineer"; else if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) - return "product"; + return "product";*/ - // return engineer by default; - return "engineer"; + // return product by default; + // always return product, printer do not push this field + return "product"; } std::string MachineObject::get_lifecycle_type_str() { - if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) + /*if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) return "engineer"; else if (lifecycle == PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION) - return "product"; + return "product";*/ - // return engineer by default; - return "engineer"; + // return product by default; + // always return product, printer do not push this field + return "product"; } bool MachineObject::is_in_upgrading() @@ -1365,6 +1394,10 @@ void MachineObject::parse_status(int flag) xcam_allow_prompt_sound = ((flag >> 17) & 0x1) != 0; } + if (((flag >> 18) & 0x1) != 0) { + is_support_prompt_sound = true; + } + is_support_filament_tangle_detect = ((flag >> 19) & 0x1) != 0; is_support_user_preset = ((flag >> 22) & 0x1) != 0; if (xcam_filament_tangle_detect_count > 0) @@ -1376,6 +1409,12 @@ void MachineObject::parse_status(int flag) if(!is_support_motor_noise_cali){ is_support_motor_noise_cali = ((flag >> 21) & 0x1) != 0; } + + is_support_nozzle_blob_detection = ((flag >> 25) & 0x1) != 0; + nozzle_blob_detection_enabled = ((flag >> 24) & 0x1) != 0; + + is_support_air_print_detection = ((flag >> 29) & 0x1) != 0; + ams_air_print_status = ((flag >> 28) & 0x1) != 0; if (!is_support_p1s_plus) { auto supported_plus = ((flag >> 27) & 0x1) != 0; @@ -1806,7 +1845,7 @@ int MachineObject::command_ams_calibrate(int ams_id) int MachineObject::command_ams_filament_settings(int ams_id, int tray_id, std::string filament_id, std::string setting_id, std::string tray_color, std::string tray_type, int nozzle_temp_min, int nozzle_temp_max) { BOOST_LOG_TRIVIAL(info) << "command_ams_filament_settings, ams_id = " << ams_id << ", tray_id = " << tray_id << ", tray_color = " << tray_color - << ", tray_type = " << tray_type << ", setting_id = " << setting_id; + << ", tray_type = " << tray_type << ", setting_id = " << setting_id << ", temp_min: = " << nozzle_temp_min << ", temp_max: = " << nozzle_temp_max; json j; j["print"]["command"] = "ams_filament_setting"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); @@ -1869,6 +1908,7 @@ int MachineObject::command_set_chamber_light(LIGHT_EFFECT effect, int on_time, i int MachineObject::command_set_printer_nozzle(std::string nozzle_type, float diameter) { + nozzle_setting_hold_count = HOLD_COUNT_MAX * 2; BOOST_LOG_TRIVIAL(info) << "command_set_printer_nozzle, nozzle_type = " << nozzle_type << " diameter = " << diameter; json j; j["system"]["command"] = "set_accessories"; @@ -1969,6 +2009,16 @@ int MachineObject::command_set_printing_option(bool auto_recovery) return this->publish_json(j.dump()); } +int MachineObject::command_nozzle_blob_detect(bool nozzle_blob_detect) +{ + json j; + j["print"]["command"] = "print_option"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_blob_detect"] = nozzle_blob_detect; + nozzle_blob_detection_enabled = nozzle_blob_detect; + return this->publish_json(j.dump()); +} + int MachineObject::command_set_prompt_sound(bool prompt_sound){ json j; j["print"]["command"] = "print_option"; @@ -2001,6 +2051,19 @@ int MachineObject::command_ams_switch_filament(bool switch_filament) return this->publish_json(j.dump()); } +int MachineObject::command_ams_air_print_detect(bool air_print_detect) +{ + json j; + j["print"]["command"] = "print_option"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["air_print_detect"] = air_print_detect; + + ams_air_print_status = air_print_detect; + BOOST_LOG_TRIVIAL(trace) << "command_ams_air_print_detect:" << air_print_detect; + + return this->publish_json(j.dump()); +} + int MachineObject::command_axis_control(std::string axis, double unit, double input_val, int speed) { @@ -2069,33 +2132,45 @@ int MachineObject::command_start_pa_calibration(const X1CCalibInfos &pa_data, in 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; + 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); - } + std::string filament_ids; + 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()); + if (i > 0) filament_ids += ","; + filament_ids += pa_data.calib_datas[i].filament_id; } - return -1; + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump(); + + try { + json js; + js["cali_type"] = "cali_pa_auto"; + js["nozzle_diameter"] = pa_data.calib_datas[0].nozzle_diameter; + js["filament_id"] = filament_ids; + js["printer_type"] = this->printer_type; + NetworkAgent *agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("cali", js.dump()); + } catch (...) {} + + return this->publish_json(j.dump()); } 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) { + if (pa_calib_values.size() > 0) { json j; j["print"]["command"] = "extrusion_cali_set"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); @@ -2126,79 +2201,68 @@ int MachineObject::command_set_pa_calibration(const std::vector & 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); + 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; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_del: " << j.dump(); + return this->publish_json(j.dump()); } 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); + 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; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get: " << j.dump(); + return this->publish_json(j.dump()); } 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); + 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; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get_result: " << j.dump(); + return this->publish_json(j.dump()); } 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); + 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; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: " << j.dump(); + return this->publish_json(j.dump()); } 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) { + if (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); + std::string filament_ids; 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; @@ -2207,6 +2271,10 @@ int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& cal 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); + + if (i > 0) + filament_ids += ","; + filament_ids += calib_data.calib_datas[i].filament_id; } BOOST_LOG_TRIVIAL(trace) << "flowrate_cali: " << j.dump(); @@ -2217,16 +2285,13 @@ int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& cal 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); + 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; + BOOST_LOG_TRIVIAL(trace) << "flowrate_get_result: " << j.dump(); + return this->publish_json(j.dump()); } int MachineObject::command_ipcam_record(bool on_off) @@ -2611,10 +2676,8 @@ static ENUM enum_index_of(char const *key, char const **enum_names, int enum_cou return defl; } -int MachineObject::parse_json(std::string payload) +int MachineObject::parse_json(std::string payload, bool key_field_only) { - CNumericLocalesSetter locales_setter; - parse_msg_count++; std::chrono::system_clock::time_point clock_start = std::chrono::system_clock::now(); this->set_online_state(true); @@ -2629,6 +2692,7 @@ int MachineObject::parse_json(std::string payload) bool restored_json = false; json j; json j_pre = json::parse(payload); + CNumericLocalesSetter locales_setter; if (j_pre.empty()) { return 0; } @@ -2678,6 +2742,7 @@ int MachineObject::parse_json(std::string payload) std::string access_code = j_pre["system"]["access_code"].get(); if (!access_code.empty()) { set_access_code(access_code); + set_user_access_code(access_code); } } } @@ -2688,8 +2753,81 @@ int MachineObject::parse_json(std::string payload) } uint64_t t_utc = j.value("t_utc", 0ULL); - if (t_utc > 0) + if (t_utc > 0) { last_utc_time = std::chrono::system_clock::time_point(t_utc * 1ms); + std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); + auto millisec_since_epoch = std::chrono::duration_cast(now.time_since_epoch()).count(); + auto delay = millisec_since_epoch - t_utc; //ms + + std::string message_type = is_lan_mode_printer() ? "Local Mqtt" : is_tunnel_mqtt ? "Tunnel Mqtt" : "Cloud Mqtt"; + if (!message_delay.empty()) { + const auto& [first_type, first_time_stamp, first_delay] = message_delay.front(); + const auto& [last_type, last_time_stap, last_delay] = message_delay.back(); + + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ", message delay, last time stamp: " << last_time_stap; + if (last_time_stap - first_time_stamp >= MINUTE_30) { + // record, excluding current data + int total = message_delay.size(); + int local_mqtt = 0; + int tunnel_mqtt = 0; + int cloud_mqtt = 0; + + int local_mqtt_timeout = 0; + int tunnel_mqtt_timeout = 0; + int cloud_mqtt_timeout = 0; + + for (const auto& [type, time_stamp, delay] : message_delay) { + if (type == "Local Mqtt") { + local_mqtt++; + if (delay >= TIME_OUT) { + local_mqtt_timeout++; + } + } + else if (type == "Tunnel Mqtt") { + tunnel_mqtt++; + if (delay >= TIME_OUT) { + tunnel_mqtt_timeout++; + } + } + else if (type == "Cloud Mqtt"){ + cloud_mqtt++; + if (delay >= TIME_OUT) { + cloud_mqtt_timeout++; + } + } + } + + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ", message delay, message total: " << total; + try { + if (m_agent) { + json j_message; + + // Convert timestamp to time + std::time_t t = time_t(last_time_stap / 1000); //s + std::tm* now_tm = std::localtime(&t); + char buffer[80]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", now_tm); + + std::string time_str = std::string(buffer); + j_message["time"] = time_str; + j_message["total"] = total; + j_message["local_mqtt"] = std::to_string(local_mqtt_timeout) + "/" + std::to_string(local_mqtt); + j_message["tunnel_mqtt"] = std::to_string(tunnel_mqtt_timeout) + "/" + std::to_string(tunnel_mqtt); + j_message["cloud_mqtt"] = std::to_string(cloud_mqtt_timeout) + "/" + std::to_string(cloud_mqtt); + + m_agent->track_event("message_delay", j_message.dump()); + } + } + catch (...) {} + + message_delay.clear(); + message_delay.shrink_to_fit(); + } + } + message_delay.push_back(std::make_tuple(message_type, t_utc, delay)); + } + else + last_utc_time = last_update_time; BOOST_LOG_TRIVIAL(trace) << "parse_json: dev_id=" << dev_id << ", playload=" << j.dump(4); @@ -2763,179 +2901,181 @@ int MachineObject::parse_json(std::string payload) } } + if (!key_field_only) { + if (!DeviceManager::EnableMultiMachine) { + if (jj.contains("support_tunnel_mqtt")) { + if (jj["support_tunnel_mqtt"].is_boolean()) { + is_support_tunnel_mqtt = jj["support_tunnel_mqtt"].get(); + } + } + } - //supported function - if (jj.contains("support_chamber_temp_edit")) { - if (jj["support_chamber_temp_edit"].is_boolean()) { - is_support_chamber_edit = jj["support_chamber_temp_edit"].get(); + //supported function + if (jj.contains("support_chamber_temp_edit")) { + if (jj["support_chamber_temp_edit"].is_boolean()) { + is_support_chamber_edit = jj["support_chamber_temp_edit"].get(); + } } - } - if (jj.contains("support_extrusion_cali")) { - if (jj["support_extrusion_cali"].is_boolean()) { - is_support_extrusion_cali = jj["support_extrusion_cali"].get(); + if (jj.contains("support_extrusion_cali")) { + if (jj["support_extrusion_cali"].is_boolean()) { + is_support_extrusion_cali = jj["support_extrusion_cali"].get(); + } } - } - if (jj.contains("support_first_layer_inspect")) { - if (jj["support_first_layer_inspect"].is_boolean()) { - is_support_first_layer_inspect = jj["support_first_layer_inspect"].get(); + if (jj.contains("support_first_layer_inspect")) { + if (jj["support_first_layer_inspect"].is_boolean()) { + is_support_first_layer_inspect = jj["support_first_layer_inspect"].get(); + } } - } - - if (jj.contains("support_ai_monitoring")) { - if (jj["support_ai_monitoring"].is_boolean()) { - is_support_ai_monitoring = jj["support_ai_monitoring"].get(); - } - } - if (jj.contains("support_lidar_calibration")) { - if (jj["support_lidar_calibration"].is_boolean()) { - is_support_lidar_calibration = jj["support_lidar_calibration"].get(); + if (jj.contains("support_ai_monitoring")) { + if (jj["support_ai_monitoring"].is_boolean()) { + is_support_ai_monitoring = jj["support_ai_monitoring"].get(); + } } - } - - if (jj.contains("support_build_plate_marker_detect")) { - if (jj["support_build_plate_marker_detect"].is_boolean()) { - is_support_build_plate_marker_detect = jj["support_build_plate_marker_detect"].get(); - } - } - if (jj.contains("support_flow_calibration")) { - if (jj["support_flow_calibration"].is_boolean()) { - is_support_flow_calibration = jj["support_flow_calibration"].get(); + if (jj.contains("support_lidar_calibration")) { + if (jj["support_lidar_calibration"].is_boolean()) { + is_support_lidar_calibration = jj["support_lidar_calibration"].get(); + } } - } - if (jj.contains("support_print_without_sd")) { - if (jj["support_print_without_sd"].is_boolean()) { - is_support_print_without_sd = jj["support_print_without_sd"].get(); + if (jj.contains("support_build_plate_marker_detect")) { + if (jj["support_build_plate_marker_detect"].is_boolean()) { + is_support_build_plate_marker_detect = jj["support_build_plate_marker_detect"].get(); + } } - } - if (jj.contains("support_print_all")) { - if (jj["support_print_all"].is_boolean()) { - is_support_print_all = jj["support_print_all"].get(); + if (jj.contains("support_flow_calibration")) { + if (jj["support_flow_calibration"].is_boolean()) { + is_support_flow_calibration = jj["support_flow_calibration"].get(); + } } - } - if (jj.contains("support_send_to_sd")) { - if (jj["support_send_to_sd"].is_boolean()) { - is_support_send_to_sdcard = jj["support_send_to_sd"].get(); + if (jj.contains("support_print_without_sd")) { + if (jj["support_print_without_sd"].is_boolean()) { + is_support_print_without_sd = jj["support_print_without_sd"].get(); + } } - } - - if (jj.contains("support_aux_fan")) { - if (jj["support_aux_fan"].is_boolean()) { - is_support_aux_fan = jj["support_aux_fan"].get(); - } - } - - if (jj.contains("support_chamber_fan")) { - if (jj["support_chamber_fan"].is_boolean()) { - is_support_chamber_fan = jj["support_chamber_fan"].get(); - } - } - - if (jj.contains("support_filament_backup")) { - if (jj["support_filament_backup"].is_boolean()) { - is_support_filament_backup = jj["support_filament_backup"].get(); - } - } - if (jj.contains("support_update_remain")) { - if (jj["support_update_remain"].is_boolean()) { - is_support_update_remain = jj["support_update_remain"].get(); + if (jj.contains("support_print_all")) { + if (jj["support_print_all"].is_boolean()) { + is_support_print_all = jj["support_print_all"].get(); + } + } + if (jj.contains("support_send_to_sd")) { + if (jj["support_send_to_sd"].is_boolean()) { + is_support_send_to_sdcard = jj["support_send_to_sd"].get(); + } } - } - if (jj.contains("support_auto_leveling")) { - if (jj["support_auto_leveling"].is_boolean()) { - is_support_auto_leveling = jj["support_auto_leveling"].get(); + if (jj.contains("support_aux_fan")) { + if (jj["support_aux_fan"].is_boolean()) { + is_support_aux_fan = jj["support_aux_fan"].get(); + } } - } - if (jj.contains("support_auto_recovery_step_loss")) { - if (jj["support_auto_recovery_step_loss"].is_boolean()) { - is_support_auto_recovery_step_loss = jj["support_auto_recovery_step_loss"].get(); + if (jj.contains("support_chamber_fan")) { + if (jj["support_chamber_fan"].is_boolean()) { + is_support_chamber_fan = jj["support_chamber_fan"].get(); + } } - } - - if (jj.contains("support_ams_humidity")) { - if (jj["support_ams_humidity"].is_boolean()) { - is_support_ams_humidity = jj["support_ams_humidity"].get(); - } - } - - if (jj.contains("support_prompt_sound")) { - if (jj["support_prompt_sound"].is_boolean()) { - is_support_prompt_sound = jj["support_prompt_sound"].get(); - } - } - - //if (jj.contains("support_filament_tangle_detect")) { - // if (jj["support_filament_tangle_detect"].is_boolean()) { - // is_support_filament_tangle_detect = jj["support_filament_tangle_detect"].get(); - // } - //} - if (jj.contains("support_1080dpi")) { - if (jj["support_1080dpi"].is_boolean()) { - is_support_1080dpi = jj["support_1080dpi"].get(); + if (jj.contains("support_filament_backup")) { + if (jj["support_filament_backup"].is_boolean()) { + is_support_filament_backup = jj["support_filament_backup"].get(); + } } - } - - if (jj.contains("support_cloud_print_only")) { - if (jj["support_cloud_print_only"].is_boolean()) { - is_support_cloud_print_only = jj["support_cloud_print_only"].get(); - } - } - - if (jj.contains("support_command_ams_switch")) { - if (jj["support_command_ams_switch"].is_boolean()) { - is_support_command_ams_switch = jj["support_command_ams_switch"].get(); - } - } - - if (jj.contains("support_mqtt_alive")) { - if (jj["support_mqtt_alive"].is_boolean()) { - is_support_mqtt_alive = jj["support_mqtt_alive"].get(); - } - } - - if (jj.contains("support_tunnel_mqtt")) { - if (jj["support_tunnel_mqtt"].is_boolean()) { - is_support_tunnel_mqtt = jj["support_tunnel_mqtt"].get(); - } - } - if (jj.contains("support_motor_noise_cali")) { - if (jj["support_motor_noise_cali"].is_boolean()) { - is_support_motor_noise_cali = jj["support_motor_noise_cali"].get(); + if (jj.contains("support_update_remain")) { + if (jj["support_update_remain"].is_boolean()) { + is_support_update_remain = jj["support_update_remain"].get(); + } } - } - if (jj.contains("support_timelapse")) { - if (jj["support_timelapse"].is_boolean()) { - is_support_timelapse = jj["support_timelapse"].get(); + if (jj.contains("support_auto_leveling")) { + if (jj["support_auto_leveling"].is_boolean()) { + is_support_auto_leveling = jj["support_auto_leveling"].get(); + } } - } - if (jj.contains("support_user_preset")) { - if (jj["support_user_preset"].is_boolean()) { - is_support_user_preset = jj["support_user_preset"].get(); + if (jj.contains("support_auto_recovery_step_loss")) { + if (jj["support_auto_recovery_step_loss"].is_boolean()) { + is_support_auto_recovery_step_loss = jj["support_auto_recovery_step_loss"].get(); + } } - } - if (jj.contains("nozzle_max_temperature")) { - if (jj["nozzle_max_temperature"].is_number_integer()) { - nozzle_max_temperature = jj["nozzle_max_temperature"].get(); + if (jj.contains("support_ams_humidity")) { + if (jj["support_ams_humidity"].is_boolean()) { + is_support_ams_humidity = jj["support_ams_humidity"].get(); + } } - } - if (jj.contains("bed_temperature_limit")) { - if (jj["bed_temperature_limit"].is_number_integer()) { - bed_temperature_limit = jj["bed_temperature_limit"].get(); + if (jj.contains("support_prompt_sound")) { + if (jj["support_prompt_sound"].is_boolean()) { + is_support_prompt_sound = jj["support_prompt_sound"].get(); + } + } + + //if (jj.contains("support_filament_tangle_detect")) { + // if (jj["support_filament_tangle_detect"].is_boolean()) { + // is_support_filament_tangle_detect = jj["support_filament_tangle_detect"].get(); + // } + //} + + if (jj.contains("support_1080dpi")) { + if (jj["support_1080dpi"].is_boolean()) { + is_support_1080dpi = jj["support_1080dpi"].get(); + } + } + + if (jj.contains("support_cloud_print_only")) { + if (jj["support_cloud_print_only"].is_boolean()) { + is_support_cloud_print_only = jj["support_cloud_print_only"].get(); + } + } + + if (jj.contains("support_command_ams_switch")) { + if (jj["support_command_ams_switch"].is_boolean()) { + is_support_command_ams_switch = jj["support_command_ams_switch"].get(); + } + } + + if (jj.contains("support_mqtt_alive")) { + if (jj["support_mqtt_alive"].is_boolean()) { + is_support_mqtt_alive = jj["support_mqtt_alive"].get(); + } + } + + if (jj.contains("support_motor_noise_cali")) { + if (jj["support_motor_noise_cali"].is_boolean()) { + is_support_motor_noise_cali = jj["support_motor_noise_cali"].get(); + } + } + + if (jj.contains("support_timelapse")) { + if (jj["support_timelapse"].is_boolean()) { + is_support_timelapse = jj["support_timelapse"].get(); + } + } + + if (jj.contains("support_user_preset")) { + if (jj["support_user_preset"].is_boolean()) { + is_support_user_preset = jj["support_user_preset"].get(); + } + } + + if (jj.contains("nozzle_max_temperature")) { + if (jj["nozzle_max_temperature"].is_number_integer()) { + nozzle_max_temperature = jj["nozzle_max_temperature"].get(); + } + } + + if (jj.contains("bed_temperature_limit")) { + if (jj["bed_temperature_limit"].is_number_integer()) { + bed_temperature_limit = jj["bed_temperature_limit"].get(); + } } } @@ -2947,7 +3087,7 @@ int MachineObject::parse_json(std::string payload) if (jj["errno"].is_number()) { if (jj["errno"].get() == -2) { wxString text = _L("The current chamber temperature or the target chamber temperature exceeds 45\u2103.In order to avoid extruder clogging,low temperature filament(PLA/PETG/TPU) is not allowed to be loaded."); - GUI::wxGetApp().show_dialog(text); + GUI::wxGetApp().push_notification(text); } } } @@ -2967,7 +3107,7 @@ int MachineObject::parse_json(std::string payload) #if __WXOSX__ set_ctt_dlg(text); #else - GUI::wxGetApp().show_dialog(text); + GUI::wxGetApp().push_notification(text); #endif } } @@ -2983,21 +3123,6 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("print_type")) { print_type = jj["print_type"].get(); } - - if (jj.contains("home_flag")) { - home_flag = jj["home_flag"].get(); - parse_status(home_flag); - } - if (jj.contains("hw_switch_state")) { - hw_switch_state = jj["hw_switch_state"].get(); - } - - if (jj.contains("mc_remaining_time")) { - if (jj["mc_remaining_time"].is_string()) - mc_left_time = stoi(j["print"]["mc_remaining_time"].get()) * 60; - else if (jj["mc_remaining_time"].is_number_integer()) - mc_left_time = j["print"]["mc_remaining_time"].get() * 60; - } if (jj.contains("mc_percent")) { if (jj["mc_percent"].is_string()) mc_print_percent = stoi(j["print"]["mc_percent"].get()); @@ -3018,74 +3143,69 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("mc_print_error_code")) { if (jj["mc_print_error_code"].is_number()) mc_print_error_code = jj["mc_print_error_code"].get(); - } - if (jj.contains("mc_print_line_number")) { - if (jj["mc_print_line_number"].is_string() && !jj["mc_print_line_number"].is_null()) - mc_print_line_number = atoi(jj["mc_print_line_number"].get().c_str()); + if (jj.contains("mc_remaining_time")) { + if (jj["mc_remaining_time"].is_string()) + mc_left_time = stoi(j["print"]["mc_remaining_time"].get()) * 60; + else if (jj["mc_remaining_time"].is_number_integer()) + mc_left_time = j["print"]["mc_remaining_time"].get() * 60; } if (jj.contains("print_error")) { if (jj["print_error"].is_number()) print_error = jj["print_error"].get(); } - + if (!key_field_only) { + if (jj.contains("home_flag")) { + home_flag = jj["home_flag"].get(); + parse_status(home_flag); + } + if (jj.contains("hw_switch_state")) { + hw_switch_state = jj["hw_switch_state"].get(); + } + if (jj.contains("mc_print_line_number")) { + if (jj["mc_print_line_number"].is_string() && !jj["mc_print_line_number"].is_null()) + mc_print_line_number = atoi(jj["mc_print_line_number"].get().c_str()); + } + } #pragma endregion #pragma region online - // parse online info - try { - if (jj.contains("online")) { - if (jj["online"].contains("ahb")) { - if (jj["online"]["ahb"].get()) { - online_ahb = true; - } else { - online_ahb = false; + if (!key_field_only) { + // parse online info + try { + if (jj.contains("online")) { + if (jj["online"].contains("ahb")) { + if (jj["online"]["ahb"].get()) { + online_ahb = true; + } else { + online_ahb = false; + } + } + if (jj["online"].contains("rfid")) { + if (jj["online"]["rfid"].get()) { + online_rfid = true; + } else { + online_rfid = false; + } + } + std::string str = jj.dump(); + if (jj["online"].contains("version")) { + online_version = jj["online"]["version"].get(); + } + if (last_online_version != online_version) { + last_online_version = online_version; + GUI::wxGetApp().CallAfter([this] { + this->command_get_version(); + }); } } - if (jj["online"].contains("rfid")) { - if (jj["online"]["rfid"].get()) { - online_rfid = true; - } else { - online_rfid = false; - } - } - std::string str = jj.dump(); - if (jj["online"].contains("version")) { - online_version = jj["online"]["version"].get(); - } - if (last_online_version != online_version) { - last_online_version = online_version; - GUI::wxGetApp().CallAfter([this] { - this->command_get_version(); - }); - } + } catch (...) { + ; } - } catch (...) { - ; } #pragma endregion #pragma region print_task - if (jj.contains("printer_type")) { - printer_type = parse_printer_type(jj["printer_type"].get()); - } - - if (jj.contains("subtask_name")) { - subtask_name = jj["subtask_name"].get(); - } - if (jj.contains("layer_num")) { - curr_layer = jj["layer_num"].get(); - } - if (jj.contains("total_layer_num")) { - total_layers = jj["total_layer_num"].get(); - if (total_layers == 0) - is_support_layer_num = false; - else - is_support_layer_num = true; - } else { - is_support_layer_num = false; - } - if (jj.contains("gcode_state")) { this->set_print_state(jj["gcode_state"].get()); } @@ -3097,26 +3217,52 @@ int MachineObject::parse_json(std::string payload) is_support_wait_sending_finish = false; } - if (jj.contains("queue_number")) { - this->queue_number = jj["queue_number"].get(); - } else { - this->queue_number = 0; + if (jj.contains("subtask_name")) { + subtask_name = jj["subtask_name"].get(); } - if (jj.contains("task_id")) { - this->task_id_ = jj["task_id"].get(); - } + if (!key_field_only) { + if (jj.contains("printer_type")) { + printer_type = parse_printer_type(jj["printer_type"].get()); + } - if (jj.contains("gcode_file")) - this->m_gcode_file = jj["gcode_file"].get(); - if (jj.contains("gcode_file_prepare_percent")) { - std::string percent_str = jj["gcode_file_prepare_percent"].get(); - if (!percent_str.empty()) { - try{ - this->gcode_file_prepare_percent = atoi(percent_str.c_str()); - } catch(...) {} + if (jj.contains("layer_num")) { + curr_layer = jj["layer_num"].get(); + } + if (jj.contains("total_layer_num")) { + total_layers = jj["total_layer_num"].get(); + if (total_layers == 0) + is_support_layer_num = false; + else + is_support_layer_num = true; + } + else { + is_support_layer_num = false; + } + if (jj.contains("queue_number")) { + this->queue_number = jj["queue_number"].get(); + } + else { + this->queue_number = 0; + } + + if (jj.contains("task_id")) { + this->task_id_ = jj["task_id"].get(); + } + + if (jj.contains("gcode_file")) + this->m_gcode_file = jj["gcode_file"].get(); + if (jj.contains("gcode_file_prepare_percent")) { + std::string percent_str = jj["gcode_file_prepare_percent"].get(); + if (!percent_str.empty()) { + try { + this->gcode_file_prepare_percent = atoi(percent_str.c_str()); + } + catch (...) {} + } } } + if (jj.contains("project_id") && jj.contains("profile_id") && jj.contains("subtask_id") @@ -3155,99 +3301,104 @@ int MachineObject::parse_json(std::string payload) #pragma endregion #pragma region status - /* temperature */ - if (jj.contains("bed_temper")) { - if (jj["bed_temper"].is_number()) { - bed_temp = jj["bed_temper"].get(); + if (!key_field_only) { + /* temperature */ + if (jj.contains("bed_temper")) { + if (jj["bed_temper"].is_number()) { + bed_temp = jj["bed_temper"].get(); + } } - } - if (jj.contains("bed_target_temper")) { - if (jj["bed_target_temper"].is_number()) { - bed_temp_target = jj["bed_target_temper"].get(); + if (jj.contains("bed_target_temper")) { + if (jj["bed_target_temper"].is_number()) { + bed_temp_target = jj["bed_target_temper"].get(); + } } - } - if (jj.contains("frame_temper")) { - if (jj["frame_temper"].is_number()) { - frame_temp = jj["frame_temper"].get(); + if (jj.contains("frame_temper")) { + if (jj["frame_temper"].is_number()) { + frame_temp = jj["frame_temper"].get(); + } } - } - if (jj.contains("nozzle_temper")) { - if (jj["nozzle_temper"].is_number()) { - nozzle_temp = jj["nozzle_temper"].get(); + if (jj.contains("nozzle_temper")) { + if (jj["nozzle_temper"].is_number()) { + nozzle_temp = jj["nozzle_temper"].get(); + } } - } - if (jj.contains("nozzle_target_temper")) { - if (jj["nozzle_target_temper"].is_number()) { - nozzle_temp_target = jj["nozzle_target_temper"].get(); + if (jj.contains("nozzle_target_temper")) { + if (jj["nozzle_target_temper"].is_number()) { + nozzle_temp_target = jj["nozzle_target_temper"].get(); + } } - } - if (jj.contains("chamber_temper")) { - if (jj["chamber_temper"].is_number()) { - chamber_temp = jj["chamber_temper"].get(); + if (jj.contains("chamber_temper")) { + if (jj["chamber_temper"].is_number()) { + chamber_temp = jj["chamber_temper"].get(); + } } - } - if (jj.contains("ctt")) { - if (jj["ctt"].is_number()) { - chamber_temp_target = jj["ctt"].get(); + if (jj.contains("ctt")) { + if (jj["ctt"].is_number()) { + chamber_temp_target = jj["ctt"].get(); + } } - } - /* signals */ - if (jj.contains("link_th_state")) - link_th = jj["link_th_state"].get(); - if (jj.contains("link_ams_state")) - link_ams = jj["link_ams_state"].get(); - if (jj.contains("wifi_signal")) - wifi_signal = jj["wifi_signal"].get(); + /* signals */ + if (jj.contains("link_th_state")) + link_th = jj["link_th_state"].get(); + if (jj.contains("link_ams_state")) + link_ams = jj["link_ams_state"].get(); + if (jj.contains("wifi_signal")) + wifi_signal = jj["wifi_signal"].get(); - /* cooling */ - if (jj.contains("fan_gear")) { - fan_gear = jj["fan_gear"].get(); - big_fan2_speed = (int)((fan_gear & 0x00FF0000) >> 16); - big_fan1_speed = (int)((fan_gear & 0x0000FF00) >> 8); - cooling_fan_speed= (int)((fan_gear & 0x000000FF) >> 0); - } - else { - if (jj.contains("cooling_fan_speed")) { - cooling_fan_speed = stoi(jj["cooling_fan_speed"].get()); - cooling_fan_speed = round( floor(cooling_fan_speed / float(1.5)) * float(25.5) ); + /* cooling */ + if (jj.contains("fan_gear")) { + fan_gear = jj["fan_gear"].get(); + big_fan2_speed = (int)((fan_gear & 0x00FF0000) >> 16); + big_fan1_speed = (int)((fan_gear & 0x0000FF00) >> 8); + cooling_fan_speed = (int)((fan_gear & 0x000000FF) >> 0); } else { - cooling_fan_speed = 0; + if (jj.contains("cooling_fan_speed")) { + cooling_fan_speed = stoi(jj["cooling_fan_speed"].get()); + cooling_fan_speed = round(floor(cooling_fan_speed / float(1.5)) * float(25.5)); + } + else { + cooling_fan_speed = 0; + } + + if (jj.contains("big_fan1_speed")) { + big_fan1_speed = stoi(jj["big_fan1_speed"].get()); + big_fan1_speed = round( floor(big_fan1_speed / float(1.5)) * float(25.5) ); + } + else { + big_fan1_speed = 0; + } + + if (jj.contains("big_fan2_speed")) { + big_fan2_speed = stoi(jj["big_fan2_speed"].get()); + big_fan2_speed = round( floor(big_fan2_speed / float(1.5)) * float(25.5) ); + } + else { + big_fan2_speed = 0; + } } - if (jj.contains("big_fan1_speed")) { - big_fan1_speed = stoi(jj["big_fan1_speed"].get()); - big_fan1_speed = round( floor(big_fan1_speed / float(1.5)) * float(25.5) ); + if (jj.contains("heatbreak_fan_speed")) { + heatbreak_fan_speed = stoi(jj["heatbreak_fan_speed"].get()); } - else { - big_fan1_speed = 0; - } - - if (jj.contains("big_fan2_speed")) { - big_fan2_speed = stoi(jj["big_fan2_speed"].get()); - big_fan2_speed = round( floor(big_fan2_speed / float(1.5)) * float(25.5) ); - } - else { - big_fan2_speed = 0; - } - } - - if (jj.contains("heatbreak_fan_speed")) { - heatbreak_fan_speed = stoi(jj["heatbreak_fan_speed"].get()); - } - /* parse speed */ - try { - if (jj.contains("spd_lvl")) { - printing_speed_lvl = (PrintingSpeedLevel)jj["spd_lvl"].get(); + /* parse speed */ + try { + if (jj.contains("spd_lvl")) { + printing_speed_lvl = (PrintingSpeedLevel)jj["spd_lvl"].get(); + } + if (jj.contains("spd_mag")) { + printing_speed_mag = jj["spd_mag"].get(); + } + if (jj.contains("heatbreak_fan_speed")) { + heatbreak_fan_speed = stoi(jj["heatbreak_fan_speed"].get()); + } } - if (jj.contains("spd_mag")) { - printing_speed_mag = jj["spd_mag"].get(); + catch (...) { + ; } } - catch (...) { - ; - } try { if (jj.contains("stg")) { @@ -3268,102 +3419,122 @@ int MachineObject::parse_json(std::string payload) ; } - /*get filam_bak*/ - try { - if (jj.contains("filam_bak")) { - is_support_show_filament_backup = true; - filam_bak.clear(); - if (jj["filam_bak"].is_array()) { - for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) { - filam_bak.push_back(it.value().get()); + if (!key_field_only) { + /*get filam_bak*/ + try { + if (jj.contains("filam_bak")) { + is_support_show_filament_backup = true; + filam_bak.clear(); + if (jj["filam_bak"].is_array()) { + for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) { + filam_bak.push_back(it.value().get()); + } + } + } + else { + is_support_show_filament_backup = 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 (...) { + ; + } + } + if (!key_field_only) { + try { + if (jj.contains("lifecycle")) { + if (jj["lifecycle"].get() == "engineer") + lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; + else if (jj["lifecycle"].get() == "product") + lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; + } + } + catch (...) { + ; + } + + try { + if (jj.contains("lights_report") && jj["lights_report"].is_array()) { + for (auto it = jj["lights_report"].begin(); it != jj["lights_report"].end(); it++) { + if ((*it)["node"].get().compare("chamber_light") == 0) + chamber_light = light_effect_parse((*it)["mode"].get()); + if ((*it)["node"].get().compare("work_light") == 0) + work_light = light_effect_parse((*it)["mode"].get()); } } } - else { - is_support_show_filament_backup = false; + catch (...) { + ; } - } - 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") - lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; - else if (jj["lifecycle"].get() == "product") - lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; - } - } - catch (...) { - ; - } - - try { - if (jj.contains("lights_report") && jj["lights_report"].is_array()) { - for (auto it = jj["lights_report"].begin(); it != jj["lights_report"].end(); it++) { - if ((*it)["node"].get().compare("chamber_light") == 0) - chamber_light = light_effect_parse((*it)["mode"].get()); - if ((*it)["node"].get().compare("work_light") == 0) - work_light = light_effect_parse((*it)["mode"].get()); + // media + try { + if (jj.contains("sdcard")) { + if (jj["sdcard"].get()) + sdcard_state = MachineObject::SdcardState::HAS_SDCARD_NORMAL; + else + sdcard_state = MachineObject::SdcardState::NO_SDCARD; + } else { + //do not check sdcard if no sdcard field + sdcard_state = MachineObject::SdcardState::NO_SDCARD; } } - } - catch (...) { - ; - } - // media - try { - if (jj.contains("sdcard")) { - if (jj["sdcard"].get()) - sdcard_state = MachineObject::SdcardState::HAS_SDCARD_NORMAL; - else - sdcard_state = MachineObject::SdcardState::NO_SDCARD; - } else { - //do not check sdcard if no sdcard field - sdcard_state = MachineObject::SdcardState::NO_SDCARD; + catch (...) { + ; } } - catch (...) { - ; - } #pragma endregion + if (!key_field_only) { + try { + if (jj.contains("nozzle_diameter")) { + if (nozzle_setting_hold_count > 0) { + nozzle_setting_hold_count--; + } else { + if (jj["nozzle_diameter"].is_number_float()) { + nozzle_diameter = jj["nozzle_diameter"].get(); + } + else if (jj["nozzle_diameter"].is_string()) { + nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); + } + } - try { - if (jj.contains("nozzle_diameter")) { - if (jj["nozzle_diameter"].is_number_float()) { - nozzle_diameter = jj["nozzle_diameter"].get(); - } else if (jj["nozzle_diameter"].is_string()) { - nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); + } } - } - catch(...) { - ; - } + catch(...) { + ; + } - try { - if (jj.contains("nozzle_type")) { - if (jj["nozzle_type"].is_string()) { - nozzle_type = jj["nozzle_type"].get(); + try { + if (jj.contains("nozzle_type")) { + + if (nozzle_setting_hold_count > 0) { + nozzle_setting_hold_count--; + } + else { + if (jj["nozzle_type"].is_string()) { + nozzle_type = jj["nozzle_type"].get(); + } + } + } + else { + nozzle_type = ""; } } - } - catch (...) { - ; + catch (...) { + ; + } } #pragma region upgrade @@ -3464,147 +3635,151 @@ int MachineObject::parse_json(std::string payload) #pragma endregion #pragma region camera - // parse camera info - try { - if (jj.contains("ipcam")) { - json const & ipcam = jj["ipcam"]; - if (ipcam.contains("ipcam_record")) { - if (camera_recording_hold_count > 0) - camera_recording_hold_count--; - else { - if (ipcam["ipcam_record"].get() == "enable") { - camera_recording_when_printing = true; - } + if (!key_field_only) { + // parse camera info + try { + if (jj.contains("ipcam")) { + json const & ipcam = jj["ipcam"]; + if (ipcam.contains("ipcam_record")) { + if (camera_recording_hold_count > 0) + camera_recording_hold_count--; else { - camera_recording_when_printing = false; - } - } - } - if (ipcam.contains("timelapse")) { - if (camera_timelapse_hold_count > 0) - camera_timelapse_hold_count--; - else { - if (ipcam["timelapse"].get() == "enable") { - camera_timelapse = true; - } - else { - camera_timelapse = false; - } - } - } - if (ipcam.contains("ipcam_dev")) { - if (ipcam["ipcam_dev"].get() == "1") { - has_ipcam = true; - } else { - has_ipcam = false; - } - } - if (ipcam.contains("resolution")) { - if (camera_resolution_hold_count > 0) - camera_resolution_hold_count--; - else { - camera_resolution = ipcam["resolution"].get(); - } - } - if (ipcam.contains("resolution_supported")) { - std::vector resolution_supported; - for (auto res : ipcam["resolution_supported"]) - resolution_supported.emplace_back(res.get()); - camera_resolution_supported.swap(resolution_supported); - } - if (ipcam.contains("liveview")) { - char const *local_protos[] = { "none", "local", "rtsps", "rtsp" }; - liveview_local = enum_index_of(ipcam["liveview"].value("local", "none").c_str(), local_protos, 4, LiveviewLocal::LVL_None); - liveview_remote = ipcam["liveview"].value("remote", "disabled") == "enabled"; - } - if (ipcam.contains("file")) { - file_local = ipcam["file"].value("local", "disabled") == "enabled"; - file_remote = ipcam["file"].value("remote", "disabled") == "enabled"; - file_model_download = ipcam["file"].value("model_download", "disabled") == "enabled"; - } - virtual_camera = ipcam.value("virtual_camera", "disabled") == "enabled"; - if (ipcam.contains("rtsp_url")) { - local_rtsp_url = ipcam["rtsp_url"].get(); - liveview_local = local_rtsp_url.empty() ? LVL_None : local_rtsp_url == "disable" - ? LVL_None : boost::algorithm::starts_with(local_rtsp_url, "rtsps") ? LVL_Rtsps : LVL_Rtsp; - } - if (ipcam.contains("tutk_server")) { - tutk_state = ipcam["tutk_server"].get(); - } - } - } - catch (...) { - ; - } - - try { - if (jj.contains("xcam")) { - if (xcam_ai_monitoring_hold_count > 0) - xcam_ai_monitoring_hold_count--; - else { - if (jj["xcam"].contains("printing_monitor")) { - // new protocol - xcam_ai_monitoring = jj["xcam"]["printing_monitor"].get(); - } else { - // old version protocol - if (jj["xcam"].contains("spaghetti_detector")) { - xcam_ai_monitoring = jj["xcam"]["spaghetti_detector"].get(); - if (jj["xcam"].contains("print_halt")) { - bool print_halt = jj["xcam"]["print_halt"].get(); - if (print_halt) { xcam_ai_monitoring_sensitivity = "medium"; } + if (ipcam["ipcam_record"].get() == "enable") { + camera_recording_when_printing = true; + } + else { + camera_recording_when_printing = false; } } } - if (jj["xcam"].contains("halt_print_sensitivity")) { - xcam_ai_monitoring_sensitivity = jj["xcam"]["halt_print_sensitivity"].get(); + if (ipcam.contains("timelapse")) { + if (camera_timelapse_hold_count > 0) + camera_timelapse_hold_count--; + else { + if (ipcam["timelapse"].get() == "enable") { + camera_timelapse = true; + } + else { + camera_timelapse = false; + } + } } - } - - if (xcam_first_layer_hold_count > 0) - xcam_first_layer_hold_count--; - else { - if (jj["xcam"].contains("first_layer_inspector")) { - xcam_first_layer_inspector = jj["xcam"]["first_layer_inspector"].get(); + if (ipcam.contains("ipcam_dev")) { + if (ipcam["ipcam_dev"].get() == "1") { + has_ipcam = true; + } else { + has_ipcam = false; + } } - } - - if (xcam_buildplate_marker_hold_count > 0) - xcam_buildplate_marker_hold_count--; - else { - if (jj["xcam"].contains("buildplate_marker_detector")) { - xcam_buildplate_marker_detector = jj["xcam"]["buildplate_marker_detector"].get(); - is_support_build_plate_marker_detect = true; - } else { - is_support_build_plate_marker_detect = false; + if (ipcam.contains("resolution")) { + if (camera_resolution_hold_count > 0) + camera_resolution_hold_count--; + else { + camera_resolution = ipcam["resolution"].get(); + } + } + if (ipcam.contains("resolution_supported")) { + std::vector resolution_supported; + for (auto res : ipcam["resolution_supported"]) + resolution_supported.emplace_back(res.get()); + camera_resolution_supported.swap(resolution_supported); + } + if (ipcam.contains("liveview")) { + char const *local_protos[] = {"none", "disabled", "local", "rtsps", "rtsp"}; + liveview_local = enum_index_of(ipcam["liveview"].value("local", "none").c_str(), local_protos, 5, LiveviewLocal::LVL_None); + liveview_remote = ipcam["liveview"].value("remote", "disabled") == "enabled"; + } + if (ipcam.contains("file")) { + file_local = ipcam["file"].value("local", "disabled") == "enabled"; + file_remote = ipcam["file"].value("remote", "disabled") == "enabled"; + file_model_download = ipcam["file"].value("model_download", "disabled") == "enabled"; + } + virtual_camera = ipcam.value("virtual_camera", "disabled") == "enabled"; + if (ipcam.contains("rtsp_url")) { + local_rtsp_url = ipcam["rtsp_url"].get(); + liveview_local = local_rtsp_url.empty() ? LVL_None : local_rtsp_url == "disable" + ? LVL_Disable : boost::algorithm::starts_with(local_rtsp_url, "rtsps") ? LVL_Rtsps : LVL_Rtsp; + } + if (ipcam.contains("tutk_server")) { + tutk_state = ipcam["tutk_server"].get(); } } } - } - catch (...) { - ; + catch (...) { + ; + } + + try { + if (jj.contains("xcam")) { + if (xcam_ai_monitoring_hold_count > 0) + xcam_ai_monitoring_hold_count--; + else { + if (jj["xcam"].contains("printing_monitor")) { + // new protocol + xcam_ai_monitoring = jj["xcam"]["printing_monitor"].get(); + } else { + // old version protocol + if (jj["xcam"].contains("spaghetti_detector")) { + xcam_ai_monitoring = jj["xcam"]["spaghetti_detector"].get(); + if (jj["xcam"].contains("print_halt")) { + bool print_halt = jj["xcam"]["print_halt"].get(); + if (print_halt) { xcam_ai_monitoring_sensitivity = "medium"; } + } + } + } + if (jj["xcam"].contains("halt_print_sensitivity")) { + xcam_ai_monitoring_sensitivity = jj["xcam"]["halt_print_sensitivity"].get(); + } + } + + if (xcam_first_layer_hold_count > 0) + xcam_first_layer_hold_count--; + else { + if (jj["xcam"].contains("first_layer_inspector")) { + xcam_first_layer_inspector = jj["xcam"]["first_layer_inspector"].get(); + } + } + + if (xcam_buildplate_marker_hold_count > 0) + xcam_buildplate_marker_hold_count--; + else { + if (jj["xcam"].contains("buildplate_marker_detector")) { + xcam_buildplate_marker_detector = jj["xcam"]["buildplate_marker_detector"].get(); + is_support_build_plate_marker_detect = true; + } else { + is_support_build_plate_marker_detect = false; + } + } + } + } + catch (...) { + ; + } } #pragma endregion #pragma region hms - // parse hms msg - try { - hms_list.clear(); - if (jj.contains("hms")) { - if (jj["hms"].is_array()) { - for (auto it = jj["hms"].begin(); it != jj["hms"].end(); it++) { - HMSItem item; - if ((*it).contains("attr") && (*it).contains("code")) { - unsigned attr = (*it)["attr"].get(); - unsigned code = (*it)["code"].get(); - item.parse_hms_info(attr, code); + if (!key_field_only) { + // parse hms msg + try { + hms_list.clear(); + if (jj.contains("hms")) { + if (jj["hms"].is_array()) { + for (auto it = jj["hms"].begin(); it != jj["hms"].end(); it++) { + HMSItem item; + if ((*it).contains("attr") && (*it).contains("code")) { + unsigned attr = (*it)["attr"].get(); + unsigned code = (*it)["code"].get(); + item.parse_hms_info(attr, code); + } + hms_list.push_back(item); } - hms_list.push_back(item); } } } - } - catch (...) { - ; + catch (...) { + ; + } } #pragma endregion @@ -3620,11 +3795,19 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("cali_version")) { cali_version = jj["cali_version"].get(); } + else { + cali_version = -1; + } std::string str = jj.dump(); } catch (...) { ; } + PresetBundle *preset_bundle = Slic3r::GUI::wxGetApp().preset_bundle; + std::map> filament_list = preset_bundle->filaments.get_filament_presets(); + std::ostringstream stream; + stream << std::fixed << std::setprecision(1) << nozzle_diameter; + std::string nozzle_diameter_str = stream.str(); if (jj.contains("ams")) { if (jj["ams"].contains("ams")) { @@ -3639,404 +3822,460 @@ int MachineObject::parse_json(std::string payload) if (jj["ams"].contains("tray_exist_bits")) { tray_exist_bits = stol(jj["ams"]["tray_exist_bits"].get(), nullptr, 16); } - if (jj["ams"].contains("tray_read_done_bits")) { - tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get(), nullptr, 16); - } - if (jj["ams"].contains("tray_reading_bits")) { - tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get(), nullptr, 16); - ams_support_use_ams = true; - } - if (jj["ams"].contains("tray_is_bbl_bits")) { - tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get(), nullptr, 16); - } - if (jj["ams"].contains("version")) { - if (jj["ams"]["version"].is_number()) - ams_version = jj["ams"]["version"].get(); - } - if (jj["ams"].contains("tray_now")) { - this->_parse_tray_now(jj["ams"]["tray_now"].get()); - } - if (jj["ams"].contains("tray_tar")) { - m_tray_tar = jj["ams"]["tray_tar"].get(); - } - if (jj["ams"].contains("ams_rfid_status")) - ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); - if (jj["ams"].contains("humidity")) { - if (jj["ams"]["humidity"].is_string()) { - std::string humidity_str = jj["ams"]["humidity"].get(); - try { - ams_humidity = atoi(humidity_str.c_str()); - } catch (...) { - ; - } + if (!key_field_only) { + if (jj["ams"].contains("tray_read_done_bits")) { + tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get(), nullptr, 16); } - } - - if (jj["ams"].contains("insert_flag") || jj["ams"].contains("power_on_flag") - || jj["ams"].contains("calibrate_remain_flag")) { - if (ams_user_setting_hold_count > 0) { - ams_user_setting_hold_count--; - } else { - if (jj["ams"].contains("insert_flag")) { - ams_insert_flag = jj["ams"]["insert_flag"].get(); - } - if (jj["ams"].contains("power_on_flag")) { - ams_power_on_flag = jj["ams"]["power_on_flag"].get(); - } - if (jj["ams"].contains("calibrate_remain_flag")) { - ams_calibrate_remain_flag = jj["ams"]["calibrate_remain_flag"].get(); - } + if (jj["ams"].contains("tray_reading_bits")) { + tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get(), nullptr, 16); + ams_support_use_ams = true; } - } - if (ams_exist_bits != last_ams_exist_bits - || last_tray_exist_bits != last_tray_exist_bits - || tray_is_bbl_bits != last_is_bbl_bits - || tray_read_done_bits != last_read_done_bits - || last_ams_version != ams_version) { - is_ams_need_update = true; - } - else { - is_ams_need_update = false; - } - - json j_ams = jj["ams"]["ams"]; - std::set ams_id_set; - for (auto it = amsList.begin(); it != amsList.end(); it++) { - ams_id_set.insert(it->first); - } - for (auto it = j_ams.begin(); it != j_ams.end(); it++) { - if (!it->contains("id")) continue; - std::string ams_id = (*it)["id"].get(); - ams_id_set.erase(ams_id); - Ams* curr_ams = nullptr; - auto ams_it = amsList.find(ams_id); - if (ams_it == amsList.end()) { - Ams* new_ams = new Ams(ams_id); - try { - if (!ams_id.empty()) { - int ams_id_int = atoi(ams_id.c_str()); - new_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false; - } - } - catch (...) { - ; - } - amsList.insert(std::make_pair(ams_id, new_ams)); - // new ams added event - curr_ams = new_ams; - } else { - curr_ams = ams_it->second; + if (jj["ams"].contains("tray_is_bbl_bits")) { + tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get(), nullptr, 16); } - if (!curr_ams) continue; - - if (it->contains("humidity")) { - std::string humidity = (*it)["humidity"].get(); - - try { - curr_ams->humidity = atoi(humidity.c_str()); - } - catch (...) { - ; - } + if (jj["ams"].contains("version")) { + if (jj["ams"]["version"].is_number()) + ams_version = jj["ams"]["version"].get(); } - - - if (it->contains("tray")) { - std::set tray_id_set; - for (auto it = curr_ams->trayList.begin(); it != curr_ams->trayList.end(); it++) { - tray_id_set.insert(it->first); - } - for (auto tray_it = (*it)["tray"].begin(); tray_it != (*it)["tray"].end(); tray_it++) { - if (!tray_it->contains("id")) continue; - std::string tray_id = (*tray_it)["id"].get(); - tray_id_set.erase(tray_id); - // compare tray_list - AmsTray* curr_tray = nullptr; - auto tray_iter = curr_ams->trayList.find(tray_id); - if (tray_iter == curr_ams->trayList.end()) { - AmsTray* new_tray = new AmsTray(tray_id); - curr_ams->trayList.insert(std::make_pair(tray_id, new_tray)); - curr_tray = new_tray; - } - else { - curr_tray = tray_iter->second; - } - if (!curr_tray) continue; - - if (curr_tray->hold_count > 0) { - curr_tray->hold_count--; - continue; - } - - curr_tray->id = (*tray_it)["id"].get(); - if (tray_it->contains("tag_uid")) - curr_tray->tag_uid = (*tray_it)["tag_uid"].get(); - else - curr_tray->tag_uid = "0"; - if (tray_it->contains("tray_info_idx") && tray_it->contains("tray_type")) { - curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); - //std::string type = (*tray_it)["tray_type"].get(); - std::string type = setting_id_to_type(curr_tray->setting_id, (*tray_it)["tray_type"].get()); - if (curr_tray->setting_id == "GFS00") { - curr_tray->type = "PLA-S"; - } - else if (curr_tray->setting_id == "GFS01") { - curr_tray->type = "PA-S"; - } else { - curr_tray->type = type; - } - } else { - curr_tray->setting_id = ""; - curr_tray->type = ""; - } - if (tray_it->contains("tray_sub_brands")) - curr_tray->sub_brands = (*tray_it)["tray_sub_brands"].get(); - else - curr_tray->sub_brands = ""; - if (tray_it->contains("tray_weight")) - curr_tray->weight = (*tray_it)["tray_weight"].get(); - else - curr_tray->weight = ""; - if (tray_it->contains("tray_diameter")) - curr_tray->diameter = (*tray_it)["tray_diameter"].get(); - else - curr_tray->diameter = ""; - if (tray_it->contains("tray_temp")) - curr_tray->temp = (*tray_it)["tray_temp"].get(); - else - curr_tray->temp = ""; - if (tray_it->contains("tray_time")) - curr_tray->time = (*tray_it)["tray_time"].get(); - else - curr_tray->time = ""; - if (tray_it->contains("bed_temp_type")) - curr_tray->bed_temp_type = (*tray_it)["bed_temp_type"].get(); - else - curr_tray->bed_temp_type = ""; - if (tray_it->contains("bed_temp")) - curr_tray->bed_temp = (*tray_it)["bed_temp"].get(); - else - curr_tray->bed_temp = ""; - if (tray_it->contains("nozzle_temp_max")) - curr_tray->nozzle_temp_max = (*tray_it)["nozzle_temp_max"].get(); - else - curr_tray->nozzle_temp_max = ""; - if (tray_it->contains("nozzle_temp_min")) - curr_tray->nozzle_temp_min = (*tray_it)["nozzle_temp_min"].get(); - else - curr_tray->nozzle_temp_min = ""; - if (tray_it->contains("xcam_info")) - curr_tray->xcam_info = (*tray_it)["xcam_info"].get(); - else - curr_tray->xcam_info = ""; - if (tray_it->contains("tray_uuid")) - curr_tray->uuid = (*tray_it)["tray_uuid"].get(); - else - curr_tray->uuid = "0"; - if (tray_it->contains("tray_color")) { - auto color = (*tray_it)["tray_color"].get(); - curr_tray->update_color_from_str(color); - } else { - curr_tray->color = ""; - } - - if (tray_it->contains("ctype")) - curr_tray->ctype = (*tray_it)["ctype"].get(); - else - curr_tray->ctype = 0; - curr_tray->cols.clear(); - if (tray_it->contains("cols")) { - if ((*tray_it)["cols"].is_array()) { - for (auto it = (*tray_it)["cols"].begin(); it != (*tray_it)["cols"].end(); it++) { - curr_tray->cols.push_back(it.value().get()); - } - } - } - - if (tray_it->contains("remain")) { - curr_tray->remain = (*tray_it)["remain"].get(); - } else { - curr_tray->remain = -1; - } - int ams_id_int = 0; - int tray_id_int = 0; + if (jj["ams"].contains("tray_now")) { + this->_parse_tray_now(jj["ams"]["tray_now"].get()); + } + if (jj["ams"].contains("tray_tar")) { + m_tray_tar = jj["ams"]["tray_tar"].get(); + } + if (jj["ams"].contains("ams_rfid_status")) + ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); + if (jj["ams"].contains("humidity")) { + if (jj["ams"]["humidity"].is_string()) { + std::string humidity_str = jj["ams"]["humidity"].get(); try { - if (!ams_id.empty() && !curr_tray->id.empty()) { - ams_id_int = atoi(ams_id.c_str()); - tray_id_int = atoi(curr_tray->id.c_str()); - curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false; + ams_humidity = atoi(humidity_str.c_str()); + } catch (...) { + ; + } + } + } + + if (jj["ams"].contains("insert_flag") || jj["ams"].contains("power_on_flag") + || jj["ams"].contains("calibrate_remain_flag")) { + if (ams_user_setting_hold_count > 0) { + ams_user_setting_hold_count--; + } else { + if (jj["ams"].contains("insert_flag")) { + ams_insert_flag = jj["ams"]["insert_flag"].get(); + } + if (jj["ams"].contains("power_on_flag")) { + ams_power_on_flag = jj["ams"]["power_on_flag"].get(); + } + if (jj["ams"].contains("calibrate_remain_flag")) { + ams_calibrate_remain_flag = jj["ams"]["calibrate_remain_flag"].get(); + } + } + } + if (ams_exist_bits != last_ams_exist_bits + || last_tray_exist_bits != last_tray_exist_bits + || tray_is_bbl_bits != last_is_bbl_bits + || tray_read_done_bits != last_read_done_bits + || last_ams_version != ams_version) { + is_ams_need_update = true; + } + else { + is_ams_need_update = false; + } + + json j_ams = jj["ams"]["ams"]; + std::set ams_id_set; + + for (auto it = amsList.begin(); it != amsList.end(); it++) { + ams_id_set.insert(it->first); + } + for (auto it = j_ams.begin(); it != j_ams.end(); it++) { + if (!it->contains("id")) continue; + std::string ams_id = (*it)["id"].get(); + ams_id_set.erase(ams_id); + Ams* curr_ams = nullptr; + auto ams_it = amsList.find(ams_id); + if (ams_it == amsList.end()) { + Ams* new_ams = new Ams(ams_id); + try { + if (!ams_id.empty()) { + int ams_id_int = atoi(ams_id.c_str()); + new_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false; } } catch (...) { + ; } - if (tray_it->contains("setting_id")) { - curr_tray->filament_setting_id = (*tray_it)["setting_id"].get(); + amsList.insert(std::make_pair(ams_id, new_ams)); + // new ams added event + curr_ams = new_ams; + } else { + curr_ams = ams_it->second; + } + if (!curr_ams) continue; + + if (it->contains("humidity")) { + std::string humidity = (*it)["humidity"].get(); + + try { + curr_ams->humidity = atoi(humidity.c_str()); } - - - auto curr_time = std::chrono::system_clock::now(); - auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); - if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 - || ams_id_int != (extrusion_cali_set_tray_id / 4) - || tray_id_int != (extrusion_cali_set_tray_id % 4)) { - if (tray_it->contains("k")) { - curr_tray->k = (*tray_it)["k"].get(); - } - if (tray_it->contains("n")) { - 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(); + catch (...) { + ; } } - // remove not in trayList - for (auto tray_it = tray_id_set.begin(); tray_it != tray_id_set.end(); tray_it++) { - std::string tray_id = *tray_it; - auto tray = curr_ams->trayList.find(tray_id); - if (tray != curr_ams->trayList.end()) { - curr_ams->trayList.erase(tray_id); - BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id << ", tray_id=" << tray_id; + + + if (it->contains("tray")) { + std::set tray_id_set; + for (auto it = curr_ams->trayList.begin(); it != curr_ams->trayList.end(); it++) { + tray_id_set.insert(it->first); + } + for (auto tray_it = (*it)["tray"].begin(); tray_it != (*it)["tray"].end(); tray_it++) { + if (!tray_it->contains("id")) continue; + std::string tray_id = (*tray_it)["id"].get(); + tray_id_set.erase(tray_id); + // compare tray_list + AmsTray* curr_tray = nullptr; + auto tray_iter = curr_ams->trayList.find(tray_id); + if (tray_iter == curr_ams->trayList.end()) { + AmsTray* new_tray = new AmsTray(tray_id); + curr_ams->trayList.insert(std::make_pair(tray_id, new_tray)); + curr_tray = new_tray; + } + else { + curr_tray = tray_iter->second; + } + if (!curr_tray) continue; + + if (curr_tray->hold_count > 0) { + curr_tray->hold_count--; + continue; + } + + curr_tray->id = (*tray_it)["id"].get(); + if (tray_it->contains("tag_uid")) + curr_tray->tag_uid = (*tray_it)["tag_uid"].get(); + else + curr_tray->tag_uid = "0"; + if (tray_it->contains("tray_info_idx") && tray_it->contains("tray_type")) { + curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); + //std::string type = (*tray_it)["tray_type"].get(); + std::string type = setting_id_to_type(curr_tray->setting_id, (*tray_it)["tray_type"].get()); + if (curr_tray->setting_id == "GFS00") { + curr_tray->type = "PLA-S"; + } + else if (curr_tray->setting_id == "GFS01") { + curr_tray->type = "PA-S"; + } else { + curr_tray->type = type; + } + if (filament_list.find(curr_tray->setting_id) == filament_list.end()) { + wxColour color = *wxWHITE; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + try { + this->command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), "", "", std::string(col_buf), "", 0, 0); + continue; + } catch (...) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and ams_id: " << ams_id << " tray_id" << tray_id; + } + } + } else { + curr_tray->setting_id = ""; + curr_tray->type = ""; + } + if (tray_it->contains("tray_sub_brands")) + curr_tray->sub_brands = (*tray_it)["tray_sub_brands"].get(); + else + curr_tray->sub_brands = ""; + if (tray_it->contains("tray_weight")) + curr_tray->weight = (*tray_it)["tray_weight"].get(); + else + curr_tray->weight = ""; + if (tray_it->contains("tray_diameter")) + curr_tray->diameter = (*tray_it)["tray_diameter"].get(); + else + curr_tray->diameter = ""; + if (tray_it->contains("tray_temp")) + curr_tray->temp = (*tray_it)["tray_temp"].get(); + else + curr_tray->temp = ""; + if (tray_it->contains("tray_time")) + curr_tray->time = (*tray_it)["tray_time"].get(); + else + curr_tray->time = ""; + if (tray_it->contains("bed_temp_type")) + curr_tray->bed_temp_type = (*tray_it)["bed_temp_type"].get(); + else + curr_tray->bed_temp_type = ""; + if (tray_it->contains("bed_temp")) + curr_tray->bed_temp = (*tray_it)["bed_temp"].get(); + else + curr_tray->bed_temp = ""; + if (tray_it->contains("tray_color")) { + auto color = (*tray_it)["tray_color"].get(); + curr_tray->update_color_from_str(color); + } else { + curr_tray->color = ""; + } + if (tray_it->contains("nozzle_temp_max")) { + curr_tray->nozzle_temp_max = (*tray_it)["nozzle_temp_max"].get(); + } + else + curr_tray->nozzle_temp_max = ""; + if (tray_it->contains("nozzle_temp_min")) + curr_tray->nozzle_temp_min = (*tray_it)["nozzle_temp_min"].get(); + else + curr_tray->nozzle_temp_min = ""; + if (curr_tray->nozzle_temp_min != "" && curr_tray->nozzle_temp_max != "") { + try { + std::string preset_setting_id; + bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, curr_tray->setting_id, + curr_tray->tag_uid, curr_tray->nozzle_temp_min, curr_tray->nozzle_temp_max, preset_setting_id); + if (!is_equation) { + command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), curr_tray->setting_id, preset_setting_id, + curr_tray->color, curr_tray->type, + std::stoi(curr_tray->nozzle_temp_min), + std::stoi(curr_tray->nozzle_temp_max)); + } + } catch (...) { + BOOST_LOG_TRIVIAL(info) << "check fail and curr_tray ams_id" << ams_id << " curr_tray tray_id"<contains("xcam_info")) + curr_tray->xcam_info = (*tray_it)["xcam_info"].get(); + else + curr_tray->xcam_info = ""; + if (tray_it->contains("tray_uuid")) + curr_tray->uuid = (*tray_it)["tray_uuid"].get(); + else + curr_tray->uuid = "0"; + + if (tray_it->contains("ctype")) + curr_tray->ctype = (*tray_it)["ctype"].get(); + else + curr_tray->ctype = 0; + curr_tray->cols.clear(); + if (tray_it->contains("cols")) { + if ((*tray_it)["cols"].is_array()) { + for (auto it = (*tray_it)["cols"].begin(); it != (*tray_it)["cols"].end(); it++) { + curr_tray->cols.push_back(it.value().get()); + } + } + } + + if (tray_it->contains("remain")) { + curr_tray->remain = (*tray_it)["remain"].get(); + } else { + curr_tray->remain = -1; + } + int ams_id_int = 0; + int tray_id_int = 0; + try { + if (!ams_id.empty() && !curr_tray->id.empty()) { + ams_id_int = atoi(ams_id.c_str()); + tray_id_int = atoi(curr_tray->id.c_str()); + curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false; + } + } + catch (...) { + } + if (tray_it->contains("setting_id")) { + curr_tray->filament_setting_id = (*tray_it)["setting_id"].get(); + } + auto curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); + if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 + || ams_id_int != (extrusion_cali_set_tray_id / 4) + || tray_id_int != (extrusion_cali_set_tray_id % 4)) { + if (tray_it->contains("k")) { + curr_tray->k = (*tray_it)["k"].get(); + } + if (tray_it->contains("n")) { + 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++) { + std::string tray_id = *tray_it; + auto tray = curr_ams->trayList.find(tray_id); + if (tray != curr_ams->trayList.end()) { + curr_ams->trayList.erase(tray_id); + BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id << ", tray_id=" << tray_id; + } } } } - } - // remove not in amsList - for (auto it = ams_id_set.begin(); it != ams_id_set.end(); it++) { - std::string ams_id = *it; - auto ams = amsList.find(ams_id); - if (ams != amsList.end()) { - BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id; - amsList.erase(ams_id); + // remove not in amsList + for (auto it = ams_id_set.begin(); it != ams_id_set.end(); it++) { + std::string ams_id = *it; + auto ams = amsList.find(ams_id); + if (ams != amsList.end()) { + BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id; + amsList.erase(ams_id); + } } } } } /* vitrual tray*/ - try { - if (jj.contains("vt_tray")) { - if (jj["vt_tray"].contains("id")) - vt_tray.id = jj["vt_tray"]["id"].get(); - auto curr_time = std::chrono::system_clock::now(); - auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); - if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 - || extrusion_cali_set_tray_id != VIRTUAL_TRAY_ID) { - if (jj["vt_tray"].contains("k")) - vt_tray.k = jj["vt_tray"]["k"].get(); - if (jj["vt_tray"].contains("n")) - vt_tray.n = jj["vt_tray"]["n"].get(); - } - ams_support_virtual_tray = true; + if (!key_field_only) { + try { + if (jj.contains("vt_tray")) { + if (jj["vt_tray"].contains("id")) + vt_tray.id = jj["vt_tray"]["id"].get(); + auto curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); + if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 + || extrusion_cali_set_tray_id != VIRTUAL_TRAY_ID) { + if (jj["vt_tray"].contains("k")) + vt_tray.k = jj["vt_tray"]["k"].get(); + if (jj["vt_tray"].contains("n")) + vt_tray.n = jj["vt_tray"]["n"].get(); + } + ams_support_virtual_tray = true; - if (vt_tray.hold_count > 0) { - vt_tray.hold_count--; - } else { - if (jj["vt_tray"].contains("tag_uid")) - vt_tray.tag_uid = jj["vt_tray"]["tag_uid"].get(); - else - vt_tray.tag_uid = "0"; - if (jj["vt_tray"].contains("tray_info_idx") && jj["vt_tray"].contains("tray_type")) { - vt_tray.setting_id = jj["vt_tray"]["tray_info_idx"].get(); - //std::string type = jj["vt_tray"]["tray_type"].get(); - std::string type = setting_id_to_type(vt_tray.setting_id, jj["vt_tray"]["tray_type"].get()); - if (vt_tray.setting_id == "GFS00") { - vt_tray.type = "PLA-S"; - } - else if (vt_tray.setting_id == "GFS01") { - vt_tray.type = "PA-S"; - } - else { - vt_tray.type = type; - } - } - else { - vt_tray.setting_id = ""; - vt_tray.type = ""; - } - if (jj["vt_tray"].contains("tray_sub_brands")) - vt_tray.sub_brands = jj["vt_tray"]["tray_sub_brands"].get(); - else - vt_tray.sub_brands = ""; - if (jj["vt_tray"].contains("tray_weight")) - vt_tray.weight = jj["vt_tray"]["tray_weight"].get(); - else - vt_tray.weight = ""; - if (jj["vt_tray"].contains("tray_diameter")) - vt_tray.diameter = jj["vt_tray"]["tray_diameter"].get(); - else - vt_tray.diameter = ""; - if (jj["vt_tray"].contains("tray_temp")) - vt_tray.temp = jj["vt_tray"]["tray_temp"].get(); - else - vt_tray.temp = ""; - if (jj["vt_tray"].contains("tray_time")) - vt_tray.time = jj["vt_tray"]["tray_time"].get(); - else - vt_tray.time = ""; - if (jj["vt_tray"].contains("bed_temp_type")) - vt_tray.bed_temp_type = jj["vt_tray"]["bed_temp_type"].get(); - else - vt_tray.bed_temp_type = ""; - if (jj["vt_tray"].contains("bed_temp")) - vt_tray.bed_temp = jj["vt_tray"]["bed_temp"].get(); - else - vt_tray.bed_temp = ""; - if (jj["vt_tray"].contains("nozzle_temp_max")) - vt_tray.nozzle_temp_max = jj["vt_tray"]["nozzle_temp_max"].get(); - else - vt_tray.nozzle_temp_max = ""; - if (jj["vt_tray"].contains("nozzle_temp_min")) - vt_tray.nozzle_temp_min = jj["vt_tray"]["nozzle_temp_min"].get(); - else - vt_tray.nozzle_temp_min = ""; - if (jj["vt_tray"].contains("xcam_info")) - vt_tray.xcam_info = jj["vt_tray"]["xcam_info"].get(); - else - vt_tray.xcam_info = ""; - if (jj["vt_tray"].contains("tray_uuid")) - vt_tray.uuid = jj["vt_tray"]["tray_uuid"].get(); - else - vt_tray.uuid = "0"; - if (jj["vt_tray"].contains("tray_color")) { - auto color = jj["vt_tray"]["tray_color"].get(); - vt_tray.update_color_from_str(color); - } - else { - 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()) { - for (auto it = jj["vt_tray"].begin(); it != jj["vt_tray"].end(); it++) { - vt_tray.cols.push_back(it.value().get()); + if (vt_tray.hold_count > 0) { + vt_tray.hold_count--; + } else { + if (jj["vt_tray"].contains("tag_uid")) + vt_tray.tag_uid = jj["vt_tray"]["tag_uid"].get(); + else + vt_tray.tag_uid = "0"; + if (jj["vt_tray"].contains("tray_info_idx") && jj["vt_tray"].contains("tray_type")) { + vt_tray.setting_id = jj["vt_tray"]["tray_info_idx"].get(); + //std::string type = jj["vt_tray"]["tray_type"].get(); + std::string type = setting_id_to_type(vt_tray.setting_id, jj["vt_tray"]["tray_type"].get()); + if (vt_tray.setting_id == "GFS00") { + vt_tray.type = "PLA-S"; + } + else if (vt_tray.setting_id == "GFS01") { + vt_tray.type = "PA-S"; + } + else { + vt_tray.type = type; + } + if (filament_list.find(vt_tray.setting_id) == filament_list.end()) { + wxColour color = *wxWHITE; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + try { + BOOST_LOG_TRIVIAL(info) << "no filament_id in filament_list and reset vt_tray and the filament_id is: " << vt_tray.setting_id; + this->command_ams_filament_settings(255, std::stoi(vt_tray.id), "", "", std::string(col_buf), "", 0, 0); + } catch (...) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and tray_id" << vt_tray.id; + } } } - } + else { + vt_tray.setting_id = ""; + vt_tray.type = ""; + } + if (jj["vt_tray"].contains("tray_sub_brands")) + vt_tray.sub_brands = jj["vt_tray"]["tray_sub_brands"].get(); + else + vt_tray.sub_brands = ""; + if (jj["vt_tray"].contains("tray_weight")) + vt_tray.weight = jj["vt_tray"]["tray_weight"].get(); + else + vt_tray.weight = ""; + if (jj["vt_tray"].contains("tray_diameter")) + vt_tray.diameter = jj["vt_tray"]["tray_diameter"].get(); + else + vt_tray.diameter = ""; + if (jj["vt_tray"].contains("tray_temp")) + vt_tray.temp = jj["vt_tray"]["tray_temp"].get(); + else + vt_tray.temp = ""; + if (jj["vt_tray"].contains("tray_time")) + vt_tray.time = jj["vt_tray"]["tray_time"].get(); + else + vt_tray.time = ""; + if (jj["vt_tray"].contains("bed_temp_type")) + vt_tray.bed_temp_type = jj["vt_tray"]["bed_temp_type"].get(); + else + vt_tray.bed_temp_type = ""; + if (jj["vt_tray"].contains("bed_temp")) + vt_tray.bed_temp = jj["vt_tray"]["bed_temp"].get(); + else + vt_tray.bed_temp = ""; + if (jj["vt_tray"].contains("tray_color")) { + auto color = jj["vt_tray"]["tray_color"].get(); + vt_tray.update_color_from_str(color); + } else { + vt_tray.color = ""; + } + if (jj["vt_tray"].contains("nozzle_temp_max")) + vt_tray.nozzle_temp_max = jj["vt_tray"]["nozzle_temp_max"].get(); + else + vt_tray.nozzle_temp_max = ""; + if (jj["vt_tray"].contains("nozzle_temp_min")) + vt_tray.nozzle_temp_min = jj["vt_tray"]["nozzle_temp_min"].get(); + else + vt_tray.nozzle_temp_min = ""; + if (vt_tray.nozzle_temp_min != "" && vt_tray.nozzle_temp_max != "") { + try { + std::string preset_setting_id; + bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, vt_tray.setting_id, vt_tray.tag_uid, + vt_tray.nozzle_temp_min, vt_tray.nozzle_temp_max, preset_setting_id); + if (!is_equation) { + command_ams_filament_settings(255, std::stoi(vt_tray.id), vt_tray.setting_id, preset_setting_id, vt_tray.color, vt_tray.type, + std::stoi(vt_tray.nozzle_temp_min), std::stoi(vt_tray.nozzle_temp_max)); + } + } + catch(...) { + BOOST_LOG_TRIVIAL(info) << "check fail and vt_tray.id" << vt_tray.id; + } + + } + if (jj["vt_tray"].contains("xcam_info")) + vt_tray.xcam_info = jj["vt_tray"]["xcam_info"].get(); + else + vt_tray.xcam_info = ""; + if (jj["vt_tray"].contains("tray_uuid")) + vt_tray.uuid = jj["vt_tray"]["tray_uuid"].get(); + else + vt_tray.uuid = "0"; - if (jj["vt_tray"].contains("remain")) { - vt_tray.remain = jj["vt_tray"]["remain"].get(); - } - else { - vt_tray.remain = -1; + 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()) { + for (auto it = jj["vt_tray"].begin(); it != jj["vt_tray"].end(); it++) { + vt_tray.cols.push_back(it.value().get()); + } + } + } + + if (jj["vt_tray"].contains("remain")) { + vt_tray.remain = jj["vt_tray"]["remain"].get(); + } + else { + vt_tray.remain = -1; + } } + } else { + ams_support_virtual_tray = false; + is_support_extrusion_cali = false; } - } else { - ams_support_virtual_tray = false; - is_support_extrusion_cali = false; } - } - catch (...) { - ; + catch (...) { + ; + } } #pragma endregion @@ -4060,10 +4299,10 @@ int MachineObject::parse_json(std::string payload) result = jj["result"].get(); if (result == "FAIL") { wxString text = _L("Failed to start printing job"); - GUI::wxGetApp().show_dialog(text); + GUI::wxGetApp().push_notification(text); } } - } else if (jj["command"].get() == "ams_filament_setting") { + } else if (jj["command"].get() == "ams_filament_setting" && !key_field_only) { // BBS trigger ams UI update ams_version = -1; @@ -4116,7 +4355,7 @@ int MachineObject::parse_json(std::string payload) } } } - } else if (jj["command"].get() == "xcam_control_set") { + } else if (jj["command"].get() == "xcam_control_set" && !key_field_only) { if (jj.contains("module_name")) { if (jj.contains("enable") || jj.contains("control")) { bool enable = false; @@ -4176,27 +4415,24 @@ int MachineObject::parse_json(std::string payload) 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" || reason == "nozzle_diameter is not supported") { - info = _L("This calibration does not support the currently selected nozzle diameter"); - } - else if (reason == "invalid handle_flowrate_cali param") { - info = _L("Current flowrate cali param is invalid"); - } - else if (reason == "nozzle_diameter is not matched") { - info = _L("Selected diameter and machine diameter do not match"); - } - else if (reason == "generate auto filament cali gcode failure") { - info = _L("Failed to generate cali gcode"); - } - 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; - }); + wxString info = ""; + if (reason == "invalid nozzle_diameter" || reason == "nozzle_diameter is not supported") { + info = _L("This calibration does not support the currently selected nozzle diameter"); + } + else if (reason == "invalid handle_flowrate_cali param") { + info = _L("Current flowrate cali param is invalid"); + } + else if (reason == "nozzle_diameter is not matched") { + info = _L("Selected diameter and machine diameter do not match"); + } + else if (reason == "generate auto filament cali gcode failure") { + info = _L("Failed to generate cali gcode"); + } + else { + info = reason; + } + GUI::wxGetApp().push_notification(info, _L("Calibration error"), UserNotificationStyle::UNS_WARNING_CONFIRM); + BOOST_LOG_TRIVIAL(trace) << cali_mode << " result fail, reason = " << reason; } } } else if (jj["command"].get() == "extrusion_cali_set") { @@ -4399,7 +4635,7 @@ int MachineObject::parse_json(std::string payload) BOOST_LOG_TRIVIAL(info) << "no pa calib result"; } } - else if (jj["command"].get() == "flowrate_get_result") { + else if (jj["command"].get() == "flowrate_get_result" && !key_field_only) { this->reset_flow_rate_cali_result(); get_flow_calib_result = true; @@ -4430,44 +4666,47 @@ int MachineObject::parse_json(std::string payload) } } } - - try { - if (j.contains("camera")) { - if (j["camera"].contains("command")) { - if (j["camera"]["command"].get() == "ipcam_timelapse") { - if (j["camera"]["control"].get() == "enable") - this->camera_timelapse = true; - if (j["camera"]["control"].get() == "disable") - this->camera_timelapse = false; - BOOST_LOG_TRIVIAL(info) << "ack of timelapse = " << camera_timelapse; - } else if (j["camera"]["command"].get() == "ipcam_record_set") { - if (j["camera"]["control"].get() == "enable") - this->camera_recording_when_printing = true; - if (j["camera"]["control"].get() == "disable") - this->camera_recording_when_printing = false; - BOOST_LOG_TRIVIAL(info) << "ack of ipcam_record_set " << camera_recording_when_printing; - } else if (j["camera"]["command"].get() == "ipcam_resolution_set") { - this->camera_resolution = j["camera"]["resolution"].get(); - BOOST_LOG_TRIVIAL(info) << "ack of resolution = " << camera_resolution; + if (!key_field_only) { + try { + if (j.contains("camera")) { + if (j["camera"].contains("command")) { + if (j["camera"]["command"].get() == "ipcam_timelapse") { + if (j["camera"]["control"].get() == "enable") + this->camera_timelapse = true; + if (j["camera"]["control"].get() == "disable") + this->camera_timelapse = false; + BOOST_LOG_TRIVIAL(info) << "ack of timelapse = " << camera_timelapse; + } else if (j["camera"]["command"].get() == "ipcam_record_set") { + if (j["camera"]["control"].get() == "enable") + this->camera_recording_when_printing = true; + if (j["camera"]["control"].get() == "disable") + this->camera_recording_when_printing = false; + BOOST_LOG_TRIVIAL(info) << "ack of ipcam_record_set " << camera_recording_when_printing; + } else if (j["camera"]["command"].get() == "ipcam_resolution_set") { + this->camera_resolution = j["camera"]["resolution"].get(); + BOOST_LOG_TRIVIAL(info) << "ack of resolution = " << camera_resolution; + } } } - } - } catch (...) {} - - // upgrade - try { - if (j.contains("upgrade")) { - if (j["upgrade"].contains("command")) { - if (j["upgrade"]["command"].get() == "upgrade_confirm") { - this->upgrade_display_state = UpgradingInProgress; - upgrade_display_hold_count = HOLD_COUNT_MAX; - BOOST_LOG_TRIVIAL(info) << "ack of upgrade_confirm"; - } - } - } + } catch (...) {} } - catch (...) { - ; + + if (!key_field_only) { + // upgrade + try { + if (j.contains("upgrade")) { + if (j["upgrade"].contains("command")) { + if (j["upgrade"]["command"].get() == "upgrade_confirm") { + this->upgrade_display_state = UpgradingInProgress; + upgrade_display_hold_count = HOLD_COUNT_MAX; + BOOST_LOG_TRIVIAL(info) << "ack of upgrade_confirm"; + } + } + } + } + catch (...) { + ; + } } // event info @@ -4483,19 +4722,17 @@ int MachineObject::parse_json(std::string payload) } catch (...) {} - if (m_active_state == Active && !module_vers.empty() && check_version_valid() + if (!key_field_only) { + 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"); + m_active_state = UpdateToDate; + parse_version_func(); + if (is_support_tunnel_mqtt && connection_type() != "lan") { + m_agent->start_subscribe("tunnel"); + } + parse_state_changed_event(); } - } else if (m_active_state == UpdateToDate && is_camera_busy_off()) { - m_active_state = Active; - m_agent->stop_subscribe("tunnel"); - } - - parse_state_changed_event(); + } } catch (...) { BOOST_LOG_TRIVIAL(trace) << "parse_json failed! dev_id=" << this->dev_id <<", payload = " << payload; @@ -4839,6 +5076,24 @@ bool MachineObject::is_firmware_info_valid() return m_firmware_valid; } +std::string MachineObject::get_string_from_fantype(FanType type) +{ + switch (type) { + case FanType::COOLING_FAN: + return "cooling_fan"; + case FanType::BIG_COOLING_FAN: + return "big_cooling_fan"; + case FanType::CHAMBER_FAN: + return "chamber_fan"; + default: + return ""; + } + return ""; +} + +bool DeviceManager::EnableMultiMachine = false; +bool DeviceManager::key_field_only = false; + DeviceManager::DeviceManager(NetworkAgent* agent) { m_agent = agent; @@ -4951,12 +5206,12 @@ void DeviceManager::on_machine_alive(std::string json_str) if (obj->dev_ip.compare(dev_ip) != 0) { if ( connection_name.empty() ) { - BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << obj->dev_ip << " to " << dev_ip; + BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << Slic3r::GUI::wxGetApp().format_IP(obj->dev_ip) << " to " << Slic3r::GUI::wxGetApp().format_IP(dev_ip); obj->dev_ip = dev_ip; } else { if ( obj->dev_connection_name.empty() || obj->dev_connection_name.compare(connection_name) == 0) { - BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << obj->dev_ip << " to " << dev_ip << " connection_name is " << connection_name; + BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << Slic3r::GUI::wxGetApp().format_IP(obj->dev_ip) << " to " << Slic3r::GUI::wxGetApp().format_IP(dev_ip) << " connection_name is " << connection_name; if(obj->dev_connection_name.empty()){obj->dev_connection_name = connection_name;} obj->dev_ip = dev_ip; } @@ -5012,7 +5267,7 @@ void DeviceManager::on_machine_alive(std::string json_str) }*/ - BOOST_LOG_TRIVIAL(debug) << "SsdpDiscovery::New Machine, ip = " << dev_ip << ", printer_name= " << dev_name << ", printer_type = " << printer_type_str << ", signal = " << printer_signal; + BOOST_LOG_TRIVIAL(info) << "SsdpDiscovery::New Machine, ip = " << Slic3r::GUI::wxGetApp().format_IP(dev_ip) << ", printer_name= " << dev_name << ", printer_type = " << printer_type_str << ", signal = " << printer_signal; } } catch (...) { @@ -5236,6 +5491,54 @@ MachineObject* DeviceManager::get_selected_machine() return nullptr; } +void DeviceManager::add_user_subscribe() +{ + /* user machine */ + std::vector dev_list; + for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { + dev_list.push_back(it->first); + BOOST_LOG_TRIVIAL(trace) << "add_user_subscribe: " << it->first; + } + m_agent->add_subscribe(dev_list); +} + +void DeviceManager::del_user_subscribe() +{ + /* user machine */ + std::vector dev_list; + for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { + dev_list.push_back(it->first); + BOOST_LOG_TRIVIAL(trace) << "del_user_subscribe: " << it->first; + } + m_agent->del_subscribe(dev_list); +} + +void DeviceManager::subscribe_device_list(std::vector dev_list) +{ + std::vector unsub_list; + subscribe_list_cache.clear(); + for (auto& it : subscribe_list_cache) { + if (it != selected_machine) { + unsub_list.push_back(it); + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: unsub dev id = " << it; + } + } + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: unsub_list size = " << unsub_list.size(); + + if (!selected_machine.empty()) { + subscribe_list_cache.push_back(selected_machine); + } + for (auto& it : dev_list) { + subscribe_list_cache.push_back(it); + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: sub dev id = " << it; + } + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: sub_list size = " << subscribe_list_cache.size(); + if (!unsub_list.empty()) + m_agent->del_subscribe(unsub_list); + if (!dev_list.empty()) + m_agent->add_subscribe(subscribe_list_cache); +} + std::map DeviceManager::get_my_machine_list() { std::map result; @@ -5260,6 +5563,19 @@ std::map DeviceManager::get_my_machine_list() return result; } +std::map DeviceManager::get_my_cloud_machine_list() +{ + std::map result; + + for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { + if (!it->second) + continue; + if (!it->second->is_lan_mode_printer()) + result.emplace(*it); + } + return result; +} + std::string DeviceManager::get_first_online_user_machine() { for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { if (it->second && it->second->is_online()) { @@ -5450,7 +5766,7 @@ std::vector DeviceManager::get_resolution_supported(std::string typ std::vector resolution_supported; std::string config_file = Slic3r::resources_dir() + "/printers/" + type_str + ".json"; - std::ifstream json_file(config_file.c_str()); + boost::nowide::ifstream json_file(config_file.c_str()); try { json jj; if (json_file.is_open()) { @@ -5472,7 +5788,7 @@ std::vector DeviceManager::get_compatible_machine(std::string type_ { std::vector compatible_machine; std::string config_file = Slic3r::resources_dir() + "/printers/" + type_str + ".json"; - std::ifstream json_file(config_file.c_str()); + boost::nowide::ifstream json_file(config_file.c_str()); try { json jj; if (json_file.is_open()) { @@ -5491,10 +5807,12 @@ std::vector DeviceManager::get_compatible_machine(std::string type_ } -bool DeviceManager::load_filaments_blacklist_config(std::string config_file) +bool DeviceManager::load_filaments_blacklist_config() { filaments_blacklist = json::object(); - std::ifstream json_file(config_file.c_str()); + + std::string config_file = Slic3r::resources_dir() + "/printers/filaments_blacklist.json"; + boost::nowide::ifstream json_file(config_file.c_str()); try { if (json_file.is_open()) { @@ -5593,4 +5911,10 @@ std::string DeviceManager::load_gcode(std::string type_str, std::string gcode_fi return ""; } +void change_the_opacity(wxColour& colour) +{ + if (colour.Alpha() == 255) { + colour = wxColour(colour.Red(), colour.Green(), colour.Blue(), 254); + } +} } // namespace Slic3r diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 1c3c5881b9..be177bba5a 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -133,6 +133,7 @@ enum ManualPaCaliMethod { PA_PATTERN, }; + struct RatingInfo { bool request_successful; int http_code; @@ -289,6 +290,7 @@ public: unsigned reserved; HMSMessageLevel msg_level = HMS_UNKNOWN; int msg_code = 0; + bool already_read = false; bool parse_hms_info(unsigned attr, unsigned code); std::string get_long_error_code(); @@ -323,6 +325,9 @@ private: std::string access_code; std::string user_access_code; + // type, time stamp, delay + std::vector> message_delay; + public: enum LIGHT_EFFECT { @@ -486,6 +491,7 @@ public: bool ams_power_on_flag { false }; bool ams_calibrate_remain_flag { false }; bool ams_auto_switch_filament_flag { false }; + bool ams_air_print_status { false }; bool ams_support_use_ams { false }; bool ams_support_virtual_tray { true }; int ams_humidity; @@ -520,6 +526,7 @@ public: bool can_unload_filament(); bool is_support_ams_mapping(); + void get_ams_colors(std::vector& ams_colors); int ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id = std::vector()); bool is_valid_mapping_result(std::vector& result, bool check_empty_slot = false); // exceed index start with 0 @@ -567,7 +574,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 }; + PrinterFirmwareType lifecycle { PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION }; std::string upgrade_progress; std::string upgrade_message; std::string upgrade_status; @@ -613,6 +620,7 @@ public: int curr_layer = 0; int total_layers = 0; bool is_support_layer_num { false }; + bool nozzle_blob_detection_enabled{ false }; int cali_version = -1; float cali_selected_nozzle_dia { 0.0 }; @@ -622,6 +630,7 @@ public: std::vector selected_cali_preset; float cache_flow_ratio { 0.0 }; bool cali_finished = true; + FlowRatioCalibrationType flow_ratio_calibration_type = FlowRatioCalibrationType::COMPLETE_CALIBRATION; ManualPaCaliMethod manual_pa_cali_method = ManualPaCaliMethod::PA_LINE; bool has_get_pa_calib_tab{ false }; @@ -694,6 +703,7 @@ public: std::string tutk_state; enum LiveviewLocal { LVL_None, + LVL_Disable, LVL_Local, LVL_Rtsps, LVL_Rtsp @@ -704,6 +714,8 @@ public: bool file_model_download{false}; bool virtual_camera{false}; + int nozzle_setting_hold_count = 0; + bool xcam_ai_monitoring{ false }; int xcam_ai_monitoring_hold_count = 0; std::string xcam_ai_monitoring_sensitivity; @@ -748,6 +760,8 @@ public: bool is_support_wait_sending_finish{false}; bool is_support_user_preset{false}; bool is_support_p1s_plus{false}; + bool is_support_nozzle_blob_detection{false}; + bool is_support_air_print_detection{false}; int nozzle_max_temperature = -1; int bed_temperature_limit = -1; @@ -838,6 +852,7 @@ public: int command_ams_user_settings(int ams_id, bool start_read_opt, bool tray_read_opt, bool remain_flag = false); int command_ams_user_settings(int ams_id, AmsOptionType op, bool value); int command_ams_switch_filament(bool switch_filament); + int command_ams_air_print_detect(bool air_print_detect); int command_ams_calibrate(int ams_id); int command_ams_filament_settings(int ams_id, int tray_id, std::string filament_id, std::string setting_id, std::string tray_color, std::string tray_type, int nozzle_temp_min, int nozzle_temp_max); int command_ams_select_tray(std::string tray_id); @@ -862,6 +877,8 @@ public: // set print option int command_set_printing_option(bool auto_recovery); + int command_nozzle_blob_detect(bool nozzle_blob_detect); + // axis string is X, Y, Z, E int command_axis_control(std::string axis, double unit = 1.0f, double input_val = 1.0f, int speed = 3000); @@ -926,7 +943,7 @@ public: int publish_json(std::string json_str, int qos = 0); int cloud_publish_json(std::string json_str, int qos = 0); int local_publish_json(std::string json_str, int qos = 0); - int parse_json(std::string payload); + int parse_json(std::string payload, bool key_filed_only = false); int publish_gcode(std::string gcode_str); std::string setting_id_to_type(std::string setting_id, std::string tray_type); @@ -940,14 +957,16 @@ public: bool m_firmware_thread_started { false }; void get_firmware_info(); bool is_firmware_info_valid(); + std::string get_string_from_fantype(FanType type); }; class DeviceManager { private: NetworkAgent* m_agent { nullptr }; - public: + static bool EnableMultiMachine; + DeviceManager(NetworkAgent* agent = nullptr); ~DeviceManager(); void set_agent(NetworkAgent* agent); @@ -972,9 +991,14 @@ public: bool set_selected_machine(std::string dev_id, bool need_disconnect = false); MachineObject* get_selected_machine(); + void add_user_subscribe(); + void del_user_subscribe(); + + void subscribe_device_list(std::vector dev_list); /* return machine has access code and user machine if login*/ std::map get_my_machine_list(); + std::map get_my_cloud_machine_list(); std::string get_first_online_user_machine(); void modify_device_name(std::string dev_id, std::string dev_name); void update_user_machine_list_info(); @@ -991,6 +1015,11 @@ public: std::map get_local_machine_list(); void load_last_machine(); + std::vector subscribe_list_cache; + + static void set_key_field_parsing(bool enable) { DeviceManager::key_field_only = enable; } + + static bool key_field_only; static json function_table; static json filaments_blacklist; @@ -1026,11 +1055,13 @@ public: static bool get_printer_is_enclosed(std::string type_str); static std::vector get_resolution_supported(std::string type_str); static std::vector get_compatible_machine(std::string type_str); - static bool load_filaments_blacklist_config(std::string config_file); + static bool load_filaments_blacklist_config(); 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); }; +// change the opacity +void change_the_opacity(wxColour& colour); } // namespace Slic3r #endif // slic3r_DeviceManager_hpp_ diff --git a/src/slic3r/GUI/Downloader.cpp b/src/slic3r/GUI/Downloader.cpp new file mode 100644 index 0000000000..25e160f24d --- /dev/null +++ b/src/slic3r/GUI/Downloader.cpp @@ -0,0 +1,256 @@ +#include "Downloader.hpp" +#include "GUI_App.hpp" +#include "NotificationManager.hpp" +#include "format.hpp" +#include "MainFrame.hpp" + +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +namespace { +void open_folder(const std::string& path) +{ + // Code taken from NotificationManager.cpp + + // Execute command to open a file explorer, platform dependent. + // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. + +#ifdef _WIN32 + const wxString widepath = from_u8(path); + const wchar_t* argv[] = { L"explorer", widepath.GetData(), nullptr }; + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); +#elif __APPLE__ + const char* argv[] = { "open", path.data(), nullptr }; + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); +#else + const char* argv[] = { "xdg-open", path.data(), nullptr }; + + // Check if we're running in an AppImage container, if so, we need to remove AppImage's env vars, + // because they may mess up the environment expected by the file manager. + // Mostly this is about LD_LIBRARY_PATH, but we remove a few more too for good measure. + if (wxGetEnv("APPIMAGE", nullptr)) { + // We're running from AppImage + wxEnvVariableHashMap env_vars; + wxGetEnvMap(&env_vars); + + env_vars.erase("APPIMAGE"); + env_vars.erase("APPDIR"); + env_vars.erase("LD_LIBRARY_PATH"); + env_vars.erase("LD_PRELOAD"); + env_vars.erase("UNION_PRELOAD"); + + wxExecuteEnv exec_env; + exec_env.env = std::move(env_vars); + + wxString owd; + if (wxGetEnv("OWD", &owd)) { + // This is the original work directory from which the AppImage image was run, + // set it as CWD for the child process: + exec_env.cwd = std::move(owd); + } + + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); + } + else { + // Looks like we're NOT running from AppImage, we'll make no changes to the environment. + ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); + } +#endif +} + +std::string filename_from_url(const std::string& url) +{ + // TODO: can it be done with curl? + size_t slash = url.find_last_of("/"); + if (slash == std::string::npos && slash != url.size() - 1) + return {}; + return url.substr(slash + 1, url.size() - slash + 1); +} +} + +Download::Download(int ID, std::string url, wxEvtHandler* evt_handler, const boost::filesystem::path& dest_folder) + : m_id(ID) + , m_filename(filename_from_url(url)) + , m_dest_folder(dest_folder) +{ + assert(boost::filesystem::is_directory(dest_folder)); + m_final_path = dest_folder / m_filename; + m_file_get = std::make_shared(ID, std::move(url), m_filename, evt_handler, dest_folder); +} + +void Download::start() +{ + m_state = DownloadState::DownloadOngoing; + m_file_get->get(); +} +void Download::cancel() +{ + m_state = DownloadState::DownloadStopped; + m_file_get->cancel(); +} +void Download::pause() +{ + //assert(m_state == DownloadState::DownloadOngoing); + // if instead of assert - it can happen that user clicks on pause several times before the pause happens + if (m_state != DownloadState::DownloadOngoing) + return; + m_state = DownloadState::DownloadPaused; + m_file_get->pause(); +} +void Download::resume() +{ + //assert(m_state == DownloadState::DownloadPaused); + if (m_state != DownloadState::DownloadPaused) + return; + m_state = DownloadState::DownloadOngoing; + m_file_get->resume(); +} + + +Downloader::Downloader() + : wxEvtHandler() +{ + //Bind(EVT_DWNLDR_FILE_COMPLETE, [](const wxCommandEvent& evt) {}); + //Bind(EVT_DWNLDR_FILE_PROGRESS, [](const wxCommandEvent& evt) {}); + //Bind(EVT_DWNLDR_FILE_ERROR, [](const wxCommandEvent& evt) {}); + //Bind(EVT_DWNLDR_FILE_NAME_CHANGE, [](const wxCommandEvent& evt) {}); + + Bind(EVT_DWNLDR_FILE_COMPLETE, &Downloader::on_complete, this); + Bind(EVT_DWNLDR_FILE_PROGRESS, &Downloader::on_progress, this); + Bind(EVT_DWNLDR_FILE_ERROR, &Downloader::on_error, this); + Bind(EVT_DWNLDR_FILE_NAME_CHANGE, &Downloader::on_name_change, this); + Bind(EVT_DWNLDR_FILE_PAUSED, &Downloader::on_paused, this); + Bind(EVT_DWNLDR_FILE_CANCELED, &Downloader::on_canceled, this); +} + +void Downloader::start_download(const std::string& full_url) +{ + assert(m_initialized); + + // Orca: Move to the 3D view + MainFrame* mainframe = wxGetApp().mainframe; + Plater* plater = wxGetApp().plater(); + + mainframe->Freeze(); + mainframe->select_tab((size_t)MainFrame::TabPosition::tp3DEditor); + plater->select_view_3D("3D"); + plater->select_view("plate"); + plater->get_current_canvas3D()->zoom_to_bed(); + mainframe->Thaw(); + + // Orca: Replace PS workaround for "mysterious slash" with a more dynamic approach + // Windows seems to have fixed the issue and this provides backwards compatability for those it still affects + boost::regex re(R"(^(orcaslicer|prusaslicer|bambustudio|cura):\/\/open[\/]?\?file=)", boost::regbase::icase); + boost::smatch results; + + if (!boost::regex_search(full_url, results, re)) { + BOOST_LOG_TRIVIAL(error) << "Could not start download due to wrong URL: " << full_url; + // Orca: show error + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + ntf_mngr->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::ErrorNotificationLevel, + "Could not start download due to malformed URL"); + return; + } + size_t id = get_next_id(); + std::string escaped_url = FileGet::escape_url(full_url.substr(results.length())); + if (is_bambustudio_open(full_url) || (is_orca_open(full_url) && is_makerworld_link(full_url))) + plater->request_model_download(escaped_url); + else { + std::string text(escaped_url); + m_downloads.emplace_back(std::make_unique(id, std::move(escaped_url), this, m_dest_folder)); + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + ntf_mngr->push_download_URL_progress_notification(id, m_downloads.back()->get_filename(), + std::bind(&Downloader::user_action_callback, this, std::placeholders::_1, + std::placeholders::_2)); + m_downloads.back()->start(); + } + BOOST_LOG_TRIVIAL(debug) << "started download"; +} + +void Downloader::on_progress(wxCommandEvent& event) +{ + size_t id = event.GetInt(); + float percent = (float)std::stoi(boost::nowide::narrow(event.GetString())) / 100.f; + //BOOST_LOG_TRIVIAL(error) << "progress " << id << ": " << percent; + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + BOOST_LOG_TRIVIAL(trace) << "Download "<< id << ": " << percent; + ntf_mngr->set_download_URL_progress(id, percent); +} +void Downloader::on_error(wxCommandEvent& event) +{ + size_t id = event.GetInt(); + set_download_state(event.GetInt(), DownloadState::DownloadError); + BOOST_LOG_TRIVIAL(error) << "Download error: " << event.GetString(); + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + ntf_mngr->set_download_URL_error(id, boost::nowide::narrow(event.GetString())); + show_error(nullptr, format_wxstr(L"%1%\n%2%", _L("The download has failed") + ":", event.GetString())); +} +void Downloader::on_complete(wxCommandEvent& event) +{ + // TODO: is this always true? : + // here we open the file itself, notification should get 1.f progress from on progress. + set_download_state(event.GetInt(), DownloadState::DownloadDone); + wxArrayString paths; + paths.Add(event.GetString()); + wxGetApp().plater()->load_files(paths); +} +bool Downloader::user_action_callback(DownloaderUserAction action, int id) +{ + for (size_t i = 0; i < m_downloads.size(); ++i) { + if (m_downloads[i]->get_id() == id) { + switch (action) { + case DownloadUserCanceled: + m_downloads[i]->cancel(); + return true; + case DownloadUserPaused: + m_downloads[i]->pause(); + return true; + case DownloadUserContinued: + m_downloads[i]->resume(); + return true; + case DownloadUserOpenedFolder: + open_folder(m_downloads[i]->get_dest_folder()); + return true; + default: + return false; + } + } + } + return false; +} + +void Downloader::on_name_change(wxCommandEvent& event) +{ + +} + +void Downloader::on_paused(wxCommandEvent& event) +{ + size_t id = event.GetInt(); + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + ntf_mngr->set_download_URL_paused(id); +} + +void Downloader::on_canceled(wxCommandEvent& event) +{ + size_t id = event.GetInt(); + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + ntf_mngr->set_download_URL_canceled(id); +} + +void Downloader::set_download_state(int id, DownloadState state) +{ + for (size_t i = 0; i < m_downloads.size(); ++i) { + if (m_downloads[i]->get_id() == id) { + m_downloads[i]->set_state(state); + return; + } + } +} + +} +} \ No newline at end of file diff --git a/src/slic3r/GUI/Downloader.hpp b/src/slic3r/GUI/Downloader.hpp new file mode 100644 index 0000000000..84a9a95697 --- /dev/null +++ b/src/slic3r/GUI/Downloader.hpp @@ -0,0 +1,99 @@ +#ifndef slic3r_Downloader_hpp_ +#define slic3r_Downloader_hpp_ + +#include "DownloaderFileGet.hpp" +#include +#include + +namespace Slic3r { +namespace GUI { + +class NotificationManager; + +enum DownloadState +{ + DownloadPending = 0, + DownloadOngoing, + DownloadStopped, + DownloadDone, + DownloadError, + DownloadPaused, + DownloadStateUnknown +}; + +enum DownloaderUserAction +{ + DownloadUserCanceled, + DownloadUserPaused, + DownloadUserContinued, + DownloadUserOpenedFolder +}; + +class Download { +public: + Download(int ID, std::string url, wxEvtHandler* evt_handler, const boost::filesystem::path& dest_folder); + void start(); + void cancel(); + void pause(); + void resume(); + + int get_id() const { return m_id; } + boost::filesystem::path get_final_path() const { return m_final_path; } + std::string get_filename() const { return m_filename; } + DownloadState get_state() const { return m_state; } + void set_state(DownloadState state) { m_state = state; } + std::string get_dest_folder() { return m_dest_folder.string(); } +private: + const int m_id; + std::string m_filename; + boost::filesystem::path m_final_path; + boost::filesystem::path m_dest_folder; + std::shared_ptr m_file_get; + DownloadState m_state { DownloadState::DownloadPending }; +}; + +class Downloader : public wxEvtHandler { +public: + Downloader(); + + bool get_initialized() { return m_initialized; } + void init(const boost::filesystem::path& dest_folder) + { + m_dest_folder = dest_folder; + m_initialized = true; + } + void start_download(const std::string& full_url); + // cancel = false -> just pause + bool user_action_callback(DownloaderUserAction action, int id); +private: + bool m_initialized { false }; + + std::vector> m_downloads; + boost::filesystem::path m_dest_folder; + + size_t m_next_id { 0 }; + size_t get_next_id() { return ++m_next_id; } + + void on_progress(wxCommandEvent& event); + void on_error(wxCommandEvent& event); + void on_complete(wxCommandEvent& event); + void on_name_change(wxCommandEvent& event); + void on_paused(wxCommandEvent& event); + void on_canceled(wxCommandEvent& event); + + void set_download_state(int id, DownloadState state); + /* + bool is_in_state(int id, DownloadState state) const; + DownloadState get_download_state(int id) const; + bool cancel_download(int id); + bool pause_download(int id); + bool resume_download(int id); + bool delete_download(int id); + wxString get_path_of(int id) const; + wxString get_folder_path_of(int id) const; + */ +}; + +} +} +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/DownloaderFileGet.cpp b/src/slic3r/GUI/DownloaderFileGet.cpp new file mode 100644 index 0000000000..08d33951ef --- /dev/null +++ b/src/slic3r/GUI/DownloaderFileGet.cpp @@ -0,0 +1,420 @@ +#include "DownloaderFileGet.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include "format.hpp" +#include "GUI.hpp" +#include "I18N.hpp" +#include "libslic3r/Utils.hpp" + +namespace Slic3r { +namespace GUI { + +const size_t DOWNLOAD_MAX_CHUNK_SIZE = 10 * 1024 * 1024; +const size_t DOWNLOAD_SIZE_LIMIT = 1024 * 1024 * 1024; + +std::string FileGet::escape_url(const std::string& unescaped) +{ + std::string ret_val; + CURL* curl = curl_easy_init(); + if (curl) { + int decodelen; + char* decoded = curl_easy_unescape(curl, unescaped.c_str(), unescaped.size(), &decodelen); + if (decoded) { + ret_val = std::string(decoded); + curl_free(decoded); + } + curl_easy_cleanup(curl); + } + return ret_val; +} +bool FileGet::is_subdomain(const std::string& url, const std::string& domain) +{ + // domain should be f.e. printables.com (.com including) + char* host; + std::string host_string; + CURLUcode rc; + CURLU* curl = curl_url(); + if (!curl) { + BOOST_LOG_TRIVIAL(error) << "Failed to init Curl library in function is_domain."; + return false; + } + rc = curl_url_set(curl, CURLUPART_URL, url.c_str(), 0); + if (rc != CURLUE_OK) { + curl_url_cleanup(curl); + return false; + } + rc = curl_url_get(curl, CURLUPART_HOST, &host, 0); + if (rc != CURLUE_OK || !host) { + curl_url_cleanup(curl); + return false; + } + host_string = std::string(host); + curl_free(host); + // now host should be subdomain.domain or just domain + if (domain == host_string) { + curl_url_cleanup(curl); + return true; + } + if(boost::ends_with(host_string, "." + domain)) { + curl_url_cleanup(curl); + return true; + } + curl_url_cleanup(curl); + return false; +} + +namespace { +unsigned get_current_pid() +{ +#ifdef WIN32 + return GetCurrentProcessId(); +#else + return ::getpid(); +#endif +} +} + +// int = DOWNLOAD ID; string = file path +wxDEFINE_EVENT(EVT_DWNLDR_FILE_COMPLETE, wxCommandEvent); +// int = DOWNLOAD ID; string = error msg +wxDEFINE_EVENT(EVT_DWNLDR_FILE_ERROR, wxCommandEvent); +// int = DOWNLOAD ID; string = progress percent +wxDEFINE_EVENT(EVT_DWNLDR_FILE_PROGRESS, wxCommandEvent); +// int = DOWNLOAD ID; string = name +wxDEFINE_EVENT(EVT_DWNLDR_FILE_NAME_CHANGE, wxCommandEvent); +// int = DOWNLOAD ID; +wxDEFINE_EVENT(EVT_DWNLDR_FILE_PAUSED, wxCommandEvent); +// int = DOWNLOAD ID; +wxDEFINE_EVENT(EVT_DWNLDR_FILE_CANCELED, wxCommandEvent); + +struct FileGet::priv +{ + const int m_id; + std::string m_url; + std::string m_filename; + std::thread m_io_thread; + wxEvtHandler* m_evt_handler; + boost::filesystem::path m_dest_folder; + boost::filesystem::path m_tmp_path; // path when ongoing download + std::atomic_bool m_cancel { false }; + std::atomic_bool m_pause { false }; + std::atomic_bool m_stopped { false }; // either canceled or paused - download is not running + size_t m_written { 0 }; + size_t m_absolute_size { 0 }; + priv(int ID, std::string&& url, const std::string& filename, wxEvtHandler* evt_handler, const boost::filesystem::path& dest_folder); + + void get_perform(); +}; + +FileGet::priv::priv(int ID, std::string&& url, const std::string& filename, wxEvtHandler* evt_handler, const boost::filesystem::path& dest_folder) + : m_id(ID) + , m_url(std::move(url)) + , m_filename(filename) + , m_evt_handler(evt_handler) + , m_dest_folder(dest_folder) +{ +} +std::string extract_remote_filename(const std::string& str) { + std::regex r("filename=\"([^\"]*)\""); + std::smatch match; + if (std::regex_search(str.begin(), str.end(), match, r)) { + return match.str(1); + } else { + return ""; + } +} +void FileGet::priv::get_perform() +{ + assert(m_evt_handler); + assert(!m_url.empty()); + assert(!m_filename.empty()); + assert(boost::filesystem::is_directory(m_dest_folder)); + + m_stopped = false; + + // open dest file + std::string extension; + if (m_written == 0) + { + boost::filesystem::path dest_path = m_dest_folder / m_filename; + extension = dest_path.extension().string(); + std::string just_filename = m_filename.substr(0, m_filename.size() - extension.size()); + std::string final_filename = just_filename; + // Find unsed filename + try { + size_t version = 0; + while (boost::filesystem::exists(m_dest_folder / (final_filename + extension)) || boost::filesystem::exists(m_dest_folder / (final_filename + extension + "." + std::to_string(get_current_pid()) + ".download"))) + { + ++version; + if (version > 999) { + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR); + evt->SetString(GUI::format_wxstr(L"Failed to find suitable filename. Last name: %1%." , (m_dest_folder / (final_filename + extension)).string())); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + return; + } + final_filename = GUI::format("%1%(%2%)", just_filename, std::to_string(version)); + } + } catch (const boost::filesystem::filesystem_error& e) + { + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR); + evt->SetString(e.what()); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + return; + } + + m_filename = sanitize_filename(final_filename + extension); + + m_tmp_path = m_dest_folder / (m_filename + "." + std::to_string(get_current_pid()) + ".download"); + + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_NAME_CHANGE); + evt->SetString(boost::nowide::widen(m_filename)); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + } + + boost::filesystem::path dest_path; + if(!extension.empty()) + dest_path = m_dest_folder / m_filename; + + wxString temp_path_wstring(m_tmp_path.wstring()); + + //std::cout << "dest_path: " << dest_path.string() << std::endl; + //std::cout << "m_tmp_path: " << m_tmp_path.string() << std::endl; + + BOOST_LOG_TRIVIAL(info) << GUI::format("Starting download from %1% to %2%. Temp path is %3%",m_url, dest_path, m_tmp_path); + + FILE* file; + // open file for writting + if (m_written == 0) + file = fopen(temp_path_wstring.c_str(), "wb"); + else + file = fopen(temp_path_wstring.c_str(), "ab"); + + //assert(file != NULL); + if (file == NULL) { + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR); + // TRN %1% = file path + evt->SetString(GUI::format_wxstr(_L("Can't create file at %1%"), temp_path_wstring)); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + return; + } + + std:: string range_string = std::to_string(m_written) + "-"; + + size_t written_previously = m_written; + size_t written_this_session = 0; + Http::get(m_url) + .size_limit(DOWNLOAD_SIZE_LIMIT) //more? + .set_range(range_string) + .on_header_callback([&](std::string header) { + if(dest_path.empty()) { + std::string filename = extract_remote_filename(header); + if (!filename.empty()) { + m_filename = filename; + dest_path = m_dest_folder / m_filename; + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_NAME_CHANGE); + evt->SetString(boost::nowide::widen(m_filename)); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + } + } + }) + .on_progress([&](Http::Progress progress, bool& cancel) { + // to prevent multiple calls into following ifs (m_cancel / m_pause) + if (m_stopped){ + cancel = true; + return; + } + if (m_cancel) { + m_stopped = true; + fclose(file); + // remove canceled file + std::remove(m_tmp_path.string().c_str()); + m_written = 0; + cancel = true; + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_CANCELED); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + return; + // TODO: send canceled event? + } + if (m_pause) { + m_stopped = true; + fclose(file); + cancel = true; + if (m_written == 0) + std::remove(m_tmp_path.string().c_str()); + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_PAUSED); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + return; + } + + if (m_absolute_size < progress.dltotal) { + m_absolute_size = progress.dltotal; + } + + if (progress.dlnow != 0) { + if (progress.dlnow - written_this_session > DOWNLOAD_MAX_CHUNK_SIZE || progress.dlnow == progress.dltotal) { + try + { + std::string part_for_write = progress.buffer.substr(written_this_session, progress.dlnow); + fwrite(part_for_write.c_str(), 1, part_for_write.size(), file); + } + catch (const std::exception& e) + { + // fclose(file); do it? + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR); + evt->SetString(e.what()); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + cancel = true; + return; + } + written_this_session = progress.dlnow; + m_written = written_previously + written_this_session; + } + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_PROGRESS); + int percent_total = m_absolute_size == 0 ? 0 : (written_previously + progress.dlnow) * 100 / m_absolute_size; + evt->SetString(std::to_string(percent_total)); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + } + + }) + .on_error([&](std::string body, std::string error, unsigned http_status) { + if (file != NULL) + fclose(file); + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR); + if (!error.empty()) + evt->SetString(GUI::from_u8(error)); + else + evt->SetString(GUI::from_u8(body)); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + }) + .on_complete([&](std::string body, unsigned /* http_status */) { + + // TODO: perform a body size check + // + //size_t body_size = body.size(); + //if (body_size != expected_size) { + // return; + //} + try + { + // Orca: thingiverse need this + if (m_written < body.size()) + { + // this code should never be entered. As there should be on_progress call after last bit downloaded. + std::string part_for_write = body.substr(m_written); + fwrite(part_for_write.c_str(), 1, part_for_write.size(), file); + + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_PROGRESS); + evt->SetString(std::to_string(100)); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + } + fclose(file); + boost::filesystem::rename(m_tmp_path, dest_path); + } + catch (const std::exception& /*e*/) + { + //TODO: report? + //error_message = GUI::format("Failed to write and move %1% to %2%", tmp_path, dest_path); + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_ERROR); + evt->SetString("Failed to write and move."); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + return; + } + + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_COMPLETE); + evt->SetString(dest_path.wstring()); + evt->SetInt(m_id); + m_evt_handler->QueueEvent(evt); + }) + .perform_sync(); + +} + +FileGet::FileGet(int ID, std::string url, const std::string& filename, wxEvtHandler* evt_handler, const boost::filesystem::path& dest_folder) + : p(new priv(ID, std::move(url), filename, evt_handler, dest_folder)) +{} + +FileGet::FileGet(FileGet&& other) : p(std::move(other.p)) {} + +FileGet::~FileGet() +{ + if (p && p->m_io_thread.joinable()) { + p->m_cancel = true; + p->m_io_thread.join(); + } +} + +void FileGet::get() +{ + assert(p); + if (p->m_io_thread.joinable()) { + // This will stop transfers being done by the thread, if any. + // Cancelling takes some time, but should complete soon enough. + p->m_cancel = true; + p->m_io_thread.join(); + } + p->m_cancel = false; + p->m_pause = false; + p->m_io_thread = std::thread([this]() { + p->get_perform(); + }); +} + +void FileGet::cancel() +{ + if(p && p->m_stopped) { + if (p->m_io_thread.joinable()) { + p->m_cancel = true; + p->m_io_thread.join(); + wxCommandEvent* evt = new wxCommandEvent(EVT_DWNLDR_FILE_CANCELED); + evt->SetInt(p->m_id); + p->m_evt_handler->QueueEvent(evt); + } + } + + if (p) + p->m_cancel = true; + +} + +void FileGet::pause() +{ + if (p) { + p->m_pause = true; + } +} +void FileGet::resume() +{ + assert(p); + if (p->m_io_thread.joinable()) { + // This will stop transfers being done by the thread, if any. + // Cancelling takes some time, but should complete soon enough. + p->m_cancel = true; + p->m_io_thread.join(); + } + p->m_cancel = false; + p->m_pause = false; + p->m_io_thread = std::thread([this]() { + p->get_perform(); + }); +} +} +} diff --git a/src/slic3r/GUI/DownloaderFileGet.hpp b/src/slic3r/GUI/DownloaderFileGet.hpp new file mode 100644 index 0000000000..022d4c0c10 --- /dev/null +++ b/src/slic3r/GUI/DownloaderFileGet.hpp @@ -0,0 +1,45 @@ +#ifndef slic3r_DownloaderFileGet_hpp_ +#define slic3r_DownloaderFileGet_hpp_ + +#include "../Utils/Http.hpp" + +#include +#include +#include +#include +#include + +namespace Slic3r { +namespace GUI { +class FileGet : public std::enable_shared_from_this { +private: + struct priv; +public: + FileGet(int ID, std::string url, const std::string& filename, wxEvtHandler* evt_handler,const boost::filesystem::path& dest_folder); + FileGet(FileGet&& other); + ~FileGet(); + + void get(); + void cancel(); + void pause(); + void resume(); + static std::string escape_url(const std::string& url); + static bool is_subdomain(const std::string& url, const std::string& domain); +private: + std::unique_ptr p; +}; +// int = DOWNLOAD ID; string = file path +wxDECLARE_EVENT(EVT_DWNLDR_FILE_COMPLETE, wxCommandEvent); +// int = DOWNLOAD ID; string = error msg +wxDECLARE_EVENT(EVT_DWNLDR_FILE_PROGRESS, wxCommandEvent); +// int = DOWNLOAD ID; string = progress percent +wxDECLARE_EVENT(EVT_DWNLDR_FILE_ERROR, wxCommandEvent); +// int = DOWNLOAD ID; string = name +wxDECLARE_EVENT(EVT_DWNLDR_FILE_NAME_CHANGE, wxCommandEvent); +// int = DOWNLOAD ID; +wxDECLARE_EVENT(EVT_DWNLDR_FILE_PAUSED, wxCommandEvent); +// int = DOWNLOAD ID; +wxDECLARE_EVENT(EVT_DWNLDR_FILE_CANCELED, wxCommandEvent); +} +} +#endif diff --git a/src/slic3r/GUI/EditGCodeDialog.cpp b/src/slic3r/GUI/EditGCodeDialog.cpp index 54ec6db8bc..3e8548decd 100644 --- a/src/slic3r/GUI/EditGCodeDialog.cpp +++ b/src/slic3r/GUI/EditGCodeDialog.cpp @@ -215,7 +215,7 @@ void EditGCodeDialog::init_params_list(const std::string& custom_gcode_name) // Add timestamp subgroup if (!cgp_timestamps_config_def.empty()) { - wxDataViewItem dimensions = m_params_list->AppendGroup(_L("Timestamps"), "print-time"); + wxDataViewItem dimensions = m_params_list->AppendGroup(_L("Timestamps"), "custom-gcode_time"); for (const auto& [opt_key, def] : cgp_timestamps_config_def.options) m_params_list->AppendParam(dimensions, get_type(opt_key, def), opt_key); } @@ -271,7 +271,16 @@ wxDataViewItem EditGCodeDialog::add_presets_placeholders() auto init_from_tab = [this, full_config](wxDataViewItem parent, Tab* tab, const set& preset_keys){ set extra_keys(preset_keys); for (const auto& page : tab->m_pages) { - wxDataViewItem subgroup = m_params_list->AppendSubGroup(parent, page->title(), "empty"); + // ORCA: Pull icons from tabs for subgroups, icons are hidden on tabs + std::string icon_name = "empty"; // use empty icon if not defined + for (const auto& icons_list : tab->m_icon_index) { + if (icons_list.second == page->iconID()) { + icon_name = icons_list.first; + break; + } + } + wxDataViewItem subgroup = m_params_list->AppendSubGroup(parent, page->title(), icon_name); // Use icon instead empty icon + std::set opt_keys; for (const auto& optgroup : page->m_optgroups) for (const auto& opt : optgroup->opt_map()) @@ -290,7 +299,7 @@ wxDataViewItem EditGCodeDialog::add_presets_placeholders() wxDataViewItem group = m_params_list->AppendGroup(_L("Presets"), "cog"); - wxDataViewItem print = m_params_list->AppendSubGroup(group, _L("Print settings"), "cog"); + wxDataViewItem print = m_params_list->AppendSubGroup(group, _L("Print settings"), "process"); init_from_tab(print, tab_print, print_options); wxDataViewItem material = m_params_list->AppendSubGroup(group, _(is_fff ? L("Filament settings") : L("SLA Materials settings")), is_fff ? "filament" : "resin"); diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index 8d5a939cba..26216edc93 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -5,6 +5,7 @@ #include "I18N.hpp" #include #include +#include "CalibUtils.hpp" namespace Slic3r { namespace GUI { @@ -509,7 +510,7 @@ bool ExtrusionCalibration::check_k_validation(wxString k_text) ; } - if (k < 0 || k > 0.3) + if (k < MIN_PA_K_VALUE || k > MAX_PA_K_VALUE) return false; return true; } @@ -533,7 +534,7 @@ bool ExtrusionCalibration::check_k_n_validation(wxString k_text, wxString n_text catch (...) { ; } - if (k < 0 || k > 0.5) + if (k < MIN_PA_K_VALUE || k > MAX_PA_K_VALUE) return false; if (n < 0.6 || n > 2.0) return false; @@ -545,8 +546,8 @@ void ExtrusionCalibration::on_click_save(wxCommandEvent &event) wxString k_text = m_k_val->GetTextCtrl()->GetValue(); wxString n_text = m_n_val->GetTextCtrl()->GetValue(); if (!ExtrusionCalibration::check_k_validation(k_text)) { - wxString k_tips = _L("Please input a valid value (K in 0~0.3)"); - wxString kn_tips = _L("Please input a valid value (K in 0~0.3, N in 0.6~2.0)"); + wxString k_tips = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE); + wxString kn_tips = wxString::Format(_L("Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)"), MIN_PA_K_VALUE, MAX_PA_K_VALUE, 0.6, 2.0); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index aa366e20ec..58c123fb18 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -2,6 +2,7 @@ #include "GUI_App.hpp" #include "I18N.hpp" #include "Field.hpp" +#include "libslic3r/GCode/Thumbnails.hpp" #include "wxExtensions.hpp" #include "Plater.hpp" #include "MainFrame.hpp" @@ -28,6 +29,7 @@ #include "Widgets/ComboBox.hpp" #include "Widgets/TextCtrl.h" +#include "../Utils/ColorSpaceConvert.hpp" #ifdef __WXOSX__ #define wxOSX true #else @@ -82,6 +84,22 @@ wxString get_thumbnails_string(const std::vector& values) return ret_str; } +ThumbnailErrors validate_thumbnails_string(wxString& str, const wxString& def_ext = "PNG") +{ + std::string input_string = into_u8(str); + + str.Clear(); + + auto [thumbnails_list, errors] = GCodeThumbnails::make_and_check_thumbnail_list(input_string); + if (!thumbnails_list.empty()) { + const auto& extentions = ConfigOptionEnum::get_enum_names(); + for (const auto& [format, size] : thumbnails_list) + str += format_wxstr("%1%x%2%/%3%, ", size.x(), size.y(), extentions[int(format)]); + str.resize(str.Len() - 2); + } + + return errors; +} Field::~Field() { @@ -93,11 +111,6 @@ Field::~Field() m_back_to_initial_value = nullptr; if (m_back_to_sys_value) m_back_to_sys_value = nullptr; - if (getWindow()) { - wxWindow* win = getWindow(); - win->Destroy(); - win = nullptr; - } } void Field::PostInitialize() @@ -133,6 +146,8 @@ void Field::PostInitialize() if (getWindow()) { if (m_opt.readonly) { this->disable(); + } else { + this->enable(); } getWindow()->Bind(wxEVT_KEY_UP, [](wxKeyEvent& evt) { if ((evt.GetModifiers() & wxMOD_CONTROL) != 0) { @@ -161,7 +176,7 @@ void Field::PostInitialize() } evt.Skip(); - }); + }, getWindow()->GetId()); } } @@ -302,6 +317,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true m_value.clear(); break; } + std::string opt_key_without_idx = m_opt_id.substr(0, m_opt_id.find('#')); if (m_opt_id == "filament_flow_ratio") { if (m_value.empty() || boost::any_cast(m_value) != val) { wxString msg_text = format_wxstr(_L("Value %s is out of range, continue?"), str); @@ -318,6 +334,21 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true } } } + else if(m_opt_id == "filament_retraction_distances_when_cut" || opt_key_without_idx == "retraction_distances_when_cut"){ + if (m_value.empty() || boost::any_cast(m_value) != val) { + wxString msg_text = format_wxstr(_L("Value %s is out of range. The valid range is from %d to %d."), str, m_opt.min, m_opt.max); + WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES); + if (dialog.ShowModal()) { + if (m_value.empty()) { + if (m_opt.min > val) val = m_opt.min; + if (val > m_opt.max) val = m_opt.max; + } + else + val = boost::any_cast(m_value); + set_value(double_to_string(val), true); + } + } + } else { show_error(m_parent, _L("Value is out of range.")); if (m_opt.min > val) val = m_opt.min; @@ -377,6 +408,31 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true set_value(stVal, false); // it's no needed but can be helpful, when inputted value contained "," instead of "." } } + if (m_opt.opt_key == "thumbnails") { + wxString str_out = str; + ThumbnailErrors errors = validate_thumbnails_string(str_out); + if (errors != enum_bitmask()) { + set_value(str_out, true); + wxString error_str; + if (errors.has(ThumbnailError::InvalidVal)) + error_str += format_wxstr(_L("Invalid input format. Expected vector of dimensions in the following format: \"%1%\""), + "XxY/EXT, XxY/EXT, ..."); + if (errors.has(ThumbnailError::OutOfRange)) { + if (!error_str.empty()) + error_str += "\n\n"; + error_str += _L("Input value is out of range"); + } + if (errors.has(ThumbnailError::InvalidExt)) { + if (!error_str.empty()) + error_str += "\n\n"; + error_str += _L("Some extension in the input is invalid"); + } + show_error(m_parent, error_str); + } else if (str_out != str) { + str = str_out; + set_value(str, true); + } + } m_value = into_u8(str); break; } @@ -415,16 +471,16 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true if (!str.IsEmpty()) { bool invalid_val = false; bool out_of_range_val = false; - wxStringTokenizer thumbnails(str, ","); - while (thumbnails.HasMoreTokens()) { - wxString token = thumbnails.GetNextToken(); + wxStringTokenizer points(str, ","); + while (points.HasMoreTokens()) { + wxString token = points.GetNextToken(); double x, y; - wxStringTokenizer thumbnail(token, "x"); - if (thumbnail.HasMoreTokens()) { - wxString x_str = thumbnail.GetNextToken(); - if (x_str.ToDouble(&x) && thumbnail.HasMoreTokens()) { - wxString y_str = thumbnail.GetNextToken(); - if (y_str.ToDouble(&y) && !thumbnail.HasMoreTokens()) { + wxStringTokenizer _point(token, "x"); + if (_point.HasMoreTokens()) { + wxString x_str = _point.GetNextToken(); + if (x_str.ToDouble(&x) && _point.HasMoreTokens()) { + wxString y_str = _point.GetNextToken(); + if (y_str.ToDouble(&y) && !_point.HasMoreTokens()) { if (m_opt_id == "bed_exclude_area") { if (0 <= x && 0 <= y) { out_values.push_back(Vec2d(x, y)); @@ -490,6 +546,105 @@ void Field::sys_color_changed() #endif } +std::vector**> spools; +std::vector*> spools2; + +void switch_window_pools() +{ + for (auto p : spools) { + spools2.push_back(*p); + *p = new std::deque; + } +} + +void release_window_pools() +{ + for (auto p : spools2) { + delete p; + } + spools2.clear(); +} + +template +struct Builder +{ + Builder() + { + pool_ = new std::deque; + spools.push_back(&pool_); + } + + template + T *build(wxWindow * p, Args ...args) + { + if (pool_->empty()) { + auto t = new T(p, args...); + t->SetClientData(pool_); + return t; + } + auto t = dynamic_cast(pool_->front()); + pool_->pop_front(); + t->Reparent(p); + t->Enable(); + t->Show(); + return t; + } + std::deque* pool_; +}; + +struct wxEventFunctorRef +{ + wxEventFunctor * func; +}; + +wxEventFunctor & wxMakeEventFunctor(const int, wxEventFunctorRef func) +{ + return *func.func; +} + +struct myEvtHandler : wxEvtHandler +{ + void UnbindAll() + { + size_t cookie; + for (wxDynamicEventTableEntry *entry = GetFirstDynamicEntry(cookie); + entry; + entry = GetNextDynamicEntry(cookie)) { + // In Field, All Bind has id, but for TextInput, ComboBox, SpinInput, all not + if (entry->m_id != wxID_ANY && entry->m_lastId == wxID_ANY) + Unbind(entry->m_eventType, + wxEventFunctorRef{entry->m_fn}, + entry->m_id, + entry->m_lastId, + entry->m_callbackUserData); + //DoUnbind(entry->m_id, entry->m_lastId, entry->m_eventType, *entry->m_fn, entry->m_callbackUserData); + } + } +}; + +static void unbind_events(wxEvtHandler *h) +{ + static_cast(h)->UnbindAll(); +} + +void free_window(wxWindow *win) +{ +#if !defined(__WXGTK__) + unbind_events(win); + for (auto c : win->GetChildren()) + if (dynamic_cast(c)) + unbind_events(c); + win->Hide(); + if (auto sizer = win->GetContainingSizer()) + sizer->Clear(); + win->Reparent(wxGetApp().mainframe); + if (win->GetClientData()) + reinterpret_cast*>(win->GetClientData())->push_back(win); +#else + delete win; +#endif +} + template bool is_defined_input_value(wxWindow* win, const ConfigOptionType& type) { @@ -554,10 +709,15 @@ void TextCtrl::BUILD() { // BBS: new param ui style // const long style = m_opt.multiline ? wxTE_MULTILINE : wxTE_PROCESS_ENTER/*0*/; + static Builder builder1; + static Builder<::TextInput> builder2; auto temp = m_opt.multiline - ? (wxWindow *) new wxTextCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, wxTE_MULTILINE) - : new ::TextInput(m_parent, text_value, _L(m_opt.sidetext), "", wxDefaultPosition, size, wxTE_PROCESS_ENTER); + ? (wxWindow*)builder1.build(m_parent, wxID_ANY, "", wxDefaultPosition, size, wxTE_MULTILINE) + : builder2.build(m_parent, "", "", "", wxDefaultPosition, size, wxTE_PROCESS_ENTER); + temp->SetLabel(_L(m_opt.sidetext)); auto text_ctrl = m_opt.multiline ? (wxTextCtrl *)temp : ((TextInput *) temp)->GetTextCtrl(); + text_ctrl->SetLabel(text_value); + temp->SetSize(size); 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; @@ -620,7 +780,7 @@ void TextCtrl::BUILD() { if (!bEnterPressed) propagate_value(); }), temp->GetId()); -/* + /* // select all text using Ctrl+A temp->Bind(wxEVT_CHAR, ([temp](wxKeyEvent& event) { @@ -789,7 +949,8 @@ void CheckBox::BUILD() { m_last_meaningful_value = static_cast(check_value); // BBS: use ::CheckBox - auto temp = new ::CheckBox(m_parent); + static Builder<::CheckBox> builder; + auto temp = builder.build(m_parent); if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); //temp->SetBackgroundColour(*wxWHITE); temp->SetValue(check_value); @@ -908,8 +1069,14 @@ void SpinCtrl::BUILD() { ? 0 : m_opt.min; const int max_val = m_opt.max < 2147483647 ? m_opt.max : 2147483647; - auto temp = new SpinInput(m_parent, text_value, _L(m_opt.sidetext), wxDefaultPosition, size, - wxSP_ARROW_KEYS, min_val, max_val, default_value); + static Builder builder; + auto temp = builder.build(m_parent, "", "", wxDefaultPosition, size, + wxSP_ARROW_KEYS); + temp->SetSize(size); + temp->SetLabel(_L(m_opt.sidetext)); + temp->GetTextCtrl()->SetLabel(text_value); + temp->SetRange(min_val, max_val); + temp->SetValue(default_value); m_combine_side_text = true; #ifdef __WXGTK3__ wxSize best_sz = temp->GetBestSize(); @@ -932,7 +1099,7 @@ void SpinCtrl::BUILD() { } propagate_value(); - })); + }), temp->GetId()); temp->Bind(wxEVT_SPINCTRL, ([this](wxCommandEvent e) { propagate_value(); }), temp->GetId()); @@ -1084,14 +1251,15 @@ void Choice::BUILD() if (m_opt.nullable) m_last_meaningful_value = dynamic_cast(m_opt.default_value.get())->get_at(0); - choice_ctrl* temp; + choice_ctrl * temp; auto dynamic_list = dynamic_lists.find(m_opt.opt_key); if (dynamic_list != dynamic_lists.end()) m_list = dynamic_list->second; if (m_opt.gui_type != ConfigOptionDef::GUIType::undefined && m_opt.gui_type != ConfigOptionDef::GUIType::select_open && m_list == nullptr) { m_is_editable = true; - temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxTE_PROCESS_ENTER); + static Builder builder1; + temp = builder1.build(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxTE_PROCESS_ENTER); } else { #ifdef UNDEIFNED__WXOSX__ // __WXOSX__ // BBS @@ -1103,9 +1271,12 @@ void Choice::BUILD() temp->SetTextCtrlStyle(wxTE_READONLY); temp->Create(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr); #else - temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY); + static Builder builder2; + temp = builder2.build(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY); #endif //__WXOSX__ } + // temp->SetSize(size); + temp->Clear(); temp->GetDropDown().SetUseContentWidth(true); if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double) temp->GetTextCtrl()->GetSize().GetHeight() / m_em_unit; @@ -1158,9 +1329,9 @@ void Choice::BUILD() e.StopPropagation(); else e.Skip(); - }); - temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true; }); - temp->Bind(wxEVT_COMBOBOX_CLOSEUP, [this](wxCommandEvent&) { m_is_dropped = false; }); + }, temp->GetId()); + temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true; }, temp->GetId()); + temp->Bind(wxEVT_COMBOBOX_CLOSEUP, [this](wxCommandEvent&) { m_is_dropped = false; }, temp->GetId()); temp->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { on_change_field(); }, temp->GetId()); @@ -1169,12 +1340,12 @@ void Choice::BUILD() e.Skip(); if (!bEnterPressed) propagate_value(); - } ); + }, temp->GetId() ); temp->Bind(wxEVT_TEXT_ENTER, [this](wxEvent& e) { EnterPressed enter(this); propagate_value(); - } ); + }, temp->GetId() ); } temp->SetToolTip(get_tooltip_text(temp->GetValue())); @@ -1581,6 +1752,7 @@ void ColourPicker::BUILD() if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double)temp->GetSize().GetHeight() / m_em_unit; temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + convert_to_picker_widget(temp); if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); wxGetApp().UpdateDarkUI(temp->GetPickerCtrl()); @@ -1637,6 +1809,7 @@ void ColourPicker::set_value(const boost::any& value, bool change_event) boost::any& ColourPicker::get_value() { + save_colors_to_config(); auto colour = static_cast(window)->GetColour(); if (colour == wxTransparentColour) m_value = std::string(""); @@ -1675,11 +1848,51 @@ void ColourPicker::sys_color_changed() #endif } +void ColourPicker::on_button_click(wxCommandEvent &event) { +#if !defined(__linux__) && !defined(__LINUX__) + if (m_clrData) { + std::vector colors = wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < colors.size(); i++) { + m_clrData->SetCustomColour(i, string_to_wxColor(colors[i])); + } + } + m_picker_widget->OnButtonClick(event); +#endif +} + +void ColourPicker::convert_to_picker_widget(wxColourPickerCtrl *widget) +{ +#if !defined(__linux__) && !defined(__LINUX__) + m_picker_widget = dynamic_cast(widget->GetPickerCtrl()); + if (m_picker_widget) { + m_picker_widget->Bind(wxEVT_BUTTON, &ColourPicker::on_button_click, this); + m_clrData = m_picker_widget->GetColourData(); + } +#endif +} + +void ColourPicker::save_colors_to_config() { +#if !defined(__linux__) && !defined(__LINUX__) + if (m_clrData) { + std::vector colors; + if (colors.size() != CUSTOM_COLOR_COUNT) { + colors.resize(CUSTOM_COLOR_COUNT); + } + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { + colors[i] = color_to_string(m_clrData->GetCustomColour(i)); + } + wxGetApp().app_config->save_custom_color_to_config(colors); + } +#endif +} + void PointCtrl::BUILD() { auto temp = new wxBoxSizer(wxHORIZONTAL); + m_combine_side_text = true; // Prefer using side text in input box - const wxSize field_size(4 * m_em_unit, -1); + //const wxSize field_size(4 * m_em_unit, -1); + const wxSize field_size((m_opt.width >= 0 ? m_opt.width : def_width_wider()) * m_em_unit, -1); // ORCA match width with other components Slic3r::Vec2d default_pt; if(m_opt.type == coPoints) default_pt = m_opt.get_default_value()->values.at(0); @@ -1691,35 +1904,38 @@ void PointCtrl::BUILD() wxString Y = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); long style = wxTE_PROCESS_ENTER; -#ifdef _WIN32 - style |= wxBORDER_SIMPLE; -#endif - x_textctrl = new ::TextCtrl(m_parent, wxID_ANY, X, wxDefaultPosition, field_size, style); - y_textctrl = new ::TextCtrl(m_parent, wxID_ANY, Y, wxDefaultPosition, field_size, style); +//#ifdef _WIN32 +// style |= wxBORDER_SIMPLE; +//#endif + // ORCA add icons to point control boxes instead of using text for X / Y + x_input = new ::TextInput(m_parent, X, m_opt.sidetext, "inputbox_x", wxDefaultPosition, field_size, style); + y_input = new ::TextInput(m_parent, Y, m_opt.sidetext, "inputbox_y", wxDefaultPosition, field_size, style); + x_textctrl = x_input->GetTextCtrl(); + y_textctrl = y_input->GetTextCtrl(); if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double)x_textctrl->GetSize().GetHeight() / m_em_unit; - x_textctrl->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - x_textctrl->SetBackgroundStyle(wxBG_STYLE_PAINT); - y_textctrl->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - y_textctrl->SetBackgroundStyle(wxBG_STYLE_PAINT); + x_input->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + x_input->SetBackgroundStyle(wxBG_STYLE_PAINT); + y_input->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + y_input->SetBackgroundStyle(wxBG_STYLE_PAINT); - auto static_text_x = new wxStaticText(m_parent, wxID_ANY, "x : "); - auto static_text_y = new wxStaticText(m_parent, wxID_ANY, " y : "); - static_text_x->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - static_text_x->SetBackgroundStyle(wxBG_STYLE_PAINT); - static_text_y->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - static_text_y->SetBackgroundStyle(wxBG_STYLE_PAINT); + //auto static_text_x = new wxStaticText(m_parent, wxID_ANY, "x : "); + //auto static_text_y = new wxStaticText(m_parent, wxID_ANY, " y : "); + //static_text_x->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + //static_text_x->SetBackgroundStyle(wxBG_STYLE_PAINT); + //static_text_y->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + //static_text_y->SetBackgroundStyle(wxBG_STYLE_PAINT); - wxGetApp().UpdateDarkUI(x_textctrl); - wxGetApp().UpdateDarkUI(y_textctrl); - wxGetApp().UpdateDarkUI(static_text_x, false, true); - wxGetApp().UpdateDarkUI(static_text_y, false, true); + wxGetApp().UpdateDarkUI(x_input); + wxGetApp().UpdateDarkUI(y_input); + //wxGetApp().UpdateDarkUI(static_text_x, false, true); + //wxGetApp().UpdateDarkUI(static_text_y, false, true); - temp->Add(static_text_x, 0, wxALIGN_CENTER_VERTICAL, 0); - temp->Add(x_textctrl); - temp->Add(static_text_y, 0, wxALIGN_CENTER_VERTICAL, 0); - temp->Add(y_textctrl); + //temp->Add(static_text_x, 0, wxALIGN_CENTER_VERTICAL, 0); + temp->Add(x_input); + //temp->Add(static_text_y, 0, wxALIGN_CENTER_VERTICAL, 0); + temp->Add(y_input); x_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(x_textctrl); }), x_textctrl->GetId()); y_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(y_textctrl); }), y_textctrl->GetId()); @@ -1738,16 +1954,17 @@ void PointCtrl::msw_rescale() { Field::msw_rescale(); - wxSize field_size(4 * m_em_unit, -1); + //wxSize field_size(4 * m_em_unit, -1); + wxSize field_size((m_opt.width >= 0 ? m_opt.width : def_width_wider()) * m_em_unit, -1); // ORCA match width with other components if (parent_is_custom_ctrl) { field_size.SetHeight(lround(opt_height * m_em_unit)); - x_textctrl->SetSize(field_size); - y_textctrl->SetSize(field_size); + x_input->SetSize(field_size); + y_input->SetSize(field_size); } else { - x_textctrl->SetMinSize(field_size); - y_textctrl->SetMinSize(field_size); + x_input->SetMinSize(field_size); + y_input->SetMinSize(field_size); } } diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index d86a790eb4..ef1b6024b0 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -22,6 +23,7 @@ #include "GUI.hpp" #include "wxExtensions.hpp" #include "Widgets/SpinInput.hpp" +#include "Widgets/TextInput.hpp" #ifdef __WXMSW__ #define wxMSW true @@ -481,6 +483,14 @@ public: void enable() override { dynamic_cast(window)->Enable(); } void disable() override{ dynamic_cast(window)->Disable(); } wxWindow* getWindow() override { return window; } + +private: + void convert_to_picker_widget(wxColourPickerCtrl *widget); + void on_button_click(wxCommandEvent &WXUNUSED(ev)); + void save_colors_to_config(); +private: + wxColourData* m_clrData{nullptr}; + wxColourPickerWidget* m_picker_widget{nullptr}; }; class PointCtrl : public Field { @@ -493,6 +503,8 @@ public: wxSizer* sizer{ nullptr }; wxTextCtrl* x_textctrl{ nullptr }; wxTextCtrl* y_textctrl{ nullptr }; + TextInput* x_input{nullptr}; + TextInput* y_input{nullptr}; void BUILD() override; bool value_was_changed(wxTextCtrl* win); diff --git a/src/slic3r/GUI/FileArchiveDialog.cpp b/src/slic3r/GUI/FileArchiveDialog.cpp new file mode 100644 index 0000000000..2cd84b6acd --- /dev/null +++ b/src/slic3r/GUI/FileArchiveDialog.cpp @@ -0,0 +1,443 @@ +#include "FileArchiveDialog.hpp" + +#include "I18N.hpp" +#include "GUI_App.hpp" +#include "GUI.hpp" +#include "MainFrame.hpp" +#include "ExtraRenderers.hpp" +#include "format.hpp" +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +#define BTN_SIZE wxSize(FromDIP(58), FromDIP(24)) +#define BTN_GAP FromDIP(20) + +ArchiveViewModel::ArchiveViewModel(wxWindow* parent) + :m_parent(parent) +{} +ArchiveViewModel::~ArchiveViewModel() +{} + +std::shared_ptr ArchiveViewModel::AddFile(std::shared_ptr parent, const wxString& name, bool container) +{ + std::shared_ptr node = std::make_shared(ArchiveViewNode(name)); + node->set_container(container); + + if (parent.get() != nullptr) { + parent->get_children().push_back(node); + node->set_parent(parent); + parent->set_is_folder(true); + } else { + m_top_children.emplace_back(node); + } + + wxDataViewItem child = wxDataViewItem((void*)node.get()); + wxDataViewItem parent_item= wxDataViewItem((void*)parent.get()); + ItemAdded(parent_item, child); + + if (parent) + m_ctrl->Expand(parent_item); + return node; +} + +wxString ArchiveViewModel::GetColumnType(unsigned int col) const +{ + if (col == 0) + return "bool"; + return "string";//"DataViewBitmapText"; +} + +void ArchiveViewModel::Rescale() +{ + // There should be no pictures rendered +} + +void ArchiveViewModel::Delete(const wxDataViewItem& item) +{ + assert(item.IsOk()); + ArchiveViewNode* node = static_cast(item.GetID()); + assert(node->get_parent() != nullptr); + for (std::shared_ptr child : node->get_children()) + { + Delete(wxDataViewItem((void*)child.get())); + } + delete [] node; +} +void ArchiveViewModel::Clear() +{ +} + +wxDataViewItem ArchiveViewModel::GetParent(const wxDataViewItem& item) const +{ + assert(item.IsOk()); + ArchiveViewNode* node = static_cast(item.GetID()); + return wxDataViewItem((void*)node->get_parent().get()); +} +unsigned int ArchiveViewModel::GetChildren(const wxDataViewItem& parent, wxDataViewItemArray& array) const +{ + if (!parent.IsOk()) { + for (std::shared_ptrchild : m_top_children) { + array.push_back(wxDataViewItem((void*)child.get())); + } + return m_top_children.size(); + } + + ArchiveViewNode* node = static_cast(parent.GetID()); + for (std::shared_ptr child : node->get_children()) { + array.push_back(wxDataViewItem((void*)child.get())); + } + return node->get_children().size(); +} + +void ArchiveViewModel::GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const +{ + assert(item.IsOk()); + ArchiveViewNode* node = static_cast(item.GetID()); + if (col == 0) { + variant = node->get_toggle(); + } else { + variant = node->get_name(); + } +} + +void ArchiveViewModel::untoggle_folders(const wxDataViewItem& item) +{ + assert(item.IsOk()); + ArchiveViewNode* node = static_cast(item.GetID()); + node->set_toggle(false); + if (node->get_parent().get() != nullptr) + untoggle_folders(wxDataViewItem((void*)node->get_parent().get())); +} + +bool ArchiveViewModel::SetValue(const wxVariant& variant, const wxDataViewItem& item, unsigned int col) +{ + assert(item.IsOk()); + ArchiveViewNode* node = static_cast(item.GetID()); + if (col == 0) { + node->set_toggle(variant.GetBool()); + // if folder recursivelly check all children + for (std::shared_ptr child : node->get_children()) { + SetValue(variant, wxDataViewItem((void*)child.get()), col); + } + if(!variant.GetBool() && node->get_parent()) + untoggle_folders(wxDataViewItem((void*)node->get_parent().get())); + } else { + node->set_name(variant.GetString()); + } + m_parent->Refresh(); + return true; +} +bool ArchiveViewModel::IsEnabled(const wxDataViewItem& item, unsigned int col) const +{ + // As of now, all items are always enabled. + // Returning false for col 1 would gray out text. + return true; +} + +bool ArchiveViewModel::IsContainer(const wxDataViewItem& item) const +{ + if(!item.IsOk()) + return true; + ArchiveViewNode* node = static_cast(item.GetID()); + return node->is_container(); +} + +ArchiveViewCtrl::ArchiveViewCtrl(wxWindow* parent, wxSize size) + : wxDataViewCtrl(parent, wxID_ANY, wxDefaultPosition, size, wxDV_VARIABLE_LINE_HEIGHT | wxDV_ROW_LINES +#ifdef _WIN32 + | wxBORDER_SIMPLE +#endif + ) + //, m_em_unit(em_unit(parent)) +{ + wxGetApp().UpdateDVCDarkUI(this); + + m_model = new ArchiveViewModel(parent); + this->AssociateModel(m_model); + m_model->SetAssociatedControl(this); +} + +ArchiveViewCtrl::~ArchiveViewCtrl() +{ + if (m_model) { + m_model->Clear(); + m_model->DecRef(); + } +} + +FileArchiveDialog::FileArchiveDialog(wxWindow* parent_window, mz_zip_archive* archive, std::vector>& selected_paths_w_size) + : DPIDialog(parent_window, wxID_ANY, _(L("Archive preview")), wxDefaultPosition, + wxSize(45 * wxGetApp().em_unit(), 40 * wxGetApp().em_unit()), + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX) + , m_selected_paths_w_size (selected_paths_w_size) +{ +#ifdef _WIN32 + SetBackgroundColour(*wxWHITE); + wxGetApp().UpdateDarkUI(this); + wxGetApp().UpdateDlgDarkUI(this); +#else + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); +#endif + + int em = em_unit(); + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + m_avc = new ArchiveViewCtrl(this, wxSize(45 * em, 30 * em)); + wxDataViewColumn* toggle_column = m_avc->AppendToggleColumn(L"\u2714", 0, wxDATAVIEW_CELL_ACTIVATABLE, 6 * em); + m_avc->AppendTextColumn("filename", 1); + + std::vector> stack; + + std::function >&, size_t)> reduce_stack = [] (std::vector>& stack, size_t size) { + if (size == 0) { + stack.clear(); + return; + } + while (stack.size() > size) + stack.pop_back(); + }; + // recursively stores whole structure of file onto function stack and synchoronize with stack object. + std::function>&)> adjust_stack = [&adjust_stack, &reduce_stack, &avc = m_avc](const boost::filesystem::path& const_file, std::vector>& stack)->size_t { + boost::filesystem::path file(const_file); + size_t struct_size = file.has_parent_path() ? adjust_stack(file.parent_path(), stack) : 0; + + if (stack.size() > struct_size && (file.has_extension() || file.filename().string() != stack[struct_size]->get_name())) + { + reduce_stack(stack, struct_size); + } + if (!file.has_extension() && stack.size() == struct_size) + stack.push_back(avc->get_model()->AddFile((stack.empty() ? std::shared_ptr(nullptr) : stack.back()), boost::nowide::widen(file.filename().string()), true)); // filename string to wstring? + return struct_size + 1; + }; + + const std::regex pattern_drop(".*[.](stl|obj|amf|3mf|step|stp)", std::regex::icase); + mz_uint num_entries = mz_zip_reader_get_num_files(archive); + mz_zip_archive_file_stat stat; + std::vector> filtered_entries; // second is unzipped size + for (mz_uint i = 0; i < num_entries; ++i) { + if (mz_zip_reader_file_stat(archive, i, &stat)) { + std::string extra(1024, 0); + boost::filesystem::path path; + size_t extra_size = mz_zip_reader_get_filename_from_extra(archive, i, extra.data(), extra.size()); + if (extra_size > 0) { + path = boost::filesystem::path(extra.substr(0, extra_size)); + } else { + wxString wname = boost::nowide::widen(stat.m_filename); + std::string name = boost::nowide::narrow(wname); + path = boost::filesystem::path(name); + } + assert(!path.empty()); + if (!path.has_extension()) + continue; + // filter out MACOS specific hidden files + if (boost::algorithm::starts_with(path.string(), "__MACOSX")) + continue; + filtered_entries.emplace_back(std::move(path), stat.m_uncomp_size); + } + } + // sorting files will help adjust_stack function to not create multiple same folders + std::sort(filtered_entries.begin(), filtered_entries.end(), [](const std::pair& p1, const std::pair& p2){ return p1.first.string() < p2.first.string(); }); + size_t entry_count = 0; + size_t depth = 1; + for (const auto& entry : filtered_entries) + { + const boost::filesystem::path& path = entry.first; + std::shared_ptr parent(nullptr); + + depth = std::max(depth, adjust_stack(path, stack)); + if (!stack.empty()) + parent = stack.back(); + if (std::regex_match(path.extension().string(), pattern_drop)) { // this leaves out non-compatible files + std::shared_ptr new_node = m_avc->get_model()->AddFile(parent, boost::nowide::widen(path.filename().string()), false); + new_node->set_fullpath(/*std::move(path)*/path); // filename string to wstring? + new_node->set_size(entry.second); + entry_count++; + } + } + if (entry_count == 1) + on_all_button(); + + toggle_column->SetWidth((4 + depth) * em); + + wxBoxSizer* btn_sizer = create_btn_sizer(); + + topSizer->Add(m_avc, 1, wxEXPAND | wxALL, 10); + topSizer->Add(btn_sizer, 0, wxEXPAND | wxALL, 10); + this->SetSizer(topSizer); + SetMinSize(wxSize(40 * em, 30 * em)); + + for (auto btn : m_button_list) + wxGetApp().UpdateDarkUI(btn); +} + +void FileArchiveDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + int em = em_unit(); + BOOST_LOG_TRIVIAL(error) << "on_dpi_changed"; + + for (auto btn : m_button_list) { + btn->SetMinSize(BTN_SIZE); + btn->SetCornerRadius(FromDIP(12)); + } + + const wxSize& size = wxSize(45 * em, 40 * em); + SetSize(size); + //m_tree->Rescale(em); + + Fit(); + Refresh(); +} + +void FileArchiveDialog::on_open_button() +{ + wxDataViewItemArray top_items; + m_avc->get_model()->GetChildren(wxDataViewItem(nullptr), top_items); + + std::function deep_fill = [&paths = m_selected_paths_w_size, &deep_fill](ArchiveViewNode* node){ + if (node == nullptr) + return; + if (node->get_children().empty()) { + if (node->get_toggle()) + paths.emplace_back(node->get_fullpath(), node->get_size()); + } else { + for (std::shared_ptr child : node->get_children()) + deep_fill(child.get()); + } + }; + + for (const auto& item : top_items) + { + ArchiveViewNode* node = static_cast(item.GetID()); + deep_fill(node); + } + this->EndModal(wxID_OK); +} + +void FileArchiveDialog::on_all_button() +{ + + wxDataViewItemArray top_items; + m_avc->get_model()->GetChildren(wxDataViewItem(nullptr), top_items); + + std::function deep_fill = [&deep_fill](ArchiveViewNode* node) { + if (node == nullptr) + return; + node->set_toggle(true); + if (!node->get_children().empty()) { + for (std::shared_ptr child : node->get_children()) + deep_fill(child.get()); + } + }; + + for (const auto& item : top_items) + { + ArchiveViewNode* node = static_cast(item.GetID()); + deep_fill(node); + // Fix for linux, where Refresh or Update wont help to redraw toggle checkboxes. + // It should be enough to call ValueChanged for top items. + m_avc->get_model()->ValueChanged(item, 0); + } + + Refresh(); +} + +void FileArchiveDialog::on_none_button() +{ + wxDataViewItemArray top_items; + m_avc->get_model()->GetChildren(wxDataViewItem(nullptr), top_items); + + std::function deep_fill = [&deep_fill](ArchiveViewNode* node) { + if (node == nullptr) + return; + node->set_toggle(false); + if (!node->get_children().empty()) { + for (std::shared_ptr child : node->get_children()) + deep_fill(child.get()); + } + }; + + for (const auto& item : top_items) + { + ArchiveViewNode* node = static_cast(item.GetID()); + deep_fill(node); + // Fix for linux, where Refresh or Update wont help to redraw toggle checkboxes. + // It should be enough to call ValueChanged for top items. + m_avc->get_model()->ValueChanged(item, 0); + } + + this->Refresh(); +} + +//Orca: Apply buttons style +wxBoxSizer* FileArchiveDialog::create_btn_sizer() +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + + auto apply_highlighted_btn_colors = [](Button* btn) { + btn->SetBackgroundColor(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))); + + btn->SetBorderColor(StateColor(std::pair(wxColour(0, 150, 136), StateColor::Normal))); + + btn->SetTextColor(StateColor(std::pair(wxColour(255, 255, 254), StateColor::Normal))); + }; + + auto apply_std_btn_colors = [](Button* btn) { + btn->SetBackgroundColor(StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(wxColour(255, 255, 255), StateColor::Normal))); + + btn->SetBorderColor(StateColor(std::pair(wxColour(38, 46, 48), StateColor::Normal))); + + btn->SetTextColor(StateColor(std::pair(wxColour(38, 46, 48), StateColor::Normal))); + }; + + auto style_btn = [this, apply_highlighted_btn_colors, apply_std_btn_colors](Button* btn, bool highlight) { + btn->SetMinSize(BTN_SIZE); + btn->SetCornerRadius(FromDIP(12)); + if (highlight) + apply_highlighted_btn_colors(btn); + else + apply_std_btn_colors(btn); + }; + + Button* all_btn = new Button(this, _L("All")); + style_btn(all_btn, false); + all_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { on_all_button(); }); + btn_sizer->Add(all_btn, 0, wxALIGN_CENTER_VERTICAL); + m_button_list.push_back(all_btn); + + Button* none_btn = new Button(this, _L("None")); + style_btn(none_btn, false); + none_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { on_none_button(); }); + btn_sizer->Add(none_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list.push_back(none_btn); + + btn_sizer->AddStretchSpacer(); + + Button* open_btn = new Button(this, _L("Open")); + style_btn(open_btn, true); + open_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { on_open_button(); }); + open_btn->SetFocus(); + open_btn->SetId(wxID_OK); + btn_sizer->Add(open_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list.push_back(open_btn); + + Button* cancel_btn = new Button(this, _L("Cancel")); + style_btn(cancel_btn, false); + cancel_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { this->EndModal(wxID_CANCEL); }); + cancel_btn->SetId(wxID_CANCEL); + btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list.push_back(cancel_btn); + + return btn_sizer; +} + +} // namespace GUI +} // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/FileArchiveDialog.hpp b/src/slic3r/GUI/FileArchiveDialog.hpp new file mode 100644 index 0000000000..decb960589 --- /dev/null +++ b/src/slic3r/GUI/FileArchiveDialog.hpp @@ -0,0 +1,127 @@ +#ifndef slic3r_GUI_FileArchiveDialog_hpp_ +#define slic3r_GUI_FileArchiveDialog_hpp_ + +#include "GUI_Utils.hpp" +#include "libslic3r/miniz_extension.hpp" + +#include +#include +#include +#include +#include "wxExtensions.hpp" + +namespace Slic3r { +namespace GUI { + +class ArchiveViewCtrl; + +class ArchiveViewNode +{ +public: + ArchiveViewNode(const wxString& name) : m_name(name) {} + + std::vector>& get_children() { return m_children; } + void set_parent(std::shared_ptr parent) { m_parent = parent; } + // On Linux, get_parent cannot just return size of m_children. ItemAdded would than crash. + std::shared_ptr get_parent() const { return m_parent; } + bool is_container() const { return m_container; } + void set_container(bool is_container) { m_container = is_container; } + wxString get_name() const { return m_name; } + void set_name(const wxString& name) { m_name = name; } + bool get_toggle() const { return m_toggle; } + void set_toggle(bool toggle) { m_toggle = toggle; } + bool get_is_folder() const { return m_folder; } + void set_is_folder(bool is_folder) { m_folder = is_folder; } + void set_fullpath(boost::filesystem::path path) { m_fullpath = path; } + boost::filesystem::path get_fullpath() const { return m_fullpath; } + void set_size(size_t size) { m_size = size; } + size_t get_size() const { return m_size; } + +private: + wxString m_name; + std::shared_ptr m_parent { nullptr }; + std::vector> m_children; + + bool m_toggle { false }; + bool m_folder { false }; + boost::filesystem::path m_fullpath; + bool m_container { false }; + size_t m_size { 0 }; +}; + +class ArchiveViewModel : public wxDataViewModel +{ +public: + ArchiveViewModel(wxWindow* parent); + ~ArchiveViewModel(); + + /* wxDataViewItem AddFolder(wxDataViewItem& parent, wxString name); + wxDataViewItem AddFile(wxDataViewItem& parent, wxString name);*/ + + std::shared_ptr AddFile(std::shared_ptr parent,const wxString& name, bool container); + + wxString GetColumnType(unsigned int col) const override; + unsigned int GetColumnCount() const override { return 2; } + + void Rescale(); + void Delete(const wxDataViewItem& item); + void Clear(); + + wxDataViewItem GetParent(const wxDataViewItem& item) const override; + unsigned int GetChildren(const wxDataViewItem& parent, wxDataViewItemArray& array) const override; + + void SetAssociatedControl(ArchiveViewCtrl* ctrl) { m_ctrl = ctrl; } + + void GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const override; + bool SetValue(const wxVariant& variant, const wxDataViewItem& item, unsigned int col) override; + + void untoggle_folders(const wxDataViewItem& item); + + bool IsEnabled(const wxDataViewItem& item, unsigned int col) const override; + bool IsContainer(const wxDataViewItem& item) const override; + // Is the container just a header or an item with all columns + // In our case it is an item with all columns + bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; } + +protected: + wxWindow* m_parent { nullptr }; + ArchiveViewCtrl* m_ctrl { nullptr }; + std::vector> m_top_children; +}; + +class ArchiveViewCtrl : public wxDataViewCtrl +{ + public: + ArchiveViewCtrl(wxWindow* parent, wxSize size); + ~ArchiveViewCtrl(); + + ArchiveViewModel* get_model() const {return m_model; } +protected: + ArchiveViewModel* m_model; +}; + + +class FileArchiveDialog : public DPIDialog +{ +public: + FileArchiveDialog(wxWindow* parent_window, mz_zip_archive* archive, std::vector>& selected_paths_w_size); + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + + void on_open_button(); + void on_all_button(); + void on_none_button(); + + wxBoxSizer* create_btn_sizer(); + + // chosen files are written into this vector and returned to caller via reference. + // path in archive and decompressed size. The size can be used to distinguish between files with same path. + std::vector>& m_selected_paths_w_size; + ArchiveViewCtrl* m_avc; + std::vector m_button_list; +}; + +} // namespace GU +} // namespace Slic3r +#endif // slic3r_GUI_FileArchiveDialog_hpp_ \ No newline at end of file diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index cec2f1e405..e2a4f00a56 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -547,7 +547,7 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, f static const ImVec4 LINE_NUMBER_COLOR = ImGuiWrapper::COL_ORANGE_LIGHT; static const ImVec4 SELECTION_RECT_COLOR = ImGuiWrapper::COL_ORANGE_DARK; - static const ImVec4 COMMAND_COLOR = { 0.8f, 0.8f, 0.0f, 1.0f }; + static const ImVec4 COMMAND_COLOR = {0.8f, 0.8f, 0.0f, 1.0f}; static const ImVec4 PARAMETERS_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }; static const ImVec4 COMMENT_COLOR = { 0.7f, 0.7f, 0.7f, 1.0f }; @@ -1732,12 +1732,14 @@ void GCodeViewer::update_moves_slider(bool set_to_max) ++count; } + bool keep_min = m_moves_slider->GetActiveValue() == m_moves_slider->GetMinValue(); + m_moves_slider->SetSliderValues(values); m_moves_slider->SetSliderAlternateValues(alternate_values); m_moves_slider->SetMaxValue(view.endpoints.last - view.endpoints.first); m_moves_slider->SetSelectionSpan(view.current.first - view.endpoints.first, view.current.last - view.endpoints.first); if (set_to_max) - m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); + m_moves_slider->SetHigherValue(keep_min ? m_moves_slider->GetMinValue() : m_moves_slider->GetMaxValue()); } void GCodeViewer::update_layers_slider_mode() @@ -4080,16 +4082,19 @@ void GCodeViewer::render_all_plates_stats(const std::vectorget("use_inches") == "1"; float window_padding = 4.0f * m_scale; const float icon_size = ImGui::GetTextLineHeight() * 0.7; - std::vector offsets; + std::map offsets; std::map model_volume_of_extruders_all_plates; // map std::map flushed_volume_of_extruders_all_plates; // map std::map wipe_tower_volume_of_extruders_all_plates; // map + std::map support_volume_of_extruders_all_plates; // map std::vector model_used_filaments_m_all_plates; std::vector model_used_filaments_g_all_plates; std::vector flushed_filaments_m_all_plates; std::vector flushed_filaments_g_all_plates; std::vector wipe_tower_used_filaments_m_all_plates; std::vector wipe_tower_used_filaments_g_all_plates; + std::vector support_used_filaments_m_all_plates; + std::vector support_used_filaments_g_all_plates; float total_time_all_plates = 0.0f; float total_cost_all_plates = 0.0f; bool show_detailed_statistics_page = false; @@ -4098,6 +4103,7 @@ void GCodeViewer::render_all_plates_stats(const std::vectorget_extruders(true); for (size_t extruder_id : plate_extruders) { extruder_id -= 1; - if (plate_print_statistics.volumes_per_extruder.find(extruder_id) == plate_print_statistics.volumes_per_extruder.end()) - flushed_volume_of_extruders_all_plates[extruder_id] += 0; + if (plate_print_statistics.model_volumes_per_extruder.find(extruder_id) == plate_print_statistics.model_volumes_per_extruder.end()) + model_volume_of_extruders_all_plates[extruder_id] += 0; else { - double model_volume = plate_print_statistics.volumes_per_extruder.at(extruder_id); + double model_volume = plate_print_statistics.model_volumes_per_extruder.at(extruder_id); model_volume_of_extruders_all_plates[extruder_id] += model_volume; } if (plate_print_statistics.flush_per_filament.find(extruder_id) == plate_print_statistics.flush_per_filament.end()) @@ -4197,6 +4203,12 @@ void GCodeViewer::render_all_plates_stats(const std::vector(m_time_estimate_mode)]; total_time_all_plates += plate_time_mode.time; @@ -4227,6 +4239,13 @@ void GCodeViewer::render_all_plates_stats(const std::vectorsecond, it->first); + if (support_filament_m != 0.0 || support_filament_g != 0.0) + displayed_columns |= ColumnData::Support; + support_used_filaments_m_all_plates.push_back(support_filament_m); + support_used_filaments_g_all_plates.push_back(support_filament_g); + } char buff[64]; double longest_str = 0.0; @@ -4236,21 +4255,30 @@ void GCodeViewer::render_all_plates_stats(const std::vector>> title_columns; + if (displayed_columns & ColumnData::Model) { + title_columns.push_back({ _u8L("Filament"), {""} }); + title_columns.push_back({ _u8L("Model"), {buff} }); } - else if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) { - offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), {buff}}, {_u8L("Flushed"), {buff}}, {_u8L("Total"), {buff}} }, icon_size); - append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, {_u8L("Total"), offsets[3]} }); + if (displayed_columns & ColumnData::Support) { + title_columns.push_back({ _u8L("Support"), {buff} }); } - else { - if (displayed_columns != (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) - displayed_columns = (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower); - - offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), {buff}}, {_u8L("Flushed"), {buff}}, {_u8L("Tower"), {buff}}, {_u8L("Total"), {buff}} }, icon_size); - append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, {_u8L("Tower"), offsets[3]}, {_u8L("Total"), offsets[4]} }); + if (displayed_columns & ColumnData::Flushed) { + title_columns.push_back({ _u8L("Flushed"), {buff} }); } + if (displayed_columns & ColumnData::WipeTower) { + title_columns.push_back({ _u8L("Tower"), {buff} }); + } + if ((displayed_columns & ~ColumnData::Model) > 0) { + title_columns.push_back({ _u8L("Total"), {buff} }); + } + auto offsets_ = calculate_offsets(title_columns, icon_size); + std::vector> title_offsets; + for (int i = 0; i < offsets_.size(); i++) { + title_offsets.push_back({ title_columns[i].first, offsets_[i] }); + offsets[title_columns[i].first] = offsets_[i]; + } + append_headers(title_offsets); } // item @@ -4259,39 +4287,43 @@ void GCodeViewer::render_all_plates_stats(const std::vector> columns_offsets; - columns_offsets.push_back({ std::to_string(it->first + 1), offsets[0] }); + columns_offsets.push_back({ std::to_string(it->first + 1), offsets[_u8L("Filament")]}); char buf[64]; double unit_conver = imperial_units ? GizmoObjectManipulation::oz_to_g : 1.0; - if (displayed_columns == ColumnData::Model) { - char buf[64]; - ::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] }); + + float column_sum_m = 0.0f; + float column_sum_g = 0.0f; + if (displayed_columns & ColumnData::Model) { + if ((displayed_columns & ~ColumnData::Model) > 0) + ::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); + 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] / unit_conver); + columns_offsets.push_back({ buf, offsets[_u8L("Model")] }); + column_sum_m += model_used_filaments_m_all_plates[i]; + column_sum_g += model_used_filaments_g_all_plates[i]; } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) { - ::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] / 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]) / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); + if (displayed_columns & ColumnData::Support) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", support_used_filaments_m_all_plates[i], support_used_filaments_g_all_plates[i] / unit_conver); + columns_offsets.push_back({ buf, offsets[_u8L("Support")] }); + column_sum_m += support_used_filaments_m_all_plates[i]; + column_sum_g += support_used_filaments_g_all_plates[i]; } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) { - ::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] }); - + if (displayed_columns & ColumnData::Flushed) { ::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] }); - + columns_offsets.push_back({ buf, offsets[_u8L("Flushed")] }); + column_sum_m += flushed_filaments_m_all_plates[i]; + column_sum_g += flushed_filaments_g_all_plates[i]; + } + if (displayed_columns & ColumnData::WipeTower) { ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", wipe_tower_used_filaments_m_all_plates[i], wipe_tower_used_filaments_g_all_plates[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); - - ::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] + wipe_tower_used_filaments_m_all_plates[i]), - (model_used_filaments_g_all_plates[i] + flushed_filaments_g_all_plates[i] + wipe_tower_used_filaments_g_all_plates[i]) / unit_conver); - columns_offsets.push_back({ buf, offsets[4] }); + columns_offsets.push_back({ buf, offsets[_u8L("Tower")] }); + column_sum_m += wipe_tower_used_filaments_m_all_plates[i]; + column_sum_g += wipe_tower_used_filaments_g_all_plates[i]; + } + if ((displayed_columns & ~ColumnData::Model) > 0) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", column_sum_m, column_sum_g / unit_conver); + columns_offsets.push_back({ buf, offsets[_u8L("Total")] }); } append_item(filament_colors[it->first], columns_offsets); @@ -4686,19 +4718,90 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv std::vector wipe_tower_used_filaments_m; std::vector wipe_tower_used_filaments_g; double total_wipe_tower_used_filament_m = 0, total_wipe_tower_used_filament_g = 0; + std::vector support_used_filaments_m; + std::vector support_used_filaments_g; + double total_support_used_filament_m = 0, total_support_used_filament_g = 0; struct ColumnData { enum { Model = 1, Flushed = 2, WipeTower = 4, + Support = 1 << 3, }; }; int displayed_columns = 0; + std::map color_print_offsets; const PrintStatistics& ps = wxGetApp().plater()->get_partplate_list().get_current_fff_print().print_statistics(); double koef = imperial_units ? GizmoObjectManipulation::in_to_mm : 1000.0; double unit_conver = imperial_units ? GizmoObjectManipulation::oz_to_g : 1; + // used filament statistics + for (size_t extruder_id : m_extruder_ids) { + if (m_print_statistics.model_volumes_per_extruder.find(extruder_id) == m_print_statistics.model_volumes_per_extruder.end()) { + model_used_filaments_m.push_back(0.0); + model_used_filaments_g.push_back(0.0); + } + else { + double volume = m_print_statistics.model_volumes_per_extruder.at(extruder_id); + auto [model_used_filament_m, model_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); + model_used_filaments_m.push_back(model_used_filament_m); + model_used_filaments_g.push_back(model_used_filament_g); + total_model_used_filament_m += model_used_filament_m; + total_model_used_filament_g += model_used_filament_g; + displayed_columns |= ColumnData::Model; + } + } + + for (size_t extruder_id : m_extruder_ids) { + if (m_print_statistics.wipe_tower_volumes_per_extruder.find(extruder_id) == m_print_statistics.wipe_tower_volumes_per_extruder.end()) { + wipe_tower_used_filaments_m.push_back(0.0); + wipe_tower_used_filaments_g.push_back(0.0); + } + else { + double volume = m_print_statistics.wipe_tower_volumes_per_extruder.at(extruder_id); + auto [wipe_tower_used_filament_m, wipe_tower_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); + wipe_tower_used_filaments_m.push_back(wipe_tower_used_filament_m); + wipe_tower_used_filaments_g.push_back(wipe_tower_used_filament_g); + total_wipe_tower_used_filament_m += wipe_tower_used_filament_m; + total_wipe_tower_used_filament_g += wipe_tower_used_filament_g; + displayed_columns |= ColumnData::WipeTower; + } + } + + for (size_t extruder_id : m_extruder_ids) { + if (m_print_statistics.flush_per_filament.find(extruder_id) == m_print_statistics.flush_per_filament.end()) { + flushed_filaments_m.push_back(0.0); + flushed_filaments_g.push_back(0.0); + } + else { + double volume = m_print_statistics.flush_per_filament.at(extruder_id); + auto [flushed_filament_m, flushed_filament_g] = get_used_filament_from_volume(volume, extruder_id); + flushed_filaments_m.push_back(flushed_filament_m); + flushed_filaments_g.push_back(flushed_filament_g); + total_flushed_filament_m += flushed_filament_m; + total_flushed_filament_g += flushed_filament_g; + displayed_columns |= ColumnData::Flushed; + } + } + + for (size_t extruder_id : m_extruder_ids) { + if (m_print_statistics.support_volumes_per_extruder.find(extruder_id) == m_print_statistics.support_volumes_per_extruder.end()) { + support_used_filaments_m.push_back(0.0); + support_used_filaments_g.push_back(0.0); + } + else { + double volume = m_print_statistics.support_volumes_per_extruder.at(extruder_id); + auto [used_filament_m, used_filament_g] = get_used_filament_from_volume(volume, extruder_id); + support_used_filaments_m.push_back(used_filament_m); + support_used_filaments_g.push_back(used_filament_g); + total_support_used_filament_m += used_filament_m; + total_support_used_filament_g += used_filament_g; + displayed_columns |= ColumnData::Support; + } + } + + // extrusion paths section -> title ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); @@ -4761,9 +4864,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv { // calculate used filaments data for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.volumes_per_extruder.find(extruder_id) == m_print_statistics.volumes_per_extruder.end()) + if (m_print_statistics.model_volumes_per_extruder.find(extruder_id) == m_print_statistics.model_volumes_per_extruder.end()) continue; - double volume = m_print_statistics.volumes_per_extruder.at(extruder_id); + double volume = m_print_statistics.model_volumes_per_extruder.at(extruder_id); auto [model_used_filament_m, model_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); model_used_filaments_m.push_back(model_used_filament_m); @@ -4776,76 +4879,36 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } case EViewType::ColorPrint: { - for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.volumes_per_extruder.find(extruder_id) == m_print_statistics.volumes_per_extruder.end()) { - model_used_filaments_m.push_back(0.0); - model_used_filaments_g.push_back(0.0); - } - else { - double volume = m_print_statistics.volumes_per_extruder.at(extruder_id); - auto [model_used_filament_m, model_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); - model_used_filaments_m.push_back(model_used_filament_m); - model_used_filaments_g.push_back(model_used_filament_g); - total_model_used_filament_m += model_used_filament_m; - total_model_used_filament_g += model_used_filament_g; - displayed_columns |= ColumnData::Model; - } - } - - for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.wipe_tower_volumes_per_extruder.find(extruder_id) == m_print_statistics.wipe_tower_volumes_per_extruder.end()) { - wipe_tower_used_filaments_m.push_back(0.0); - wipe_tower_used_filaments_g.push_back(0.0); - } - else { - double volume = m_print_statistics.wipe_tower_volumes_per_extruder.at(extruder_id); - auto [wipe_tower_used_filament_m, wipe_tower_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); - wipe_tower_used_filaments_m.push_back(wipe_tower_used_filament_m); - wipe_tower_used_filaments_g.push_back(wipe_tower_used_filament_g); - total_wipe_tower_used_filament_m += wipe_tower_used_filament_m; - total_wipe_tower_used_filament_g += wipe_tower_used_filament_g; - displayed_columns |= ColumnData::WipeTower; - } - } - - for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.flush_per_filament.find(extruder_id) == m_print_statistics.flush_per_filament.end()) { - flushed_filaments_m.push_back(0.0); - flushed_filaments_g.push_back(0.0); - } - else { - double volume = m_print_statistics.flush_per_filament.at(extruder_id); - auto [flushed_filament_m, flushed_filament_g] = get_used_filament_from_volume(volume, extruder_id); - flushed_filaments_m.push_back(flushed_filament_m); - flushed_filaments_g.push_back(flushed_filament_g); - total_flushed_filament_m += flushed_filament_m; - total_flushed_filament_g += flushed_filament_g; - displayed_columns |= ColumnData::Flushed; - } - } - std::vector total_filaments; char buffer[64]; ::sprintf(buffer, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", ps.total_used_filament / /*1000*/koef, ps.total_weight / unit_conver); total_filaments.push_back(buffer); - if (displayed_columns == ColumnData::Model) { - offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, {_u8L("Total"), total_filaments} }, icon_size); - append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[2]}}); + std::vector>> title_columns; + if (displayed_columns & ColumnData::Model) { + title_columns.push_back({ _u8L("Filament"), {""} }); + title_columns.push_back({ _u8L("Model"), total_filaments }); } - else if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) { - offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, {_u8L("Total"), total_filaments} }, icon_size); - append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, {_u8L("Total"), offsets[3]} }); + if (displayed_columns & ColumnData::Support) { + title_columns.push_back({ _u8L("Support"), total_filaments }); } - else { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "displayed_columns: " << displayed_columns; - if (displayed_columns != (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) - displayed_columns = (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower); - - offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, {_u8L("Tower"), total_filaments}, {_u8L("Total"), total_filaments} }, icon_size); - append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, {_u8L("Tower"), offsets[3]}, {_u8L("Total"), offsets[4]} }); + if (displayed_columns & ColumnData::Flushed) { + title_columns.push_back({ _u8L("Flushed"), total_filaments }); } + if (displayed_columns & ColumnData::WipeTower) { + title_columns.push_back({ _u8L("Tower"), total_filaments }); + } + if ((displayed_columns & ~ColumnData::Model) > 0) { + title_columns.push_back({ _u8L("Total"), total_filaments }); + } + auto offsets_ = calculate_offsets(title_columns, icon_size); + std::vector> title_offsets; + for (int i = 0; i < offsets_.size(); i++) { + title_offsets.push_back({ title_columns[i].first, offsets_[i] }); + color_print_offsets[title_columns[i].first] = offsets_[i]; + } + append_headers(title_offsets); break; } @@ -4986,40 +5049,42 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv const bool filament_visible = m_tools.m_tool_visibles[extruder_idx]; if (i < model_used_filaments_m.size() && i < model_used_filaments_g.size()) { std::vector> columns_offsets; - columns_offsets.push_back({ std::to_string(extruder_idx + 1), offsets[0] }); + columns_offsets.push_back({ std::to_string(extruder_idx + 1), color_print_offsets[_u8L("Filament")]}); char buf[64]; - if (displayed_columns == ColumnData::Model) { - 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] / unit_conver); - columns_offsets.push_back({ buf, offsets[2] }); + float column_sum_m = 0.0f; + float column_sum_g = 0.0f; + if (displayed_columns & ColumnData::Model) { + if ((displayed_columns & ~ColumnData::Model) > 0) + ::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); + else + ::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, color_print_offsets[_u8L("Model")] }); + column_sum_m += model_used_filaments_m[i]; + column_sum_g += model_used_filaments_g[i]; } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) { - ::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] / 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]) / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); + if (displayed_columns & ColumnData::Support) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", support_used_filaments_m[i], support_used_filaments_g[i] / unit_conver); + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Support")] }); + column_sum_m += support_used_filaments_m[i]; + column_sum_g += support_used_filaments_g[i]; } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) { - ::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] }); - + if (displayed_columns & ColumnData::Flushed) { ::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] }); - + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Flushed")]}); + column_sum_m += flushed_filaments_m[i]; + column_sum_g += flushed_filaments_g[i]; + } + if (displayed_columns & ColumnData::WipeTower) { ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", wipe_tower_used_filaments_m[i], wipe_tower_used_filaments_g[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); - - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m[i] + flushed_filaments_m[i] + wipe_tower_used_filaments_m[i]), - (model_used_filaments_g[i] + flushed_filaments_g[i] + wipe_tower_used_filaments_g[i]) / unit_conver); - columns_offsets.push_back({ buf, offsets[4] }); + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Tower")] }); + column_sum_m += wipe_tower_used_filaments_m[i]; + column_sum_g += wipe_tower_used_filaments_g[i]; + } + if ((displayed_columns & ~ColumnData::Model) > 0) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", column_sum_m, column_sum_g / unit_conver); + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Total")] }); } - append_item(EItemType::Rect, m_tools.m_tool_colors[extruder_idx], columns_offsets, false, filament_visible, [this, extruder_idx]() { m_tools.m_tool_visibles[extruder_idx] = !m_tools.m_tool_visibles[extruder_idx]; @@ -5035,6 +5100,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv if (need_scrollable) ImGui::EndChild(); + // Sum of all rows char buf[64]; if (m_extruder_ids.size() > 1) { // Separator @@ -5045,42 +5111,32 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv window->DrawList->AddLine(separator.Min, ImVec2(separator.Max.x, separator.Min.y), ImGui::GetColorU32(ImGuiCol_Separator)); std::vector> columns_offsets; - columns_offsets.push_back({ _u8L("Total"), offsets[0] }); - if (displayed_columns == ColumnData::Model) { - ::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); + columns_offsets.push_back({ _u8L("Total"), color_print_offsets[_u8L("Filament")]}); + if (displayed_columns & ColumnData::Model) { + if ((displayed_columns & ~ColumnData::Model) > 0) + ::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); + else + ::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, color_print_offsets[_u8L("Model")] }); } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) { - ::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 / 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 , (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); + if (displayed_columns & ColumnData::Support) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_support_used_filament_m, total_support_used_filament_g / unit_conver); + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Support")] }); } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) { - ::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] }); - + if (displayed_columns & ColumnData::Flushed) { ::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] }); - + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Flushed")] }); + } + if (displayed_columns & ColumnData::WipeTower) { ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_wipe_tower_used_filament_m, total_wipe_tower_used_filament_g / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); - - 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 + total_wipe_tower_used_filament_m, (total_model_used_filament_g + total_flushed_filament_g + total_wipe_tower_used_filament_g) / unit_conver); - columns_offsets.push_back({ buf, offsets[4] }); - - append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets); + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Tower")] }); } + if ((displayed_columns & ~ColumnData::Model) > 0) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m + total_support_used_filament_m + total_flushed_filament_m + total_wipe_tower_used_filament_m, + (total_model_used_filament_g + total_support_used_filament_g + total_flushed_filament_g + total_wipe_tower_used_filament_g) / unit_conver); + columns_offsets.push_back({ buf, color_print_offsets[_u8L("Total")] }); + } + append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets); } //BBS display filament change times @@ -5521,7 +5577,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); imgui.title(time_title); - std::string filament_str = _u8L("Filament"); + std::string total_filament_str = _u8L("Total Filament"); + std::string model_filament_str = _u8L("Model Filament"); std::string cost_str = _u8L("Cost"); std::string prepare_str = _u8L("Prepare time"); std::string print_str = _u8L("Model printing time"); @@ -5535,7 +5592,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv max_len += std::max(ImGui::CalcTextSize(cost_str.c_str()).x, std::max(ImGui::CalcTextSize(print_str.c_str()).x, std::max(std::max(ImGui::CalcTextSize(prepare_str.c_str()).x, ImGui::CalcTextSize(total_str.c_str()).x), - ImGui::CalcTextSize(filament_str.c_str()).x))); + std::max(ImGui::CalcTextSize(total_filament_str.c_str()).x, ImGui::CalcTextSize(model_filament_str.c_str()).x)))); else max_len += std::max(ImGui::CalcTextSize(print_str.c_str()).x, (std::max(ImGui::CalcTextSize(prepare_str.c_str()).x, ImGui::CalcTextSize(total_str.c_str()).x))); @@ -5545,24 +5602,34 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv //BBS display filament cost ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); - imgui.text(filament_str + ":"); + imgui.text(total_filament_str + ":"); ImGui::SameLine(max_len); - //BBS: use current plater's print statistics bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; char buf[64]; - ::sprintf(buf, imperial_units ? "%.2f in" : "%.2f m", ps.total_used_filament / /*1000*/koef); + ::sprintf(buf, imperial_units ? "%.2f in" : "%.2f m", ps.total_used_filament / koef); imgui.text(buf); ImGui::SameLine(); ::sprintf(buf, imperial_units ? " %.2f oz" : " %.2f g", ps.total_weight / unit_conver); imgui.text(buf); + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + imgui.text(model_filament_str + ":"); + ImGui::SameLine(max_len); + auto exlude_m = total_support_used_filament_m + total_flushed_filament_m + total_wipe_tower_used_filament_m; + auto exlude_g = total_support_used_filament_g + total_flushed_filament_g + total_wipe_tower_used_filament_g; + ::sprintf(buf, imperial_units ? "%.2f in" : "%.2f m", ps.total_used_filament / koef - exlude_m); + imgui.text(buf); + ImGui::SameLine(); + ::sprintf(buf, imperial_units ? " %.2f oz" : " %.2f g", (ps.total_weight - exlude_g) / unit_conver); + imgui.text(buf); + //BBS: display cost of filaments ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(); imgui.text(cost_str + ":"); ImGui::SameLine(max_len); - ::sprintf(buf, "%.2f", ps.total_cost); imgui.text(buf); } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index d346cec8d0..a378f63970 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1,13 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, David Kocík @kocikdav, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Vojtěch Král @vojtechkral -///|/ Copyright (c) BambuStudio 2023 manch1n @manch1n -///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill -///|/ Copyright (c) 2020 Benjamin Greiner -///|/ Copyright (c) 2019 John Drake @foxox -///|/ Copyright (c) 2019 BeldrothTheGold @BeldrothTheGold -///|/ Copyright (c) 2019 Thomas Moore -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "GLCanvas3D.hpp" @@ -205,10 +195,10 @@ void GLCanvas3D::LayersEditing::show_tooltip_information(const GLCanvas3D& canva } caption_max += GImGui->Style.WindowPadding.x + imgui.scaled(1); - float font_size = ImGui::GetFontSize(); - ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + float scale = canvas.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0.0f, GImGui->Style.FramePadding.y}); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding ImGui::ImageButton3(normal_id, hover_id, button_size); if (ImGui::IsItemHovered()) { @@ -657,7 +647,7 @@ void GLCanvas3D::LayersEditing::generate_layer_height_texture() bool level_of_detail_2nd_level = true; m_layers_texture.cells = Slic3r::generate_layer_height_texture( *m_slicing_parameters, - Slic3r::generate_object_layers(*m_slicing_parameters, m_layer_height_profile), + Slic3r::generate_object_layers(*m_slicing_parameters, m_layer_height_profile, false), m_layers_texture.data.data(), m_layers_texture.height, m_layers_texture.width, level_of_detail_2nd_level); m_layers_texture.valid = true; } @@ -1024,6 +1014,8 @@ wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent); wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent); wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent); +wxDEFINE_EVENT(EVT_GLCANVAS_SWITCH_TO_OBJECT, SimpleEvent); +wxDEFINE_EVENT(EVT_GLCANVAS_SWITCH_TO_GLOBAL, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_COLLAPSE_SIDEBAR, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RENDER_TIMER, wxTimerEvent/*RenderTimerEvent*/); @@ -1096,6 +1088,25 @@ void GLCanvas3D::load_arrange_settings() m_arrange_settings_fff_seq_print.is_seq_print = true; } +GLCanvas3D::ArrangeSettings& GLCanvas3D::get_arrange_settings() +{ + PrinterTechnology ptech = current_printer_technology(); + + auto* ptr = &m_arrange_settings_fff; + + if (ptech == ptSLA) { + ptr = &m_arrange_settings_sla; + } + else if (ptech == ptFFF) { + if (wxGetApp().global_print_sequence() == PrintSequence::ByObject) + ptr = &m_arrange_settings_fff_seq_print; + else + ptr = &m_arrange_settings_fff; + } + + return *ptr; +} + int GLCanvas3D::GetHoverId() { if (m_hover_plate_idxs.size() == 0) { @@ -1152,7 +1163,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed) m_retina_helper.reset(new RetinaHelper(canvas)); #endif // ENABLE_RETINA_GL } - + m_timer_set_color.Bind(wxEVT_TIMER, &GLCanvas3D::on_set_color_timer, this); load_arrange_settings(); m_selection.set_volumes(&m_volumes.volumes); @@ -1347,7 +1358,36 @@ ModelInstanceEPrintVolumeState GLCanvas3D::check_volumes_outside_state() const return state; } -void GLCanvas3D::toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo, int instance_idx) +void GLCanvas3D::toggle_selected_volume_visibility(bool selected_visible) +{ + m_render_sla_auxiliaries = !selected_visible; + if (selected_visible) { + const Selection::IndicesList &idxs = m_selection.get_volume_idxs(); + if (idxs.size() > 0) { + for (GLVolume *vol : m_volumes.volumes) { + if (vol->composite_id.object_id >= 1000 && vol->composite_id.object_id < 1000 + wxGetApp().plater()->get_partplate_list().get_plate_count()) + continue; // the wipe tower + if (vol->composite_id.volume_id >= 0) { + vol->is_active = false; + } + } + for (unsigned int idx : idxs) { + GLVolume *v = const_cast(m_selection.get_volume(idx)); + v->is_active = true; + } + } + } else { // show all + for (GLVolume *vol : m_volumes.volumes) { + if (vol->composite_id.object_id >= 1000 && vol->composite_id.object_id < 1000 + wxGetApp().plater()->get_partplate_list().get_plate_count()) + continue; // the wipe tower + if (vol->composite_id.volume_id >= 0) { + vol->is_active = true; + } + } + } +} + +void GLCanvas3D::toggle_sla_auxiliaries_visibility(bool visible, const ModelObject *mo, int instance_idx) { if (current_printer_technology() != ptSLA) return; @@ -1771,7 +1811,9 @@ void GLCanvas3D::render(bool only_init) if (!is_initialized() && !init()) return; - + if (m_canvas_type == ECanvasType::CanvasView3D && m_gizmos.get_current_type() == GLGizmosManager::Undefined) { + enable_return_toolbar(false); + } if (!m_main_toolbar.is_enabled()) m_gcode_viewer.init(wxGetApp().get_mode(), wxGetApp().preset_bundle); @@ -2009,13 +2051,24 @@ void GLCanvas3D::render(bool only_init) m_render_stats.increment_fps_counter(); } -void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type, bool use_top_view, bool for_picking) +void GLCanvas3D::render_thumbnail(ThumbnailData & thumbnail_data, + unsigned int w, + unsigned int h, + const ThumbnailsParams &thumbnail_params, + Camera::EType camera_type, + bool use_top_view, + bool for_picking, + bool ban_light) { - render_thumbnail(thumbnail_data, w, h, thumbnail_params, m_volumes, camera_type, use_top_view, for_picking); + render_thumbnail(thumbnail_data, w, h, thumbnail_params, m_volumes, camera_type, use_top_view, for_picking, ban_light); } void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, - const GLVolumeCollection& volumes, Camera::EType camera_type, bool use_top_view, bool for_picking) + const GLVolumeCollection &volumes, + Camera::EType camera_type, + bool use_top_view, + bool for_picking, + bool ban_light) { GLShaderProgram* shader = nullptr; if (for_picking) @@ -2027,14 +2080,19 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, switch (OpenGLManager::get_framebuffers_type()) { case OpenGLManager::EFramebufferType::Arb: - { render_thumbnail_framebuffer(thumbnail_data, w, h, thumbnail_params, - wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type, use_top_view, for_picking); break; } + { render_thumbnail_framebuffer(thumbnail_data, w, h, thumbnail_params, wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type, + use_top_view, for_picking, ban_light); + break; + } case OpenGLManager::EFramebufferType::Ext: - { render_thumbnail_framebuffer_ext(thumbnail_data, w, h, thumbnail_params, - wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type, use_top_view, for_picking); break; } + { render_thumbnail_framebuffer_ext(thumbnail_data, w, h, thumbnail_params, wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type, + use_top_view, for_picking, ban_light); + break; + } default: - { render_thumbnail_legacy(thumbnail_data, w, h, thumbnail_params, - wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type); break; } + { render_thumbnail_legacy(thumbnail_data, w, h, thumbnail_params, wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type); + break; + } } } @@ -2085,6 +2143,13 @@ void GLCanvas3D::deselect_all() post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); } +void GLCanvas3D::exit_gizmo() { + if (m_gizmos.get_current_type() != GLGizmosManager::Undefined) { + m_gizmos.reset_all_states(); + m_gizmos.update_data(); + } +} + void GLCanvas3D::set_selected_visible(bool visible) { for (unsigned int i : m_selection.get_volume_idxs()) { @@ -2627,6 +2692,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_id); float w = dynamic_cast(m_config->option("prime_tower_width"))->value; float a = dynamic_cast(proj_cfg.option("wipe_tower_rotation_angle"))->value; + float tower_brim_width = dynamic_cast(m_config->option("prime_tower_brim_width"))->value; // BBS // float v = dynamic_cast(m_config->option("prime_volume"))->value; Vec3d plate_origin = ppl.get_plate(plate_id)->get_origin(); @@ -2637,7 +2703,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re const DynamicPrintConfig &print_cfg = wxGetApp().preset_bundle->prints.get_edited_preset().config; Vec3d wipe_tower_size = ppl.get_plate(plate_id)->estimate_wipe_tower_size(print_cfg, w, wipe_tower_data.depth); - const float margin = WIPE_TOWER_MARGIN; + const float margin = WIPE_TOWER_MARGIN + tower_brim_width; BoundingBoxf3 plate_bbox = wxGetApp().plater()->get_partplate_list().get_plate(plate_id)->get_bounding_box(); coordf_t plate_bbox_x_max_local_coord = plate_bbox.max(0) - plate_origin(0); coordf_t plate_bbox_y_max_local_coord = plate_bbox.max(1) - plate_origin(1); @@ -2793,6 +2859,7 @@ void GLCanvas3D::load_gcode_preview(const GCodeProcessorResult& gcode_result, co m_gcode_viewer.init(wxGetApp().get_mode(), wxGetApp().preset_bundle); m_gcode_viewer.load(gcode_result, *this->fff_print(), wxGetApp().plater()->build_volume(), exclude_bounding_box, wxGetApp().get_mode(), only_gcode); + m_gcode_viewer.get_moves_slider()->SetHigherValue(m_gcode_viewer.get_moves_slider()->GetMaxValue()); if (wxGetApp().is_editor()) { //BBS: always load shell at preview, do this in load_shells @@ -3170,15 +3237,25 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) } // BBS: use keypad to change extruder - case '1': + case '1': { + if (!m_timer_set_color.IsRunning()) { + m_timer_set_color.StartOnce(500); + break; + } + } + case '0': //Color logic for material 10 case '2': case '3': case '4': case '5': - case '6': + case '6': case '7': case '8': case '9': { + if (m_timer_set_color.IsRunning()) { + if (keyCode < '7') keyCode += 10; + m_timer_set_color.Stop(); + } if (m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation) obj_list->set_extruder_for_selected_items(keyCode - '0'); break; @@ -3540,51 +3617,44 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) if (m_canvas_type == CanvasPreview) { IMSlider *m_layers_slider = get_gcode_viewer().get_layers_slider(); IMSlider *m_moves_slider = get_gcode_viewer().get_moves_slider(); - if (evt.CmdDown() || evt.ShiftDown()) { - if (evt.GetKeyCode() == 'G') { - m_layers_slider->show_go_to_layer(true); - } - IMSlider *m_layers_slider = get_gcode_viewer().get_layers_slider(); - IMSlider *m_moves_slider = get_gcode_viewer().get_moves_slider(); - if (keyCode == WXK_UP || keyCode == WXK_DOWN) { - int new_pos; - if (m_layers_slider->GetSelection() == ssHigher) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + 5 : m_layers_slider->GetHigherValue() - 5; - m_layers_slider->SetHigherValue(new_pos); - } - else if (m_layers_slider->GetSelection() == ssLower) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + 5 : m_layers_slider->GetLowerValue() - 5; - m_layers_slider->SetLowerValue(new_pos); - } - if (m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); - // BBS set as dirty, update in render_gcode() - m_layers_slider->set_as_dirty(); - } else if (keyCode == WXK_LEFT || keyCode == WXK_RIGHT) { - const int new_pos = keyCode == WXK_RIGHT ? m_moves_slider->GetHigherValue() + 5 : m_moves_slider->GetHigherValue() - 5; - m_moves_slider->SetHigherValue(new_pos); - // BBS set as dirty, update in render_gcode() - m_moves_slider->set_as_dirty(); - } + int increment = (evt.CmdDown() || evt.ShiftDown()) ? 5 : 1; + if ((evt.CmdDown() || evt.ShiftDown()) && evt.GetKeyCode() == 'G') { + m_layers_slider->show_go_to_layer(true); } else if (keyCode == WXK_UP || keyCode == WXK_DOWN) { int new_pos; if (m_layers_slider->GetSelection() == ssHigher) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1; + new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + increment : m_layers_slider->GetHigherValue() - increment; m_layers_slider->SetHigherValue(new_pos); + m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); } else if (m_layers_slider->GetSelection() == ssLower) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + 1 : m_layers_slider->GetLowerValue() - 1; + new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + increment : m_layers_slider->GetLowerValue() - increment; m_layers_slider->SetLowerValue(new_pos); } - if (m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); - // BBS set as dirty, update in render_gcode() - m_layers_slider->set_as_dirty(); - } else if (keyCode == WXK_LEFT || keyCode == WXK_RIGHT) { - const int new_pos = keyCode == WXK_RIGHT ? m_moves_slider->GetHigherValue() + 1 : m_moves_slider->GetHigherValue() - 1; + } else if (keyCode == WXK_LEFT) { + if (m_moves_slider->GetHigherValue() == m_moves_slider->GetMinValue() && (m_layers_slider->GetHigherValue() > m_layers_slider->GetMinValue())) { + m_layers_slider->SetHigherValue(m_layers_slider->GetHigherValue() - 1); + m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); + } else { + m_moves_slider->SetHigherValue(m_moves_slider->GetHigherValue() - increment); + } + } else if (keyCode == WXK_RIGHT) { + if (m_moves_slider->GetHigherValue() == m_moves_slider->GetMaxValue() && (m_layers_slider->GetHigherValue() < m_layers_slider->GetMaxValue())) { + m_layers_slider->SetHigherValue(m_layers_slider->GetHigherValue() + 1); + m_moves_slider->SetHigherValue(m_moves_slider->GetMinValue()); + } else { + m_moves_slider->SetHigherValue(m_moves_slider->GetHigherValue() + increment); + } + } else if (keyCode == WXK_HOME || keyCode == WXK_END) { + const int new_pos = keyCode == WXK_HOME ? m_moves_slider->GetMinValue() : m_moves_slider->GetMaxValue(); m_moves_slider->SetHigherValue(new_pos); - // BBS set as dirty, update in render_gcode() m_moves_slider->set_as_dirty(); } + + if (m_layers_slider->is_dirty() && m_layers_slider->is_one_layer()) + m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); + m_dirty = true; } } @@ -3693,9 +3763,11 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) } else { auto cnv_size = get_canvas_size(); - auto screen_center_3d_pos = _mouse_to_3d({ cnv_size.get_width() * 0.5, cnv_size.get_height() * 0.5 }); - auto mouse_3d_pos = _mouse_to_3d({evt.GetX(), evt.GetY()}); + float z{0.f}; + auto screen_center_3d_pos = _mouse_to_3d({ cnv_size.get_width() * 0.5, cnv_size.get_height() * 0.5 }, &z); + auto mouse_3d_pos = _mouse_to_3d({evt.GetX(), evt.GetY()}, &z); Vec3d displacement = mouse_3d_pos - screen_center_3d_pos; + wxGetApp().plater()->get_camera().translate(displacement); auto origin_zoom = wxGetApp().plater()->get_camera().get_zoom(); _update_camera_zoom(delta); @@ -3718,6 +3790,14 @@ void GLCanvas3D::on_render_timer(wxTimerEvent& evt) // wxWakeUpIdle(); } +void GLCanvas3D::on_set_color_timer(wxTimerEvent& evt) +{ + auto obj_list = wxGetApp().obj_list(); + if (m_gizmos.get_current_type() != GLGizmosManager::MmuSegmentation) + obj_list->set_extruder_for_selected_items(1); + m_timer_set_color.Stop(); +} + void GLCanvas3D::schedule_extra_frame(int miliseconds) { @@ -4024,6 +4104,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.position = Vec2d(-1.0, -1.0); m_dirty = true; } + else if (evt.LeftDClick()) { + // switch to object panel if double click on object, otherwise switch to global panel if double click on background + if (selected_object_idx >= 0) + post_event(SimpleEvent(EVT_GLCANVAS_SWITCH_TO_OBJECT)); + else + post_event(SimpleEvent(EVT_GLCANVAS_SWITCH_TO_GLOBAL)); + } else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) { //BBS: add orient deactivate logic if (!m_gizmos.on_mouse(evt)) { @@ -4986,8 +5073,13 @@ std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point, const Ve Vec2d vmin(build_volume.min.x(), build_volume.min.y()), vmax(build_volume.max.x(), build_volume.max.y()); BoundingBoxf bbox(vmin, vmax); std::vector cells; - for (float x = bbox.min.x()+step(0)/2; x < bbox.max.x()-step(0)/2; x += step(0)) - for (float y = bbox.min.y()+step(1)/2; y < bbox.max.y()-step(1)/2; y += step(1)) + std::vector cells_ret; + auto min_x = start_point.x() - step(0) * int((start_point.x() - bbox.min.x()) / step(0)); + auto min_y = start_point.y() - step(1) * int((start_point.y() - bbox.min.y()) / step(1)); + cells.reserve(((bbox.max.x() - min_x) / step(0)) * ((bbox.max.y() - min_y) / step(1))); + cells_ret.reserve(cells.size()); + for (float x = min_x; x < bbox.max.x() - step(0) / 2; x += step(0)) + for (float y = min_y; y < bbox.max.y() - step(1) / 2; y += step(1)) { cells.emplace_back(x, y); } @@ -5012,10 +5104,10 @@ std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point, const Ve for (auto it = cells.begin(); it != cells.end(); ) { - if (inst_hull_2d.contains(Point(scale_(it->x()), scale_(it->y())))) - it = cells.erase(it); - else - it++; + if (!inst_hull_2d.contains(Point(scale_(it->x()), scale_(it->y())))) + cells_ret.push_back(*it); + + it++; } } } @@ -5025,8 +5117,8 @@ std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point, const Ve start(0) = bbox.center()(0); start(1) = bbox.center()(1); } - std::sort(cells.begin(), cells.end(), [start](const Vec2f& cell1, const Vec2f& cell2) {return (cell1 - start).norm() < (cell2 - start).norm(); }); - return cells; + std::sort(cells_ret.begin(), cells_ret.end(), [start](const Vec2f& cell1, const Vec2f& cell2) {return (cell1 - start).norm() < (cell2 - start).norm(); }); + return cells_ret; } Vec2f GLCanvas3D::get_nearest_empty_cell(const Vec2f start_point, const Vec2f step) @@ -5123,7 +5215,14 @@ 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)); + bool all_objects_are_short = std::all_of(fff_print()->objects().begin(), fff_print()->objects().end(), \ + [&](PrintObject* obj) { return obj->height() < scale_(fff_print()->config().nozzle_height.value - MARGIN_HEIGHT); }); + float shrink_factor; + if (all_objects_are_short) + shrink_factor = scale_(0.5 * MAX_OUTER_NOZZLE_DIAMETER - 0.1); + else + shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_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) { @@ -5433,7 +5532,7 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo PrinterTechnology ptech = current_printer_technology(); bool settings_changed = false; - float dist_min = 0.1f; // should be larger than 0 so objects won't touch + float dist_min = 0.f; // 0 means auto std::string dist_key = "min_object_distance", rot_key = "enable_rotation"; std::string bed_shrink_x_key = "bed_shrink_x", bed_shrink_y_key = "bed_shrink_y"; std::string multi_material_key = "allow_multi_materials_on_same_plate"; @@ -5444,17 +5543,12 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo bool seq_print = false; if (ptech == ptSLA) { - dist_min = 0.1f; postfix = "_sla"; } else if (ptech == ptFFF) { - auto co_opt = m_config->option>("print_sequence"); - if (co_opt && (co_opt->value == PrintSequence::ByObject)) { - dist_min = float(min_object_distance(*m_config)); + seq_print = &settings == &m_arrange_settings_fff_seq_print; + if (seq_print) { postfix = "_fff_seq_print"; - //BBS: - seq_print = true; } else { - dist_min = 0.0f; postfix = "_fff"; } } @@ -5479,6 +5573,8 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo appcfg->set("arrange", dist_key.c_str(), float_to_string_decimal_point(settings_out.distance)); settings_changed = true; } + imgui->text(_L("0 means auto spacing.")); + ImGui::Separator(); if (imgui->bbl_checkbox(_L("Auto rotate for arrangement"), settings.enable_rotation)) { settings_out.enable_rotation = settings.enable_rotation; @@ -5573,9 +5669,17 @@ void GLCanvas3D::_render_3d_navigator() style.Colors[ImGuizmo::COLOR::DIRECTION_X] = ImGuiWrapper::to_ImVec4(ColorRGBA::Y()); style.Colors[ImGuizmo::COLOR::DIRECTION_Y] = ImGuiWrapper::to_ImVec4(ColorRGBA::Z()); style.Colors[ImGuizmo::COLOR::DIRECTION_Z] = ImGuiWrapper::to_ImVec4(ColorRGBA::X()); + style.Colors[ImGuizmo::COLOR::TEXT] = m_is_dark ? ImVec4(224 / 255.f, 224 / 255.f, 224 / 255.f, 1.f) : ImVec4(.2f, .2f, .2f, 1.0f); + style.Colors[ImGuizmo::COLOR::FACE] = m_is_dark ? ImVec4(0.23f, 0.23f, 0.23f, 1.f) : ImVec4(0.77f, 0.77f, 0.77f, 1); strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_X], "y"); strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_Y], "z"); strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_Z], "x"); + strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_FRONT], _utf8("Front").c_str()); + strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_BACK], _utf8("Back").c_str()); + strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_TOP], _utf8("Top").c_str()); + strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_BOTTOM], _utf8("Bottom").c_str()); + strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_LEFT], _utf8("Left").c_str()); + strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_RIGHT], _utf8("Right").c_str()); float sc = get_scale(); #ifdef WIN32 @@ -5605,7 +5709,7 @@ void GLCanvas3D::_render_3d_navigator() const float size = 128 * sc; const bool dirty = ImGuizmo::ViewManipulate(cameraView, cameraProjection, ImGuizmo::OPERATION::ROTATE, ImGuizmo::MODE::WORLD, identityMatrix, camDistance, ImVec2(viewManipulateLeft, viewManipulateTop - size), - ImVec2(size, size), 0x10101010); + ImVec2(size, size), 0x00101010); if (dirty) { for (unsigned int c = 0; c < 4; ++c) { @@ -5646,7 +5750,7 @@ static void debug_output_thumbnail(const ThumbnailData& thumbnail_data) void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector& extruder_colors, - GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking) + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking, bool ban_light) { //BBS modify visible calc function int plate_idx = thumbnail_params.plate_id; @@ -5762,7 +5866,9 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); - + if (ban_light) { + glsafe(::glDisable(GL_BLEND)); + } const Transform3d &projection_matrix = camera.get_projection_matrix(); if (for_picking) { @@ -5816,12 +5922,16 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const else { shader->start_using(); shader->set_uniform("emission_factor", 0.1f); + shader->set_uniform("ban_light", ban_light); for (GLVolume* vol : visible_volumes) { //BBS set render color for thumbnails curr_color = vol->color; ColorRGBA new_color = adjust_color_for_rendering(curr_color); - vol->model.set_color(new_color); + if (ban_light) { + new_color[3] = (255 - vol->extruder_id) / 255.0f; + } + vol->model.set_color(new_color); shader->set_uniform("volume_world_matrix", vol->world_matrix()); //BBS set all volume to orange //shader->set_uniform("uniform_color", orange); @@ -5839,7 +5949,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const shader->set_uniform("projection_matrix", projection_matrix); const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); shader->set_uniform("view_normal_matrix", view_normal_matrix); - vol->simple_render(shader, model_objects, extruder_colors); + vol->simple_render(shader, model_objects, extruder_colors, ban_light); vol->is_active = is_active; } shader->stop_using(); @@ -5858,7 +5968,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector& extruder_colors, - GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking) + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking, bool ban_light) { thumbnail_data.set(w, h); if (!thumbnail_data.is_valid()) @@ -5911,7 +6021,8 @@ void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, uns glsafe(::glDrawBuffers(1, drawBufs)); if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) { - render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type, use_top_view, for_picking); + render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, + camera_type, use_top_view, for_picking,ban_light); if (multisample) { GLuint resolve_fbo; @@ -5966,7 +6077,7 @@ void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, uns void GLCanvas3D::render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector& extruder_colors, - GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking) + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking, bool ban_light) { thumbnail_data.set(w, h); if (!thumbnail_data.is_valid()) @@ -6018,7 +6129,8 @@ void GLCanvas3D::render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, glsafe(::glDrawBuffers(1, drawBufs)); if (::glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT) { - render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type, use_top_view, for_picking); + render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type, use_top_view, for_picking, + ban_light); if (multisample) { GLuint resolve_fbo; @@ -6204,8 +6316,8 @@ bool GLCanvas3D::_init_main_toolbar() //BBS: main toolbar is at the top and left, we don't need the rounded-corner effect at the right side and the top side m_main_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Right); m_main_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); - m_main_toolbar.set_border(5.0f); - m_main_toolbar.set_separator_size(5); + m_main_toolbar.set_border(4.0f); + m_main_toolbar.set_separator_size(4); m_main_toolbar.set_gap_size(4); m_main_toolbar.del_all_item(); @@ -6302,6 +6414,7 @@ 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.toggable = true; // ORCA Closes popup if other toolbar icon clicked and it allows closing popup when clicked its button item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); }; item.visibility_callback = [this]()->bool { bool res = current_printer_technology() == ptFFF; @@ -6344,7 +6457,7 @@ void GLCanvas3D::_update_select_plate_toolbar_stats_item(bool force_selected) { bool GLCanvas3D::_update_imgui_select_plate_toolbar() { bool result = true; - if (!m_sel_plate_toolbar.is_enabled()) return false; + if (!m_sel_plate_toolbar.is_enabled() || m_sel_plate_toolbar.is_render_finish) return false; _update_select_plate_toolbar_stats_item(); @@ -6394,7 +6507,7 @@ bool GLCanvas3D::_init_assemble_view_toolbar() //BBS: assemble toolbar is at the top and right, we don't need the rounded-corner effect at the left side and the top side m_assemble_view_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Left); m_assemble_view_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); - m_assemble_view_toolbar.set_border(5.0f); + m_assemble_view_toolbar.set_border(4.0f); m_assemble_view_toolbar.set_separator_size(10); m_assemble_view_toolbar.set_gap_size(4); @@ -6451,7 +6564,7 @@ bool GLCanvas3D::_init_separator_toolbar() //BBS: assemble toolbar is at the top and right, we don't need the rounded-corner effect at the left side and the top side m_separator_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Left); m_separator_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); - m_separator_toolbar.set_border(5.0f); + m_separator_toolbar.set_border(4.0f); m_separator_toolbar.del_all_item(); @@ -7294,8 +7407,11 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() Size cnv_size = get_canvas_size(); //BBS: GUI refactor: GLToolbar - float size = GLToolbar::Default_Icons_Size * scale; - //float main_size = GLGizmosManager::Default_Icons_Size * scale; + int size_i = int(GLToolbar::Default_Icons_Size * scale); + // force even size + if (size_i % 2 != 0) + size_i -= 1; + float size = size_i; // Set current size for all top toolbars. It will be used for next calculations #if ENABLE_RETINA_GL @@ -7312,7 +7428,7 @@ void GLCanvas3D::_check_and_update_toolbar_icon_scale() m_gizmos.set_overlay_scale(sc); #else //BBS: GUI refactor: GLToolbar - m_main_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size * scale); + m_main_toolbar.set_icons_size(size); m_assemble_view_toolbar.set_icons_size(size); m_separator_toolbar.set_icons_size(size); collapse_toolbar.set_icons_size(size / 2.0); @@ -7573,7 +7689,7 @@ void GLCanvas3D::_render_gizmos_overlay() } } -float GLCanvas3D::get_main_toolbar_offset() const +int GLCanvas3D::get_main_toolbar_offset() const { const float cnv_width = get_canvas_size().get_width(); const float collapse_toolbar_width = get_collapse_toolbar_width() * 2; @@ -7634,24 +7750,26 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICED; else m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICE_FAILED; - continue; } - if (plate_list.get_plate(i)->get_slicing_percent() < 0.0f) - m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::UNSLICED; - else - m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICING; + else { + if (!plate_list.get_plate(i)->can_slice()) + m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICE_FAILED; + else { + if (plate_list.get_plate(i)->get_slicing_percent() < 0.0f) + m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::UNSLICED; + else + m_sel_plate_toolbar.m_items[i]->slice_state = IMToolbarItem::SliceState::SLICING; + } + } } } if (m_sel_plate_toolbar.show_stats_item) { all_plates_stats_item->percent = 0.0f; size_t sliced_plates_cnt = 0; - bool slice_failed = false; for (auto plate : plate_list.get_nonempty_plate_list()) { if (plate->is_slice_result_valid() && plate->is_slice_result_ready_for_print()) sliced_plates_cnt++; - if (plate->is_slice_result_valid() && !plate->is_slice_result_ready_for_print()) - slice_failed = true; } all_plates_stats_item->percent = (float)(sliced_plates_cnt) / (float)(plate_list.get_nonempty_plate_list().size()) * 100.0f; @@ -7662,8 +7780,13 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() else if (all_plates_stats_item->percent < 100.0f) all_plates_stats_item->slice_state = IMToolbarItem::SliceState::SLICING; - if (slice_failed) - all_plates_stats_item->slice_state = IMToolbarItem::SliceState::SLICE_FAILED; + for (auto toolbar_item : m_sel_plate_toolbar.m_items) { + if(toolbar_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { + all_plates_stats_item->slice_state = IMToolbarItem::SliceState::SLICE_FAILED; + all_plates_stats_item->selected = false; + break; + } + } // Changing parameters does not invalid all plates, need extra logic to validate bool gcode_result_valid = true; @@ -7704,22 +7827,34 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() float margin_size = 4.0f * f_scale; float button_margin = frame_padding; + const float y_offset = is_collapse_toolbar_on_left() ? (get_collapse_toolbar_height() + 5) : 0; + // Make sure the window does not overlap the 3d navigator + auto window_height_max = canvas_h - y_offset; + if (wxGetApp().show_3d_navigator()) { + float sc = get_scale(); +#ifdef WIN32 + const int dpi = get_dpi_for_window(wxGetApp().GetTopWindow()); + sc *= (float) dpi / (float) DPI_DEFAULT; +#endif // WIN32 + window_height_max -= (128 * sc + 5); + } + ImGuiWrapper& imgui = *wxGetApp().imgui(); int item_count = m_sel_plate_toolbar.m_items.size() + (m_sel_plate_toolbar.show_stats_item ? 1 : 0); - bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > canvas_h ? true: false; + bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > window_height_max ? true: false; show_scroll = m_sel_plate_toolbar.is_display_scrollbar && show_scroll; - float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, canvas_h); + float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, window_height_max); float window_width = m_sel_plate_toolbar.icon_width + margin_size * 2 + (show_scroll ? 28.0f * f_scale : 20.0f * f_scale); ImVec4 window_bg = ImVec4(0.82f, 0.82f, 0.82f, 0.5f); - ImVec4 button_active = ImVec4(0.12f, 0.56f, 0.92, 1.0f); + ImVec4 button_active = ImGuiWrapper::COL_ORCA; // ORCA: Use orca color for selected sliced plate border ImVec4 button_hover = ImVec4(0.67f, 0.67f, 0.67, 1.0f); ImVec4 scroll_col = ImVec4(0.77f, 0.77f, 0.77f, 1.0f); //ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.f, 0.f, 0.f, 1.0f)); //use white text as the background switch to black ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_WindowBg, window_bg); - ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, window_bg); + ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA using background color with opacity creates a second color. This prevents secondary color ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, scroll_col); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, scroll_col); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, scroll_col); @@ -7731,7 +7866,6 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); - const float y_offset = is_collapse_toolbar_on_left() ? (get_collapse_toolbar_height() + 5) : 0; imgui.set_next_window_pos(canvas_w * 0, canvas_h * 0 + y_offset, ImGuiCond_Always, 0, 0); imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always); @@ -7774,12 +7908,12 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImTextureID btn_texture_id; if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { - text_clr = ImVec4(0, 174.0f / 255.0f, 66.0f / 255.0f, 0.2f); + text_clr = ImVec4(0.0f, 150.f / 255.0f, 136.0f / 255, 0.2f); // ORCA: All plates slicing NOT complete - Text color btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture_transparent.get_id()); } else { - text_clr = ImVec4(0, 174.0f / 255.0f, 66.0f / 255.0f, 1); + text_clr = ImGuiWrapper::COL_ORCA; // ORCA: All plates slicing complete - Text color btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture.get_id()); } @@ -7803,25 +7937,25 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING) { ImVec2 size = ImVec2(button_width, button_height * all_plates_stats_item->percent / 100.0f); ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); - ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); - ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); + ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); } // draw text @@ -7863,7 +7997,9 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImGui::PushStyleColor(ImGuiCol_Border, button_active); } else { - if (ImGui::IsMouseHoveringRect(button_pos, button_pos + button_size)) { + // Translate window pos to abs pos, also account for the window scrolling + auto hover_rect = button_pos + ImGui::GetWindowPos() - ImGui::GetCurrentWindow()->Scroll; + if (ImGui::IsMouseHoveringRect(hover_rect, hover_rect + button_size)) { ImGui::PushStyleColor(ImGuiCol_Border, button_hover); } else { @@ -7889,22 +8025,22 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() if (item->slice_state == IMToolbarItem::SliceState::UNSLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); } else if (item->slice_state == IMToolbarItem::SliceState::SLICING) { ImVec2 size = ImVec2(button_width, button_height * item->percent / 100.0f); ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); - ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); } else if (item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); - ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); + ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); } else if (item->slice_state == IMToolbarItem::SliceState::SLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); } // draw text @@ -7924,6 +8060,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() } imgui.end(); + m_sel_plate_toolbar.is_render_finish = true; } //BBS: GUI refactor: GLToolbar adjust @@ -8299,7 +8436,7 @@ void GLCanvas3D::_render_assemble_info() const ImGui::PopFont(); float margin = 10.0f * get_scale(); imgui->set_next_window_pos(canvas_w - margin, canvas_h - margin, ImGuiCond_Always, 1.0f, 1.0f); - ImGuiWrapper::push_toolbar_style(get_scale()); + ImGuiWrapper::push_common_window_style(get_scale()); // ORCA use window style for popups with title imgui->begin(_L("Assembly Info"), ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse); font->Scale = origScale; ImGui::PushFont(font); @@ -8315,7 +8452,7 @@ void GLCanvas3D::_render_assemble_info() const ImGui::Text("%.2f x %.2f x %.2f", size0, size1, size2); } imgui->end(); - ImGuiWrapper::pop_toolbar_style(); + ImGuiWrapper::pop_common_window_style(); } #if ENABLE_SHOW_CAMERA_TARGET @@ -8621,7 +8758,7 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z) } else { const Camera& camera = wxGetApp().plater()->get_camera(); - const Vec4i viewport(camera.get_viewport().data()); + const Vec4i32 viewport(camera.get_viewport().data()); Vec3d out; igl::unproject(Vec3d(mouse_pos.x(), viewport[3] - mouse_pos.y(), *z), camera.get_view_matrix().matrix(), camera.get_projection_matrix().matrix(), viewport, out); return out; diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index bed5ac3ae1..ad4d21cf3a 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Vojtěch Král @vojtechkral -///|/ Copyright (c) BambuStudio 2023 manch1n @manch1n -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLCanvas3D_hpp_ #define slic3r_GLCanvas3D_hpp_ @@ -187,6 +182,8 @@ wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent); wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent); wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent); +wxDECLARE_EVENT(EVT_GLCANVAS_SWITCH_TO_OBJECT, SimpleEvent); +wxDECLARE_EVENT(EVT_GLCANVAS_SWITCH_TO_GLOBAL, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_COLLAPSE_SIDEBAR, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_RENDER_TIMER, wxTimerEvent/*RenderTimerEvent*/); @@ -515,6 +512,7 @@ private: unsigned int m_last_w, m_last_h; bool m_in_render; wxTimer m_timer; + wxTimer m_timer_set_color; LayersEditing m_layers_editing; Mouse m_mouse; GLGizmosManager m_gizmos; @@ -607,25 +605,6 @@ private: PrinterTechnology current_printer_technology() const; - template - static auto & get_arrange_settings(Self *self) { - PrinterTechnology ptech = self->current_printer_technology(); - - auto *ptr = &self->m_arrange_settings_fff; - - if (ptech == ptSLA) { - ptr = &self->m_arrange_settings_sla; - } else if (ptech == ptFFF) { - auto co_opt = self->m_config->template option>("print_sequence"); - if (co_opt && (co_opt->value == PrintSequence::ByObject)) - ptr = &self->m_arrange_settings_fff_seq_print; - else - ptr = &self->m_arrange_settings_fff; - } - - return *ptr; - } - //BBS:record key botton frequency @@ -651,7 +630,11 @@ public: } void load_arrange_settings(); - ArrangeSettings& get_arrange_settings() { return get_arrange_settings(this); } + ArrangeSettings& get_arrange_settings();// { return get_arrange_settings(this); } + ArrangeSettings& get_arrange_settings(PrintSequence print_seq) { + return (print_seq == PrintSequence::ByObject) ? m_arrange_settings_fff_seq_print + : m_arrange_settings_fff; + } class SequentialPrintClearance { @@ -774,6 +757,7 @@ public: const GCodeViewer::SequentialView& get_gcode_sequential_view() const { return m_gcode_viewer.get_sequential_view(); } void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } + void toggle_selected_volume_visibility(bool selected_visible); void toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1); void toggle_model_objects_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1, const ModelVolume* mv = nullptr); void update_instance_printable_state_for_object(size_t obj_idx); @@ -861,9 +845,9 @@ public: //BBS: add part plate related logic void select_plate(); //BBS: GUI refactor: GLToolbar&&gizmo - float get_main_toolbar_offset() const; - float get_main_toolbar_height() const { return m_main_toolbar.get_height(); } - float get_main_toolbar_width() const { return m_main_toolbar.get_width(); } + int get_main_toolbar_offset() const; + int get_main_toolbar_height() const { return m_main_toolbar.get_height(); } + int get_main_toolbar_width() const { return m_main_toolbar.get_width(); } float get_assemble_view_toolbar_width() const { return m_assemble_view_toolbar.get_width(); } float get_assemble_view_toolbar_height() const { return m_assemble_view_toolbar.get_height(); } float get_assembly_paint_toolbar_width() const { return m_paint_toolbar_width; } @@ -890,20 +874,27 @@ public: // printable_only == false -> render also non printable volumes as grayed // parts_only == false -> render also sla support and pad void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, - Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + Camera::EType camera_type, + bool use_top_view = false, + bool for_picking = false, + bool ban_light = false); void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, - const GLVolumeCollection& volumes, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + const GLVolumeCollection &volumes, + Camera::EType camera_type, + bool use_top_view = false, + bool for_picking = false, + bool ban_light = false); static void render_thumbnail_internal(ThumbnailData& thumbnail_data, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector& extruder_colors, - GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false, bool ban_light = false); // render thumbnail using an off-screen framebuffer static void render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector& extruder_colors, - GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false, bool ban_light = false); // render thumbnail using an off-screen framebuffer when GLEW_EXT_framebuffer_object is supported static void render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector& extruder_colors, - GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false, bool ban_light = false); //BBS use gcoder viewer render calibration thumbnails void render_calibration_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params); @@ -916,6 +907,7 @@ public: void select_all(); void deselect_all(); + void exit_gizmo(); void set_selected_visible(bool visible); void delete_selected(); void ensure_on_bed(unsigned int object_idx, bool allow_negative_z); @@ -960,6 +952,7 @@ public: void on_mouse_wheel(wxMouseEvent& evt); void on_timer(wxTimerEvent& evt); void on_render_timer(wxTimerEvent& evt); + void on_set_color_timer(wxTimerEvent& evt); void on_mouse(wxMouseEvent& evt); void on_gesture(wxGestureEvent& evt); void on_paint(wxPaintEvent& evt); @@ -1068,6 +1061,17 @@ public: void highlight_toolbar_item(const std::string& item_name); void highlight_gizmo(const std::string& gizmo_name); + ArrangeSettings get_arrange_settings() const { + const ArrangeSettings &settings = get_arrange_settings(); + ArrangeSettings ret = settings; + if (&settings == &m_arrange_settings_fff_seq_print) { + ret.distance = std::max(ret.distance, + float(min_object_distance(*m_config))); + } + + return ret; + } + // Timestamp for FPS calculation and notification fade-outs. static int64_t timestamp_now() { #ifdef _WIN32 diff --git a/src/slic3r/GUI/GLModel.cpp b/src/slic3r/GUI/GLModel.cpp index 959c9aa9ac..8f4546b620 100644 --- a/src/slic3r/GUI/GLModel.cpp +++ b/src/slic3r/GUI/GLModel.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "GLModel.hpp" diff --git a/src/slic3r/GUI/GLModel.hpp b/src/slic3r/GUI/GLModel.hpp index e90c263ece..4511cc32a8 100644 --- a/src/slic3r/GUI/GLModel.hpp +++ b/src/slic3r/GUI/GLModel.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLModel_hpp_ #define slic3r_GLModel_hpp_ diff --git a/src/slic3r/GUI/GLSelectionRectangle.cpp b/src/slic3r/GUI/GLSelectionRectangle.cpp index 68f9d096eb..3cb9b82593 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.cpp +++ b/src/slic3r/GUI/GLSelectionRectangle.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2022 Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLSelectionRectangle.hpp" #include "Camera.hpp" #include "CameraUtils.hpp" @@ -116,7 +112,7 @@ namespace GUI { shader->set_uniform("view_model_matrix", Transform3d::Identity()); shader->set_uniform("projection_matrix", Transform3d::Identity()); - m_rectangle.set_color({0.0f, 1.0f, 0.38f, 1.0f}); + m_rectangle.set_color(ColorRGBA::ORCA()); // ORCA: use orca color for selection rectangle m_rectangle.render(); shader->stop_using(); } diff --git a/src/slic3r/GUI/GLSelectionRectangle.hpp b/src/slic3r/GUI/GLSelectionRectangle.hpp index 8d87e18e46..f588b4fddd 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.hpp +++ b/src/slic3r/GUI/GLSelectionRectangle.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2022 Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLSelectionRectangle_hpp_ #define slic3r_GLSelectionRectangle_hpp_ diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index fcd9045cef..79cbb77370 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ //BBS:add i18n #include "I18N.hpp" //BBS: add fstream for debug output diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 8e99bb1bc2..be97e52e84 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2022 Enrico Turri @enricoturri1966, David Kocík @kocikdav, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/Point.hpp" #include "libslic3r/libslic3r.h" @@ -35,6 +31,8 @@ wxDEFINE_EVENT(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_PRINT_SELECT, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent); +wxDEFINE_EVENT(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, SimpleEvent); + wxDEFINE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent); diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 28ad69bb53..85413edc66 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2022 Enrico Turri @enricoturri1966, David Kocík @kocikdav, Oleksandra Iushchenko @YuSanka, Vojtěch Král @vojtechkral, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLToolbar_hpp_ #define slic3r_GLToolbar_hpp_ @@ -35,6 +31,8 @@ wxDECLARE_EVENT(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_PRINT_SELECT, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent); +wxDECLARE_EVENT(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, SimpleEvent); + wxDECLARE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 5284595e0b..842909985b 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3,8 +3,11 @@ #include "GUI_Init.hpp" #include "GUI_ObjectList.hpp" #include "GUI_Factories.hpp" +#include "slic3r/GUI/UserManager.hpp" +#include "slic3r/GUI/TaskManager.hpp" #include "format.hpp" #include "libslic3r_version.h" +#include "Downloader.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). @@ -149,6 +152,41 @@ namespace GUI { class MainFrame; +void start_ping_test() +{ + return; + wxArrayString output; + wxExecute("ping www.amazon.com", output, wxEXEC_NODISABLE); + + wxString output_i; + std::string output_temp; + + for (int i = 0; i < output.size(); i++) { + output_i = output[i].To8BitData(); + output_temp = output_i.ToStdString(wxConvUTF8); + BOOST_LOG_TRIVIAL(info) << "ping amazon:" << output_temp; + + } + wxExecute("ping www.apple.com", output, wxEXEC_NODISABLE); + for (int i = 0; i < output.size(); i++) { + output_i = output[i].To8BitData(); + output_temp = output_i.ToStdString(wxConvUTF8); + BOOST_LOG_TRIVIAL(info) << "ping www.apple.com:" << output_temp; + } + wxExecute("ping www.bambulab.com", output, wxEXEC_NODISABLE); + for (int i = 0; i < output.size(); i++) { + output_i = output[i].To8BitData(); + output_temp = output_i.ToStdString(wxConvUTF8); + BOOST_LOG_TRIVIAL(info) << "ping bambulab:" << output_temp; + } + //Get GateWay IP + wxExecute("ping 192.168.0.1", output, wxEXEC_NODISABLE); + for (int i = 0; i < output.size(); i++) { + output_i = output[i].To8BitData(); + output_temp = output_i.ToStdString(wxConvUTF8); + BOOST_LOG_TRIVIAL(info) << "ping 192.168.0.1:" << output_temp; + } +} std::string VersionInfo::convert_full_version(std::string short_version) { @@ -237,8 +275,11 @@ public: // init constant texts and scale fonts m_constant_text.init(Label::Body_16); - scale_font(m_constant_text.title_font, 2.0f); - scale_font(m_constant_text.version_font, 1.2f); + + // ORCA scale all fonts with monitor scale + scale_font(m_constant_text.version_font, m_scale * 2); + scale_font(m_constant_text.based_on_font, m_scale * 1.5f); + scale_font(m_constant_text.credits_font, m_scale * 2); // this font will be used for the action string m_action_font = m_constant_text.credits_font; @@ -278,51 +319,41 @@ public: if (!bmp.IsOk()) return; + bool is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; + // use a memory DC to draw directly onto the bitmap wxMemoryDC memDc(bmp); - - int top_margin = FromDIP(75 * m_scale); + int width = bmp.GetWidth(); + int height = bmp.GetHeight(); - // draw title and version - int text_padding = FromDIP(3 * m_scale); - memDc.SetFont(m_constant_text.title_font); - int title_height = memDc.GetTextExtent(m_constant_text.title).GetHeight(); - int title_width = memDc.GetTextExtent(m_constant_text.title).GetWidth(); - memDc.SetFont(m_constant_text.version_font); - int version_height = memDc.GetTextExtent(m_constant_text.version).GetHeight(); - int version_width = memDc.GetTextExtent(m_constant_text.version).GetWidth(); - int split_width = (width + title_width - version_width) / 2; - wxRect title_rect(wxPoint(0, top_margin), wxPoint(split_width - text_padding, top_margin + title_height)); - memDc.SetTextForeground(StateColor::darkModeColorFor(wxColour(38, 46, 48))); - memDc.SetFont(m_constant_text.title_font); - memDc.DrawLabel(m_constant_text.title, title_rect, wxALIGN_RIGHT | wxALIGN_BOTTOM); - //BBS align bottom of title and version text - wxRect version_rect(wxPoint(split_width + text_padding, top_margin), wxPoint(width, top_margin + title_height - text_padding)); + // Logo + BitmapCache bmp_cache; + wxBitmap logo_bmp = *bmp_cache.load_svg(is_dark ? "splash_logo_dark" : "splash_logo", width, height); // use with full width & height + memDc.DrawBitmap(logo_bmp, 0, 0, true); + + // Version memDc.SetFont(m_constant_text.version_font); memDc.SetTextForeground(StateColor::darkModeColorFor(wxColor(134, 134, 134))); - memDc.DrawLabel(m_constant_text.version, version_rect, wxALIGN_LEFT | wxALIGN_BOTTOM); + wxSize version_ext = memDc.GetTextExtent(m_constant_text.version); + wxRect version_rect( + wxPoint(0, int(height * 0.70)), + wxPoint(width, int(height * 0.70) + version_ext.GetHeight()) + ); + memDc.DrawLabel(m_constant_text.version, version_rect, wxALIGN_CENTER); - 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; - 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); + // Dynamic Text + m_action_line_y_position = int(height * 0.83); - // load bitmap for logo - BitmapCache bmp_cache; - int logo_margin = FromDIP(72 * m_scale); - int logo_size = FromDIP(122 * m_scale); - int logo_width = FromDIP(94 * m_scale); - wxBitmap logo_bmp = *bmp_cache.load_svg("splash_logo", logo_size, logo_size); - int logo_y = top_margin + title_rect.GetHeight() + logo_margin; - memDc.DrawBitmap(logo_bmp, (width - logo_width) / 2, logo_y, true); - - // calculate position for the dynamic text - int text_margin = FromDIP(80 * m_scale); - m_action_line_y_position = logo_y + logo_size + text_margin; + // Based on Text + memDc.SetFont(m_constant_text.based_on_font); + auto bs_version = wxString::Format("Based on PrusaSlicer and BambuStudio").ToStdString(); + wxSize based_on_ext = memDc.GetTextExtent(bs_version); + wxRect based_on_rect( + wxPoint(0, height - based_on_ext.GetHeight() * 2), + wxPoint(width, height - based_on_ext.GetHeight()) + ); + memDc.DrawLabel(bs_version, based_on_rect, wxALIGN_CENTER); } static wxBitmap MakeBitmap() @@ -402,21 +433,23 @@ private: wxFont title_font; wxFont version_font; wxFont credits_font; + wxFont based_on_font; void init(wxFont init_font) { // title - title = wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME; + //title = wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME; // dynamically get the version to display - version = _L("V") + " " + GUI_App::format_display_version(); + version = GUI_App::format_display_version(); // credits infornation credits = ""; - title_font = Label::Head_16; - version_font = Label::Body_16; - credits_font = init_font; + //title_font = Label::Head_16; + version_font = Label::Body_13; + based_on_font = Label::Body_8; + credits_font = Label::Body_8; } } m_constant_text; @@ -474,10 +507,13 @@ static const FileWildcards file_wildcards_by_type[FT_SIZE] = { /* FT_3MF */ { "3MF files"sv, { ".3mf"sv } }, /* FT_GCODE */ { "G-code files"sv, { ".gcode"sv, ".3mf"sv } }, #ifdef __APPLE__ - /* FT_MODEL */ { "Supported files"sv, { ".3mf"sv, ".stl"sv, ".stp"sv, ".step"sv, ".svg"sv, ".amf"sv, ".obj"sv , ".usd"sv, ".usda"sv, ".usdc"sv, ".usdz"sv, ".abc"sv, ".ply"sv} }, + /* FT_MODEL */ + {"Supported files"sv, {".3mf"sv, ".stl"sv, ".oltp"sv, ".stp"sv, ".step"sv, ".svg"sv, ".amf"sv, ".obj"sv, ".usd"sv, ".usda"sv, ".usdc"sv, ".usdz"sv, ".abc"sv, ".ply"sv}}, #else - /* FT_MODEL */ {"Supported files"sv, {".3mf"sv, ".stl"sv, ".stp"sv, ".step"sv, ".svg"sv, ".amf"sv, ".obj"sv }}, + /* FT_MODEL */ + {"Supported files"sv, {".3mf"sv, ".stl"sv, ".oltp"sv, ".stp"sv, ".step"sv, ".svg"sv, ".amf"sv, ".obj"sv}}, #endif + /* FT_ZIP */ { "ZIP files"sv, { ".zip"sv } }, /* FT_PROJECT */ { "Project files"sv, { ".3mf"sv} }, /* FT_GALLERY */ { "Known files"sv, { ".stl"sv, ".obj"sv } }, @@ -653,15 +689,15 @@ static void register_win32_device_notification_event() return false; }); - //wxWindow::MSWRegisterMessageHandler(WM_COPYDATA, [](wxWindow* win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) { - // COPYDATASTRUCT* copy_data_structure = { 0 }; - // copy_data_structure = (COPYDATASTRUCT*)lParam; - // if (copy_data_structure->dwData == 1) { - // LPCWSTR arguments = (LPCWSTR)copy_data_structure->lpData; - // Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(boost::nowide::narrow(arguments)); - // } - // return true; - // }); + wxWindow::MSWRegisterMessageHandler(WM_COPYDATA, [](wxWindow* win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) { + COPYDATASTRUCT* copy_data_structure = { 0 }; + copy_data_structure = (COPYDATASTRUCT*)lParam; + if (copy_data_structure->dwData == 1) { + LPCWSTR arguments = (LPCWSTR)copy_data_structure->lpData; + Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(boost::nowide::narrow(arguments)); + } + return true; + }); } #endif // WIN32 @@ -768,55 +804,39 @@ void GUI_App::post_init() m_open_method = "double_click"; bool switch_to_3d = false; - if (!this->init_params->input_files.empty()) { + 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="); - - 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); - } - m_open_method = "makerworld"; - } - else { + const auto first_url = this->init_params->input_files.front(); + if (this->init_params->input_files.size() == 1 && is_supported_open_protocol(first_url)) { + switch_to_3d = true; + start_download(first_url); + m_open_method = "url"; + } else { switch_to_3d = true; if (this->init_params->input_gcode) { mainframe->select_tab(size_t(MainFrame::tp3DEditor)); plater_->select_view_3D("3D"); this->plater()->load_gcode(from_u8(this->init_params->input_files.front())); m_open_method = "gcode"; - } - else { + } else { mainframe->select_tab(size_t(MainFrame::tp3DEditor)); plater_->select_view_3D("3D"); wxArrayString input_files; - for (auto & file : this->init_params->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); try { if (!input_files.empty()) { - std::string file_path = input_files.front().ToStdString(); + std::string file_path = input_files.front().ToStdString(); std::filesystem::path path(file_path); m_open_method = "file_" + path.extension().string(); } - } - catch (...) { + } catch (...) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ", file path exception!"; m_open_method = "file"; } @@ -923,7 +943,7 @@ void GUI_App::post_init() if (app_config->get("stealth_mode") == "false") hms_query = new HMSQuery(); - + m_show_gcode_window = app_config->get_bool("show_gcode_window"); if (m_networking_need_update) { //updating networking @@ -993,8 +1013,7 @@ void GUI_App::post_init() }); - std::string filaments_blacklist_config_file = Slic3r::resources_dir() + "/printers/filaments_blacklist.json"; - DeviceManager::load_filaments_blacklist_config(encode_path(filaments_blacklist_config_file.c_str())); + DeviceManager::load_filaments_blacklist_config(); // remove old log files over LOG_FILES_MAX_NUM std::string log_addr = data_dir(); @@ -1030,10 +1049,10 @@ void GUI_App::post_init() } BOOST_LOG_TRIVIAL(info) << "finished post_init"; //BBS: remove the single instance currently -/*#ifdef _WIN32 +#ifdef _WIN32 // Sets window property to mainframe so other instances can indentify it. OtherInstanceMessageHandler::init_windows_properties(mainframe, m_instance_hash_int); -#endif //WIN32*/ +#endif //WIN32 } wxDEFINE_EVENT(EVT_ENTER_FORCE_UPGRADE, wxCommandEvent); @@ -1051,7 +1070,8 @@ GUI_App::GUI_App() , m_em_unit(10) , m_imgui(new ImGuiWrapper()) , m_removable_drive_manager(std::make_unique()) - //, m_other_instance_message_handler(std::make_unique()) + , m_downloader(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 this->init_app_config(); @@ -1383,13 +1403,17 @@ int GUI_App::install_plugin(std::string name, std::string package_name, InstallP mz_bool res = mz_zip_reader_extract_to_file(&archive, stat.m_file_index, dest_zip_file.c_str(), 0); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", extract %1% from plugin zip %2%\n") % dest_file % stat.m_filename; if (res == 0) { - mz_zip_error zip_error = mz_zip_get_last_error(&archive); - BOOST_LOG_TRIVIAL(error) << "[install_plugin]Archive read error:" << mz_zip_get_error_string(zip_error) << std::endl; - close_zip_reader(&archive); - if (pro_fn) { - pro_fn(InstallStatusUnzipFailed, 0, cancel); +#ifdef WIN32 + std::wstring new_dest_zip_file = boost::locale::conv::utf_to_utf(dest_path.generic_string()); + res = mz_zip_reader_extract_to_file_w(&archive, stat.m_file_index, new_dest_zip_file.c_str(), 0); +#endif + if (res == 0) { + mz_zip_error zip_error = mz_zip_get_last_error(&archive); + BOOST_LOG_TRIVIAL(error) << "[install_plugin]Archive read error:" << mz_zip_get_error_string(zip_error) << std::endl; + close_zip_reader(&archive); + if (pro_fn) { pro_fn(InstallStatusUnzipFailed, 0, cancel); } + return InstallStatusUnzipFailed; } - return InstallStatusUnzipFailed; } else { if (pro_fn) { @@ -1564,6 +1588,22 @@ void GUI_App::init_networking_callbacks() return; BOOST_LOG_TRIVIAL(trace) << "static: server connected"; m_agent->set_user_selected_machine(m_agent->get_user_selected_machine()); + if (this->is_enable_multi_machine()) { + auto evt = new wxCommandEvent(EVT_UPDATE_MACHINE_LIST); + wxQueueEvent(this, evt); + } + m_agent->set_user_selected_machine(m_agent->get_user_selected_machine()); + //subscribe device + if (m_agent->is_user_login()) { + m_agent->start_device_subscribe(); + /* resubscribe the cache dev list */ + if (this->is_enable_multi_machine()) { + DeviceManager* dev = this->getDeviceManager(); + if (dev && !dev->subscribe_list_cache.empty()) { + dev->subscribe_device_list(dev->subscribe_list_cache); + } + } + } }); }); @@ -1583,7 +1623,9 @@ void GUI_App::init_networking_callbacks() obj->command_get_version(); obj->erase_user_access_code(); obj->command_get_access_code(); - GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + if (!is_enable_multi_machine()) { + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + } } }); }); @@ -1637,6 +1679,9 @@ void GUI_App::init_networking_callbacks() } event.SetInt(-1); } else if (state == ConnectStatus::ConnectStatusLost) { + obj->set_access_code(""); + obj->erase_user_access_code(); + m_device_manager->localMachineList.erase(obj->dev_id); m_device_manager->set_selected_machine("", true); event.SetInt(-1); BOOST_LOG_TRIVIAL(info) << "set_on_local_connect_fn: state = lost"; @@ -1679,11 +1724,21 @@ void GUI_App::init_networking_callbacks() MachineObject* obj = this->m_device_manager->get_user_machine(dev_id); if (obj) { obj->is_ams_need_update = false; - obj->parse_json(msg); 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); + + if (sel && sel->dev_id == dev_id) { + obj->parse_json(msg); + } + else { + obj->parse_json(msg, true); + } + + + if (!this->is_enable_multi_machine()) { + if ((sel == obj || sel == nullptr) && obj->is_ams_need_update) { + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + } } } }); @@ -1691,6 +1746,25 @@ void GUI_App::init_networking_callbacks() m_agent->set_on_message_fn(message_arrive_fn); + auto user_message_arrive_fn = [this](std::string user_id, std::string msg) { + if (m_is_closing) { + return; + } + CallAfter([this, user_id, msg] { + if (m_is_closing) + return; + + //check user + if (user_id == m_agent->get_user_id()) { + this->m_user_manager->parse_json(msg); + } + + }); + }; + + m_agent->set_on_user_message_fn(user_message_arrive_fn); + + auto lan_message_arrive_fn = [this](std::string dev_id, std::string msg) { if (m_is_closing) { return; @@ -1705,11 +1779,15 @@ void GUI_App::init_networking_callbacks() } if (obj) { - obj->parse_json(msg); + obj->parse_json(msg, DeviceManager::key_field_only); if (this->m_device_manager->get_selected_machine() == obj && obj->is_ams_need_update) { GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); } } + obj = m_device_manager->get_local_machine(dev_id); + if (obj) { + obj->parse_json(msg, DeviceManager::key_field_only); + } }); }; m_agent->set_on_local_message_fn(lan_message_arrive_fn); @@ -1935,7 +2013,7 @@ std::map GUI_App::get_extra_header() extra_headers.insert(std::make_pair("X-BBL-OS-Version", os_version)); if (app_config) extra_headers.insert(std::make_pair("X-BBL-Device-ID", app_config->get("slicer_uuid"))); - extra_headers.insert(std::make_pair("X-BBL-Language", convert_studio_language_to_api(app_config->get("language")))); + extra_headers.insert(std::make_pair("X-BBL-Language", convert_studio_language_to_api(into_u8(current_language_code_safe())))); return extra_headers; } @@ -1994,11 +2072,11 @@ std::string GUI_App::get_local_models_path() return local_path; } -/*void GUI_App::init_single_instance_checker(const std::string &name, const std::string &path) +void GUI_App::init_single_instance_checker(const std::string &name, const std::string &path) { BOOST_LOG_TRIVIAL(debug) << "init wx instance checker " << name << " "<< path; m_single_instance_checker = std::make_unique(boost::nowide::widen(name), boost::nowide::widen(path)); -}*/ +} bool GUI_App::OnInit() { @@ -2019,6 +2097,11 @@ int GUI_App::OnExit() m_device_manager = nullptr; } + if (m_user_manager) { + delete m_user_manager; + m_user_manager = nullptr; + } + if (m_agent) { // BBS avoid a crash on mac platform #ifdef __WINDOWS__ @@ -2114,9 +2197,6 @@ bool GUI_App::on_init_inner() d->EndModal(wxID_ABORT); }); - std::map extra_headers = get_extra_header(); - Slic3r::Http::set_extra_headers(extra_headers); - // Verify resources path const wxString resources_dir = from_u8(Slic3r::resources_dir()); wxCHECK_MSG(wxDirExists(resources_dir), false, @@ -2241,9 +2321,7 @@ bool GUI_App::on_init_inner() BOOST_LOG_TRIVIAL(info) << "begin to show the splash screen..."; //BBS use BBL splashScreen scrn = new SplashScreen(bmp, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 1500, splashscreen_pos); -#ifndef __linux__ wxYield(); -#endif scrn->SetText(_L("Loading configuration")+ dots); } @@ -2268,6 +2346,8 @@ bool GUI_App::on_init_inner() associate_files(L"step"); associate_files(L"stp"); } + associate_url(L"orcaslicer"); + if (app_config->get("associate_gcode") == "true") associate_files(L"gcode"); #endif // __WXMSW__ @@ -2372,6 +2452,7 @@ bool GUI_App::on_init_inner() preset_bundle->set_default_suppressed(true); Bind(EVT_SET_SELECTED_MACHINE, &GUI_App::on_set_selected_machine, this); + Bind(EVT_UPDATE_MACHINE_LIST, &GUI_App::on_update_machine_list, this); Bind(EVT_USER_LOGIN, &GUI_App::on_user_login, this); Bind(EVT_USER_LOGIN_HANDLE, &GUI_App::on_user_login_handle, this); Bind(EVT_CHECK_PRIVACY_VER, &GUI_App::on_check_privacy_update, this); @@ -2379,6 +2460,10 @@ bool GUI_App::on_init_inner() Bind(EVT_SHOW_IP_DIALOG, &GUI_App::show_ip_address_enter_dialog_handler, this); + + std::map extra_headers = get_extra_header(); + Slic3r::Http::set_extra_headers(extra_headers); + copy_network_if_available(); on_init_network(); @@ -2474,9 +2559,9 @@ bool GUI_App::on_init_inner() update_mode(); // update view mode after fix of the object_list size -//#ifdef __APPLE__ -// other_instance_message_handler()->bring_instance_forward(); -//#endif //__APPLE__ +#ifdef __APPLE__ + other_instance_message_handler()->bring_instance_forward(); +#endif //__APPLE__ Bind(EVT_HTTP_ERROR, &GUI_App::on_http_error, this); @@ -2524,10 +2609,6 @@ bool GUI_App::on_init_inner() #endif this->post_init(); - if (!m_download_file_url.empty()) { - request_model_download(m_download_file_url); - m_download_file_url = ""; - } update_publish_status(); } @@ -2555,7 +2636,7 @@ void GUI_App::copy_network_if_available() { if (app_config->get("update_network_plugin") != "true") return; - std::string network_library, player_library, network_library_dst, player_library_dst; + std::string network_library, player_library, live555_library, network_library_dst, player_library_dst, live555_library_dst; std::string data_dir_str = data_dir(); boost::filesystem::path data_dir_path(data_dir_str); auto plugin_folder = data_dir_path / "plugins"; @@ -2563,19 +2644,25 @@ void GUI_App::copy_network_if_available() std::string changelog_file = cache_folder.string() + "/network_plugins.json"; #if defined(_MSC_VER) || defined(_WIN32) network_library = cache_folder.string() + "/bambu_networking.dll"; - player_library = cache_folder.string() + "/BambuSource.dll"; + player_library = cache_folder.string() + "/BambuSource.dll"; + live555_library = cache_folder.string() + "/live555.dll"; network_library_dst = plugin_folder.string() + "/bambu_networking.dll"; - player_library_dst = plugin_folder.string() + "/BambuSource.dll"; + player_library_dst = plugin_folder.string() + "/BambuSource.dll"; + live555_library_dst = plugin_folder.string() + "/live555.dll"; #elif defined(__WXMAC__) network_library = cache_folder.string() + "/libbambu_networking.dylib"; player_library = cache_folder.string() + "/libBambuSource.dylib"; + live555_library = cache_folder.string() + "/liblive555.dylib"; network_library_dst = plugin_folder.string() + "/libbambu_networking.dylib"; player_library_dst = plugin_folder.string() + "/libBambuSource.dylib"; + live555_library_dst = plugin_folder.string() + "/liblive555.dylib"; #else network_library = cache_folder.string() + "/libbambu_networking.so"; - player_library = cache_folder.string() + "/libBambuSource.so"; + player_library = cache_folder.string() + "/libBambuSource.so"; + live555_library = cache_folder.string() + "/liblive555.so"; network_library_dst = plugin_folder.string() + "/libbambu_networking.so"; - player_library_dst = plugin_folder.string() + "/libBambuSource.so"; + player_library_dst = plugin_folder.string() + "/libBambuSource.so"; + live555_library_dst = plugin_folder.string() + "/liblive555.so"; #endif BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": checking network_library " << network_library << ", player_library " << player_library; @@ -2609,6 +2696,19 @@ void GUI_App::copy_network_if_available() fs::remove(player_library); BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying player library from" << player_library << " to " << player_library_dst<<" successfully."; } + + if (boost::filesystem::exists(live555_library)) { + CopyFileResult cfr = copy_file(live555_library, live555_library_dst, error_message, false); + if (cfr != CopyFileResult::SUCCESS) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": Copying failed(" << cfr << "): " << error_message; + return; + } + + static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read; + fs::permissions(live555_library_dst, perms); + fs::remove(live555_library); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying live555 library from" << live555_library << " to " << live555_library_dst<<" successfully."; + } if (boost::filesystem::exists(changelog_file)) fs::remove(changelog_file); app_config->set("update_network_plugin", "false"); @@ -2671,6 +2771,22 @@ __retry: else m_device_manager->set_agent(m_agent); + if (!m_user_manager) + m_user_manager = new Slic3r::UserManager(m_agent); + else + m_user_manager->set_agent(m_agent); + + if (this->is_enable_multi_machine()) { + if (!m_task_manager) { + m_task_manager = new Slic3r::TaskManager(m_agent); + m_task_manager->start(); + } + m_agent->enable_multi_machine(true); + DeviceManager::EnableMultiMachine = true; + } else { + m_agent->enable_multi_machine(false); + DeviceManager::EnableMultiMachine = false; + } //BBS set config dir if (m_agent) { @@ -2700,6 +2816,9 @@ __retry: if (!m_device_manager) m_device_manager = new Slic3r::DeviceManager(); + + if (!m_user_manager) + m_user_manager = new Slic3r::UserManager(); } return true; @@ -2754,7 +2873,7 @@ void GUI_App::init_label_colours() m_color_label_modified = is_dark_mode ? wxColour("#F1754E") : wxColour("#F1754E"); m_color_label_sys = is_dark_mode ? wxColour("#B2B3B5") : wxColour("#363636"); -#ifdef _WIN32 +#if defined(_WIN32) || defined(__linux__) || defined(__APPLE__) m_color_label_default = is_dark_mode ? wxColour(250, 250, 250) : m_color_label_sys; // wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_default = is_dark_mode ? wxColour(78, 78, 78) : wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); @@ -2867,22 +2986,38 @@ 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(); - auto bg_col = StateColor::darkModeColorFor(original_col); - if (bg_col != original_col) { + auto orig_col = window->GetBackgroundColour(); + auto bg_col = StateColor::darkModeColorFor(orig_col); + // there are cases where the background color of an item is bright, specifically: + // * the background color of a button: #009688 -- 73 + if (bg_col != orig_col) { window->SetBackgroundColour(bg_col); } - original_col = window->GetForegroundColour(); - auto fg_col = StateColor::darkModeColorFor(original_col); + orig_col = window->GetForegroundColour(); + auto fg_col = StateColor::darkModeColorFor(orig_col); + auto fg_l = StateColor::GetLightness(fg_col); - if (fg_col != original_col) { - window->SetForegroundColour(fg_col); + auto color_difference = StateColor::GetColorDifference(bg_col, fg_col); + + // fallback and sanity check with LAB + // color difference of less than 2 or 3 is not normally visible, and even less than 30-40 doesn't stand out + if (color_difference < 10) { + fg_col = StateColor::SetLightness(fg_col, 90); } + // some of the stock colors have a lightness of ~49 + if (fg_l < 45) { + fg_col = StateColor::SetLightness(fg_col, 70); + } + // at this point it shouldn't be possible that fg_col is the same as bg_col, but let's be safe + if (fg_col == bg_col) { + fg_col = StateColor::SetLightness(fg_col, 70); + } + + window->SetForegroundColour(fg_col); } else { auto original_col = window->GetBackgroundColour(); @@ -3136,7 +3271,10 @@ void GUI_App::check_printer_presets() #endif } -void GUI_App::recreate_GUI(const wxString& msg_name) +void switch_window_pools(); +void release_window_pools(); + +void GUI_App::recreate_GUI(const wxString &msg_name) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "recreate_GUI enter"; m_is_recreating_gui = true; @@ -3144,12 +3282,18 @@ void GUI_App::recreate_GUI(const wxString& msg_name) update_http_extra_header(); mainframe->shutdown(); - ProgressDialog dlg(msg_name, msg_name, 100, nullptr, wxPD_AUTO_HIDE); dlg.Pulse(); dlg.Update(10, _L("Rebuild") + dots); MainFrame *old_main_frame = mainframe; + struct ClientData : wxClientData + { + ~ClientData() { release_window_pools(); } + }; + old_main_frame->SetClientObject(new ClientData); + + switch_window_pools(); mainframe = new MainFrame(); if (is_editor()) // hide settings tabs after first Layout @@ -3218,6 +3362,7 @@ void GUI_App::ShowUserGuide() { if (res) { load_current_presets(); update_publish_status(); + mainframe->refresh_plugin_tips(); // BBS: remove SLA related message } } catch (std::exception &e) { @@ -3423,6 +3568,17 @@ void GUI_App::import_model(wxWindow *parent, wxArrayString& input_files) const dialog.GetPaths(input_files); } +void GUI_App::import_zip(wxWindow* parent, wxString& input_file) const +{ + wxFileDialog dialog(parent ? parent : GetTopWindow(), + _L("Choose ZIP file") + ":", + from_u8(app_config->get_last_dir()), "", + file_wildcards(FT_ZIP), wxFD_OPEN | wxFD_FILE_MUST_EXIST); + + if (dialog.ShowModal() == wxID_OK) + input_file = dialog.GetPath(); +} + void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const { input_file.Clear(); @@ -3715,6 +3871,21 @@ std::string GUI_App::handle_web_request(std::string cmd) if (path.has_value()) { wxLaunchDefaultBrowser(path.value()); } + } + else if (command_str.compare("homepage_makerlab_get") == 0) { + //if (mainframe->m_webview) { mainframe->m_webview->SendMakerlabList(); } + } + else if (command_str.compare("makerworld_model_open") == 0) + { + if (root.get_child_optional("model") != boost::none) { + pt::ptree data_node = root.get_child("model"); + boost::optional path = data_node.get_optional("url"); + if (path.has_value()) + { + wxString realurl = from_u8(url_decode(path.value())); + wxGetApp().request_model_download(realurl); + } + } } } } @@ -3828,7 +3999,7 @@ void GUI_App::on_http_error(wxCommandEvent &evt) 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); if (msg_dlg.ShowModal() == wxOK) { } - + } // request login @@ -3868,9 +4039,17 @@ void GUI_App::enable_user_preset_folder(bool enable) void GUI_App::on_set_selected_machine(wxCommandEvent &evt) { DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev || m_agent) return; + if (dev) { + dev->set_selected_machine(m_agent->get_user_selected_machine()); + } +} - dev->set_selected_machine(m_agent->get_user_selected_machine()); +void GUI_App::on_update_machine_list(wxCommandEvent &evt) +{ + /* DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->add_user_subscribe(); + }*/ } void GUI_App::on_user_login_handle(wxCommandEvent &evt) @@ -3904,27 +4083,9 @@ void GUI_App::on_user_login_handle(wxCommandEvent &evt) 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; - header_json["ver"] = SLIC3R_VERSION; - wxString os_desc = wxGetOsDescription(); - 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_enable(true); - m_agent->track_header(header_json.dump()); - } - /* record studio start event */ - json j; - j["user_mode"] = this->get_mode_str(); - j["open_method"] = m_open_method; - if (m_agent) { - m_agent->track_event("studio_launch", j.dump()); - } + if (m_agent) { + m_agent->track_enable(false); + m_agent->track_remove_files(); } } @@ -4304,6 +4465,24 @@ std::string GUI_App::format_display_version() return version_display; } +std::string GUI_App::format_IP(const std::string& ip) +{ + std::string format_ip = ip; + size_t pos_st = 0; + size_t pos_en = 0; + + for (int i = 0; i < 2; i++) { + pos_en = format_ip.find('.', pos_st + 1); + if (pos_en == std::string::npos) { + return ip; + } + format_ip.replace(pos_st, pos_en - pos_st, "***"); + pos_st = pos_en + 1; + } + + return format_ip; +} + void GUI_App::show_dialog(wxString msg) { if (m_info_dialog_content.empty()) { @@ -4314,6 +4493,26 @@ void GUI_App::show_dialog(wxString msg) } } +void GUI_App::push_notification(wxString msg, wxString title, UserNotificationStyle style) +{ + if (!this->is_enable_multi_machine()) { + if (style == UserNotificationStyle::UNS_NORMAL) { + 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; + } + } + else if (style == UserNotificationStyle::UNS_WARNING_CONFIRM) { + GUI::wxGetApp().CallAfter([msg, title] { + GUI::MessageDialog msg_dlg(nullptr, msg, title, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + }); + } + } +} + void GUI_App::reload_settings() { if (preset_bundle && m_agent) { @@ -5294,6 +5493,7 @@ void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_ associate_files(L"step"); associate_files(L"stp"); } + associate_url(L"orcaslicer"); } else { if (app_config->get("associate_gcode") == "true") @@ -5645,34 +5845,16 @@ void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) void GUI_App::MacOpenURL(const wxString& url) { - BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << "get mac url " << url; - - if (!url.empty() && boost::starts_with(url, "orcasliceropen://")) { - auto input_str_arr = split_str(url.ToStdString(), "orcasliceropen://"); - - 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(trace) << __FUNCTION__ << download_file_url; - if (!download_file_url.empty() && (boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://"))) { - - if (m_post_initialized) { - request_model_download(download_file_url); - } - else { - m_download_file_url = download_file_url; - } - } - } + if (url.empty()) + return; + start_download(boost::nowide::narrow(url)); } // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { - if (m_post_initialized) { + bool single_instance = app_config->get("app", "single_instance") == "true"; + if (m_post_initialized && !single_instance) { bool has3mf = false; std::vector names; for (auto & n : fileNames) { @@ -5789,6 +5971,11 @@ Model& GUI_App::model() return plater_->model(); } +Downloader* GUI_App::downloader() +{ + return m_downloader.get(); +} + void GUI_App::load_url(wxString url) { if (mainframe) @@ -5884,6 +6071,25 @@ std::string GUI_App::url_encode(std::string value) { return Http::url_encode(value); } +void GUI_App::popup_ping_bind_dialog() +{ + if (m_ping_code_binding_dialog == nullptr) { + m_ping_code_binding_dialog = new PingCodeBindDialog(); + m_ping_code_binding_dialog->ShowModal(); + remove_ping_bind_dialog(); + } +} + +void GUI_App::remove_ping_bind_dialog() +{ + if (m_ping_code_binding_dialog != nullptr) { + m_ping_code_binding_dialog->Destroy(); + delete m_mall_publish_dialog; + m_ping_code_binding_dialog = nullptr; + } +} + + void GUI_App::remove_mall_system_dialog() { if (m_mall_publish_dialog != nullptr) { @@ -5934,6 +6140,15 @@ int GUI_App::filaments_cnt() const return preset_bundle->filament_presets.size(); } +PrintSequence GUI_App::global_print_sequence() const +{ + PrintSequence global_print_seq = PrintSequence::ByDefault; + auto curr_preset_config = preset_bundle->prints.get_edited_preset().config; + if (curr_preset_config.has("print_sequence")) + global_print_seq = curr_preset_config.option>("print_sequence")->value; + return global_print_seq; +} + wxString GUI_App::current_language_code_safe() const { // Translate the language code to a code, for which Prusa Research maintains translations. @@ -5952,6 +6167,8 @@ wxString GUI_App::current_language_code_safe() const { "uk", "uk_UA", }, { "zh", "zh_CN", }, { "ru", "ru_RU", }, + { "tr", "tr_TR", }, + { "pt", "pt_BR", }, }; wxString language_code = this->current_language_code().BeforeFirst('_'); auto it = mapping.find(language_code); @@ -6007,6 +6224,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage if (res) { load_current_presets(); update_publish_status(); + mainframe->refresh_plugin_tips(); // BBS: remove SLA related message } @@ -6293,9 +6511,11 @@ static bool del_win_registry(HKEY hkeyHive, const wchar_t *pszVar, const wchar_t return false; } +#endif // __WXMSW__ void GUI_App::associate_files(std::wstring extend) { +#ifdef WIN32 wchar_t app_path[MAX_PATH]; ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); @@ -6315,10 +6535,12 @@ void GUI_App::associate_files(std::wstring extend) if (is_new) // notify Windows only when any of the values gets changed ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr); +#endif // WIN32 } void GUI_App::disassociate_files(std::wstring extend) { +#ifdef WIN32 wchar_t app_path[MAX_PATH]; ::GetModuleFileNameW(nullptr, app_path, sizeof(app_path)); @@ -6345,10 +6567,84 @@ void GUI_App::disassociate_files(std::wstring extend) if (is_new) ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nullptr, nullptr); +#endif // WIN32 +} + +bool GUI_App::check_url_association(std::wstring url_prefix, std::wstring& reg_bin) +{ + reg_bin = L""; +#ifdef WIN32 + wxRegKey key_full(wxRegKey::HKCU, "Software\\Classes\\" + url_prefix + "\\shell\\open\\command"); + if (!key_full.Exists()) { + return false; + } + reg_bin = key_full.QueryDefaultValue().ToStdWstring(); + + boost::filesystem::path binary_path(boost::filesystem::canonical(boost::dll::program_location())); + std::wstring key_string = L"\"" + binary_path.wstring() + L"\" \"%1\""; + return key_string == reg_bin; +#else + return false; +#endif // WIN32 +} + +void GUI_App::associate_url(std::wstring url_prefix) +{ +#ifdef WIN32 + boost::filesystem::path binary_path(boost::filesystem::canonical(boost::dll::program_location())); + // the path to binary needs to be correctly saved in string with respect to localized characters + wxString wbinary = wxString::FromUTF8(binary_path.string()); + std::string binary_string = (boost::format("%1%") % wbinary).str(); + BOOST_LOG_TRIVIAL(info) << "Downloader registration: Path of binary: " << binary_string; + + std::string key_string = "\"" + binary_string + "\" \"%1\""; + + wxRegKey key_first(wxRegKey::HKCU, "Software\\Classes\\" + url_prefix); + wxRegKey key_full(wxRegKey::HKCU, "Software\\Classes\\" + url_prefix + "\\shell\\open\\command"); + if (!key_first.Exists()) { + key_first.Create(false); + } + key_first.SetValue("URL Protocol", ""); + + if (!key_full.Exists()) { + key_full.Create(false); + } + key_full = key_string; +#elif defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) + DesktopIntegrationDialog::perform_downloader_desktop_integration(boost::nowide::narrow(url_prefix)); +#endif // WIN32 +} + +void GUI_App::disassociate_url(std::wstring url_prefix) +{ +#ifdef WIN32 + wxRegKey key_full(wxRegKey::HKCU, "Software\\Classes\\" + url_prefix + "\\shell\\open\\command"); + if (!key_full.Exists()) { + return; + } + key_full = ""; +#endif // WIN32 } -#endif // __WXMSW__ +void GUI_App::start_download(std::string url) +{ + if (!plater_) { + BOOST_LOG_TRIVIAL(error) << "Could not start URL download: plater is nullptr."; + return; + } + //lets always init so if the download dest folder was changed, new dest is used + boost::filesystem::path dest_folder(app_config->get("download_path")); + if (dest_folder.empty() || !boost::filesystem::is_directory(dest_folder)) { + std::string msg = _u8L("Could not start URL download. Destination folder is not set. Please choose destination folder in Configuration Wizard."); + BOOST_LOG_TRIVIAL(error) << msg; + show_error(nullptr, msg); + return; + } + m_downloader->init(dest_folder); + m_downloader->start_download(url); + +} bool is_support_filament(int extruder_id) { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index f7606c8a07..44d430d2d1 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -16,9 +16,11 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/DeviceManager.hpp" +#include "slic3r/GUI/UserNotification.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/GUI/WebViewDialog.hpp" #include "slic3r/GUI/WebUserLoginDialog.hpp" +#include "slic3r/GUI/BindDialog.hpp" #include "slic3r/GUI/HMS.hpp" #include "slic3r/GUI/Jobs/UpgradeNetworkJob.hpp" #include "slic3r/GUI/HttpServer.hpp" @@ -34,6 +36,7 @@ #define TIMEOUT_RESPONSE 15 #define BE_UNACTED_ON 0x00200001 +#define SHOW_BACKGROUND_BITMAP_PIXEL_THRESHOLD 80 #ifndef _MSW_DARK_MODE #define _MSW_DARK_MODE 1 #endif // _MSW_DARK_MODE @@ -55,8 +58,10 @@ class PresetBundle; class PresetUpdater; class ModelObject; class Model; +class UserManager; class DeviceManager; class NetworkAgent; +class TaskManager; namespace GUI{ @@ -70,10 +75,12 @@ class ObjectLayers; class Plater; class ParamsPanel; class NotificationManager; +class Downloader; struct GUI_InitParams; class ParamsDialog; class HMSQuery; class ModelMallDialog; +class PingCodeBindDialog; enum FileType @@ -85,6 +92,7 @@ enum FileType FT_3MF, FT_GCODE, FT_MODEL, + FT_ZIP, FT_PROJECT, FT_GALLERY, @@ -229,8 +237,6 @@ private: bool m_opengl_initialized{ false }; #endif -//import model from mall - wxString m_download_file_url; //#ifdef _WIN32 wxColour m_color_label_modified; @@ -265,14 +271,18 @@ private: std::unique_ptr m_imgui; std::unique_ptr m_printhost_job_queue; - //std::unique_ptr m_other_instance_message_handler; - //std::unique_ptr m_single_instance_checker; - //std::string m_instance_hash_string; - //size_t m_instance_hash_int; + std::unique_ptr m_other_instance_message_handler; + std::unique_ptr m_single_instance_checker; + std::string m_instance_hash_string; + size_t m_instance_hash_int; + + std::unique_ptr m_downloader; //BBS bool m_is_closing {false}; Slic3r::DeviceManager* m_device_manager { nullptr }; + Slic3r::UserManager* m_user_manager { nullptr }; + Slic3r::TaskManager* m_task_manager { nullptr }; NetworkAgent* m_agent { nullptr }; std::vector need_delete_presets; // store setting ids of preset std::vector m_create_preset_blocked { false, false, false, false, false, false }; // excceed limit @@ -307,6 +317,7 @@ private: bool OnInit() override; int OnExit() override; bool initialized() const { return m_initialized; } + inline bool is_enable_multi_machine() { return this->app_config&& this->app_config->get("enable_multi_machine") == "true"; } std::map test_url_state; @@ -318,6 +329,7 @@ private: 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; } + Slic3r::TaskManager* getTaskManager() { return m_task_manager; } HMSQuery* get_hms_query() { return hms_query; } NetworkAgent* getAgent() { return m_agent; } bool is_editor() const { return m_app_mode == EAppMode::Editor; } @@ -414,6 +426,7 @@ private: void keyboard_shortcuts(); void load_project(wxWindow *parent, wxString& input_file) const; void import_model(wxWindow *parent, wxArrayString& input_files) const; + void import_zip(wxWindow* parent, wxString& input_file) const; void load_gcode(wxWindow* parent, wxString& input_file) const; wxString transition_tridid(int trid_id); @@ -442,6 +455,7 @@ private: void handle_http_error(unsigned int status, std::string body); void on_http_error(wxCommandEvent &evt); void on_set_selected_machine(wxCommandEvent& evt); + void on_update_machine_list(wxCommandEvent& evt); void on_user_login(wxCommandEvent &evt); void on_user_login_handle(wxCommandEvent& evt); void enable_user_preset_folder(bool enable); @@ -460,7 +474,9 @@ private: void set_skip_version(bool skip = true); void no_new_version(); static std::string format_display_version(); + std::string format_IP(const std::string& ip); void show_dialog(wxString msg); + void push_notification(wxString msg, wxString title = wxEmptyString, UserNotificationStyle style = UserNotificationStyle::UNS_NORMAL); void reload_settings(); void remove_user_presets(); void sync_preset(Preset* preset); @@ -547,11 +563,13 @@ private: ParamsDialog* params_dialog(); Model& model(); NotificationManager * notification_manager(); + Downloader* downloader(); std::string m_mall_model_download_url; std::string m_mall_model_download_name; ModelMallDialog* m_mall_publish_dialog{ nullptr }; + PingCodeBindDialog* m_ping_code_binding_dialog{ nullptr }; void set_download_model_url(std::string url) {m_mall_model_download_url = url;} void set_download_model_name(std::string name) {m_mall_model_download_name = name;} @@ -570,6 +588,9 @@ private: std::string url_encode(std::string value); std::string url_decode(std::string value); + void popup_ping_bind_dialog(); + void remove_ping_bind_dialog(); + // Parameters extracted from the command line to be passed to GUI after initialization. GUI_InitParams* init_params { nullptr }; @@ -587,19 +608,20 @@ private: // BBS int filaments_cnt() const; + PrintSequence global_print_sequence() const; std::vector tabs_list; std::vector model_tabs_list; Tab* plate_tab; RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); } - //OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); } - //wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();} + OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); } + wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();} - //void init_single_instance_checker(const std::string &name, const std::string &path); - //void set_instance_hash (const size_t hash) { m_instance_hash_int = hash; m_instance_hash_string = std::to_string(hash); } - //std::string get_instance_hash_string () { return m_instance_hash_string; } - //size_t get_instance_hash_int () { return m_instance_hash_int; } + void init_single_instance_checker(const std::string &name, const std::string &path); + void set_instance_hash (const size_t hash) { m_instance_hash_int = hash; m_instance_hash_string = std::to_string(hash); } + std::string get_instance_hash_string () { return m_instance_hash_string; } + size_t get_instance_hash_int () { return m_instance_hash_int; } ImGuiWrapper* imgui() { return m_imgui.get(); } @@ -623,11 +645,16 @@ private: bool is_glsl_version_greater_or_equal_to(unsigned int major, unsigned int minor) const { return m_opengl_mgr.get_gl_info().is_glsl_version_greater_or_equal_to(major, minor); } int GetSingleChoiceIndex(const wxString& message, const wxString& caption, const wxArrayString& choices, int initialSelection); -#ifdef __WXMSW__ - // extend is stl/3mf/gcode/step etc + // extend is stl/3mf/gcode/step etc void associate_files(std::wstring extend); void disassociate_files(std::wstring extend); -#endif // __WXMSW__ + bool check_url_association(std::wstring url_prefix, std::wstring& reg_bin); + void associate_url(std::wstring url_prefix); + void disassociate_url(std::wstring url_prefix); + + // URL download - PrusaSlicer gets system call to open prusaslicer:// URL which should contain address of download + void start_download(std::string url); + 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); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 6102761b10..bd0d5ff856 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Pavel Mikuš @Godrak, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/Config.hpp" #include "libslic3r/libslic3r.h" #include "libslic3r/PresetBundle.hpp" @@ -87,7 +83,9 @@ std::map> SettingsFactory::OBJECT_C {"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}, {"wall_sequence","",10} + {"make_overhang_printable_angle","", 8},{"make_overhang_printable_hole_size","",9}, {"wall_sequence","",10}, + {"precise_z_height", "",10} + }}, { 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}, @@ -108,7 +106,7 @@ std::map> SettingsFactory::PART_CAT { 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} + {"infill_combination", "",1}, {"infill_wall_overlap", "",1},{"top_bottom_infill_wall_overlap", "",1}, {"solid_infill_direction", "",1}, {"rotate_solid_infill_direction", "",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}, @@ -498,18 +496,28 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty if (type != ModelVolumeType::INVALID) { append_menu_item(sub_menu, wxID_ANY, _L("Load..."), "", - [type](wxCommandEvent&) { obj_list()->load_subobject(type); }, "", menu); + [type](wxCommandEvent&) { obj_list()->load_subobject(type); }, "menu_load", menu); sub_menu->AppendSeparator(); } - for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone"), L("Disc"), L("Torus")}) { - append_menu_item( - sub_menu, wxID_ANY, _(item), "", - [type, item](wxCommandEvent &) { - obj_list()->load_generic_subobject(item, type); - }, - "", menu); - } + append_menu_item(sub_menu, wxID_ANY, _L("Cube"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Cube") ,type); },"menu_obj_cube", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Cylinder"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Cylinder"), type); },"menu_obj_cylinder", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Sphere"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Sphere"), type); },"menu_obj_sphere", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Cone"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Cone"), type); },"menu_obj_cone", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Disc"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Disc"), type); },"menu_obj_disc", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Torus"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Torus"), type); },"menu_obj_torus", menu); + append_menu_item_add_text(sub_menu, type); append_menu_item_add_svg(sub_menu, type); @@ -532,15 +540,15 @@ wxMenu* MenuFactory::append_submenu_add_handy_model(wxMenu* menu, ModelVolumeTyp if (file_name == L("Orca Cube")) file_name = "OrcaCube_v2.3mf"; else if (file_name == L("3DBenchy")) - file_name = "3DBenchy.stl"; + file_name = "3DBenchy.3mf"; else if (file_name == L("Autodesk FDM Test")) - file_name = "ksr_fdmtest_v4.stl"; + file_name = "ksr_fdmtest_v4.3mf"; else if (file_name == L("Voron Cube")) - file_name = "Voron_Design_Cube_v7.stl"; + file_name = "Voron_Design_Cube_v7.3mf"; else if (file_name == L("Stanford Bunny")) - file_name = "Stanford_Bunny.stl"; + file_name = "Stanford_Bunny.3mf"; else if (file_name == L("Orca String Hell")) { - file_name = "Orca_stringhell.stl"; + file_name = "Orca_stringhell.3mf"; is_stringhell = true; } else return; @@ -617,7 +625,8 @@ static void append_menu_itemm_add_(const wxString& name, GLGizmosManager::EType ) { wxString item_name = wxString(is_submenu_item ? "" : _(ADD_VOLUME_MENU_ITEMS[int(type)].first) + ": ") + name; menu->AppendSeparator(); - const std::string icon_name = is_submenu_item ? "" : ADD_VOLUME_MENU_ITEMS[int(type)].second; + auto def_icon_name = (gizmo_type == GLGizmosManager::Emboss) ? "menu_obj_text" : "menu_obj_svg"; + const std::string icon_name = is_submenu_item ? def_icon_name : ADD_VOLUME_MENU_ITEMS[int(type)].second; append_menu_item(menu, wxID_ANY, item_name, "", add_, icon_name, menu); } } @@ -659,7 +668,7 @@ void MenuFactory::append_menu_items_add_volume(wxMenu* menu) wxMenuItem* MenuFactory::append_menu_item_layers_editing(wxMenu* menu) { return append_menu_item(menu, wxID_ANY, _L("Height range Modifier"), "", - [](wxCommandEvent&) { obj_list()->layers_editing(); wxGetApp().params_panel()->switch_to_object(); }, "", menu, + [](wxCommandEvent&) { obj_list()->layers_editing(); wxGetApp().params_panel()->switch_to_object(); }, "height_range_modifier", menu, []() { return obj_list()->is_instance_or_object_selected(); }, m_parent); } @@ -897,8 +906,20 @@ void MenuFactory::append_menu_item_change_extruder(wxMenu* menu) bool is_active_extruder = i == initial_extruder; int icon_idx = i == 0 ? 0 : i - 1; - const wxString& item_name = (i == 0 ? _L("Default") : wxString::Format(_L("Filament %d"), i)) + - (is_active_extruder ? " (" + _L("active") + ")" : ""); + wxString item_name = _L("Default"); + + if (i > 0) { + auto preset = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[i - 1]); + if (preset == nullptr) { + item_name = wxString::Format(_L("Filament %d"), i); + } else { + item_name = from_u8(preset->label(false)); + } + } + + if (is_active_extruder) { + item_name << " (" + _L("current") + ")"; + } if (icon_idx >= 0 && icon_idx < icons.size()) { append_menu_item( @@ -1099,11 +1120,11 @@ void MenuFactory::append_menu_items_mirror(wxMenu* menu) return; append_menu_item(mirror_menu, wxID_ANY, _L("Along X axis"), _L("Mirror along the X axis"), - [](wxCommandEvent&) { plater()->mirror(X); }, "", menu); + [](wxCommandEvent&) { plater()->mirror(X); }, "menu_mirror_x", menu); append_menu_item(mirror_menu, wxID_ANY, _L("Along Y axis"), _L("Mirror along the Y axis"), - [](wxCommandEvent&) { plater()->mirror(Y); }, "", menu); + [](wxCommandEvent&) { plater()->mirror(Y); }, "menu_mirror_y", menu); append_menu_item(mirror_menu, wxID_ANY, _L("Along Z axis"), _L("Mirror along the Z axis"), - [](wxCommandEvent&) { plater()->mirror(Z); }, "", menu); + [](wxCommandEvent&) { plater()->mirror(Z); }, "menu_mirror_z", menu); append_submenu(menu, mirror_menu, wxID_ANY, _L("Mirror"), _L("Mirror object"), "", []() { return plater()->can_mirror(); }, m_parent); @@ -1216,11 +1237,17 @@ void MenuFactory::create_default_menu() []() {return true; }, m_parent); append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", []() {return true; }, m_parent); + append_menu_item(&m_default_menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models + [](wxCommandEvent&) { plater()->add_file(); }, "menu_add_part", &m_default_menu, + []() {return wxGetApp().plater()->can_add_model(); }, m_parent); #else append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", []() {return true; }, m_parent); append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", []() {return true; }, m_parent); + append_menu_item(&m_default_menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models + [](wxCommandEvent&) { plater()->add_file(); }, "", &m_default_menu, + []() {return wxGetApp().plater()->can_add_model(); }, m_parent); #endif m_default_menu.AppendSeparator(); @@ -1258,10 +1285,10 @@ void MenuFactory::create_object_menu() return; append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", &m_object_menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", &m_object_menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", &m_object_menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", &m_object_menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(&m_object_menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1292,10 +1319,10 @@ void MenuFactory::create_extra_object_menu() if (!split_menu) return; append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", &m_object_menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", &m_object_menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", &m_object_menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", &m_object_menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(&m_object_menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1337,7 +1364,7 @@ void MenuFactory::create_sla_object_menu() { create_common_object_menu(&m_sla_object_menu); append_menu_item(&m_sla_object_menu, wxID_ANY, _L("Split"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", nullptr, + [](wxCommandEvent&) { plater()->split_object(); }, "", nullptr, []() { return plater()->can_split(true); }, m_parent); m_sla_object_menu.AppendSeparator(); @@ -1415,10 +1442,10 @@ void MenuFactory::create_bbl_part_menu() return; append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into mutiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into mutiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1476,6 +1503,17 @@ void MenuFactory::create_plate_menu() }, m_parent); + // reload all objects on current plate + append_menu_item( + menu, wxID_ANY, _L("Reload All"), _L("reload all from disk"), + [](wxCommandEvent&) { + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); + plater()->set_prepare_state(Job::PREPARE_STATE_MENU); + plater()->reload_all_from_disk(); + }, + "", nullptr, []() { return !plater()->get_partplate_list().get_selected_plate()->get_objects().empty(); }, m_parent); + // orient objects on current plate append_menu_item(menu, wxID_ANY, _L("Auto Rotate"), _L("auto rotate current plate"), [](wxCommandEvent&) { @@ -1511,11 +1549,17 @@ void MenuFactory::create_plate_menu() []() {return true; }, m_parent); append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", []() {return true; }, m_parent); + append_menu_item(menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models + [](wxCommandEvent&) { plater()->add_file(); }, "menu_add_part", menu, + []() {return wxGetApp().plater()->can_add_model(); }, m_parent); #else append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", []() {return true; }, m_parent); append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", []() {return true; }, m_parent); + append_menu_item(menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models + [](wxCommandEvent&) { plater()->add_file(); }, "", menu, + []() {return wxGetApp().plater()->can_add_model(); }, m_parent); #endif @@ -1661,10 +1705,10 @@ wxMenu* MenuFactory::multi_selection_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"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1881,8 +1925,20 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) //bool is_active_extruder = i == initial_extruder; bool is_active_extruder = false; - const wxString& item_name = (i == 0 ? _L("Default") : wxString::Format(_L("Filament %d"), i)) + - (is_active_extruder ? " (" + _L("current") + ")" : ""); + wxString item_name = _L("Default"); + + if (i > 0) { + auto preset = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[i - 1]); + if (preset == nullptr) { + item_name = wxString::Format(_L("Filament %d"), i); + } else { + item_name = from_u8(preset->label(false)); + } + } + + if (is_active_extruder) { + item_name << " (" + _L("current") + ")"; + } append_menu_item(extruder_selection_menu, wxID_ANY, item_name, "", [i](wxCommandEvent&) { obj_list()->set_extruder_for_selected_items(i); }, i == 0 ? wxNullBitmap : *icons[i - 1], menu, @@ -1958,10 +2014,10 @@ void MenuFactory::append_menu_item_plate_name(wxMenu *menu) // 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) { @@ -1973,7 +2029,7 @@ void MenuFactory::append_menu_item_plate_name(wxMenu *menu) 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); diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 16e25533fa..f0e503c450 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_Factories_hpp_ #define slic3r_GUI_Factories_hpp_ diff --git a/src/slic3r/GUI/GUI_Geometry.cpp b/src/slic3r/GUI/GUI_Geometry.cpp index 3cee023e12..b0ed0e04fc 100644 --- a/src/slic3r/GUI/GUI_Geometry.cpp +++ b/src/slic3r/GUI/GUI_Geometry.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Enrico Turri @enricoturri1966 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "GUI_Geometry.hpp" diff --git a/src/slic3r/GUI/GUI_Geometry.hpp b/src/slic3r/GUI/GUI_Geometry.hpp index ed89af649c..b18e4ae5a5 100644 --- a/src/slic3r/GUI/GUI_Geometry.hpp +++ b/src/slic3r/GUI/GUI_Geometry.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Enrico Turri @enricoturri1966 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_Geometry_hpp_ #define slic3r_GUI_Geometry_hpp_ diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp index 81918c58ef..002123f8b3 100644 --- a/src/slic3r/GUI/GUI_Init.cpp +++ b/src/slic3r/GUI/GUI_Init.cpp @@ -40,14 +40,14 @@ int GUI_Run(GUI_InitParams ¶ms) try { //GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); GUI::GUI_App* gui = new GUI::GUI_App(); - /*if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { + //if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { // G-code viewer is currently not performing instance check, a new G-code viewer is started every time. - bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; + bool gui_single_instance_setting = gui->app_config->get("app", "single_instance") == "true"; if (Slic3r::instance_check(params.argc, params.argv, gui_single_instance_setting)) { //TODO: do we have delete gui and other stuff? return -1; } - //}*/ + //} // gui->autosave = m_config.opt_string("autosave"); GUI::GUI_App::SetInstance(gui); diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 76dd268633..9b36885e56 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -31,8 +31,8 @@ ObjectLayers::ObjectLayers(wxWindow* parent) : m_og->sizer->Clear(true); m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, wxOSX ? 0 : 5); - m_bmp_delete = ScalableBitmap(parent, "delete_filament"/*"cross"*/); - m_bmp_add = ScalableBitmap(parent, "add_filament"); + m_bmp_delete = ScalableBitmap(parent, "delete"); + m_bmp_add = ScalableBitmap(parent, "add"); } void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_edited_range) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 0f1f753acb..5ba1751daa 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1,9 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Pavel Mikuš @Godrak, David Kocík @kocikdav, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2021 Mathias Rasmussen -///|/ Copyright (c) 2020 rongith -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "libslic3r/PresetBundle.hpp" #include "GUI_ObjectList.hpp" @@ -699,6 +693,9 @@ void ObjectList::update_filament_values_for_items(const size_t filaments_count) void ObjectList::update_plate_values_for_items() { +#ifdef __WXOSX__ + AssociateModel(nullptr); +#endif PartPlateList& list = wxGetApp().plater()->get_partplate_list(); for (size_t i = 0; i < m_objects->size(); ++i) { @@ -724,6 +721,9 @@ void ObjectList::update_plate_values_for_items() Expand(item); Select(item); } +#ifdef __WXOSX__ + AssociateModel(m_objects_model); +#endif } // BBS @@ -1341,6 +1341,7 @@ void ObjectList::show_context_menu(const bool evt_context_menu) const ModelVolume *volume = object(obj_idx)->volumes[vol_idx]; menu = volume->is_text() ? plater->text_part_menu() : + volume->is_svg() ? plater->svg_part_menu() : // ORCA fixes missing "Edit SVG" item for Add/Negative/Modifier SVG objects in object list plater->part_menu(); } else @@ -3627,7 +3628,7 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed, //BBS start add obj_idx for debug PartPlateList& list = wxGetApp().plater()->get_partplate_list(); if (notify_partplate) { - list.notify_instance_update(obj_idx, 0); + list.notify_instance_update(obj_idx, 0, true); } //int plate_idx = list.find_instance_belongs(obj_idx, 0); //std::string item_name_str = (boost::format("[P%1%][O%2%]%3%") % plate_idx % std::to_string(obj_idx) % model_object->name).str(); @@ -3869,16 +3870,10 @@ 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) @@ -5024,8 +5019,17 @@ void ObjectList::change_part_type() } } - const wxString names[] = { _L("Part"), _L("Negative Part"), _L("Modifier"), _L("Support Blocker"), _L("Support Enforcer") }; - SingleChoiceDialog dlg(_L("Type:"), _L("Choose part type"), wxArrayString(5, names), int(type)); + // ORCA: Fix crash when changing type of svg / text modifier + wxArrayString names; + names.Add(_L("Part")); + names.Add(_L("Negative Part")); + names.Add(_L("Modifier")); + if (!volume->is_svg() && !volume->is_text()) { + names.Add(_L("Support Blocker")); + names.Add(_L("Support Enforcer")); + } + + SingleChoiceDialog dlg(_L("Type:"), _L("Choose part type"), names, int(type)); auto new_type = ModelVolumeType(dlg.GetSingleChoiceIndex()); if (new_type == type || new_type == ModelVolumeType::INVALID) @@ -5652,11 +5656,22 @@ void ObjectList::set_extruder_for_selected_items(const int extruder) if (type & itLayerRoot) continue; + // BBS: handle extruder 0 for part, use it's parent extruder + int new_extruder = extruder; + if (extruder == 0) { + if (type & itObject) { + new_extruder = 1; + } + else if ((type & itVolume) && (m_objects_model->GetVolumeType(sel_item) == ModelVolumeType::MODEL_PART)) { + new_extruder = m_objects_model->GetExtruderNumber(m_objects_model->GetParent(sel_item)); + } + } + ModelConfig& config = get_item_config(item); if (config.has("extruder")) - config.set("extruder", extruder); + config.set("extruder", new_extruder); else - config.set_key_value("extruder", new ConfigOptionInt(extruder)); + config.set_key_value("extruder", new ConfigOptionInt(new_extruder)); // for object, clear all its part volume's extruder config if (type & itObject) { @@ -5667,7 +5682,7 @@ void ObjectList::set_extruder_for_selected_items(const int extruder) } } - const wxString extruder_str = wxString::Format("%d", extruder); + const wxString extruder_str = wxString::Format("%d", new_extruder); m_objects_model->SetExtruder(extruder_str, item); } @@ -5853,6 +5868,7 @@ void ObjectList::toggle_printable_state() // update scene wxGetApp().plater()->update(); + wxGetApp().plater()->reload_paint_after_background_process_apply(); } ModelObject* ObjectList::object(const int obj_idx) const diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index ff9521b584..09ca8c64a8 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -209,36 +209,36 @@ bool ObjectSettings::update_settings_list() ModelObject * parent_object = nullptr; for (auto item : items) { auto type = objects_model->GetItemType(item); - if (type == itPlate) { - is_plate_settings = true; - - int plate_id = objects_model->GetPlateIdByItem(item); - - static ModelConfig cfg; - PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); - - if (plate_id < 0 || plate_id >= ppl.get_plate_count()) { - plate_id = ppl.get_curr_plate_index(); - } - assert(plate_id >= 0 && plate_id < ppl.get_plate_count()); - - cfg.assign_config(*ppl.get_plate(plate_id)->config()); - plate_configs.emplace(ppl.get_plate(plate_id), &cfg); - } - if (type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { + if (type != itPlate && type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { continue; } + int plate_id = objects_model->GetPlateIdByItem(item); + PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); + if (plate_id < 0 || plate_id >= ppl.get_plate_count()) { + plate_id = ppl.get_curr_plate_index(); + } + assert(plate_id >= 0 && plate_id < ppl.get_plate_count()); + static ModelConfig cfg; + cfg.assign_config(*ppl.get_plate(plate_id)->config()); + if (type == itPlate) { + is_plate_settings = true; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); + break; + } + const int obj_idx = objects_model->GetObjectIdByItem(item); assert(obj_idx >= 0); auto object = wxGetApp().model().objects[obj_idx]; if (type == itObject) { is_object_settings = true; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); object_configs.emplace(object, &object->config); } else if(type == itVolume){ is_volume_settings = true; if (parent_object && parent_object != object) return false; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); parent_object = object; const int vol_idx = objects_model->GetVolumeIdByItem(item); assert(vol_idx >= 0); @@ -249,6 +249,7 @@ bool ObjectSettings::update_settings_list() is_layer_range_settings = true; if (parent_object && parent_object != object) return false; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); parent_object = object; t_layer_height_range height_range = objects_model->GetLayerRangeByItem(item); @@ -265,38 +266,38 @@ bool ObjectSettings::update_settings_list() auto tab_layer = dynamic_cast(wxGetApp().get_layer_tab()); if (is_plate_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config({}); tab_volume->set_model_config({}); tab_layer->set_model_config({}); - tab_plate->set_model_config(plate_configs); ;// m_tab_active = tab_plate; } else if (is_object_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config(object_configs); tab_volume->set_model_config({}); tab_layer->set_model_config({}); - tab_plate->set_model_config({}); //m_tab_active = tab_object; } else if (is_volume_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config({ {parent_object, &parent_object->config} }); tab_volume->set_model_config(object_configs); tab_layer->set_model_config({}); - tab_plate->set_model_config({}); //m_tab_active = tab_volume; } else if (is_layer_range_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config({ {parent_object, &parent_object->config} }); tab_volume->set_model_config({}); tab_layer->set_model_config(object_configs); - tab_plate->set_model_config({}); //m_tab_active = tab_layer; } else { + tab_plate->set_model_config({}); tab_object->set_model_config({}); tab_volume->set_model_config({}); tab_layer->set_model_config({}); - tab_plate->set_model_config({}); //m_tab_active = nullptr; } ((ParamsPanel*) tab_object->GetParent())->set_active_tab(nullptr); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index dd2e90b84d..56c1550c46 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -345,10 +345,16 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(wxBrush(attr.GetBackgroundColour())); dc.DrawRectangle(rect); - if ( grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { + if ((grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) && \ + (grid_row->model_volume_type != ModelVolumeType::SUPPORT_BLOCKER) && \ + (grid_row->model_volume_type != ModelVolumeType::SUPPORT_ENFORCER) && \ + (grid_row->model_volume_type != ModelVolumeType::PARAMETER_MODIFIER)) { dc.DrawBitmap(*bitmap, wxPoint(rect.x + offset_x, rect.y + offset_y)); } - + else if (grid_row->model_volume_type == ModelVolumeType::PARAMETER_MODIFIER){ + dc.DrawText("Default", wxPoint(rect.x + offset_x, rect.y + offset_y)); + } + text_rect.x += bitmap_width + grid_cell_border_width * 2; text_rect.width -= (bitmap_width + grid_cell_border_width * 2); } @@ -693,40 +699,44 @@ void GridCellSupportRenderer::Draw(wxGrid& grid, auto width = grid.GetColSize(col); wxGridCellRenderer::Draw(grid, attr, dc, rect, row, col, isSelected); - if (cur_option.value) { + wxString value = table->GetValue(row, col); + if (grid_row->row_type != table->GridRowType::row_volume || col != table->GridColType::col_printable) { + if (cur_option.value) { - auto check_on = create_scaled_bitmap("check_on", nullptr, 18); - dc.SetPen(*wxTRANSPARENT_PEN); + auto check_on = create_scaled_bitmap("check_on", nullptr, 18); + dc.SetPen(*wxTRANSPARENT_PEN); - auto offsetx = 0; - auto offsety = 0; + auto offsetx = 0; + auto offsety = 0; - #ifdef __WXOSX_MAC__ - offsetx = (width - 18) / 2; - offsety = (height - 18) / 2; - #else - offsetx = (width - check_on.GetSize().x) / 2; - offsety = (height - check_on.GetSize().y) / 2; - #endif // __WXOSX_MAC__ + #ifdef __WXOSX_MAC__ + offsetx = (width - 18) / 2; + offsety = (height - 18) / 2; + #else + offsetx = (width - check_on.GetSize().x) / 2; + offsety = (height - check_on.GetSize().y) / 2; + #endif // __WXOSX_MAC__ - dc.DrawBitmap(check_on, rect.x + offsetx, rect.y + offsety); + dc.DrawBitmap(check_on, rect.x + offsetx, rect.y + offsety); } else { - auto check_off = create_scaled_bitmap("check_off_focused", nullptr, 18); - dc.SetPen(*wxTRANSPARENT_PEN); + auto check_off = create_scaled_bitmap("check_off_focused", nullptr, 18); + dc.SetPen(*wxTRANSPARENT_PEN); - auto offsetx = 0; - auto offsety = 0; + auto offsetx = 0; + auto offsety = 0; - #ifdef __WXOSX_MAC__ - offsetx = (width - 18) / 2; - offsety = (height - 18) / 2; - #else - offsetx = (width - check_off.GetSize().x) / 2; - offsety = (height - check_off.GetSize().y) / 2; - #endif // __WXOSX_MAC__ + #ifdef __WXOSX_MAC__ + offsetx = (width - 18) / 2; + offsety = (height - 18) / 2; + #else + offsetx = (width - check_off.GetSize().x) / 2; + offsety = (height - check_off.GetSize().y) / 2; + #endif // __WXOSX_MAC__ - dc.DrawBitmap(check_off, rect.x + offsetx, rect.y + offsety); + dc.DrawBitmap(check_off, rect.x + offsetx, rect.y + offsety); + } } + } wxSize GridCellSupportRenderer::GetBestSize(wxGrid& grid, @@ -2764,6 +2774,10 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi m_object_settings->Hide(); //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 ); + m_side_window->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + m_object_grid->SetFocus(); + evt.Skip(); + }); auto m_line_left = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(2, -1), wxTAB_TRAVERSAL); m_line_left->SetBackgroundColour(wxColour(0xA6, 0xa9, 0xAA)); @@ -2962,7 +2976,9 @@ void ObjectTablePanel::load_data() break; case coEnum: if (col == ObjectGridTable::col_filaments) { - if (grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) { + if ((grid_row->model_volume_type != ModelVolumeType::NEGATIVE_VOLUME) && \ + (grid_row->model_volume_type != ModelVolumeType::SUPPORT_BLOCKER) && \ + (grid_row->model_volume_type != ModelVolumeType::SUPPORT_ENFORCER)) { 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()); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 74d1f959da..91254111cf 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -1,9 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, David Kocík @kocikdav, Tomáš Mészáros @tamasmeszaros, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2022 André Althaus -///|/ Copyright (c) 2019 John Drake @foxox -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ //#include "stdlib.h" #include "libslic3r/libslic3r.h" #include "libslic3r/Layer.hpp" @@ -154,6 +148,12 @@ void View3D::deselect_all() m_canvas->deselect_all(); } +void View3D::exit_gizmo() +{ + if (m_canvas != nullptr) + m_canvas->exit_gizmo(); +} + void View3D::delete_selected() { if (m_canvas != nullptr) diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 2ce7e67ec1..7d6a332bc0 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -63,6 +63,7 @@ public: void select_all(); void deselect_all(); + void exit_gizmo(); void delete_selected(); void center_selected(); void center_selected_plate(const int plate_idx); @@ -107,6 +108,7 @@ class Preview : public wxPanel const Slic3r::PrintBase* m_loaded_print { nullptr }; //BBS: add only gcode mode bool m_only_gcode { false }; + bool m_reload_paint_after_background_process_apply{false}; public: enum class OptionType : unsigned int @@ -160,6 +162,8 @@ public: void show_sliders(bool show = true); void show_moves_sliders(bool show = true); void show_layers_sliders(bool show = true); + void set_reload_paint_after_background_process_apply(bool flag) { m_reload_paint_after_background_process_apply = flag; } + bool get_reload_paint_after_background_process_apply() { return m_reload_paint_after_background_process_apply; } private: bool init(wxWindow* parent, Bed3D& bed, Model* model); diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index 64bd8e6499..a0f4308f1a 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_Utils_hpp_ #define slic3r_GUI_Utils_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 81c6e8710c..35cc3c7700 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -1862,10 +1862,13 @@ bool GLGizmoAdvancedCut::render_slider_double_input(const std::string &label, fl // slider_with + item_in_gap + first_input_width + item_out_gap + slider_with + item_in_gap + second_input_width double slider_with = 0.24 * m_editing_window_width; // m_control_width * 0.35; double item_in_gap = 0.01 * m_editing_window_width; - double item_out_gap = 0.01 * m_editing_window_width; - double first_input_width = 0.29 * m_editing_window_width; - double second_input_width = 0.29 * m_editing_window_width; - + double item_out_gap = 0.04 * m_editing_window_width; + double first_input_width = 0.37 * m_editing_window_width; + double second_input_width = 0.37 * m_editing_window_width; +#ifdef __APPLE__ + first_input_width = 0.5 * m_editing_window_width; + second_input_width = 0.5 * m_editing_window_width; +#endif ImGui::AlignTextToFramePadding(); m_imgui->text(label); ImGui::SameLine(m_label_width); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp index 1ba93df823..0a219a5cc3 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoBase.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 4ed37d5aeb..4a177f02fc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoBase_hpp_ #define slic3r_GLGizmoBase_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index 62afc1c402..011df0cd34 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoCut.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" @@ -274,7 +270,7 @@ std::string GLGizmoCut3D::get_tooltip() const bool GLGizmoCut3D::on_mouse(const wxMouseEvent &mouse_event) { - Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2i32 mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); if (mouse_event.ShiftDown() && mouse_event.LeftDown()) @@ -2963,10 +2959,10 @@ void GLGizmoCut3D::show_tooltip_information(float x, float y) caption_max += m_imgui->calc_text_size(std::string_view{": "}).x + 35.f; - float font_size = ImGui::GetFontSize(); - ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + float scale = m_parent.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, ImGui::GetStyle().FramePadding.y}); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding ImGui::ImageButton3(normal_id, hover_id, button_size); if (ImGui::IsItemHovered()) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp index 2c36dbd2a5..f09ca7a4b8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoCut_hpp_ #define slic3r_GLGizmoCut_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index ff5b7720f2..87ae609d24 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoEmboss.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -264,7 +260,7 @@ struct GuiCfg float max_tooltip_width = 0.f; // maximal width and height of style image - Vec2i max_style_image_size = Vec2i(0, 0); + Vec2i32 max_style_image_size = Vec2i32(0, 0); float indent = 0.f; float input_offset = 0.f; @@ -274,7 +270,7 @@ struct GuiCfg ImVec2 text_size; // maximal size of face name image - Vec2i face_name_size = Vec2i(0, 0); + Vec2i32 face_name_size = Vec2i32(0, 0); float face_name_texture_offset_x = 0.f; // maximal texture generate jobs running at once @@ -1567,7 +1563,7 @@ void GLGizmoEmboss::init_font_name_texture() { glsafe(::glBindTexture(target, id)); glsafe(::glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); glsafe(::glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); - const Vec2i &size = m_gui_cfg->face_name_size; + const Vec2i32 &size = m_gui_cfg->face_name_size; GLint w = size.x(), h = m_face_names->count_cached_textures * size.y(); std::vector data(4*w * h, {0}); const GLenum format = GL_RGBA, type = GL_UNSIGNED_BYTE; @@ -3163,7 +3159,7 @@ void GLGizmoEmboss::init_icons() "make_unbold.svg", "search.svg", "open.svg", - "exclamation.svg", + "obj_warning.svg", // ORCA: use obj_warning instead exclamation. exclamation is not compatible with low res "lock_closed.svg", // lock, "lock_closed_f.svg",// lock_bold, "lock_open.svg", // unlock, @@ -3698,8 +3694,8 @@ GuiCfg create_gui_configuration() int max_style_image_width = static_cast(std::round(cfg.max_style_name_width/2 - 2 * style.FramePadding.x)); int max_style_image_height = static_cast(std::round(input_height)); - cfg.max_style_image_size = Vec2i(max_style_image_width, line_height); - cfg.face_name_size = Vec2i(cfg.input_width, line_height_with_spacing); + cfg.max_style_image_size = Vec2i32(max_style_image_width, line_height); + cfg.face_name_size = Vec2i32(cfg.input_width, line_height_with_spacing); cfg.face_name_texture_offset_x = cfg.face_name_size.x() + space; cfg.max_tooltip_width = ImGui::GetFontSize() * 20.0f; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp index 968dde2818..8c4b084ec7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoEmboss_hpp_ #define slic3r_GLGizmoEmboss_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 0471d02358..0329d7c508 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -248,6 +248,8 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l const float on_overhangs_only_width = m_imgui->calc_text_size(m_desc["on_overhangs_only"]).x + m_imgui->scaled(1.5f); const float remove_btn_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.5f); const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.5f); + const float gap_area_txt_width = m_imgui->calc_text_size(m_desc.at("gap_area")).x + m_imgui->scaled(1.5f); + const float smart_fill_angle_txt_width = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.5f); const float empty_button_width = m_imgui->calc_button_size("").x; @@ -263,7 +265,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l total_text_max += caption_max + m_imgui->scaled(1.f); caption_max += m_imgui->scaled(1.f); - const float sliders_left_width = std::max(reset_button_slider_left, std::max(std::max(cursor_slider_left, clipping_slider_left), std::max(highlight_slider_left, gap_fill_slider_left))); + const float sliders_left_width = std::max(gap_area_txt_width, std::max(smart_fill_angle_txt_width, std::max(reset_button_slider_left, std::max(std::max(cursor_slider_left, clipping_slider_left), std::max(highlight_slider_left, gap_fill_slider_left))))); const float slider_icon_width = m_imgui->get_slider_icon_size().x; const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; @@ -289,11 +291,12 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -303,6 +306,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } + ImGui::PopStyleColor(1); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { @@ -374,7 +378,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l m_cursor_type = TriangleSelector::CursorType::POINTER; ImGui::AlignTextToFramePadding(); - m_imgui->text(m_desc["gap_area"] + ":"); + m_imgui->text(m_desc["gap_area"]); ImGui::SameLine(sliders_left_width); ImGui::PushItemWidth(sliders_width); std::string format_str = std::string("%.2f") + I18N::translate_utf8("", "Triangle patch area threshold,""triangle patch will be merged to neighbor if its area is less than threshold"); @@ -515,10 +519,10 @@ void GLGizmoFdmSupports::show_tooltip_information(float caption_max, float x, fl caption_max += m_imgui->calc_text_size(std::string_view{": "}).x + 15.f; - float font_size = ImGui::GetFontSize(); - ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + float scale = m_parent.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { 0, ImGui::GetStyle().FramePadding.y }); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding ImGui::ImageButton3(normal_id, hover_id, button_size); if (ImGui::IsItemHovered()) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index a3632b6ed8..264e1d629e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoFlatten.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -176,7 +172,7 @@ void GLGizmoFlatten::update_planes() // This part is still performed in mesh coordinate system. const int num_of_facets = ch.facets_count(); const std::vector face_normals = its_face_normals(ch.its); - const std::vector face_neighbors = its_face_neighbors(ch.its); + const std::vector face_neighbors = its_face_neighbors(ch.its); std::vector facet_queue(num_of_facets, 0); std::vector facet_visited(num_of_facets, false); int facet_queue_cnt = 0; @@ -199,7 +195,7 @@ void GLGizmoFlatten::update_planes() int facet_idx = facet_queue[-- facet_queue_cnt]; const stl_normal& this_normal = face_normals[facet_idx]; if (std::abs(this_normal(0) - (*normal_ptr)(0)) < 0.001 && std::abs(this_normal(1) - (*normal_ptr)(1)) < 0.001 && std::abs(this_normal(2) - (*normal_ptr)(2)) < 0.001) { - const Vec3i face = ch.its.indices[facet_idx]; + const Vec3i32 face = ch.its.indices[facet_idx]; for (int j=0; j<3; ++j) m_planes.back().vertices.emplace_back(ch.its.vertices[face[j]].cast()); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp index 027480dbee..74e2062de4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoFlatten_hpp_ #define slic3r_GLGizmoFlatten_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index 9293a8187d..276699beef 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoMeasure.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -2044,10 +2040,10 @@ void GLGizmoMeasure::show_tooltip_information(float caption_max, float x, float caption_max += m_imgui->calc_text_size(std::string_view{": "}).x + 35.f; - float font_size = ImGui::GetFontSize(); - ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + float scale = m_parent.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { 0, ImGui::GetStyle().FramePadding.y }); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { 0, 0 }); // ORCA: Dont add padding ImGui::ImageButton3(normal_id, hover_id, button_size); if (ImGui::IsItemHovered()) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp index 0fc7577b43..7982913653 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoMeasure_hpp_ #define slic3r_GLGizmoMeasure_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index e0af77feeb..ee9c779464 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -87,7 +87,7 @@ bool GLGizmoMeshBoolean::gizmo_event(SLAGizmoEventType action, const Vec2d& mous bool GLGizmoMeshBoolean::on_mouse(const wxMouseEvent &mouse_event) { // wxCoord == int --> wx/types.h - Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2i32 mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); // when control is down we allow scene pan and rotation even when clicking diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 11886c142a..283ccacb10 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Vojtěch Bubník @bubnikv -///|/ Copyright (c) 2021 Justin Schuh @jschuh -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoMmuSegmentation.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" @@ -250,7 +245,7 @@ void GLGizmoMmuSegmentation::render_triangles(const Selection &selection) const bool GLGizmoMmuSegmentation::on_number_key_down(int number) { int extruder_idx = number - 1; - if (extruder_idx < m_extruders_colors.size()) + if (extruder_idx < m_extruders_colors.size() && extruder_idx >= 0) m_selected_extruder_idx = extruder_idx; return true; @@ -343,10 +338,10 @@ void GLGizmoMmuSegmentation::show_tooltip_information(float caption_max, float x caption_max += m_imgui->calc_text_size(std::string_view{": "}).x + 15.f; - float font_size = ImGui::GetFontSize(); - ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + float scale = m_parent.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { 0, ImGui::GetStyle().FramePadding.y }); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding ImGui::ImageButton3(normal_id, hover_id, button_size); if (ImGui::IsItemHovered()) { @@ -470,14 +465,14 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGuiColorEditFlags flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip; if (m_selected_extruder_idx != extruder_idx) flags |= ImGuiColorEditFlags_NoBorder; #ifdef __APPLE__ - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); // ORCA use orca color for selected filament border ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0); bool color_picked = ImGui::ColorButton(color_label.c_str(), color_vec, flags, button_size); ImGui::PopStyleVar(2); ImGui::PopStyleColor(1); #else - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); // ORCA use orca color for selected filament border ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0); bool color_picked = ImGui::ColorButton(color_label.c_str(), color_vec, flags, button_size); @@ -487,7 +482,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott color_button_high = ImGui::GetCursorPos().y - color_button - 2.0; if (color_picked) { m_selected_extruder_idx = extruder_idx; } - if (extruder_idx < 9 && ImGui::IsItemHovered()) m_imgui->tooltip(_L("Shortcut Key ") + std::to_string(extruder_idx + 1), max_tooltip_width); + if (extruder_idx < 16 && ImGui::IsItemHovered()) m_imgui->tooltip(_L("Shortcut Key ") + std::to_string(extruder_idx + 1), max_tooltip_width); // draw filament id float gray = 0.299 * extruder_color.r() + 0.587 * extruder_color.g() + 0.114 * extruder_color.b(); @@ -519,11 +514,12 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -533,6 +529,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } + ImGui::PopStyleColor(1); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index 1049e61f5e..6acf77a0f8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoMove.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp index f4c04c730a..4d0b4581f0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoMove_hpp_ #define slic3r_GLGizmoMove_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index e653829bee..2dbf7778e0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Lukáš Hejl @hejllukas -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoPainterBase.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" @@ -298,6 +294,12 @@ void GLGizmoPainterBase::render_cursor_height_range(const Transform3d& trafo) co const Selection& selection = m_parent.get_selection(); const ModelObject* model_object = wxGetApp().model().objects[selection.get_object_idx()]; const ModelInstance* mi = model_object->instances[selection.get_instance_idx()]; + + int volumes_count = model_object->volumes.size(); + if (m_cut_contours.size() != volumes_count * 2) { + m_cut_contours.resize(volumes_count * 2); + } + m_volumes_index = 0; for (const ModelVolume* mv : model_object->volumes) { TriangleMesh vol_mesh = mv->mesh(); if (m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView) { @@ -310,15 +312,16 @@ void GLGizmoPainterBase::render_cursor_height_range(const Transform3d& trafo) co } for (int i = 0; i < zs.size(); i++) { - update_contours(vol_mesh, zs[i], max_z, min_z); + update_contours(m_volumes_index, vol_mesh, zs[i], max_z, min_z); const Camera& camera = wxGetApp().plater()->get_camera(); - Transform3d view_model_matrix = camera.get_view_matrix() * Geometry::assemble_transform(m_cut_contours.shift); + Transform3d view_model_matrix = camera.get_view_matrix() * Geometry::assemble_transform(m_cut_contours[m_volumes_index].shift); shader->set_uniform("view_model_matrix", view_model_matrix); shader->set_uniform("projection_matrix", camera.get_projection_matrix()); glsafe(::glLineWidth(2.0f)); - m_cut_contours.contours.render(); + m_cut_contours[m_volumes_index].contours.render(); + m_volumes_index++; } } @@ -339,7 +342,7 @@ BoundingBoxf3 GLGizmoPainterBase::bounding_box() const return ret; } -void GLGizmoPainterBase::update_contours(const TriangleMesh& vol_mesh, float cursor_z, float max_z, float min_z) const +void GLGizmoPainterBase::update_contours(int i, const TriangleMesh& vol_mesh, float cursor_z, float max_z, float min_z) const { const Selection& selection = m_parent.get_selection(); const GLVolume* first_glvolume = selection.get_first_volume(); @@ -349,31 +352,31 @@ void GLGizmoPainterBase::update_contours(const TriangleMesh& vol_mesh, float cur const int instance_idx = selection.get_instance_idx(); if (min_z < cursor_z && cursor_z < max_z) { - if (m_cut_contours.cut_z != cursor_z || m_cut_contours.object_id != model_object->id() || m_cut_contours.instance_idx != instance_idx) { - m_cut_contours.cut_z = cursor_z; + if (m_cut_contours[i].cut_z != cursor_z || m_cut_contours[i].object_id != model_object->id() || m_cut_contours[i].instance_idx != instance_idx) { + m_cut_contours[i].cut_z = cursor_z; - m_cut_contours.mesh = vol_mesh; + m_cut_contours[i].mesh = vol_mesh; - m_cut_contours.position = box.center(); - m_cut_contours.shift = Vec3d::Zero(); - m_cut_contours.object_id = model_object->id(); - m_cut_contours.instance_idx = instance_idx; - m_cut_contours.contours.reset(); + m_cut_contours[i].position = box.center(); + m_cut_contours[i].shift = Vec3d::Zero(); + m_cut_contours[i].object_id = model_object->id(); + m_cut_contours[i].instance_idx = instance_idx; + m_cut_contours[i].contours.reset(); MeshSlicingParams slicing_params; slicing_params.trafo = Transform3d::Identity().matrix(); - const Polygons polys = slice_mesh(m_cut_contours.mesh.its, cursor_z, slicing_params); + const Polygons polys = slice_mesh(m_cut_contours[i].mesh.its, cursor_z, slicing_params); if (!polys.empty()) { - m_cut_contours.contours.init_from(polys, static_cast(cursor_z)); - m_cut_contours.contours.set_color({ 1.0f, 1.0f, 1.0f, 1.0f }); + m_cut_contours[i].contours.init_from(polys, static_cast(cursor_z)); + m_cut_contours[i].contours.set_color({ 1.0f, 1.0f, 1.0f, 1.0f }); } } - else if (box.center() != m_cut_contours.position) { - m_cut_contours.shift = box.center() - m_cut_contours.position; + else if (box.center() != m_cut_contours[i].position) { + m_cut_contours[i].shift = box.center() - m_cut_contours[i].position; } } else - m_cut_contours.contours.reset(); + m_cut_contours[i].contours.reset(); } bool GLGizmoPainterBase::is_mesh_point_clipped(const Vec3d& point, const Transform3d& trafo) const @@ -903,7 +906,7 @@ bool GLGizmoPainterBase::gizmo_event(SLAGizmoEventType action, const Vec2d& mous bool GLGizmoPainterBase::on_mouse(const wxMouseEvent &mouse_event) { // wxCoord == int --> wx/types.h - Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2i32 mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); if (mouse_event.Moving()) { @@ -1358,11 +1361,11 @@ void TriangleSelectorPatch::update_triangles_per_patch() bool using_wireframe = (m_need_wireframe && wxGetApp().plater()->is_wireframe_enabled() && wxGetApp().plater()->is_show_wireframe()) ? true : false; - auto get_all_touching_triangles = [this](int facet_idx, const Vec3i& neighbors, const Vec3i& neighbors_propagated) -> std::vector { + auto get_all_touching_triangles = [this](int facet_idx, const Vec3i32& neighbors, const Vec3i32& neighbors_propagated) -> std::vector { assert(facet_idx != -1 && facet_idx < int(m_triangles.size())); assert(this->verify_triangle_neighbors(m_triangles[facet_idx], neighbors)); std::vector touching_triangles; - Vec3i vertices = { m_triangles[facet_idx].verts_idxs[0], m_triangles[facet_idx].verts_idxs[1], m_triangles[facet_idx].verts_idxs[2] }; + Vec3i32 vertices = { m_triangles[facet_idx].verts_idxs[0], m_triangles[facet_idx].verts_idxs[1], m_triangles[facet_idx].verts_idxs[2] }; append_touching_subtriangles(neighbors(0), vertices(1), vertices(0), touching_triangles); append_touching_subtriangles(neighbors(1), vertices(2), vertices(1), touching_triangles); append_touching_subtriangles(neighbors(2), vertices(0), vertices(2), touching_triangles); @@ -1738,14 +1741,14 @@ void TriangleSelectorGUI::update_paint_contour() m_paint_contour.reset(); GLModel::Geometry init_data; - const std::vector contour_edges = this->get_seed_fill_contour(); + const std::vector contour_edges = this->get_seed_fill_contour(); init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; init_data.reserve_vertices(2 * contour_edges.size()); init_data.reserve_indices(2 * contour_edges.size()); init_data.color = ColorRGBA::WHITE(); // vertices + indices unsigned int vertices_count = 0; - for (const Vec2i& edge : contour_edges) { + for (const Vec2i32& edge : contour_edges) { init_data.add_vertex(m_vertices[edge(0)].v); init_data.add_vertex(m_vertices[edge(1)].v); vertices_count += 2; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index da05fcfab4..5273aa06dd 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Pavel Mikuš @Godrak, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoPainterBase_hpp_ #define slic3r_GLGizmoPainterBase_hpp_ @@ -355,10 +351,15 @@ private: ObjectID object_id; int instance_idx{ -1 }; }; - mutable CutContours m_cut_contours; - + mutable std::vector m_cut_contours; + mutable int m_volumes_index = 0; + mutable float m_cursor_z{0}; + mutable double m_height_start_z_in_imgui{0}; + mutable bool m_is_set_height_start_z_by_imgui{false}; + mutable Vec2i32 m_height_start_pos{0, 0}; + mutable bool m_is_cursor_in_imgui{false}; BoundingBoxf3 bounding_box() const; - void update_contours(const TriangleMesh& vol_mesh, float cursor_z, float max_z, float min_z) const; + void update_contours(int i, const TriangleMesh& vol_mesh, float cursor_z, float max_z, float min_z) const; protected: void on_set_state() override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 5a02e66669..5b79edb95d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoRotate.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp index bc846f0ad0..769809df8d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01, Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoRotate_hpp_ #define slic3r_GLGizmoRotate_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp index db6a7f2f2d..42fb52d442 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp @@ -84,9 +84,9 @@ wxString last_used_directory = wxEmptyString; /// File path to svg std::string choose_svg_file(); -constexpr double get_tesselation_tolerance(double scale){ - constexpr double tesselation_tolerance_in_mm = .1; //8e-2; - constexpr double tesselation_tolerance_scaled = (tesselation_tolerance_in_mm*tesselation_tolerance_in_mm) / SCALING_FACTOR / SCALING_FACTOR; +double get_tesselation_tolerance(double scale){ + double tesselation_tolerance_in_mm = .1; //8e-2; + double tesselation_tolerance_scaled = (tesselation_tolerance_in_mm*tesselation_tolerance_in_mm) / SCALING_FACTOR / SCALING_FACTOR; return tesselation_tolerance_scaled / scale / scale; } @@ -397,7 +397,7 @@ IconManager::VIcons init_icons(IconManager &mng, const GuiCfg &cfg) "open.svg", // changhe_file "burn.svg", // bake "save.svg", // save - "exclamation.svg", // exclamation + "obj_warning.svg", // exclamation // ORCA: use obj_warning instead exclamation. exclamation is not compatible with low res "lock_closed.svg", // lock "lock_open.svg", // unlock "reflection_x.svg", // reflection_x diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index b1fe396f21..8d2781e6a8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoScale.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp index 5d8565aa05..77929bb538 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoScale_hpp_ #define slic3r_GLGizmoScale_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index e534b2b3c1..935a76ca0f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoSeam.hpp" #include "libslic3r/Model.hpp" @@ -153,10 +149,10 @@ void GLGizmoSeam::show_tooltip_information(float caption_max, float x, float y) caption_max += m_imgui->calc_text_size(std::string_view{": "}).x + 35.f; - float font_size = ImGui::GetFontSize(); - ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + float scale = m_parent.get_scale(); + ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { 0, ImGui::GetStyle().FramePadding.y }); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding ImGui::ImageButton3(normal_id, hover_id, button_size); if (ImGui::IsItemHovered()) { @@ -244,11 +240,12 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -258,6 +255,7 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } + ImGui::PopStyleColor(1); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp index 2e20f50183..4caa2dde63 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoSeam_hpp_ #define slic3r_GLGizmoSeam_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index 2fa96de169..32f1591248 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Hejl @hejllukas, Enrico Turri @enricoturri1966, David Kocík @kocikdav, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmoSimplify.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -278,8 +274,8 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.81f, 0.81f, 0.81f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(0.81f, 0.81f, 0.81f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.81f, 0.81f, 0.81f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImGuiWrapper::COL_ORCA); // ORCA Use orca color for step slider text + ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImGuiWrapper::COL_ORCA); // ORCA Use orca color for step slider thumb if (m_imgui->bbl_sliderin("##ReductionLevel", &reduction, 0, 4, reduce_captions[reduction].c_str())) { if (reduction < 0) reduction = 0; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp index dedcea8971..b4be94d2c9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Lukáš Matěna @lukasmatena -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmoSimplify_hpp_ #define slic3r_GLGizmoSimplify_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 7034b0eb27..411ec8f2ff 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -24,6 +24,7 @@ #include #include "libslic3r/SVG.hpp" #include +#include "wx/fontenum.h" namespace Slic3r { namespace GUI { @@ -34,6 +35,119 @@ static const wxColour FONT_TEXTURE_FG = *wxWHITE; static const int FONT_SIZE = 12; static const float SELECTABLE_INNER_OFFSET = 8.0f; +static std::vector font_black_list = { +#ifdef _WIN32 + "MT Extra", + "Marlett", + "Symbol", + "Webdings", + "Wingdings", + "Wingdings 2", + "Wingdings 3", +#endif +}; + +static const wxFontEncoding font_encoding = wxFontEncoding::wxFONTENCODING_SYSTEM; + +#ifdef _WIN32 +static bool load_hfont(void *hfont, DWORD &dwTable, DWORD &dwOffset, size_t &size, HDC hdc = nullptr) +{ + bool del_hdc = false; + if (hdc == nullptr) { + del_hdc = true; + hdc = ::CreateCompatibleDC(NULL); + if (hdc == NULL) return false; + } + + // To retrieve the data from the beginning of the file for TrueType + // Collection files specify 'ttcf' (0x66637474). + dwTable = 0x66637474; + dwOffset = 0; + + ::SelectObject(hdc, hfont); + size = ::GetFontData(hdc, dwTable, dwOffset, NULL, 0); + if (size == GDI_ERROR) { + // HFONT is NOT TTC(collection) + dwTable = 0; + size = ::GetFontData(hdc, dwTable, dwOffset, NULL, 0); + } + + if (size == 0 || size == GDI_ERROR) { + if (del_hdc) ::DeleteDC(hdc); + return false; + } + return true; +} +#endif // _WIN32 + +bool can_load(const wxFont &font) +{ +#ifdef _WIN32 + DWORD dwTable = 0, dwOffset = 0; + size_t size = 0; + void* hfont = font.GetHFONT(); + if (!load_hfont(hfont, dwTable, dwOffset, size)) + return false; + return hfont != nullptr; +#elif defined(__APPLE__) + return true; +#elif defined(__linux__) + return true; +#endif + return false; +} + +std::vector init_face_names() +{ + std::vector valid_font_names; + wxArrayString facenames = wxFontEnumerator::GetFacenames(font_encoding); + std::vector bad_fonts; + + // validation lambda + auto is_valid_font = [coding = font_encoding, bad = bad_fonts](const wxString &name) { + if (name.empty()) + return false; + + // vertical font start with @, we will filter it out + // Not sure if it is only in Windows so filtering is on all platforms + if (name[0] == '@') + return false; + + // previously detected bad font + auto it = std::lower_bound(bad.begin(), bad.end(), name); + if (it != bad.end() && *it == name) + return false; + + wxFont wx_font(wxFontInfo().FaceName(name).Encoding(coding)); + // Faster chech if wx_font is loadable but not 100% + // names could contain not loadable font + if (!wx_font.IsOk()) + return false; + + if (!can_load(wx_font)) + return false; + + return true; + }; + + std::sort(facenames.begin(), facenames.end()); + for (const wxString &name : facenames) { + if (is_valid_font(name)) { + valid_font_names.push_back(name.ToStdString()); + } + else { + bad_fonts.emplace_back(name); + } + } + assert(std::is_sorted(bad_fonts.begin(), bad_fonts.end())); + + for (auto iter = font_black_list.begin(); iter != font_black_list.end(); ++iter) { + valid_font_names.erase(std::remove(valid_font_names.begin(), valid_font_names.end(), *iter), valid_font_names.end()); + } + + return valid_font_names; +} + class Line_3D { public: @@ -142,7 +256,9 @@ GLGizmoText::~GLGizmoText() bool GLGizmoText::on_init() { - m_avail_font_names = init_occt_fonts(); + m_avail_font_names = init_face_names(); + + //m_avail_font_names = init_occt_fonts(); update_font_texture(); m_scale = m_imgui->get_font_size(); m_shortcut_key = WXK_CONTROL_T; @@ -270,7 +386,7 @@ bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_posit return false; Plater *plater = wxGetApp().plater(); - if (!plater) + if (!plater || m_thickness <= 0) return true; ModelObject *model_object = selection.get_model()->objects[m_object_idx]; @@ -331,7 +447,7 @@ bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_posit bool GLGizmoText::on_mouse(const wxMouseEvent &mouse_event) { // wxCoord == int --> wx/types.h - Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2i32 mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); bool control_down = mouse_event.CmdDown(); @@ -1123,10 +1239,8 @@ bool GLGizmoText::update_text_positions(const std::vector& texts) Polygons polys = union_(temp_polys); auto point_in_line_rectange = [](const Line &line, const Point &point, double& distance) { - distance = abs((point.x() - line.a.x()) * (line.b.y() - line.a.y()) - (line.b.x() - line.a.x()) * (point.y() - line.a.y())); - bool in_rectange = (std::min(line.a.x(), line.b.x()) - 1000) <= point.x() && point.x() <= (std::max(line.a.x(), line.b.x()) + 1000) && - (std::min(line.a.y(), line.b.y()) - 1000) <= point.y() && point.y() <= (std::max(line.a.y(), line.b.y()) + 1000); - return in_rectange; + distance = line.distance_to(point); + return distance < line.length() / 2; }; int index = 0; diff --git a/src/slic3r/GUI/Gizmos/GLGizmos.hpp b/src/slic3r/GUI/Gizmos/GLGizmos.hpp index 36435919b7..9751c37232 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmos.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmos.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2021 Lukáš Hejl @hejllukas, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GLGizmos_hpp_ #define slic3r_GLGizmos_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index 140bed7565..56c3d1714b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "GLGizmosCommon.hpp" #include diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp index 6f2138346e..c14f2feeba 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Lukáš Hejl @hejllukas -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_GLGizmosCommon_hpp_ #define slic3r_GUI_GLGizmosCommon_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index a30f87d31e..319c5c75f2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, David Kocík @kocikdav, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas -///|/ Copyright (c) 2019 John Drake @foxox -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "GLGizmosManager.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" @@ -57,6 +52,7 @@ GLGizmosManager::GLGizmosManager(GLCanvas3D& parent) //BBS: GUI refactor: add object manipulation in gizmo , m_object_manipulation(parent) { + m_timer_set_color.Bind(wxEVT_TIMER, &GLGizmosManager::on_set_color_timer, this); } std::vector GLGizmosManager::get_selectable_idxs() const @@ -199,9 +195,9 @@ bool GLGizmosManager::init() m_gizmos.emplace_back(new GLGizmoMeshBoolean(m_parent, m_is_dark ? "toolbar_meshboolean_dark.svg" : "toolbar_meshboolean.svg", EType::MeshBoolean)); m_gizmos.emplace_back(new GLGizmoFdmSupports(m_parent, m_is_dark ? "toolbar_support_dark.svg" : "toolbar_support.svg", EType::FdmSupports)); m_gizmos.emplace_back(new GLGizmoSeam(m_parent, m_is_dark ? "toolbar_seam_dark.svg" : "toolbar_seam.svg", EType::Seam)); + m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, m_is_dark ? "mmu_segmentation_dark.svg" : "mmu_segmentation.svg", EType::MmuSegmentation)); m_gizmos.emplace_back(new GLGizmoEmboss(m_parent, m_is_dark ? "toolbar_text_dark.svg" : "toolbar_text.svg", EType::Emboss)); m_gizmos.emplace_back(new GLGizmoSVG(m_parent)); - m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, m_is_dark ? "mmu_segmentation_dark.svg" : "mmu_segmentation.svg", EType::MmuSegmentation)); m_gizmos.emplace_back(new GLGizmoMeasure(m_parent, m_is_dark ? "toolbar_measure_dark.svg" : "toolbar_measure.svg", EType::Measure)); m_gizmos.emplace_back(new GLGizmoSimplify(m_parent, "reduce_triangles.svg", EType::Simplify)); //m_gizmos.emplace_back(new GLGizmoSlaSupports(m_parent, "sla_supports.svg", sprite_id++)); @@ -243,12 +239,12 @@ bool GLGizmosManager::init_icon_textures() else return false; - if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/toolbar_tooltip.svg", 30, 22, texture_id)) + if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/toolbar_tooltip.svg", 25, 25, texture_id)) // ORCA: Use same resolution with gizmos to prevent blur on icon icon_list.insert(std::make_pair((int)IC_TOOLBAR_TOOLTIP, texture_id)); else return false; - if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/toolbar_tooltip_hover.svg", 30, 22, texture_id)) + if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/toolbar_tooltip_hover.svg", 25, 25, texture_id)) // ORCA: Use same resolution with gizmos to prevent blur on icon icon_list.insert(std::make_pair((int)IC_TOOLBAR_TOOLTIP_HOVER, texture_id)); else return false; @@ -570,7 +566,7 @@ bool GLGizmosManager::gizmos_toolbar_on_mouse(const wxMouseEvent &mouse_event) { static MouseCapture mc; // wxCoord == int --> wx/types.h - Vec2i mouse_coord(mouse_event.GetX(), mouse_event.GetY()); + Vec2i32 mouse_coord(mouse_event.GetX(), mouse_event.GetY()); Vec2d mouse_pos = mouse_coord.cast(); EType gizmo = get_gizmo_from_mouse(mouse_pos); @@ -805,7 +801,7 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) bool GLGizmosManager::on_key(wxKeyEvent& evt) { - const int keyCode = evt.GetKeyCode(); + int keyCode = evt.GetKeyCode(); bool processed = false; if (evt.GetEventType() == wxEVT_KEY_UP) { @@ -887,8 +883,21 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) else if (m_current == MmuSegmentation) { GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); if (mmu_seg != nullptr) { - if (keyCode > '0' && keyCode <= '9') { - processed = mmu_seg->on_number_key_down(keyCode - '0'); + if (keyCode >= WXK_NUMPAD0 && keyCode <= WXK_NUMPAD9) { + keyCode = keyCode- WXK_NUMPAD0+'0'; + } + if (keyCode >= '0' && keyCode <= '9') { + if (keyCode == '1' && !m_timer_set_color.IsRunning()) { + m_timer_set_color.StartOnce(500); + processed = true; + } + else if (keyCode < '7' && m_timer_set_color.IsRunning()) { + processed = mmu_seg->on_number_key_down(keyCode - '0'+10); + m_timer_set_color.Stop(); + } + else { + processed = mmu_seg->on_number_key_down(keyCode - '0'); + } } else if (keyCode == 'F' || keyCode == 'T' || keyCode == 'S' || keyCode == 'C' || keyCode == 'H' || keyCode == 'G') { processed = mmu_seg->on_key_down_select_tool_type(keyCode); @@ -933,6 +942,15 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) return processed; } +void GLGizmosManager::on_set_color_timer(wxTimerEvent& evt) +{ + if (m_current == MmuSegmentation) { + GLGizmoMmuSegmentation* mmu_seg = dynamic_cast(get_current()); + mmu_seg->on_number_key_down(1); + m_parent.set_as_dirty(); + } +} + void GLGizmosManager::update_after_undo_redo(const UndoRedo::Snapshot& snapshot) { update_data(); @@ -1078,10 +1096,10 @@ void GLGizmosManager::do_render_overlay() const //float space_width = GLGizmosManager::Default_Icons_Size * wxGetApp().toolbar_icon_scale(); //float zoomed_top_x = 0.5f *(cnv_w + main_toolbar_width - 2 * space_width - width) * inv_zoom; - float main_toolbar_left = -0.5f * cnv_w + m_parent.get_main_toolbar_offset(); + int main_toolbar_left = -cnv_w + m_parent.get_main_toolbar_offset() * 2; //float zoomed_top_x = 0.5f *(main_toolbar_width + collapse_width - width - assemble_view_width) * inv_zoom; - top_x = main_toolbar_left + main_toolbar_width + separator_width / 2; - top_x = top_x * inv_cnv_w * 2; + top_x = main_toolbar_left + main_toolbar_width * 2 + separator_width; + top_x = top_x * inv_cnv_w; } float top_y = 1.0f; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index cc6ca682e8..4511f02119 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2022 Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01, David Kocík @kocikdav, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_GLGizmosManager_hpp_ #define slic3r_GUI_GLGizmosManager_hpp_ @@ -14,6 +10,7 @@ #include "libslic3r/ObjectID.hpp" +#include #include //BBS: GUI refactor: to support top layout @@ -85,9 +82,9 @@ public: MeshBoolean, FdmSupports, Seam, + MmuSegmentation, Emboss, Svg, - MmuSegmentation, Measure, Simplify, //SlaSupports, @@ -102,10 +99,10 @@ private: { float scale{ 1.0f }; float icons_size{ Default_Icons_Size }; - float border{ 5.0f }; - float gap_y{ 5.0f }; + float border{ 4.0f }; + float gap_y{ 4.0f }; //BBS: GUI refactor: to support top layout - float gap_x{ 5.0f }; + float gap_x{ 4.0f }; float stride_x() const { return icons_size + gap_x;} float scaled_gap_x() const { return scale * gap_x; } float scaled_stride_x() const { return scale * stride_x(); } @@ -142,6 +139,10 @@ private: bool m_serializing; std::unique_ptr m_common_gizmos_data; + //When there are more than 9 colors, shortcut key coloring + wxTimer m_timer_set_color; + void on_set_color_timer(wxTimerEvent& evt); + // key MENU_ICON_NAME, value = ImtextureID std::map icon_list; diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index 3584edbea7..a1490ebc70 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "slic3r/GUI/ImGuiWrapper.hpp" #include @@ -267,7 +263,7 @@ void GizmoObjectManipulation::change_position_value(int axis, double value) TransformationType trafo_type; trafo_type.set_relative(); if (selection.requires_local_axes()) { - trafo_type.set_local(); + trafo_type.set_instance(); } selection.translate(position - m_cache.position, trafo_type); m_glcanvas.do_move(L("Set Position")); @@ -588,7 +584,12 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, float space_size = imgui_wrapper->get_style_scaling() * 8; float position_size = imgui_wrapper->calc_text_size(_L("Position")).x + space_size; - float World_size = imgui_wrapper->calc_text_size(_L("World coordinates")).x + space_size; + auto position_title = _L("World coordinates"); + Selection& selection = m_glcanvas.get_selection(); + if(selection.is_single_modifier() || selection.is_single_volume()) + position_title = _L("Object coordinates"); + + float World_size = imgui_wrapper->calc_text_size(position_title).x + space_size; float caption_max = std::max(position_size, World_size) + 2 * space_size; float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x; @@ -609,7 +610,7 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, ImGui::AlignTextToFramePadding(); unsigned int current_active_id = ImGui::GetActiveID(); ImGui::PushItemWidth(caption_max); - imgui_wrapper->text(_L("World coordinates")); + imgui_wrapper->text(position_title); ImGui::SameLine(caption_max + index * space_size); ImGui::PushItemWidth(unit_size); ImGui::TextAlignCenter("X"); diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index f6b7432aa8..be5effc74c 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -41,30 +41,45 @@ int get_hms_info_version(std::string& version) return result; } -int HMSQuery::download_hms_info() +int HMSQuery::download_hms_related(std::string hms_type, json* receive_json) { + std::string local_version = "0"; + load_from_local(local_version, hms_type, receive_json); AppConfig* config = wxGetApp().app_config; if (!config) return -1; std::string hms_host = wxGetApp().app_config->get_hms_host(); std::string lang; std::string query_params = HMSQuery::build_query_params(lang); - std::string url = (boost::format("https://%1%/query.php?%2%") % hms_host % query_params).str(); + std::string url; + if (hms_type.compare(QUERY_HMS_INFO) == 0) { + url = (boost::format("https://%1%/query.php?%2%&v=%3%") % hms_host % query_params % local_version).str(); + } + else if (hms_type.compare(QUERY_HMS_ACTION) == 0) { + url = (boost::format("https://%1%/hms/GetActionImage.php?v=%2%") % hms_host % local_version).str(); + } BOOST_LOG_TRIVIAL(info) << "hms: download url = " << url; - Slic3r::Http http = Slic3r::Http::get(url); - m_hms_json.clear(); - http.on_complete([this](std::string body, unsigned status) { + http.on_complete([this, receive_json, hms_type](std::string body, unsigned status) { try { json j = json::parse(body); if (j.contains("result")) { if (j["result"] == 0 && j.contains("data")) { - this->m_hms_json = j["data"]; + if (hms_type.compare(QUERY_HMS_INFO) == 0) { + (*receive_json) = j["data"]; + this->save_local = true; + } + else if (hms_type.compare(QUERY_HMS_ACTION) == 0) { + (*receive_json)["data"] = j["data"]; + this->save_local = true; + } if (j.contains("ver")) - m_hms_json["version"] = std::to_string(j["ver"].get()); - } else { - this->m_hms_json.clear(); + (*receive_json)["version"] = std::to_string(j["ver"].get()); + } else if (j["result"] == 201){ + BOOST_LOG_TRIVIAL(info) << "HMSQuery: HMS info is the latest version"; + }else{ + receive_json->clear(); BOOST_LOG_TRIVIAL(info) << "HMSQuery: update hms info error = " << j["result"].get(); } } @@ -77,19 +92,21 @@ int HMSQuery::download_hms_info() BOOST_LOG_TRIVIAL(error) << "HMSQuery: update hms info error = " << error << ", body = " << body << ", status = " << status; }).perform_sync(); - if (!m_hms_json.empty()) - save_to_local(lang); + if (!receive_json->empty() && save_local == true) { + save_to_local(lang, hms_type, *receive_json); + save_local = false; + } return 0; } -int HMSQuery::load_from_local(std::string &version_info) +int HMSQuery::load_from_local(std::string& version_info, std::string hms_type, json* load_json) { if (data_dir().empty()) { - version_info = ""; + version_info = "0"; BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local, data_dir() is empty"; return -1; } - std::string filename = get_hms_file(HMSQuery::hms_language_code()); + std::string filename = get_hms_file(hms_type, HMSQuery::hms_language_code()); auto hms_folder = (boost::filesystem::path(data_dir()) / "hms"); if (!fs::exists(hms_folder)) fs::create_directory(hms_folder); @@ -98,9 +115,9 @@ int HMSQuery::load_from_local(std::string &version_info) std::ifstream json_file(encode_path(dir_str.c_str())); try { if (json_file.is_open()) { - json_file >> m_hms_json; - if (m_hms_json.contains("version")) { - version_info = m_hms_json["version"].get(); + json_file >> (*load_json); + if ((*load_json).contains("version")) { + version_info = (*load_json)["version"].get(); return 0; } else { BOOST_LOG_TRIVIAL(warning) << "HMS: load_from_local, no version info"; @@ -108,28 +125,28 @@ int HMSQuery::load_from_local(std::string &version_info) } } } catch(...) { - version_info = ""; + version_info = "0"; BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local failed"; return -1; } - version_info = ""; + version_info = "0"; return 0; } -int HMSQuery::save_to_local(std::string lang) +int HMSQuery::save_to_local(std::string lang, std::string hms_type, json save_json) { if (data_dir().empty()) { BOOST_LOG_TRIVIAL(error) << "HMS: save_to_local, data_dir() is empty"; return -1; } - std::string filename = get_hms_file(lang); + std::string filename = get_hms_file(hms_type,lang); auto hms_folder = (boost::filesystem::path(data_dir()) / "hms"); if (!fs::exists(hms_folder)) fs::create_directory(hms_folder); std::string dir_str = (hms_folder / filename).make_preferred().string(); std::ofstream json_file(encode_path(dir_str.c_str())); if (json_file.is_open()) { - json_file << std::setw(4) << m_hms_json << std::endl; + json_file << std::setw(4) << save_json << std::endl; json_file.close(); return 0; } @@ -146,7 +163,6 @@ std::string HMSQuery::hms_language_code() std::string lang_code = wxGetApp().app_config->get_language_code(); if (lang_code.compare("uk") == 0 || lang_code.compare("cs") == 0 - || lang_code.compare("pl") == 0 || lang_code.compare("ru") == 0) { BOOST_LOG_TRIVIAL(info) << "HMS: using english for lang_code = " << lang_code; return "en"; @@ -166,9 +182,13 @@ std::string HMSQuery::build_query_params(std::string& lang) return query_params; } -std::string HMSQuery::get_hms_file(std::string lang) +std::string HMSQuery::get_hms_file(std::string hms_type, std::string lang) { - //std::string lang_code = HMSQuery::hms_language_code(); + //return hms action filename + if (hms_type.compare(QUERY_HMS_ACTION) == 0) { + return (boost::format("hms_action.json")).str(); + } + //return hms filename return (boost::format("hms_%1%.json") % lang).str(); } @@ -185,9 +205,9 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ if (long_error_code.empty()) return wxEmptyString; - if (m_hms_json.contains("device_hms")) { - if (m_hms_json["device_hms"].contains(lang_code)) { - for (auto item = m_hms_json["device_hms"][lang_code].begin(); item != m_hms_json["device_hms"][lang_code].end(); item++) { + if (m_hms_info_json.contains("device_hms")) { + if (m_hms_info_json["device_hms"].contains(lang_code)) { + for (auto item = m_hms_info_json["device_hms"][lang_code].begin(); item != m_hms_info_json["device_hms"][lang_code].end(); item++) { if (item->contains("ecode")) { std::string temp_string = (*item)["ecode"].get(); if (boost::to_upper_copy(temp_string) == long_error_code) { @@ -201,8 +221,8 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ } else { BOOST_LOG_TRIVIAL(error) << "hms: query_hms_msg, do not contains lang_code = " << lang_code; // return first language - if (!m_hms_json["device_hms"].empty()) { - for (auto lang : m_hms_json["device_hms"]) { + if (!m_hms_info_json["device_hms"].empty()) { + for (auto lang : m_hms_info_json["device_hms"]) { for (auto item = lang.begin(); item != lang.end(); item++) { if (item->contains("ecode")) { std::string temp_string = (*item)["ecode"].get(); @@ -225,9 +245,9 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_code) { - if (m_hms_json.contains("device_error")) { - if (m_hms_json["device_error"].contains(lang_code)) { - for (auto item = m_hms_json["device_error"][lang_code].begin(); item != m_hms_json["device_error"][lang_code].end(); item++) { + if (m_hms_info_json.contains("device_error")) { + if (m_hms_info_json["device_error"].contains(lang_code)) { + for (auto item = m_hms_info_json["device_error"][lang_code].begin(); item != m_hms_info_json["device_error"][lang_code].end(); item++) { if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == error_code) { if (item->contains("intro")) { return wxString::FromUTF8((*item)["intro"].get()); @@ -238,8 +258,8 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod } else { BOOST_LOG_TRIVIAL(error) << "hms: query_error_msg, do not contains lang_code = " << lang_code; // return first language - if (!m_hms_json["device_error"].empty()) { - for (auto lang : m_hms_json["device_error"]) { + if (!m_hms_info_json["device_error"].empty()) { + for (auto lang : m_hms_info_json["device_error"]) { for (auto item = lang.begin(); item != lang.end(); item++) { if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == error_code) { if (item->contains("intro")) { @@ -258,6 +278,33 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod return wxEmptyString; } +wxString HMSQuery::_query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action) +{ + if (m_hms_action_json.contains("data")) { + for (auto item = m_hms_action_json["data"].begin(); item != m_hms_action_json["data"].end(); item++) { + if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == long_error_code) { + if (item->contains("device") && (boost::to_upper_copy((*item)["device"].get()) == dev_id || + (*item)["device"].get() == "default")) { + if (item->contains("actions")) { + for (auto item_actions = (*item)["actions"].begin(); item_actions != (*item)["actions"].end(); item_actions++) { + button_action.emplace_back(item_actions->get()); + } + } + if (item->contains("image")) { + return wxString::FromUTF8((*item)["image"].get()); + } + } + } + } + } + else { + BOOST_LOG_TRIVIAL(info) << "data is not exists"; + return wxEmptyString; + } + return wxEmptyString; +} + + wxString HMSQuery::query_print_error_msg(int print_error) { char buf[32]; @@ -266,29 +313,22 @@ wxString HMSQuery::query_print_error_msg(int print_error) return _query_error_msg(std::string(buf), lang_code); } +wxString HMSQuery::query_print_error_url_action(int print_error, std::string dev_id, std::vector& button_action) +{ + char buf[32]; + ::sprintf(buf, "%08X", print_error); + //The first three digits of SN number + dev_id = dev_id.substr(0, 3); + return _query_error_url_action(std::string(buf), dev_id, button_action); +} + + int HMSQuery::check_hms_info() { boost::thread check_thread = boost::thread([this] { - bool download_new_hms_info = true; - // load local hms json file - std::string version = ""; - if (load_from_local(version) == 0) { - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info current version = " << version; - std::string new_version; - get_hms_info_version(new_version); - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info latest version = " << new_version; - if (new_version.empty()) {return 0;} - - if (!version.empty() && version == new_version) { - download_new_hms_info = false; - } - } - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info need download new hms info = " << download_new_hms_info; - // download if version is update - if (download_new_hms_info) { - download_hms_info(); - } + download_hms_related(QUERY_HMS_INFO, &m_hms_info_json); + download_hms_related(QUERY_HMS_ACTION, &m_hms_action_json); return 0; }); return 0; diff --git a/src/slic3r/GUI/HMS.hpp b/src/slic3r/GUI/HMS.hpp index 64edf84caa..01df19ed38 100644 --- a/src/slic3r/GUI/HMS.hpp +++ b/src/slic3r/GUI/HMS.hpp @@ -16,23 +16,30 @@ namespace Slic3r { namespace GUI { #define HMS_INFO_FILE "hms.json" +#define QUERY_HMS_INFO "query_hms_info" +#define QUERY_HMS_ACTION "query_hms_action" class HMSQuery { protected: - json m_hms_json; - int download_hms_info(); - int load_from_local(std::string& version_info); - int save_to_local(std::string lang); - std::string get_hms_file(std::string lang); - wxString _query_hms_msg(std::string long_error_code, std::string lang_code = "en"); - wxString _query_error_msg(std::string long_error_code, std::string lang_code = "en"); + json m_hms_info_json; + json m_hms_action_json; + int download_hms_related(std::string hms_type,json* receive_json); + int load_from_local(std::string& version_info, std::string hms_type, json* load_json); + int save_to_local(std::string lang, std::string hms_type,json save_json); + std::string get_hms_file(std::string hms_type, std::string lang = std::string("en")); + wxString _query_hms_msg(std::string long_error_code, std::string lang_code = std::string("en")); + wxString _query_error_msg(std::string long_error_code, std::string lang_code = std::string("en")); + wxString _query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action); public: HMSQuery() {} int check_hms_info(); wxString query_hms_msg(std::string long_error_code); wxString query_print_error_msg(int print_error); + wxString query_print_error_url_action(int print_error, std::string dev_id, std::vector& button_action); static std::string hms_language_code(); static std::string build_query_params(std::string& lang); + + bool save_local = false; }; int get_hms_info_version(std::string &version); diff --git a/src/slic3r/GUI/HMSPanel.cpp b/src/slic3r/GUI/HMSPanel.cpp index 9992e37af4..88afb2a456 100644 --- a/src/slic3r/GUI/HMSPanel.cpp +++ b/src/slic3r/GUI/HMSPanel.cpp @@ -5,6 +5,8 @@ #include #include "GUI.hpp" #include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "Monitor.hpp" namespace Slic3r { namespace GUI { @@ -12,9 +14,12 @@ namespace GUI { #define HMS_NOTIFY_ITEM_TEXT_SIZE wxSize(FromDIP(730), -1) #define HMS_NOTIFY_ITEM_SIZE wxSize(-1, FromDIP(80)) +wxDEFINE_EVENT(EVT_ALREADY_READ_HMS, wxCommandEvent); + HMSNotifyItem::HMSNotifyItem(wxWindow *parent, HMSItem& item) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) , m_hms_item(item) + , long_error_code(item.get_long_error_code()) , m_url(get_hms_wiki_url(item.get_long_error_code())) { init_bitmaps(); @@ -114,6 +119,9 @@ HMSNotifyItem::HMSNotifyItem(wxWindow *parent, HMSItem& item) }); m_hms_content->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { if (!m_url.empty()) wxLaunchDefaultBrowser(m_url); + wxCommandEvent evt(EVT_ALREADY_READ_HMS); + evt.SetString(long_error_code); + wxPostEvent(wxGetApp().mainframe->m_monitor, evt); }); #endif } @@ -193,6 +201,11 @@ void HMSPanel::delete_hms_panels() { m_scrolledWindow->DestroyChildren(); } +void HMSPanel::clear_hms_tag() +{ + temp_hms_list.clear(); +} + void HMSPanel::update(MachineObject *obj) { if (obj) { @@ -201,9 +214,35 @@ void HMSPanel::update(MachineObject *obj) wxString hms_text; for (auto item : obj->hms_list) { if (wxGetApp().get_hms_query()) { + + auto key = item.get_long_error_code(); + auto iter = temp_hms_list.find(key); + if (iter == temp_hms_list.end()) { + temp_hms_list[key] = item; + } + append_hms_panel(item); } } + + for (auto it = temp_hms_list.begin(); it != temp_hms_list.end(); ) { + auto key = it->second.get_long_error_code(); + bool inr = false; + for (auto hms : obj->hms_list) { + if (hms.get_long_error_code() == key) { + inr = true; + break; + } + } + + if (!inr) { + it = temp_hms_list.erase(it); + } + else { + ++it; + } + } + Layout(); this->Thaw(); } else { diff --git a/src/slic3r/GUI/HMSPanel.hpp b/src/slic3r/GUI/HMSPanel.hpp index f6fe003382..bafa043a69 100644 --- a/src/slic3r/GUI/HMSPanel.hpp +++ b/src/slic3r/GUI/HMSPanel.hpp @@ -16,6 +16,7 @@ class HMSNotifyItem : public wxPanel { HMSItem & m_hms_item; std::string m_url; + std::string long_error_code; wxPanel * m_panel_hms; wxStaticBitmap *m_bitmap_notify; @@ -39,6 +40,7 @@ public: void msw_rescale() {} }; + class HMSPanel : public wxPanel { protected: @@ -50,6 +52,7 @@ protected: void append_hms_panel(HMSItem &item); void delete_hms_panels(); + public: HMSPanel(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL); ~HMSPanel(); @@ -62,9 +65,14 @@ public: void show_status(int status); + void clear_hms_tag(); + MachineObject *obj { nullptr }; + std::map temp_hms_list; }; +wxDECLARE_EVENT(EVT_ALREADY_READ_HMS, wxCommandEvent); + } } diff --git a/src/slic3r/GUI/HttpServer.hpp b/src/slic3r/GUI/HttpServer.hpp index 1f23fd9d30..5c1547f013 100644 --- a/src/slic3r/GUI/HttpServer.hpp +++ b/src/slic3r/GUI/HttpServer.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #define LOCALHOST_PORT 13618 diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index f12cf5aab4..a0f15066b1 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -11,8 +11,10 @@ namespace Slic3r { namespace GUI { -constexpr double min_delta_area = scale_(scale_(25)); // equal to 25 mm2 -constexpr double miscalculation = scale_(scale_(1)); // equal to 1 mm2 +// equal to 25 mm2 +inline double min_delta_area() { return scale_(scale_(25)); } +// equal to 1 mm2 +inline double miscalculation() { return scale_(scale_(1)); } static const float LEFT_MARGIN = 13.0f + 100.0f; // avoid thumbnail toolbar static const float HORIZONTAL_SLIDER_WINDOW_HEIGHT = 64.0f; @@ -33,7 +35,7 @@ static ImVec4 m_tick_rect; bool equivalent_areas(const double& bottom_area, const double& top_area) { - return fabs(bottom_area - top_area) <= miscalculation; + return fabs(bottom_area - top_area) <= miscalculation(); } bool check_color_change(PrintObject *object, size_t frst_layer_id, size_t layers_cnt, bool check_overhangs, std::function break_condition) @@ -50,7 +52,7 @@ bool check_color_change(PrintObject *object, size_t frst_layer_id, size_t layers // Check percent of the area decrease. // This value have to be more than min_delta_area and more then 10% - if ((prev_area - cur_area > min_delta_area) && (cur_area / prev_area < 0.9)) { + if ((prev_area - cur_area > min_delta_area()) && (cur_area / prev_area < 0.9)) { detected = true; if (break_condition(layer)) break; } @@ -1073,7 +1075,7 @@ bool IMSlider::render(int canvas_width, int canvas_height) ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_::ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); - ImGui::PushStyleColor(ImGuiCol_::ImGuiCol_Text, ImVec4(0, 0.682f, 0.259f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_::ImGuiCol_Text, ImGuiWrapper::COL_ORCA); // ORCA: Use orca color for slider value text int windows_flag = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse diff --git a/src/slic3r/GUI/IMToolbar.cpp b/src/slic3r/GUI/IMToolbar.cpp index e14cdb2ffc..1dbfc9e613 100644 --- a/src/slic3r/GUI/IMToolbar.cpp +++ b/src/slic3r/GUI/IMToolbar.cpp @@ -58,6 +58,13 @@ void IMToolbar::del_stats_item() m_all_plates_stats_item = nullptr; } +void IMToolbar::set_enabled(bool enable) +{ + m_enabled = enable; + if (!m_enabled) + is_render_finish = false; +} + bool IMReturnToolbar::init() { bool compress = false; diff --git a/src/slic3r/GUI/IMToolbar.hpp b/src/slic3r/GUI/IMToolbar.hpp index 681045fdb8..add067d83a 100644 --- a/src/slic3r/GUI/IMToolbar.hpp +++ b/src/slic3r/GUI/IMToolbar.hpp @@ -49,7 +49,7 @@ public: float icon_height; bool is_display_scrollbar; bool show_stats_item{ false }; - + bool is_render_finish{false}; IMToolbar() { icon_width = DEFAULT_TOOLBAR_BUTTON_WIDTH; icon_height = DEFAULT_TOOLBAR_BUTTON_HEIGHT; @@ -63,7 +63,7 @@ public: float fontScale; bool is_enabled() const { return m_enabled; } - void set_enabled(bool enable) { m_enabled = enable; } + void set_enabled(bool enable); void set_icon_size(float width, float height) { icon_width = width; diff --git a/src/slic3r/GUI/IconManager.cpp b/src/slic3r/GUI/IconManager.cpp index f302f6ceba..872d270b27 100644 --- a/src/slic3r/GUI/IconManager.cpp +++ b/src/slic3r/GUI/IconManager.cpp @@ -373,7 +373,7 @@ void draw(const IconManager::Icon &icon, const ImVec2 &size, const ImVec4 &tint_ ImGuiContext &g = *GImGui; float cursor_y = window->DC.CursorPos.y; float line_height = ImGui::GetTextLineHeight() + g.Style.FramePadding.y * 2; - float offset_y = (line_height - s.y) / 2; + int offset_y = (line_height - s.y) / 2; // Make sure its int otherwise it will be pixelated window->DC.CursorPos.y += offset_y; ImGui::Image(id, s, icon.tl, icon.br, tint_col, border_col); diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 3926e15630..6240d73c30 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Enrico Turri @enricoturri1966, David Kocík @kocikdav, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2019 Jason Tibbitts @jasontibbitts -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "ImGuiWrapper.hpp" #include @@ -136,6 +131,19 @@ static const std::map font_icons_large = { {ImGui::PrevArrowBtnIcon, "notification_arrow_left" }, {ImGui::NextArrowBtnIcon, "notification_arrow_right" }, {ImGui::CompleteIcon, "notification_slicing_complete" }, + + {ImGui::PlayButton, "notification_play" }, + {ImGui::PlayDarkButton, "notification_play_dark" }, + {ImGui::PlayHoverButton, "notification_play_hover" }, + {ImGui::PlayHoverDarkButton, "notification_play_hover_dark" }, + {ImGui::PauseButton, "notification_pause" }, + {ImGui::PauseDarkButton, "notification_pause_dark" }, + {ImGui::PauseHoverButton, "notification_pause_hover" }, + {ImGui::PauseHoverDarkButton, "notification_pause_hover_dark" }, + {ImGui::OpenButton, "notification_open" }, + {ImGui::OpenDarkButton, "notification_open_dark" }, + {ImGui::OpenHoverButton, "notification_open_hover" }, + {ImGui::OpenHoverDarkButton, "notification_open_hover_dark" }, }; static const std::map font_icons_extra_large = { @@ -2217,7 +2225,7 @@ ImVec2 ImGuiWrapper::suggest_location(const ImVec2 &dialog_size, offseted_center.y() + diff_norm.y() * move_size.y()); // move offset close to center - Points window_polygon = {offset.cast(), + Points window_polygon = {offset.cast(), Point(offset.x(), offset.y() + dialog_size.y), Point(offset.x() + dialog_size.x, offset.y() + dialog_size.y), @@ -2227,12 +2235,12 @@ ImVec2 ImGuiWrapper::suggest_location(const ImVec2 &dialog_size, double allowed_space = 10; // in px double allowed_space_sq = allowed_space * allowed_space; - Vec2d move_vec = (center - (offset.cast() + half_dialog_size)) + Vec2d move_vec = (center - (offset.cast() + half_dialog_size)) .cast(); Vec2d result_move(0, 0); do { move_vec = move_vec / 2.; - Point move_point = (move_vec + result_move).cast(); + Point move_point = (move_vec + result_move).cast(); Points moved_polygon = window_polygon; // copy for (Point &p : moved_polygon) p += move_point; if (Slic3r::intersection(interest, Polygon(moved_polygon)).empty()) @@ -2512,7 +2520,7 @@ void ImGuiWrapper::push_confirm_button_style() { if (m_is_dark_mode) { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, to_ImVec4(decode_color_to_float_array("#267E73"))); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 0.88f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 0.88f)); @@ -2520,7 +2528,7 @@ void ImGuiWrapper::push_confirm_button_style() { else { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, to_ImVec4(decode_color_to_float_array("#26A69A"))); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); @@ -2605,9 +2613,9 @@ void ImGuiWrapper::pop_combo_style() void ImGuiWrapper::push_radio_style() { if (m_is_dark_mode) { - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, to_ImVec4(decode_color_to_float_array("#00675b"))); // ORCA use orca color for radio buttons } else { - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(0.00f, 0.00f, 0.00f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, to_ImVec4(decode_color_to_float_array("#009688"))); // ORCA use orca color for radio buttons } } @@ -2888,12 +2896,12 @@ void ImGuiWrapper::init_style() // ComboBox items set_color(ImGuiCol_Header, COL_ORANGE_DARK); - set_color(ImGuiCol_HeaderHovered, COL_BLUE_LIGHT); - set_color(ImGuiCol_HeaderActive, COL_BLUE_LIGHT); + set_color(ImGuiCol_HeaderHovered, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.50f))); // ORCA Use orca color for headers + set_color(ImGuiCol_HeaderActive, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.75f))); // ORCA Use orca color for headers // Slider - set_color(ImGuiCol_SliderGrab, COL_BLUE_LIGHT); - set_color(ImGuiCol_SliderGrabActive, COL_BLUE_LIGHT); + set_color(ImGuiCol_SliderGrab, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.50f))); // ORCA Use orca color for slider thumbs + set_color(ImGuiCol_SliderGrabActive, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.75f))); // ORCA Use orca color for slider thumbs // Separator set_color(ImGuiCol_Separator, COL_BLUE_LIGHT); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index c188f61cc6..ec492ed58c 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_ImGuiWrapper_hpp_ #define slic3r_ImGuiWrapper_hpp_ diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index 770d46ec00..15adf8c8ca 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -46,6 +46,8 @@ ImageGrid::ImageGrid(wxWindow * parent) , m_model_time_icon(this, "model_time", 14) , m_model_weight_icon(this, "model_weight", 14) { + m_cell_size.Set(396, 228); + SetBackgroundStyle(wxBG_STYLE_PAINT); SetBackgroundColour(0xEEEEEE); SetFont(Label::Head_20); @@ -293,9 +295,16 @@ void ImageGrid::mouseMoved(wxMouseEvent& event) if (hit != std::make_pair(m_hit_type, m_hit_item)) { m_hit_type = hit.first; m_hit_item = hit.second; - if (hit.first == HIT_ITEM) - SetToolTip(from_u8(m_file_sys->GetFile(hit.second).Title())); - else + if (hit.first == HIT_ITEM) { + SetToolTip({}); + auto & file = m_file_sys->GetFile(hit.second); + if (auto title = file.Title(); !title.empty()) { + auto tip = wxString::Format(_L("File: %s\nTitle: %s\n"), from_u8(file.name), from_u8(title)); + SetToolTip(tip); + } else { + SetToolTip(from_u8(file.name)); + } + } else SetToolTip({}); Refresh(); } @@ -732,7 +741,17 @@ void Slic3r::GUI::ImageGrid::renderText(wxDC &dc, wxString const &text, wxRect c dc.SetTextForeground(m_buttonTextColor.colorForStatesNoDark(states)); wxRect rc({0, 0}, dc.GetTextExtent(text)); rc = rc.CenterIn(rect); - dc.DrawText(text, rc.GetTopLeft()); + float fontScale = float(rect.width - 8) / rc.width; + if (fontScale < 1) { + auto font = dc.GetFont(); + dc.SetFont(font.Scaled(fontScale)); + wxRect rc({0, 0}, dc.GetTextExtent(text)); + rc = rc.CenterIn(rect); + dc.DrawText(text, rc.GetTopLeft()); + dc.SetFont(font); + } else { + dc.DrawText(text, rc.GetTopLeft()); + } } void Slic3r::GUI::ImageGrid::renderText2(wxDC &dc, wxString text, wxRect const &rect) diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp index bc5eb4d8cd..360a952c1b 100644 --- a/src/slic3r/GUI/InstanceCheck.cpp +++ b/src/slic3r/GUI/InstanceCheck.cpp @@ -1,6 +1,7 @@ #include "GUI_App.hpp" #include "InstanceCheck.hpp" #include "Plater.hpp" +#include #ifdef _WIN32 #include "MainFrame.hpp" @@ -370,6 +371,7 @@ bool instance_check(int argc, char** argv, bool app_config_single_instance) namespace GUI { wxDEFINE_EVENT(EVT_LOAD_MODEL_OTHER_INSTANCE, LoadFromOtherInstanceEvent); +wxDEFINE_EVENT(EVT_START_DOWNLOAD_OTHER_INSTANCE, StartDownloadOtherInstanceEvent); wxDEFINE_EVENT(EVT_INSTANCE_GO_TO_FRONT, InstanceGoToFrontEvent); void OtherInstanceMessageHandler::init(wxEvtHandler* callback_evt_handler) @@ -498,12 +500,18 @@ void OtherInstanceMessageHandler::handle_message(const std::string& message) } std::vector paths; + std::vector downloads; + boost::regex re(R"(^(orcaslicer|prusaslicer|cura|bambustudio):\/\/open[\/]?\?file=)", boost::regbase::icase); + boost::smatch results; + // Skip the first argument, it is the path to the slicer executable. auto it = args.begin(); for (++ it; it != args.end(); ++ it) { boost::filesystem::path p = MessageHandlerInternal::get_path(*it); if (! p.string().empty()) paths.emplace_back(p); + else if (boost::regex_search(*it, results, re)) + downloads.emplace_back(*it); } if (! paths.empty()) { //wxEvtHandler* evt_handler = wxGetApp().plater(); //assert here? @@ -511,6 +519,10 @@ void OtherInstanceMessageHandler::handle_message(const std::string& message) wxPostEvent(m_callback_evt_handler, LoadFromOtherInstanceEvent(GUI::EVT_LOAD_MODEL_OTHER_INSTANCE, std::vector(std::move(paths)))); //} } + if (!downloads.empty()) + { + wxPostEvent(m_callback_evt_handler, StartDownloadOtherInstanceEvent(GUI::EVT_START_DOWNLOAD_OTHER_INSTANCE, std::vector(std::move(downloads)))); + } } #ifdef __APPLE__ diff --git a/src/slic3r/GUI/InstanceCheck.hpp b/src/slic3r/GUI/InstanceCheck.hpp index 10ccf7b925..5f26f1e48f 100644 --- a/src/slic3r/GUI/InstanceCheck.hpp +++ b/src/slic3r/GUI/InstanceCheck.hpp @@ -43,7 +43,9 @@ class MainFrame; #endif // __linux__ using LoadFromOtherInstanceEvent = Event>; +using StartDownloadOtherInstanceEvent = Event>; wxDECLARE_EVENT(EVT_LOAD_MODEL_OTHER_INSTANCE, LoadFromOtherInstanceEvent); +wxDECLARE_EVENT(EVT_START_DOWNLOAD_OTHER_INSTANCE, StartDownloadOtherInstanceEvent); using InstanceGoToFrontEvent = SimpleEvent; wxDECLARE_EVENT(EVT_INSTANCE_GO_TO_FRONT, InstanceGoToFrontEvent); diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 538ffc4fa5..6648b0e632 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv, David Kocík @kocikdav, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "ArrangeJob.hpp" #include "libslic3r/BuildVolume.hpp" @@ -96,6 +92,7 @@ void ArrangeJob::clear_input() m_unprintable.clear(); m_locked.clear(); m_unarranged.clear(); + m_uncompatible_plates.clear(); m_selected.reserve(count + 1 /* for optional wti */); m_unselected.reserve(count + 1 /* for optional wti */); m_unprintable.reserve(cunprint /* for optional wti */); @@ -189,10 +186,20 @@ void ArrangeJob::prepare_selected() { } void ArrangeJob::prepare_all() { - PartPlateList& plate_list = m_plater->get_partplate_list(); - clear_input(); + PartPlateList& plate_list = m_plater->get_partplate_list(); + for (size_t i = 0; i < plate_list.get_plate_count(); i++) { + PartPlate* plate = plate_list.get_plate(i); + bool same_as_global_print_seq = true; + plate->get_real_print_seq(&same_as_global_print_seq); + if (plate->is_locked() == false && !same_as_global_print_seq) { + plate->lock(true); + m_uncompatible_plates.push_back(i); + } + } + + Model &model = m_plater->model(); bool selected_is_locked = false; @@ -492,20 +499,21 @@ void ArrangeJob::prepare() void ArrangeJob::check_unprintable() { for (auto it = m_selected.begin(); it != m_selected.end();) { - if (it->poly.area() < 0.001) + if (it->poly.area() < 0.001 || it->height>params.printable_height) { #if SAVE_ARRANGE_POLY - SVG svg("SVG/arrange_unprintable_"+it->name+".svg", get_extents(it->poly)); + SVG svg(data_dir() + "/SVG/arrange_unprintable_"+it->name+".svg", get_extents(it->poly)); if (svg.is_opened()) svg.draw_outline(it->poly); #endif - + if (it->poly.area() < 0.001) { + auto msg = (boost::format( + _utf8("Object %s has zero size and can't be arranged.")) + % _utf8(it->name)).str(); + m_plater->get_notification_manager()->push_notification(NotificationType::BBLPlateInfo, + NotificationManager::NotificationLevel::WarningNotificationLevel, msg); + } m_unprintable.push_back(*it); - auto msg = (boost::format( - _utf8("Object %s has zero size and can't be arranged.")) - % _utf8(it->name)).str(); - m_plater->get_notification_manager()->push_notification(NotificationType::BBLPlateInfo, - NotificationManager::NotificationLevel::WarningNotificationLevel, msg); it = m_selected.erase(it); } else @@ -572,8 +580,6 @@ void ArrangeJob::process(Ctl &ctl) BOOST_LOG_TRIVIAL(debug) << item.name << ", bed: " << item.bed_idx << ", trans: " << item.translation.transpose(); } - arrangement::arrange(m_unprintable, {}, bedpts, params); - // put unpackable items to m_unprintable so they goes outside bool we_have_unpackable_items = false; for (auto item : m_selected) { @@ -717,6 +723,10 @@ void ArrangeJob::finalize(bool canceled, std::exception_ptr &eptr) { plate_list.rebuild_plates_after_arrangement(!only_on_partplate, true); } + // unlock the plates we just locked + for (int i : m_uncompatible_plates) + plate_list.get_plate(i)->lock(false); + // BBS: update slice context and gcode result. m_plater->update_slicing_context_to_current_partplate(); @@ -761,6 +771,7 @@ arrangement::ArrangeParams init_arrange_params(Plater *p) params.cleareance_radius = print_config.extruder_clearance_radius.value; params.printable_height = print_config.printable_height.value; params.allow_rotations = settings.enable_rotation; + params.nozzle_height = print.config().nozzle_height.value; params.align_center = print_config.best_object_pos.value; params.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; params.avoid_extrusion_cali_region = settings.avoid_extrusion_cali_region; @@ -780,7 +791,6 @@ arrangement::ArrangeParams init_arrange_params(Plater *p) } if (params.is_seq_print) { - params.min_obj_distance = std::max(params.min_obj_distance, scaled(params.cleareance_radius + 0.001)); // +0.001mm to avoid clearance check fail due to rounding error params.bed_shrink_x = BED_SHRINK_SEQ_PRINT; params.bed_shrink_y = BED_SHRINK_SEQ_PRINT; } diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.hpp b/src/slic3r/GUI/Jobs/ArrangeJob.hpp index 6b3364236d..0c9f03de01 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef ARRANGEJOB_HPP #define ARRANGEJOB_HPP @@ -28,6 +24,8 @@ class ArrangeJob : public Job ArrangePolygons m_selected, m_unselected, m_unprintable, m_locked; std::vector m_unarranged; std::map m_selected_groups; // groups of selected items for sequential printing + std::vector m_uncompatible_plates; // plate indices with different printing sequence than global + arrangement::ArrangeParams params; int current_plate_index = 0; Polygon bed_poly; diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 57b22cc221..5809b8be7e 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -124,9 +124,9 @@ void BindJob::process(Ctl &ctl) } dev->update_user_machine_list_info(); - wxCommandEvent event(EVT_BIND_MACHINE_SUCCESS); - event.SetEventObject(m_event_handle); - wxPostEvent(m_event_handle, event); + wxCommandEvent event(EVT_BIND_MACHINE_SUCCESS); + event.SetEventObject(m_event_handle); + wxPostEvent(m_event_handle, event); return; } diff --git a/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp b/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp index f0ebf7baf4..57c9a62beb 100644 --- a/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp +++ b/src/slic3r/GUI/Jobs/BoostThreadWorker.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include #include "BoostThreadWorker.hpp" diff --git a/src/slic3r/GUI/Jobs/BoostThreadWorker.hpp b/src/slic3r/GUI/Jobs/BoostThreadWorker.hpp index a4176dd094..b0b97e3894 100644 --- a/src/slic3r/GUI/Jobs/BoostThreadWorker.hpp +++ b/src/slic3r/GUI/Jobs/BoostThreadWorker.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef BOOSTTHREADWORKER_HPP #define BOOSTTHREADWORKER_HPP diff --git a/src/slic3r/GUI/Jobs/BusyCursorJob.hpp b/src/slic3r/GUI/Jobs/BusyCursorJob.hpp index e2067fbe6a..8504d1eb93 100644 --- a/src/slic3r/GUI/Jobs/BusyCursorJob.hpp +++ b/src/slic3r/GUI/Jobs/BusyCursorJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef BUSYCURSORJOB_HPP #define BUSYCURSORJOB_HPP diff --git a/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp b/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp index 3c080148f1..417eb0ea4c 100644 --- a/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp +++ b/src/slic3r/GUI/Jobs/CreateFontNameImageJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "CreateFontNameImageJob.hpp" #include "libslic3r/Emboss.hpp" diff --git a/src/slic3r/GUI/Jobs/CreateFontNameImageJob.hpp b/src/slic3r/GUI/Jobs/CreateFontNameImageJob.hpp index 09d3ec6e34..0bc6ebe9f7 100644 --- a/src/slic3r/GUI/Jobs/CreateFontNameImageJob.hpp +++ b/src/slic3r/GUI/Jobs/CreateFontNameImageJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_CreateFontNameImageJob_hpp_ #define slic3r_CreateFontNameImageJob_hpp_ @@ -11,7 +7,7 @@ #include #include #include "Job.hpp" -#include "libslic3r/Point.hpp" // Vec2i +#include "libslic3r/Point.hpp" // Vec2i32 namespace Slic3r::GUI { @@ -32,7 +28,7 @@ struct FontImageData size_t index; // Height of each text // And Limit for width - Vec2i size; // in px + Vec2i32 size; // in px // bigger value create darker image // divide value 255 diff --git a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp index e429aca43b..8b25b183dc 100644 --- a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp +++ b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "CreateFontStyleImagesJob.hpp" // rasterization of ExPoly diff --git a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.hpp b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.hpp index af7a2f827b..b8c2757a62 100644 --- a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.hpp +++ b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_CreateFontStyleImagesJob_hpp_ #define slic3r_CreateFontStyleImagesJob_hpp_ diff --git a/src/slic3r/GUI/Jobs/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp index 83bdd53b31..a6e7dd6c6d 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.cpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "EmbossJob.hpp" #include @@ -14,6 +10,7 @@ #include // create object #include +#include "libslic3r/libslic3r.h" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/NotificationManager.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" @@ -322,9 +319,9 @@ void CreateObjectJob::process(Ctl &ctl) Points bed_shape_; bed_shape_.reserve(m_input.bed_shape.size()); for (const Vec2d &p : m_input.bed_shape) - bed_shape_.emplace_back(p.cast()); + bed_shape_.emplace_back(p.cast()); Slic3r::Polygon bed(bed_shape_); - if (!bed.contains(bed_coor.cast())) + if (!bed.contains(bed_coor.cast())) // mouse pose is out of build plate so create object in center of plate bed_coor = bed.centroid().cast(); @@ -836,7 +833,7 @@ std::vector create_line_bounds(const ExPolygonsWithIds &shapes, s template TriangleMesh create_mesh_per_glyph(DataBase &input, Fnc was_canceled) { // method use square of coord stored into int64_t - static_assert(std::is_same()); + // static_assert(std::is_same()); const EmbossShape &shape = input.create_shape(); if (shape.shapes_with_ids.empty()) return {}; @@ -853,7 +850,7 @@ template TriangleMesh create_mesh_per_glyph(DataBase &input, Fnc w // half of font em size for direction of letter emboss // double em_2_mm = prop.size_in_mm / 2.; // TODO: fix it double em_2_mm = 5.; - int32_t em_2_polygon = static_cast(std::round(scale_(em_2_mm))); + coord_t em_2_polygon = static_cast(std::round(scale_(em_2_mm))); size_t s_i_offset = 0; // shape index offset(for next lines) indexed_triangle_set result; @@ -979,7 +976,8 @@ TriangleMesh create_default_mesh() std::string path = Slic3r::resources_dir() + "/data/embossed_text.obj"; TriangleMesh triangle_mesh; std::string message; - if (!load_obj(path.c_str(), &triangle_mesh, message)) { + ObjInfo obj_info; + if (!load_obj(path.c_str(), &triangle_mesh, obj_info, message)) { // when can't load mesh use cube return TriangleMesh(its_make_cube(36., 4., 2.5)); } @@ -1276,7 +1274,7 @@ indexed_triangle_set cut_surface_to_its(const ExPolygons &shapes, const Transfor if (is_text_reflected) { for (SurfaceCut::Contour &c : cut.contours) std::reverse(c.begin(), c.end()); - for (Vec3i &t : cut.indices) + for (Vec3i32 &t : cut.indices) std::swap(t[0], t[1]); } diff --git a/src/slic3r/GUI/Jobs/EmbossJob.hpp b/src/slic3r/GUI/Jobs/EmbossJob.hpp index 46061f3bce..a9160619ca 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.hpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_EmbossJob_hpp_ #define slic3r_EmbossJob_hpp_ diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index efcb556456..e594f98ae1 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "FillBedJob.hpp" #include "libslic3r/Model.hpp" @@ -239,7 +235,21 @@ void FillBedJob::process(Ctl &ctl) // final align用的是凸包,在有fixed item的情况下可能找到的参考点位置是错的,这里就不做了。见STUDIO-3265 params.do_final_align = !is_bbl; - arrangement::arrange(m_selected, m_unselected, m_bedpts, params); + if (m_selected.size() > 100){ + // too many items, just find grid empty cells to put them + Vec2f step = unscaled(get_extents(m_selected.front().poly).size()) + Vec2f(m_selected.front().brim_width, m_selected.front().brim_width); + std::vector empty_cells = Plater::get_empty_cells(step); + size_t n=std::min(m_selected.size(), empty_cells.size()); + for (size_t i = 0; i < n; i++) { + m_selected[i].translation = scaled(empty_cells[i]); + m_selected[i].bed_idx= 0; + } + for (size_t i = n; i < m_selected.size(); i++) { + m_selected[i].bed_idx = -1; + } + } + else + arrangement::arrange(m_selected, m_unselected, m_bedpts, params); // finalize just here. ctl.update_status(100, ctl.was_canceled() ? @@ -285,10 +295,12 @@ void FillBedJob::finalize(bool canceled, std::exception_ptr &eptr) else ap.bed_idx = cur_plate; - ap.row = ap.bed_idx / plate_cols; - ap.col = ap.bed_idx % plate_cols; - ap.translation(X) += bed_stride_x(m_plater) * ap.col; - ap.translation(Y) -= bed_stride_y(m_plater) * ap.row; + if (m_selected.size() <= 100) { + ap.row = ap.bed_idx / plate_cols; + ap.col = ap.bed_idx % plate_cols; + ap.translation(X) += bed_stride_x(m_plater) * ap.col; + ap.translation(Y) -= bed_stride_y(m_plater) * ap.row; + } ap.apply(); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.hpp b/src/slic3r/GUI/Jobs/FillBedJob.hpp index 76413434a2..20672e0f37 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.hpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef FILLBEDJOB_HPP #define FILLBEDJOB_HPP diff --git a/src/slic3r/GUI/Jobs/Job.hpp b/src/slic3r/GUI/Jobs/Job.hpp index 55c6196c35..4058acf03f 100644 --- a/src/slic3r/GUI/Jobs/Job.hpp +++ b/src/slic3r/GUI/Jobs/Job.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2021 Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef JOB_HPP #define JOB_HPP diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp index 318cc066c4..bbe5898736 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "NotificationProgressIndicator.hpp" #include "slic3r/GUI/NotificationManager.hpp" diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp index 44fa41797a..cc09876e31 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef NOTIFICATIONPROGRESSINDICATOR_HPP #define NOTIFICATIONPROGRESSINDICATOR_HPP diff --git a/src/slic3r/GUI/Jobs/OAuthJob.cpp b/src/slic3r/GUI/Jobs/OAuthJob.cpp index 0a38fa6e60..fa79c2c999 100644 --- a/src/slic3r/GUI/Jobs/OAuthJob.cpp +++ b/src/slic3r/GUI/Jobs/OAuthJob.cpp @@ -4,7 +4,8 @@ #include "ThreadSafeQueue.hpp" #include "slic3r/GUI/I18N.hpp" #include "nlohmann/json.hpp" - +#include +#include namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/Jobs/OAuthJob.hpp b/src/slic3r/GUI/Jobs/OAuthJob.hpp index dd64e966be..7b58c53b2e 100644 --- a/src/slic3r/GUI/Jobs/OAuthJob.hpp +++ b/src/slic3r/GUI/Jobs/OAuthJob.hpp @@ -3,6 +3,9 @@ #include "Job.hpp" #include "slic3r/GUI/HttpServer.hpp" +#include +#include +#include namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/Jobs/PlaterWorker.hpp b/src/slic3r/GUI/Jobs/PlaterWorker.hpp index 7f155bd69c..2192d3b2ea 100644 --- a/src/slic3r/GUI/Jobs/PlaterWorker.hpp +++ b/src/slic3r/GUI/Jobs/PlaterWorker.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef PLATERWORKER_HPP #define PLATERWORKER_HPP diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 8ff354e7c7..338aca9842 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -281,15 +281,42 @@ void PrintJob::process(Ctl &ctl) } } + params.stl_design_id = 0; if (!wxGetApp().model().stl_design_id.empty()) { - int stl_design_id = 0; - try { - stl_design_id = std::stoi(wxGetApp().model().stl_design_id); + + auto country_code = wxGetApp().app_config->get_country_code(); + bool match_code = false; + + if (wxGetApp().model().stl_design_country == "DEV" && (country_code == "ENV_CN_DEV" || country_code == "NEW_ENV_DEV_HOST")) { + match_code = true; } - catch (const std::exception& e) { - stl_design_id = 0; + + if (wxGetApp().model().stl_design_country == "QA" && (country_code == "ENV_CN_QA" || country_code == "NEW_ENV_QAT_HOST")) { + match_code = true; + } + + if (wxGetApp().model().stl_design_country == "CN_PRE" && (country_code == "ENV_CN_PRE" || country_code == "NEW_ENV_PRE_HOST")) { + match_code = true; + } + + if (wxGetApp().model().stl_design_country == "US_PRE" && country_code == "ENV_US_PRE") { + match_code = true; + } + + if (country_code == wxGetApp().model().stl_design_country) { + match_code = true; + } + + if (match_code) { + int stl_design_id = 0; + try { + stl_design_id = std::stoi(wxGetApp().model().stl_design_id); + } + catch (const std::exception& e) { + stl_design_id = 0; + } + params.stl_design_id = stl_design_id; } - params.stl_design_id = stl_design_id; } 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(); } @@ -470,7 +497,12 @@ void PrintJob::process(Ctl &ctl) //use ftp only - if (!wxGetApp().app_config->get("lan_mode_only").empty() && wxGetApp().app_config->get("lan_mode_only") == "1") { + if (m_print_type == "from_sdcard_view") { + BOOST_LOG_TRIVIAL(info) << "print_job: try to send with cloud, model is sdcard view"; + ctl.update_status(curr_percent, _u8L("Sending print job through cloud service")); + result = m_agent->start_sdcard_print(params, update_fn, cancel_fn); + } + else if (!wxGetApp().app_config->get("lan_mode_only").empty() && wxGetApp().app_config->get("lan_mode_only") == "1") { if (params.password.empty() || params.dev_ip.empty()) { error_text = wxString::Format("Access code:%s Ip address:%s", params.password, params.dev_ip); diff --git a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp index 4f7ec5d9ff..c70d53bf2b 100644 --- a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2020 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef IPROGRESSINDICATOR_HPP #define IPROGRESSINDICATOR_HPP diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp index eb5140ec12..263273984b 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "RotoptimizeJob.hpp" #include "libslic3r/MTUtils.hpp" diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.hpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.hpp index 6f6830a9bf..5e462c6cc1 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.hpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef ROTOPTIMIZEJOB_HPP #define ROTOPTIMIZEJOB_HPP diff --git a/src/slic3r/GUI/Jobs/SLAImportDialog.hpp b/src/slic3r/GUI/Jobs/SLAImportDialog.hpp index 14d3ef6781..5bb101b74a 100644 --- a/src/slic3r/GUI/Jobs/SLAImportDialog.hpp +++ b/src/slic3r/GUI/Jobs/SLAImportDialog.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2023 Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef SLAIMPORTDIALOG_HPP #define SLAIMPORTDIALOG_HPP @@ -84,7 +80,7 @@ public: return Sel(std::min(int(Sel::modelOnly), std::max(0, sel))); } - Vec2i get_marchsq_windowsize() const override + Vec2i32 get_marchsq_windowsize() const override { enum { Accurate, Balanced, Fast }; diff --git a/src/slic3r/GUI/Jobs/SLAImportJob.cpp b/src/slic3r/GUI/Jobs/SLAImportJob.cpp index e8210577ad..1ae9c915fe 100644 --- a/src/slic3r/GUI/Jobs/SLAImportJob.cpp +++ b/src/slic3r/GUI/Jobs/SLAImportJob.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, David Kocík @kocikdav -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "SLAImportJob.hpp" #include "libslic3r/Format/SL1.hpp" @@ -27,7 +23,7 @@ public: indexed_triangle_set mesh; DynamicPrintConfig profile; wxString path; - Vec2i win = {2, 2}; + Vec2i32 win = {2, 2}; std::string err; ConfigSubstitutions config_substitutions; diff --git a/src/slic3r/GUI/Jobs/SLAImportJob.hpp b/src/slic3r/GUI/Jobs/SLAImportJob.hpp index 6274523337..4ea25bc752 100644 --- a/src/slic3r/GUI/Jobs/SLAImportJob.hpp +++ b/src/slic3r/GUI/Jobs/SLAImportJob.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2022 Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef SLAIMPORTJOB_HPP #define SLAIMPORTJOB_HPP @@ -18,7 +14,7 @@ public: virtual ~SLAImportJobView() = default; virtual Sel get_selection() const = 0; - virtual Vec2i get_marchsq_windowsize() const = 0; + virtual Vec2i32 get_marchsq_windowsize() const = 0; virtual std::string get_path() const = 0; }; diff --git a/src/slic3r/GUI/Jobs/ThreadSafeQueue.hpp b/src/slic3r/GUI/Jobs/ThreadSafeQueue.hpp index 94c63a0fd5..3ee1672bde 100644 --- a/src/slic3r/GUI/Jobs/ThreadSafeQueue.hpp +++ b/src/slic3r/GUI/Jobs/ThreadSafeQueue.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef THREADSAFEQUEUE_HPP #define THREADSAFEQUEUE_HPP diff --git a/src/slic3r/GUI/Jobs/Worker.hpp b/src/slic3r/GUI/Jobs/Worker.hpp index 69ec6f0b86..0bc7bc0863 100644 --- a/src/slic3r/GUI/Jobs/Worker.hpp +++ b/src/slic3r/GUI/Jobs/Worker.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef PRUSALSICER_WORKER_HPP #define PRUSALSICER_WORKER_HPP diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 7ad3e36cac..bda65536b5 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -196,7 +196,12 @@ void KBShortcutsDialog::fill_shortcuts() // Configuration { ctrl + "P", L("Preferences") }, //3D control +#ifdef __APPLE__ + { ctrl + "Shift+M", L("Show/Hide 3Dconnexion devices settings dialog") }, +#else { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") }, +#endif // __APPLE + // Switch table page { ctrl + "Tab", L("Switch table page")}, //DEL @@ -313,8 +318,8 @@ void KBShortcutsDialog::fill_shortcuts() {L("Ctrl+Any arrow"), L("Move slider 5x faster")}, {L("Ctrl+Mouse wheel"), L("Move slider 5x faster")}, #endif - - + { L("Home"), L("Horizontal slider - Move to start position")}, + { L("End"), L("Horizontal slider - Move to last position")}, }; m_full_shortcuts.push_back({ { _L("Preview"), "" }, preview_shortcuts }); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index c25b14d7e1..0689c5a7d3 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1,14 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, David Kocík @kocikdav, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2021 Jason Scurtu @xarbit -///|/ Copyright (c) 2019 John Drake @foxox -///|/ -///|/ ported from lib/Slic3r/GUI/MainFrame.pm: -///|/ Copyright (c) Prusa Research 2016 - 2019 Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral, Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966 -///|/ Copyright (c) Slic3r 2014 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2014 Mark Hindess -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "MainFrame.hpp" #include @@ -92,6 +81,7 @@ wxDEFINE_EVENT(EVT_CHECK_PRIVACY_VER, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECK_PRIVACY_SHOW, wxCommandEvent); wxDEFINE_EVENT(EVT_SHOW_IP_DIALOG, wxCommandEvent); wxDEFINE_EVENT(EVT_SET_SELECTED_MACHINE, wxCommandEvent); +wxDEFINE_EVENT(EVT_UPDATE_MACHINE_LIST, wxCommandEvent); wxDEFINE_EVENT(EVT_UPDATE_PRESET_CB, SimpleEvent); @@ -114,12 +104,12 @@ public: OrcaSlicerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} wxMenu *CreatePopupMenu() override { wxMenu *menu = new wxMenu; - //if (wxGetApp().app_config->get("single_instance") == "false") { + if (wxGetApp().app_config->get("single_instance") == "false") { // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, // as starting new instances would interfere with the locking mechanism of "single_instance" support. append_menu_item(menu, wxID_ANY, _L("New Window"), _L("Open a new window"), [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); - //} + } // append_menu_item(menu, wxID_ANY, _L("G-code Viewer") + dots, _L("Open G-code Viewer"), // [](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); return menu; @@ -542,7 +532,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ if (evt.CmdDown() && (evt.GetKeyCode() == 'H')) { //call parent_menu hide behavior return;} - if (evt.CmdDown() && (evt.GetKeyCode() == 'M')) { + if (evt.CmdDown() && (!evt.ShiftDown()) && (evt.GetKeyCode() == 'M')) { this->Iconize(); return; } @@ -587,15 +577,9 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ if (evt.CmdDown() && evt.GetKeyCode() == 'P') #endif { - PreferencesDialog dlg(this); - dlg.ShowModal(); + // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit + wxGetApp().open_preferences(); plater()->get_current_canvas3D()->force_set_focus(); -#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -#else - if (dlg.seq_top_layer_only_changed()) -#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER - plater()->refresh_print(); return; } @@ -885,7 +869,7 @@ void MainFrame::shutdown() // Stop the background thread of the removable drive manager, so that no new updates will be sent to the Plater. //wxGetApp().removable_drive_manager()->shutdown(); //stop listening for messages from other instances - //wxGetApp().other_instance_message_handler()->shutdown(this); + 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()) @@ -923,29 +907,6 @@ void MainFrame::show_publish_button(bool 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"), false); - else - m_tabpanel->RemovePage(tpCalibration); -} - void MainFrame::update_title_colour_after_set_title() { #ifdef __APPLE__ @@ -1078,14 +1039,21 @@ void MainFrame::init_tabpanel() { m_printer_view->load_url(url, key); }); m_printer_view->Hide(); - + + if (wxGetApp().is_enable_multi_machine()) { + m_multi_machine = new MultiMachinePage(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_multi_machine->SetBackgroundColour(*wxWHITE); + // TODO: change the bitmap + m_tabpanel->AddPage(m_multi_machine, _L("Multi-device"), std::string("tab_multi_active"), std::string("tab_multi_active"), false); + } + 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"), false); + m_tabpanel->AddPage(m_project, _L("Project"), std::string("tab_auxiliary_active"), std::string("tab_auxiliary_active"), false); 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"), false); + m_tabpanel->AddPage(m_calibration, _L("Calibration"), std::string("tab_calibration_active"), std::string("tab_calibration_active"), false); if (m_plater) { // load initial config @@ -1103,37 +1071,77 @@ void MainFrame::init_tabpanel() { // SoftFever void MainFrame::show_device(bool bBBLPrinter) { - 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(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(tpMonitor) != m_printer_view) { - m_printer_view->Show(); + auto idx = -1; + if (bBBLPrinter) { + if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) + return; + // Remove printer view + if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND) { + m_printer_view->Show(false); + m_tabpanel->RemovePage(idx); + } + + // Create/insert monitor page + if (!m_monitor) { + m_monitor = new MonitorPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_monitor->SetBackgroundColour(*wxWHITE); + } + m_monitor->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); + + if (wxGetApp().is_enable_multi_machine()) { + if (!m_multi_machine) { + m_multi_machine = new MultiMachinePage(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_multi_machine->SetBackgroundColour(*wxWHITE); + } + // TODO: change the bitmap + m_multi_machine->Show(false); + m_tabpanel->InsertPage(tpMultiDevice, m_multi_machine, _L("Multi-device"), std::string("tab_multi_active"), + std::string("tab_multi_active"), false); + } + if (!m_calibration) { + m_calibration = new CalibrationPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_calibration->SetBackgroundColour(*wxWHITE); + } + m_calibration->Show(false); + m_tabpanel->InsertPage(tpCalibration, m_calibration, _L("Calibration"), std::string("tab_calibration_active"), + std::string("tab_calibration_active"), false); + +#ifdef _MSW_DARK_MODE + wxGetApp().UpdateDarkUIWin(this); +#endif // _MSW_DARK_MODE + + } else { + if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) + return; + + if ((idx = m_tabpanel->FindPage(m_calibration)) != wxNOT_FOUND) { + m_calibration->Show(false); + m_tabpanel->RemovePage(idx); + } + if ((idx = m_tabpanel->FindPage(m_multi_machine)) != wxNOT_FOUND) { + m_multi_machine->Show(false); + m_tabpanel->RemovePage(idx); + } + if ((idx = m_tabpanel->FindPage(m_monitor)) != wxNOT_FOUND) { 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_tabpanel->SetSelection(tp3DEditor); + m_tabpanel->RemovePage(idx); + } + if (m_printer_view == nullptr) { + m_printer_view = new PrinterWebView(m_tabpanel); + Bind(EVT_LOAD_PRINTER_URL, [this](LoadPrinterViewEvent& evt) { + wxString url = evt.GetString(); + wxString key = evt.GetAPIkey(); + // select_tab(MainFrame::tpMonitor); + m_printer_view->load_url(url, key); + }); + } + m_printer_view->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), std::string("tab_monitor_active"), + std::string("tab_monitor_active")); } - } - - } - bool MainFrame::preview_only_hint() { if (m_plater && (m_plater->only_gcode_mode() || (m_plater->using_exported_file()))) { @@ -1479,6 +1487,7 @@ bool MainFrame::can_reslice() const wxBoxSizer* MainFrame::create_side_tools() { + enable_multi_machine = wxGetApp().is_enable_multi_machine(); int em = em_unit(); wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); @@ -1524,7 +1533,8 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { //this->m_plater->select_view_3D("Preview"); - m_plater->update(false, true); + m_plater->exit_gizmo(); + m_plater->update(true, true); if (m_slice_select == eSliceAll) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_ALL)); else @@ -1536,7 +1546,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { //this->m_plater->select_view_3D("Preview"); - if (m_print_select == ePrintAll || m_print_select == ePrintPlate) + if (m_print_select == ePrintAll || m_print_select == ePrintPlate || m_print_select == ePrintMultiMachine) { m_plater->apply_background_progress(); // check valid of print @@ -1547,6 +1557,8 @@ wxBoxSizer* MainFrame::create_side_tools() wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_ALL)); if (m_print_select == ePrintPlate) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); + if(m_print_select == ePrintMultiMachine) + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE)); } } else if (m_print_select == eExportGcode) @@ -1563,6 +1575,8 @@ wxBoxSizer* MainFrame::create_side_tools() wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_TO_PRINTER)); else if (m_print_select == eSendToPrinterAll) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL)); + /* else if (m_print_select == ePrintMultiMachine) + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE));*/ }); m_slice_option_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) @@ -1601,7 +1615,7 @@ wxBoxSizer* MainFrame::create_side_tools() SidePopup* p = new SidePopup(this); if (wxGetApp().preset_bundle - && !wxGetApp().preset_bundle->use_bbl_network()) { + && !wxGetApp().preset_bundle->is_bbl_vendor()) { // ThirdParty Buttons SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), ""); export_gcode_btn->SetCornerRadius(0); @@ -1701,6 +1715,47 @@ wxBoxSizer* MainFrame::create_side_tools() p->Dismiss(); }); + bool support_send = true; + bool support_print_all = true; + + const auto preset_bundle = wxGetApp().preset_bundle; + if (preset_bundle) { + if (preset_bundle->use_bbl_network()) { + // BBL network support everything + } else { + support_send = false; // All 3rd print hosts do not have the send options + + auto cfg = preset_bundle->printers.get_edited_preset().config; + const auto host_type = cfg.option>("host_type")->value; + + // Only simply print support uploading all plates + support_print_all = host_type == PrintHostType::htSimplyPrint; + } + } + + p->append_button(print_plate_btn); + if (support_print_all) { + p->append_button(print_all_btn); + } + if (support_send) { + p->append_button(send_to_printer_btn); + p->append_button(send_to_printer_all_btn); + } + if (enable_multi_machine) { + SideButton* print_multi_machine_btn = new SideButton(p, _L("Send to Multi-device"), ""); + print_multi_machine_btn->SetCornerRadius(0); + print_multi_machine_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) { + m_print_btn->SetLabel(_L("Send to Multi-device")); + m_print_select = ePrintMultiMachine; + m_print_enable = get_enable_print_status(); + m_print_btn->Enable(m_print_enable); + this->Layout(); + p->Dismiss(); + }); + p->append_button(print_multi_machine_btn); + } + p->append_button(export_sliced_file_btn); + p->append_button(export_all_sliced_file_btn); 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&) { @@ -1710,13 +1765,7 @@ wxBoxSizer* MainFrame::create_side_tools() 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); } @@ -1859,6 +1908,14 @@ bool MainFrame::get_enable_print_status() enable = false; } } + else if (m_print_select == ePrintMultiMachine) + { + if (!current_plate->is_slice_result_ready_for_print()) + { + enable = false; + } + enable = enable && !is_all_plates; + } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": m_print_select %1%, enable= %2% ")%m_print_select %enable; @@ -1978,8 +2035,12 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) //if (m_layout != ESettingsLayout::Dlg) // Do not update tabs if the Settings are in the separated dialog m_param_panel->msw_rescale(); m_project->msw_rescale(); - m_monitor->msw_rescale(); - m_calibration->msw_rescale(); + if(m_monitor) + m_monitor->msw_rescale(); + if(m_multi_machine) + m_multi_machine->msw_rescale(); + if(m_calibration) + m_calibration->msw_rescale(); // BBS #if 0 @@ -2037,8 +2098,10 @@ 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(); + if(m_monitor) + m_monitor->on_sys_color_changed(); + if(m_calibration) + m_calibration->on_sys_color_changed(); // update Tabs for (auto tab : wxGetApp().tabs_list) tab->sys_color_changed(); @@ -2180,7 +2243,7 @@ void MainFrame::init_menubar_as_editor() // New Window append_menu_item(fileMenu, wxID_ANY, _L("New Window"), _L("Start a new window"), [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, - []{ return true; }, this); + [this] { return m_plater != nullptr && wxGetApp().app_config->get("app", "single_instance") == "false"; }, this); #endif // New Project append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\t" + ctrl + "N", _L("Start a new project"), @@ -2256,6 +2319,9 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) { m_plater->add_model(); } }, "", nullptr, [this](){return can_add_models(); }, this); #endif + append_menu_item(import_menu, wxID_ANY, _L("Import Zip Archive") + dots, _L("Load models contained within a zip archive"), + [this](wxCommandEvent&) { if (m_plater) m_plater->import_zip_archive(); }, "menu_import", nullptr, + [this]() { return can_add_models(); }); append_menu_item(import_menu, wxID_ANY, _L("Import Configs") + dots /*+ "\tCtrl+I"*/, _L("Load configs"), [this](wxCommandEvent&) { load_config_file(); }, "menu_import", nullptr, [this](){return true; }, this); @@ -2287,7 +2353,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(false); }, "menu_export_gcode", nullptr, [this]() {return can_export_gcode(); }, this); append_menu_item( - export_menu, wxID_ANY, _L("Export &Configs") + dots /* + "\tCtrl+E"*/, _L("Export current configuration to files"), + export_menu, wxID_ANY, _L("Export Preset Bundle") + dots /* + "\tCtrl+E"*/, _L("Export current configuration to files"), [this](wxCommandEvent &) { export_config(); }, "menu_export_config", nullptr, []() { return true; }, this); @@ -2729,15 +2795,9 @@ void MainFrame::init_menubar_as_editor() append_menu_item( m_topbar->GetTopMenu(), wxID_ANY, _L("Preferences") + "\t" + ctrl + "P", "", [this](wxCommandEvent &) { - PreferencesDialog dlg(this); - dlg.ShowModal(); + // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit + wxGetApp().open_preferences(); plater()->get_current_canvas3D()->force_set_focus(); -#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -#else - if (dlg.seq_top_layer_only_changed()) -#endif - plater()->refresh_print(); }, "", nullptr, []() { return true; }, this); //m_topbar->AddDropDownMenuItem(preference_item); @@ -2996,7 +3056,7 @@ void MainFrame::init_menubar_as_gcodeviewer() append_menu_item(fileMenu, wxID_ANY, _L("Export &Toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"), [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr, [this]() {return can_export_toolpaths(); }, this); - append_menu_item(fileMenu, wxID_ANY, _L("Open &Studio") + dots, _L("Open Studio"), + append_menu_item(fileMenu, wxID_ANY, _L("Open &Slicer") + dots, _L("Open Slicer"), [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, []() {return true; }, this); fileMenu->AppendSeparator(); @@ -3286,10 +3346,21 @@ void MainFrame::select_tab(wxPanel* panel) //BBS void MainFrame::jump_to_monitor(std::string dev_id) { + if(!m_monitor) + return; m_tabpanel->SetSelection(tpMonitor); ((MonitorPanel*)m_monitor)->select_machine(dev_id); } +void MainFrame::jump_to_multipage() +{ + if(!m_multi_machine) + return; + m_tabpanel->SetSelection(tpMultiDevice); + ((MultiMachinePage*)m_multi_machine)->jump_to_send_page(); +} + + //BBS GUI refactor: remove unused layout new/dlg void MainFrame::select_tab(size_t tab/* = size_t(-1)*/) { @@ -3587,14 +3658,14 @@ void MainFrame::load_printer_url(wxString url, wxString apikey) void MainFrame::load_printer_url() { PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.use_bbl_network()) + if (preset_bundle.use_bbl_device_tab()) return; auto cfg = 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"); wxString apikey; - if (cfg.has("printhost_apikey") && (cfg.option>("host_type")->value == htPrusaLink || - cfg.option>("host_type")->value == htPrusaConnect)) + const auto host_type = cfg.option>("host_type")->value; + if (cfg.has("printhost_apikey") && (host_type == htPrusaLink || host_type == htPrusaConnect)) apikey = cfg.opt_string("printhost_apikey"); if (!url.empty()) { if (!url.Lower().starts_with("http")) @@ -3655,6 +3726,10 @@ void MainFrame::update_side_preset_ui() //BBS: update the preset m_plater->sidebar().update_presets(Preset::TYPE_PRINTER); m_plater->sidebar().update_presets(Preset::TYPE_FILAMENT); + + + //take off multi machine + if(m_multi_machine){m_multi_machine->clear_page();} } void MainFrame::on_select_default_preset(SimpleEvent& evt) diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 9ef81a8b08..18682a2071 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -32,6 +32,7 @@ #include "BBLTopbar.hpp" #include "PrinterWebView.hpp" #include "calib_dlg.hpp" +#include "MultiMachinePage.hpp" #define ENABEL_PRINT_ALL 0 @@ -98,6 +99,7 @@ class MainFrame : public DPIFrame wxMenuBar* m_menubar{ nullptr }; //wxMenu* publishMenu{ nullptr }; wxMenu * m_calib_menu{nullptr}; + bool enable_multi_machine{ false }; #if 0 wxMenuItem* m_menu_item_repeat { nullptr }; // doesn't used now @@ -199,21 +201,6 @@ protected: #endif public: - - //BBS GUI refactor - enum PrintSelectType - { - ePrintAll = 0, - ePrintPlate = 1, - eExportSlicedFile = 2, - eExportGcode = 3, - eSendGcode = 4, - eSendToPrinter = 5, - eSendToPrinterAll = 6, - eUploadGcode = 7, - eExportAllSlicedFile = 8 - }; - MainFrame(); ~MainFrame() = default; @@ -224,10 +211,11 @@ public: tp3DEditor = 1, tpPreview = 2, tpMonitor = 3, - tpProject = 4, - tpCalibration = 5, - tpAuxiliary = 6, - toDebugTool = 7, + tpMultiDevice = 4, + tpProject = 5, + tpCalibration = 6, + tpAuxiliary = 7, + toDebugTool = 8, }; //BBS: add slice&&print status update logic @@ -240,6 +228,20 @@ public: eEventPrintUpdate = 4 }; + // BBS GUI refactor + enum PrintSelectType { + ePrintAll = 0, + ePrintPlate = 1, + eExportSlicedFile = 2, + eExportGcode = 3, + eSendGcode = 4, + eSendToPrinter = 5, + eSendToPrinterAll = 6, + eUploadGcode = 7, + eExportAllSlicedFile = 8, + ePrintMultiMachine = 9 + }; + void update_layout(); // Called when closing the application and when switching the application language. @@ -257,7 +259,6 @@ public: 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); @@ -308,6 +309,7 @@ public: void load_config(const DynamicPrintConfig& config); //BBS: jump to monitor void jump_to_monitor(std::string dev_id = ""); + void jump_to_multipage(); //BBS: hint when jump to 3Deditor under preview only mode bool preview_only_hint(); // Select tab in m_tabpanel @@ -361,6 +363,7 @@ public: MonitorPanel* m_monitor{ nullptr }; //AuxiliaryPanel* m_auxiliary{ nullptr }; + MultiMachinePage* m_multi_machine{ nullptr }; ProjectPanel* m_project{ nullptr }; CalibrationPanel* m_calibration{ nullptr }; @@ -413,6 +416,7 @@ wxDECLARE_EVENT(EVT_CHECK_PRIVACY_VER, wxCommandEvent); wxDECLARE_EVENT(EVT_CHECK_PRIVACY_SHOW, wxCommandEvent); wxDECLARE_EVENT(EVT_SHOW_IP_DIALOG, wxCommandEvent); wxDECLARE_EVENT(EVT_SET_SELECTED_MACHINE, wxCommandEvent); +wxDECLARE_EVENT(EVT_UPDATE_MACHINE_LIST, wxCommandEvent); wxDECLARE_EVENT(EVT_UPDATE_PRESET_CB, SimpleEvent); diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 3b23ee7632..b2032b09ad 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -27,6 +27,7 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) , m_bmp_loading(this, "media_loading", 0) , m_bmp_failed(this, "media_failed", 0) , m_bmp_empty(this, "media_empty", 0) + , m_machine("") { SetBackgroundColour(0xEEEEEE); Hide(); @@ -104,7 +105,9 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) 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.")); - for (auto b : {m_button_delete, m_button_download, m_button_management}) { + m_button_refresh = new ::Button(m_manage_panel, _L("Refresh")); + m_button_refresh->SetToolTip(_L("Reload file list from printer.")); + for (auto b : {m_button_delete, m_button_download, m_button_refresh, m_button_management}) { b->SetFont(Label::Body_12); b->SetCornerRadius(12); b->SetPaddingSize({10, 6}); @@ -116,11 +119,16 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_button_management->SetBackgroundColorNormal(wxColor("#009688")); m_button_management->SetTextColorNormal(*wxWHITE); m_button_management->Enable(false); + m_button_refresh->SetBorderWidth(0); + m_button_refresh->SetBackgroundColorNormal(wxColor("#009688")); + m_button_refresh->SetTextColorNormal(*wxWHITE); + m_button_refresh->Enable(false); wxBoxSizer *manage_sizer = new wxBoxSizer(wxHORIZONTAL); manage_sizer->AddStretchSpacer(1); manage_sizer->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL)->Show(false); manage_sizer->Add(m_button_delete, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24)->Show(false); + manage_sizer->Add(m_button_refresh, 0, wxALIGN_CENTER_VERTICAL); manage_sizer->Add(m_button_management, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); m_manage_panel->SetSizer(manage_sizer); top_sizer->Add(m_manage_panel, 1, wxEXPAND); @@ -171,6 +179,11 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) e.Skip(); SetSelecting(!m_image_grid->IsSelecting()); }); + m_button_refresh->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { + e.Skip(); + if (auto fs = m_image_grid->GetFileSystem()) + fs->ListAllFiles(); + }); m_button_download->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { m_image_grid->DoActionOnSelection(1); SetSelecting(false); @@ -198,9 +211,7 @@ MediaFilePanel::~MediaFilePanel() SetMachineObject(nullptr); } -wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t length = -1); - - void MediaFilePanel::SetMachineObject(MachineObject* obj) +void MediaFilePanel::SetMachineObject(MachineObject* obj) { std::string machine = obj ? obj->dev_id : ""; if (obj) { @@ -208,6 +219,8 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le m_lan_ip = obj->dev_ip; m_lan_passwd = obj->get_access_code(); m_dev_ver = obj->get_ota_version(); + m_device_busy = obj->is_camera_busy_off(); + m_sdcard_exist = obj->has_sdcard(); m_local_support = obj->file_local; m_remote_support = obj->file_remote; m_model_download_support = obj->file_model_download; @@ -216,18 +229,21 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le m_lan_ip.clear(); m_lan_passwd.clear(); m_dev_ver.clear(); + m_sdcard_exist = false; + m_device_busy = false; m_local_support = false; m_remote_support = false; m_model_download_support = false; } - if (machine == m_machine && m_image_grid->GetFileSystem()) { - if (m_waiting_enable && IsEnabled()) { + Enable(obj && obj->is_connected() && obj->m_push_count > 0); + if (machine == m_machine) { + if ((m_waiting_enable && IsEnabled()) || (m_waiting_support && (m_local_support || m_remote_support))) { auto fs = m_image_grid->GetFileSystem(); if (fs) fs->Retry(); } return; } - m_machine = machine; + m_machine.swap(machine); m_last_errors.clear(); auto fs = m_image_grid->GetFileSystem(); if (fs) { @@ -235,12 +251,11 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le fs->Unbind(EVT_MODE_CHANGED, &MediaFilePanel::modeChanged, this); fs->Stop(true); } + m_button_refresh->Enable(false); m_button_management->Enable(false); SetSelecting(false); if (m_machine.empty()) { m_image_grid->SetStatus(m_bmp_failed, _L("No printers.")); - } else if (!m_local_support && !m_remote_support) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not supported on the current printer version)!")); } else { boost::shared_ptr fs(new PrinterFileSystem); fs->Attached(); @@ -253,6 +268,7 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le return; m_time_panel->Show(fs->GetFileType() < PrinterFileSystem::F_MODEL); //m_manage_panel->Show(fs->GetFileType() < PrinterFileSystem::F_MODEL); + m_button_refresh->Enable(fs->GetStatus() == PrinterFileSystem::ListReady); m_button_management->Enable(fs->GetCount() > 0); bool download_support = fs->GetFileType() < PrinterFileSystem::F_MODEL || m_model_download_support; m_image_grid->ShowDownload(download_support); @@ -282,27 +298,21 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le case PrinterFileSystem::Connecting: icon = m_bmp_loading; msg = _L("Connecting..."); break; case PrinterFileSystem::Failed: icon = m_bmp_failed; if (extra != 1) msg = _L("Connect failed [%d]!"); break; case PrinterFileSystem::ListSyncing: icon = m_bmp_loading; msg = _L("Loading file list..."); break; - case PrinterFileSystem::ListReady: icon = extra == 0 ? m_bmp_empty : m_bmp_failed; msg = extra == 0 ? _L("No files [%d]") : _L("Load failed [%d]"); break; + case PrinterFileSystem::ListReady: icon = extra == 0 ? m_bmp_empty : m_bmp_failed; msg = extra == 0 ? _L("No files") : _L("Load failed"); break; } - if (!e.GetString().IsEmpty()) msg = e.GetString(); + int err = fs->GetLastError(); + if (!e.GetString().IsEmpty()) + msg = e.GetString(); + if (err != 0) + msg += " [%d]"; if (fs->GetCount() == 0 && !msg.empty()) m_image_grid->SetStatus(icon, msg); if (e.GetInt() == PrinterFileSystem::Initializing) fetchUrl(boost::weak_ptr(fs)); - int err = fs->GetLastError(); + err = fs->GetLastError(); if ((status == PrinterFileSystem::Failed && m_last_errors.find(err) == m_last_errors.end()) || status == PrinterFileSystem::ListReady) { - json j; - j["code"] = err; - j["dev_id"] = m_machine; - j["dev_ip"] = m_lan_ip; - NetworkAgent* agent = wxGetApp().getAgent(); - if (status == PrinterFileSystem::Failed && err != 0) { - j["result"] = "failed"; - } else if (status == PrinterFileSystem::ListReady) { - j["result"] = "success"; - } m_last_errors.insert(fs->GetLastError()); } }); @@ -314,7 +324,9 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le int result = e.GetExtraLong(); if (result > 1 && !e.GetString().IsEmpty()) - MessageDialog(this, e.GetString(), _L("Download failed"), wxOK | wxICON_ERROR).ShowModal(); + CallAfter([this, m = e.GetString()] { + MessageDialog(this, m, _L("Download failed"), wxOK | wxICON_ERROR).ShowModal(); + }); NetworkAgent* agent = wxGetApp().getAgent(); if (result > 1 || result == 0) { @@ -373,6 +385,7 @@ void MediaFilePanel::Rescale() m_button_download->Rescale(); m_button_delete->Rescale(); + m_button_refresh->Rescale(); m_button_management->Rescale(); m_image_grid->Rescale(); @@ -386,6 +399,7 @@ void MediaFilePanel::SetSelecting(bool selecting) bool download_support = fs && fs->GetFileType() < PrinterFileSystem::F_MODEL || m_model_download_support; m_manage_panel->GetSizer()->Show(m_button_download, selecting && download_support); m_manage_panel->GetSizer()->Show(m_button_delete, selecting); + m_manage_panel->GetSizer()->Show(m_button_refresh, !selecting); m_manage_panel->Layout(); } @@ -420,31 +434,60 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr wfs) } m_waiting_enable = false; if (!m_local_support && !m_remote_support) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not supported on the current printer version)!")); + m_waiting_support = true; + m_image_grid->SetStatus(m_bmp_failed, _L("Browsing file in SD card is not supported in current firmware. Please update the printer firmware.")); fs->SetUrl("0"); return; } + if (!m_sdcard_exist) { + m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Storage unavailable, insert SD card.)!")); + fs->SetUrl("0"); + return; + } + if (m_device_busy) { + m_image_grid->SetStatus(m_bmp_failed, _L("The printer is currently busy downloading. Please try again after it finishes.")); + fs->SetUrl("0"); + return; + } + m_waiting_support = false; + NetworkAgent *agent = wxGetApp().getAgent(); + std::string agent_version = agent ? agent->get_version() : ""; if ((m_lan_mode || !m_remote_support) && m_local_support && !m_lan_ip.empty()) { - std::string url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd + - "&device=" + m_machine + "&dev_ver=" + m_dev_ver; + std::string url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd; + url += "&device=" + m_machine; + url += "&net_ver=" + agent_version; + url += "&dev_ver=" + m_dev_ver; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); fs->SetUrl(url); return; } + if (!m_remote_support && m_local_support) { // not support tutk + m_image_grid->SetStatus(m_bmp_failed, _L("Please enter the IP of printer to connect.")); + fs->SetUrl("0"); + fs.reset(); + if (wxGetApp().show_modal_ip_address_enter_dialog(_L("LAN Connection Failed (Failed to view sdcard)"))) { + if (auto fs = wfs.lock()) + fs->Retry(); + } + return; + } if (m_lan_mode) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not accessible in LAN-only mode)!")); + m_image_grid->SetStatus(m_bmp_failed, _L("Browsing file in SD card is not supported in LAN Only Mode.")); fs->SetUrl("0"); return; } - if (!m_remote_support && m_local_support) { // not support tutk - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Missing LAN ip of printer)!")); - fs->SetUrl("1"); - return; - } - NetworkAgent *agent = wxGetApp().getAgent(); if (agent) { agent->get_camera_url(m_machine, - [this, wfs, m = m_machine, v = m_dev_ver](std::string url) { - BOOST_LOG_TRIVIAL(info) << "MediaFilePanel::fetchUrl: camera_url: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20); + [this, wfs, m = m_machine, v = agent->get_version(), dv = m_dev_ver](std::string url) { + if (boost::algorithm::starts_with(url, "bambu:///")) { + url += "&device=" + m; + url += "&net_ver=" + v; + url += "&dev_ver=" + dv; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); + } + BOOST_LOG_TRIVIAL(info) << "MediaFilePanel::fetchUrl: camera_url: " << hide_passwd(url, {"?uid=", "authkey=", "passwd="}); CallAfter([=] { boost::shared_ptr fs(wfs.lock()); if (!fs || fs != m_image_grid->GetFileSystem()) return; @@ -498,9 +541,11 @@ void MediaFilePanel::doAction(size_t index, int action) if (result == PrinterFileSystem::ERROR_CANCEL) return; if (result != 0) { - MessageDialog(this, - _L("Failed to fetching model infomations from printer."), - _L("Error"), wxOK).ShowModal(); + wxString msg = data.empty() ? _L("Failed to fetch model information from printer.") : + from_u8(data); + CallAfter([this, msg] { + MessageDialog(this, msg, _L("Print"), wxOK).ShowModal(); + }); return; } Slic3r::DynamicPrintConfig config; @@ -511,8 +556,8 @@ void MediaFilePanel::doAction(size_t index, int action) if (!Slic3r::load_gcode_3mf_from_stream(is, &config, &model, &plate_data_list, &file_version) || plate_data_list.empty()) { MessageDialog(this, - _L("Failed to parse model infomations."), - _L("Error"), wxOK).ShowModal(); + _L("Failed to parse model information."), + _L("Print"), wxOK).ShowModal(); return; } diff --git a/src/slic3r/GUI/MediaFilePanel.h b/src/slic3r/GUI/MediaFilePanel.h index 1ae5df7916..0b64cdb5d6 100644 --- a/src/slic3r/GUI/MediaFilePanel.h +++ b/src/slic3r/GUI/MediaFilePanel.h @@ -69,6 +69,7 @@ private: ::StaticBox *m_manage_panel = nullptr; ::Button * m_button_delete = nullptr; ::Button *m_button_download = nullptr; + ::Button *m_button_refresh = nullptr; ::Button *m_button_management = nullptr; ImageGrid * m_image_grid = nullptr; @@ -81,10 +82,13 @@ private: std::string m_lan_passwd; std::string m_dev_ver; bool m_lan_mode = false; + bool m_sdcard_exist = false; bool m_local_support = false; bool m_remote_support = false; bool m_model_download_support = false; + bool m_device_busy = false; bool m_waiting_enable = false; + bool m_waiting_support = false; int m_last_mode = 0; int m_last_type = 0; diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index b5ab46647e..36500f69fa 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -22,6 +22,16 @@ #endif #include +#include "wx/evtloop.h" + +static std::map error_messages = { + {1, L("The device cannot handle more conversations. Please retry later.")}, + {2, L("Player is malfunctioning. Please reinstall the system player.")}, + {100, L("The player is not loaded, please click \"play\" button to retry.")}, + {101, L("The player is not loaded, please click \"play\" button to retry.")}, + {102, L("The player is not loaded, please click \"play\" button to retry.")}, + {103, L("The player is not loaded, please click \"play\" button to retry.")} +}; namespace Slic3r { namespace GUI { @@ -30,6 +40,7 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w : wxPanel(parent, wxID_ANY, pos, size) , m_media_ctrl(media_ctrl) { + SetLabel("MediaPlayCtrl"); SetBackgroundColour(*wxWHITE); m_media_ctrl->Bind(wxEVT_MEDIA_STATECHANGED, &MediaPlayCtrl::onStateChanged, this); @@ -39,6 +50,39 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w m_label_status = new Label(this, ""); m_label_status->SetForegroundColour(wxColour("#323A3C")); + m_label_stat = new Label(this, ""); + m_label_stat->SetForegroundColour(wxColour("#323A3C")); + m_media_ctrl->Bind(EVT_MEDIA_CTRL_STAT, [this](auto & e) { +#if !BBL_RELEASE_TO_PUBLIC + wxSize size = m_media_ctrl->GetVideoSize(); + m_label_stat->SetLabel(e.GetString() + wxString::Format(" VS:%ix%i", size.x, size.y)); +#endif + wxString str = e.GetString(); + m_stat.clear(); + for (auto k : {"FPS:", "BPS:", "T:", "B:"}) { + auto ik = str.Find(k); + double value = 0; + if (ik != wxString::npos) { + ik += strlen(k); + auto ip = str.find(' ', ik); + if (ip == wxString::npos) ip = str.Length(); + auto v = str.Mid(ik, ip - ik); + if (k == "T:" && v.Length() == 8) { + long h = 0,m = 0,s = 0; + v.Left(2).ToLong(&h); + v.Mid(3, 2).ToLong(&m); + v.Mid(6, 2).ToLong(&s); + value = h * 3600. + m * 60 + s; + } else { + v.ToDouble(&value); + if (v.Right(1) == "K") value *= 1024; + else if (v.Right(1) == "%") value *= 0.01; + } + } + m_stat.push_back(value); + } + }); + m_button_play->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { TogglePlay(); }); m_button_play->Bind(wxEVT_RIGHT_UP, [this](auto & e) { m_media_ctrl->Play(); }); // m_label_status->Bind(wxEVT_LEFT_UP, [this](auto &e) { @@ -66,6 +110,7 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w wxBoxSizer * sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(m_button_play, 0, wxEXPAND | wxALL, 0); + sizer->Add(m_label_stat, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(25)); sizer->AddStretchSpacer(1); sizer->Add(m_label_status, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(25)); SetSizer(sizer); @@ -92,16 +137,9 @@ MediaPlayCtrl::~MediaPlayCtrl() m_tasks.push_back(""); m_cond.notify_all(); } - m_thread.join(); -} - -wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t length = -1) -{ - if (length == size_t(-1)) - length = str.Length() - offset; - if (length <= 8) - return str; - return str.Left(offset + 4) + wxString(length - 8, '*') + str.Mid(offset + length - 4); + while (!m_thread.try_join_for(boost::chrono::milliseconds(10))) { + wxEventLoopBase::GetActive()->Yield(); + } } void MediaPlayCtrl::SetMachineObject(MachineObject* obj) @@ -128,13 +166,21 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj) m_remote_support = true; m_device_busy = false; } + Enable(obj && obj->is_connected() && obj->m_push_count > 0); if (machine == m_machine) { if (m_last_state == MEDIASTATE_IDLE && IsEnabled()) Play(); + else if (m_last_state == MEDIASTATE_LOADING && m_tutk_state == "disable" + && m_last_user_play + wxTimeSpan::Seconds(3) < wxDateTime::Now()) { + // resend ttcode to printer + if (auto agent = wxGetApp().getAgent()) + agent->get_camera_url(machine, [](auto) {}); + m_last_user_play = wxDateTime::Now(); + } return; } m_machine = machine; - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl switch machine: " << hide_id_middle_string(m_machine); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl switch machine: " << m_machine; m_disable_lan = false; m_failed_retry = 0; m_last_failed_codes.clear(); @@ -153,6 +199,17 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj) SetStatus("", false); } +wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t length = -1) +{ +#if BBL_RELEASE_TO_PUBLIC + if (length == size_t(-1)) length = str.Length() - offset; + if (length <= 8) return str; + return str.Left(offset + 4) + wxString(length - 8, '*') + str.Mid(offset + length - 4); +#else + return str; +#endif +} + wxString hide_passwd(wxString url, std::vector const &passwords) { for (auto &p : passwords) { @@ -166,7 +223,9 @@ wxString hide_passwd(wxString url, std::vector const &passwords) if (j == wxString::npos) j = url.length(); } auto l = size_t(j - i); - if (j == url.length() || url[j] == '@' || url[j] == '&') + if (p[0] == '?' || p[0] == '&') + url = hide_id_middle_string(url, i, l); + else if (j == url.length() || url[j] == '@' || url[j] == '&') url.replace(i, l, l, wxUniChar('*')); } return url; @@ -183,83 +242,98 @@ void MediaPlayCtrl::Play() } m_failed_code = 0; if (m_machine.empty()) { - Stop(_L("Initialize failed (No Device)!")); + Stop(_L("Please confirm if the printer is connected.")); return; } if (!IsEnabled()) { - Stop(_L("Initialize failed (Device connection not ready)!")); - return; - } - if (!m_camera_exists) { - Stop(_L("Initialize failed (No Camera Device)!")); + Stop(_L("Please confirm if the printer is connected.")); return; } if (m_device_busy) { - Stop(_L("Printer is busy downloading, Please wait for the downloading to finish.")); + Stop(_L("The printer is currently busy downloading. Please try again after it finishes.")); m_failed_retry = 0; return; } + if (!m_camera_exists) { + Stop(_L("Printer camera is malfunctioning.")); + return; + } - m_last_state = MEDIASTATE_INITIALIZING; m_button_play->SetIcon("media_stop"); NetworkAgent *agent = wxGetApp().getAgent(); std::string agent_version = agent ? agent->get_version() : ""; - if (m_lan_proto > MachineObject::LVL_None && (m_lan_mode || !m_remote_support) && !m_disable_lan && !m_lan_ip.empty()) { + if (m_lan_proto > MachineObject::LVL_Disable && (m_lan_mode || !m_remote_support) && !m_disable_lan && !m_lan_ip.empty()) { m_disable_lan = m_remote_support && !m_lan_mode; // try remote next time + std::string url; if (m_lan_proto == MachineObject::LVL_Local) - m_url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd; + url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd; else if (m_lan_proto == MachineObject::LVL_Rtsps) - m_url = "bambu:///rtsps___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsps"; + url = "bambu:///rtsps___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsps"; else if (m_lan_proto == MachineObject::LVL_Rtsp) - m_url = "bambu:///rtsp___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsp"; - m_url += "&device=" + hide_id_middle_string(m_machine); - m_url += "&version=" + agent_version; - m_url += "&dev_ver=" + m_dev_ver; - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(m_url, {m_lan_passwd} ); + url = "bambu:///rtsp___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsp"; + url += "&device=" + m_machine; + url += "&net_ver=" + agent_version; + url += "&dev_ver=" + m_dev_ver; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(hide_id_middle_string(url, url.find(m_lan_ip), m_lan_ip.length()), {m_lan_passwd}); + m_url = url; load(); return; } - m_disable_lan = false; - if (m_lan_ip.empty()) - m_failed_code = -1; + // m_lan_mode && m_lan_proto > LVL_Disable (use local tunnel) + // m_lan_mode && m_lan_proto == LVL_Disable (*) + // m_lan_mode && m_lan_proto == LVL_None (x) + // !m_lan_mode && m_remote_support (go on) + // !m_lan_mode && !m_remote_support && m_lan_proto > LVL_None (use local tunnel) + // !m_lan_mode && !m_remote_support && m_lan_proto == LVL_Disable (*) + // !m_lan_mode && !m_remote_support && m_lan_proto == LVL_None (x) - if (m_lan_mode) { - Stop(m_lan_proto < 0 - ? _L("Initialize failed (Not supported on the current printer version)!") - : _L("Initialize failed (Not accessible in LAN-only mode)!")); + if (m_lan_proto <= MachineObject::LVL_Disable && (m_lan_mode || !m_remote_support)) { + Stop(m_lan_proto == MachineObject::LVL_None + ? _L("Problem occured. Please update the printer firmware and try again.") + : _L("LAN Only Liveview is off. Please turn on the liveview on printer screen.")); return; } + + m_disable_lan = false; + m_failed_code = 0; + m_last_state = MEDIASTATE_INITIALIZING; if (!m_remote_support) { // not support tutk - Stop(m_lan_ip.empty() - ? _L("Initialize failed (Missing LAN ip of printer)!") - : _L("Initialize failed (Not supported on the current printer version)!")); + m_failed_code = -1; + m_url = "bambu:///local/"; + Stop(_L("Please enter the IP of printer to connect.")); return; } - m_failed_code = 0; + m_label_stat->SetLabel({}); SetStatus(_L("Initializing...")); if (agent) { - agent->get_camera_url(m_machine, [this, m = m_machine, v = agent_version, dv = m_dev_ver](std::string url) { + agent->get_camera_url(m_machine, + [this, m = m_machine, v = agent_version, dv = m_dev_ver](std::string url) { if (boost::algorithm::starts_with(url, "bambu:///")) { - url += "&device=" + into_u8(hide_id_middle_string(m)); - url += "&version=" + v; + url += "&device=" + into_u8(m); + url += "&net_ver=" + v; url += "&dev_ver=" + dv; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); } - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(url, + {"?uid=", "authkey=", "passwd=", "license=", "token="}); CallAfter([this, m, url] { if (m != m_machine) { BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl drop late ttcode for machine: " << m; return; } - m_url = url; if (m_last_state == MEDIASTATE_INITIALIZING) { if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) { m_failed_code = 3; - Stop(wxString::Format(_L("Initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url))); + Stop(_L("Connection Failed. Please check the network and try again")); } else { + m_url = url; load(); } } else { @@ -270,6 +344,8 @@ void MediaPlayCtrl::Play() } } +void start_ping_test(); + void MediaPlayCtrl::Stop(wxString const &msg) { int last_state = m_last_state; @@ -280,23 +356,41 @@ void MediaPlayCtrl::Stop(wxString const &msg) boost::unique_lock lock(m_mutex); m_tasks.push_back(""); m_cond.notify_all(); - m_last_state = MEDIASTATE_IDLE; if (!msg.IsEmpty()) - SetStatus(msg, false); - else if (m_failed_code) - SetStatus(_L("Stopped [%d]!"), true); - else + SetStatus(msg); + else if (m_failed_code) { + auto iter = error_messages.find(m_failed_code); + auto msg2 = iter == error_messages.end() + ? _L("Please check the network and try again, You can restart or update the printer if the issue persists.") + : _L(iter->second.c_str()); + if (m_failed_code == 1) { + if (m_last_state == wxMEDIASTATE_PLAYING) + msg2 = _L("The printer has been logged out and cannot connect."); + } +#if !BBL_RELEASE_TO_PUBLIC && defined(__WINDOWS__) + if (m_failed_code < 0) + boost::thread ping_thread = Slic3r::create_thread([] { + start_ping_test(); + }); +#endif + SetStatus(msg2); + } else SetStatus(_L("Stopped."), false); - if (m_failed_code >= 100) // not keep retry on local error + m_last_state = MEDIASTATE_IDLE; + bool auto_retry = wxGetApp().app_config->get("liveview", "auto_retry") != "false"; + if (!auto_retry || m_failed_code >= 100 || m_failed_code == 1) // not keep retry on local error or EOS m_next_retry = wxDateTime(); } else if (!msg.IsEmpty()) { SetStatus(msg, false); + return; } else { m_failed_code = 0; + return; } - - bool remote = m_url.find("/local/") == wxString::npos && m_url.find("/rtsp") == wxString::npos; + auto tunnel = m_url.empty() ? "" : into_u8(wxURI(m_url).GetPath()).substr(1); + if (auto n = tunnel.find_first_of('/_'); n != std::string::npos) + tunnel = tunnel.substr(0, n); if (last_state != wxMEDIASTATE_PLAYING && m_failed_code != 0 && m_last_failed_codes.find(m_failed_code) == m_last_failed_codes.end() && (m_user_triggered || m_failed_retry > 3)) { @@ -305,7 +399,9 @@ void MediaPlayCtrl::Stop(wxString const &msg) m_url.clear(); ++m_failed_retry; - if (m_failed_code < 0 && last_state != wxMEDIASTATE_PLAYING && !remote && (m_failed_retry > 1 || m_user_triggered)) { + bool local = tunnel == "local" || tunnel == "rtsp" || + tunnel == "rtsps"; + if (m_failed_code < 0 && last_state != wxMEDIASTATE_PLAYING && local && (m_failed_retry > 1 || m_user_triggered)) { m_next_retry = wxDateTime(); // stop retry if (wxGetApp().show_modal_ip_address_enter_dialog(_L("LAN Connection Failed (Failed to start liveview)"))) { m_failed_retry = 0; @@ -369,13 +465,13 @@ void MediaPlayCtrl::ToggleStream() DownloadProgressDialog2(MediaPlayCtrl *ctrl) : DownloadProgressDialog(_L("Downloading Virtual Camera Tools")), ctrl(ctrl) {} struct UpgradeNetworkJob2 : UpgradeNetworkJob { - UpgradeNetworkJob2() { + UpgradeNetworkJob2(std::shared_ptr pri) : UpgradeNetworkJob() { name = "cameratools"; package_name = "camera_tools.zip"; } }; - std::unique_ptr make_job() override - { return std::make_unique(); } + std::shared_ptr make_job(std::shared_ptr pri) + { return std::make_shared(pri); } void on_finish() override { ctrl->CallAfter([ctrl = this->ctrl] { ctrl->ToggleStream(); }); @@ -397,7 +493,7 @@ void MediaPlayCtrl::ToggleStream() wxGetApp().app_config->set("not_show_vcamera_stop_prev", "1"); if (res == wxID_CANCEL) return; } - if (m_lan_proto > MachineObject::LVL_None && (m_lan_mode || !m_remote_support) && !m_disable_lan && !m_lan_ip.empty()) { + if (m_lan_proto > MachineObject::LVL_Disable && (m_lan_mode || !m_remote_support) && !m_disable_lan && !m_lan_ip.empty()) { std::string url; if (m_lan_proto == MachineObject::LVL_Local) url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd; @@ -405,9 +501,9 @@ void MediaPlayCtrl::ToggleStream() url = "bambu:///rtsps___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsps"; else if (m_lan_proto == MachineObject::LVL_Rtsp) url = "bambu:///rtsp___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsp"; - url += "&device=" + into_u8(hide_id_middle_string(m_machine)); + url += "&device=" + into_u8(m_machine); url += "&dev_ver=" + m_dev_ver; - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(url, {m_lan_passwd}); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(hide_id_middle_string(url, url.find(m_lan_ip), m_lan_ip.length()), {m_lan_passwd}); std::string file_url = data_dir() + "/cameratools/url.txt"; boost::nowide::ofstream file(file_url); auto url2 = encode_path(url.c_str()); @@ -421,10 +517,13 @@ void MediaPlayCtrl::ToggleStream() agent->get_camera_url(m_machine, [this, m = m_machine, v = agent->get_version(), dv = m_dev_ver](std::string url) { if (boost::algorithm::starts_with(url, "bambu:///")) { url += "&device=" + m; - url += "&version=" + v; + url += "&net_ver=" + v; url += "&dev_ver=" + dv; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); } - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(url, + {"?uid=", "authkey=", "passwd=", "license=", "token="}); CallAfter([this, m, url] { if (m != m_machine) return; if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) { @@ -447,6 +546,13 @@ void MediaPlayCtrl::msw_rescale() { m_button_play->Rescale(); } +void MediaPlayCtrl::jump_to_play() +{ + if (m_last_state != MEDIASTATE_IDLE) + return; + TogglePlay(); +} + void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) { auto last_state = m_last_state; @@ -472,11 +578,11 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) m_failed_code = m_media_ctrl->GetLastError(); if (size.GetWidth() >= 320) { m_last_state = state; + m_failed_code = 0; SetStatus(_L("Playing..."), false); m_failed_retry = 0; - m_failed_code = 0; m_disable_lan = false; boost::unique_lock lock(m_mutex); m_tasks.push_back(""); @@ -484,7 +590,7 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) } else if (event.GetId()) { if (m_failed_code == 0) m_failed_code = 2; - Stop(_L("Load failed [%d]!")); + Stop(); } } else { m_last_state = state; @@ -493,14 +599,20 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) void MediaPlayCtrl::SetStatus(wxString const &msg2, bool hyperlink) { - auto msg = wxString::Format(msg2, m_failed_code); - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::SetStatus: " << msg.ToUTF8().data(); + auto msg = msg2; + if (m_failed_code != 0) { + int state2 = m_last_state >= MEDIASTATE_IDLE ? m_last_state - MEDIASTATE_IDLE : + m_last_state + MEDIASTATE_BUFFERING - MEDIASTATE_IDLE; + msg += wxString::Format(" [%d:%d]", state2, m_failed_code); + } + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::SetStatus: " << msg.ToUTF8().data() << " tutk_state: " << m_tutk_state; #ifdef __WXMSW__ OutputDebugStringA("MediaPlayCtrl::SetStatus: "); OutputDebugStringA(msg.ToUTF8().data()); OutputDebugStringA("\n"); #endif // __WXMSW__ m_label_status->SetLabel(msg); + m_label_status->Wrap(GetSize().GetWidth() - 120 - m_label_stat->GetSize().GetWidth()); long style = m_label_status->GetWindowStyle() & ~LB_HYPERLINK; if (hyperlink) { style |= LB_HYPERLINK; @@ -550,7 +662,7 @@ void MediaPlayCtrl::media_proc() } wxString url = m_tasks.front(); if (m_tasks.size() >= 2 && !url.IsEmpty() && url[0] != '<' && m_tasks[1] == "") { - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: busy skip url: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd=", m_lan_passwd}), 9, 20); + BOOST_LOG_TRIVIAL(trace) << "MediaPlayCtrl: busy skip url: " << url; m_tasks.pop_front(); m_tasks.pop_front(); continue; @@ -586,13 +698,15 @@ void MediaPlayCtrl::media_proc() bool MediaPlayCtrl::start_stream_service(bool *need_install) { #ifdef __WIN32__ - std::string file_source = data_dir() + "\\cameratools\\bambu_source.exe"; - std::string file_ffmpeg = data_dir() + "\\cameratools\\ffmpeg.exe"; - std::string file_ff_cfg = data_dir() + "\\cameratools\\ffmpeg.cfg"; + auto tools_dir = boost::nowide::widen(data_dir()) + L"\\cameratools\\"; + auto file_source = tools_dir + L"bambu_source.exe"; + auto file_ffmpeg = tools_dir + L"ffmpeg.exe"; + auto file_ff_cfg = tools_dir + L"ffmpeg.cfg"; #else - std::string file_source = data_dir() + "/cameratools/bambu_source"; - std::string file_ffmpeg = data_dir() + "/cameratools/ffmpeg"; - std::string file_ff_cfg = data_dir() + "/cameratools/ffmpeg.cfg"; + auto tools_dir = data_dir() + "/cameratools/"; + auto file_source = tools_dir + "bambu_source"; + auto file_ffmpeg = tools_dir + "ffmpeg"; + auto file_ff_cfg = tools_dir + "ffmpeg.cfg"; #endif if (!boost::filesystem::exists(file_source) || !boost::filesystem::exists(file_ffmpeg) || !boost::filesystem::exists(file_ff_cfg)) { if (need_install) *need_install = true; @@ -615,14 +729,15 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) boost::process::pipe intermediate; boost::filesystem::path start_dir(boost::filesystem::path(data_dir()) / "plugins"); #ifdef __WXMSW__ - start_dir = boost::filesystem::path(data_dir()) / "cameratools"; - std::string file_dll = data_dir() + "/cameratools/BambuSource.dll"; - std::string file_dll2 = data_dir() + "/plugins/BambuSource.dll"; - if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2)) - boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists); - static std::locale tmp = std::locale(std::locale(), new boost::nowide::utf8_codecvt()); - boost::process::imbue(tmp); - boost::process::child process_source(file_source, into_u8(file_url2), boost::process::start_dir(start_dir), boost::process::windows::create_no_window, + auto plugins_dir = boost::nowide::widen(data_dir()) + L"\\plugins\\"; + for (auto dll : {L"BambuSource.dll", L"live555.dll"}) { + auto file_dll = tools_dir + dll; + auto file_dll2 = plugins_dir + dll; + if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2)) + boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists); + } + boost::process::child process_source(file_source, file_url2.ToStdWstring(), boost::process::start_dir(tools_dir), + boost::process::windows::create_no_window, boost::process::std_out > intermediate, boost::process::limit_handles); boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::windows::create_no_window, boost::process::std_in < intermediate, boost::process::limit_handles); @@ -636,7 +751,7 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) process_source.detach(); process_ffmpeg.detach(); } catch (std::exception &e) { - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl failed to start camera stream: " << e.what(); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl failed to start camera stream: " << decode_path(e.what()); return false; } return true; @@ -687,20 +802,18 @@ void wxMediaCtrl2::DoSetSize(int x, int y, int width, int height, int sizeFlags) #else wxMediaCtrl::DoSetSize(x, y, width, height, sizeFlags); #endif - //if (sizeFlags & wxSIZE_USE_EXISTING) return; - //wxSize size = GetVideoSize(); - //if (size.GetWidth() <= 0) - // size = wxSize{16, 9}; - //int maxHeight = (width * size.GetHeight() + size.GetHeight() - 1) / size.GetWidth(); - //if (maxHeight != GetMaxHeight()) { - // // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2::DoSetSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; - // SetMaxSize({-1, maxHeight}); - // CallAfter([this] { - // if (auto p = GetParent()) { - // p->Layout(); - // p->Refresh(); - // } - // }); - //} + if (sizeFlags & wxSIZE_USE_EXISTING) return; + wxSize size = m_video_size; + int maxHeight = (width * size.GetHeight() + size.GetHeight() - 1) / size.GetWidth(); + if (maxHeight != GetMaxHeight()) { + // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2::DoSetSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; + SetMaxSize({-1, maxHeight}); + CallAfter([this] { + if (auto p = GetParent()) { + p->Layout(); + p->Refresh(); + } + }); + } } diff --git a/src/slic3r/GUI/MediaPlayCtrl.h b/src/slic3r/GUI/MediaPlayCtrl.h index 79ce3a4b9c..f6e8d0dbec 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -42,6 +42,8 @@ public: void msw_rescale(); + void jump_to_play(); + protected: void onStateChanged(wxMediaEvent & event); @@ -95,11 +97,13 @@ private: bool m_user_triggered = false; int m_failed_retry = 0; int m_failed_code = 0; + std::vector m_stat; std::set m_last_failed_codes; wxDateTime m_last_user_play; wxDateTime m_next_retry; ::Button *m_button_play; + ::Label * m_label_stat; ::Label * m_label_status; }; diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index 011c77128c..85e34c503e 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, Filip Sykala @Jony01, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "MeshUtils.hpp" #include "libslic3r/Tesselate.hpp" @@ -11,6 +7,7 @@ #include "libslic3r/Model.hpp" #include "libslic3r/CSGMesh/SliceCSGMesh.hpp" +#include "libslic3r/libslic3r.h" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Camera.hpp" @@ -355,8 +352,8 @@ void MeshClipper::recalculate_triangles() // To prevent overflow after scaling, downscale the input if needed: double extra_scale = 1.; - int32_t limit = int32_t(std::min(std::numeric_limits::max() / (2. * std::max(1., scale_x)), std::numeric_limits::max() / (2. * std::max(1., scale_y)))); - int32_t max_coord = 0; + coord_t limit = coord_t(std::min(std::numeric_limits::max() / (2. * std::max(1., scale_x)), std::numeric_limits::max() / (2. * std::max(1., scale_y)))); + coord_t max_coord = 0; for (const Point& pt : exp.contour) max_coord = std::max(max_coord, std::max(std::abs(pt.x()), std::abs(pt.y()))); if (max_coord + m_contour_width >= limit) diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp index c3e0b4247d..679c0e2a97 100644 --- a/src/slic3r/GUI/MeshUtils.hpp +++ b/src/slic3r/GUI/MeshUtils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Tomáš Mészáros @tamasmeszaros, Enrico Turri @enricoturri1966, Lukáš Hejl @hejllukas, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_MeshUtils_hpp_ #define slic3r_MeshUtils_hpp_ diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 8985e0d3a4..333f4d3de0 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -121,6 +121,19 @@ AddMachinePanel::~AddMachinePanel() { m_select_machine.Bind(EVT_FINISHED_UPDATE_MACHINE_LIST, [this](wxCommandEvent& e) { m_side_tools->start_interval(); }); + + Bind(EVT_ALREADY_READ_HMS, [this](wxCommandEvent& e) { + auto key = e.GetString().ToStdString(); + auto iter = m_hms_panel->temp_hms_list.find(key); + if (iter != m_hms_panel->temp_hms_list.end()) { + m_hms_panel->temp_hms_list[key].already_read = true; + } + + update_hms_tag(); + e.Skip(); + }); + + Bind(EVT_JUMP_TO_HMS, &MonitorPanel::jump_to_HMS, this); } MonitorPanel::~MonitorPanel() @@ -185,7 +198,7 @@ MonitorPanel::~MonitorPanel() m_tabpanel->AddPage(m_upgrade_panel, _L("Update"), "", false); m_hms_panel = new HMSPanel(m_tabpanel); - m_tabpanel->AddPage(m_hms_panel, _L("HMS"),"", false); + m_tabpanel->AddPage(m_hms_panel, "HMS","", false); m_initialized = true; show_status((int)MonitorStatus::MONITOR_NO_PRINTER); @@ -252,17 +265,20 @@ void MonitorPanel::select_machine(std::string machine_sn) void MonitorPanel::on_update_all(wxMouseEvent &event) { - update_all(); - Layout(); - Refresh(); + if (update_flag) { + update_all(); + Layout(); + Refresh(); + } } void MonitorPanel::on_timer(wxTimerEvent& event) { - update_all(); - - Layout(); - Refresh(); + if (update_flag) { + update_all(); + Layout(); + Refresh(); + } } void MonitorPanel::on_select_printer(wxCommandEvent& event) @@ -270,6 +286,10 @@ void MonitorPanel::on_update_all(wxMouseEvent &event) Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; + if ( dev->get_selected_machine() && (dev->get_selected_machine()->dev_id != event.GetString().ToStdString()) && m_hms_panel) { + m_hms_panel->clear_hms_tag(); + } + if (!dev->set_selected_machine(event.GetString().ToStdString())) return; @@ -348,13 +368,15 @@ void MonitorPanel::update_all() } m_status_info_panel->obj = obj; - m_status_info_panel->m_media_play_ctrl->SetMachineObject(obj); m_upgrade_panel->update(obj); + m_status_info_panel->m_media_play_ctrl->SetMachineObject(obj); m_media_file_panel->SetMachineObject(obj); m_side_tools->update_status(obj); if (!obj) { show_status((int)MONITOR_NO_PRINTER); + m_hms_panel->clear_hms_tag(); + m_tabpanel->GetBtnsListCtrl()->showNewTag(3, false); return; } @@ -380,7 +402,7 @@ void MonitorPanel::update_all() m_status_info_panel->update(obj); } - if (m_hms_panel->IsShown()) { + if (m_hms_panel->IsShown() || (obj->hms_list.size() != m_hms_panel->temp_hms_list.size())) { m_hms_panel->update(obj); } @@ -389,6 +411,21 @@ void MonitorPanel::update_all() m_upgrade_panel->update(obj); } #endif + + update_hms_tag(); +} + +void MonitorPanel::update_hms_tag() +{ + for (auto hmsitem : m_hms_panel->temp_hms_list) { + if (!hmsitem.second.already_read) { + //show HMS new tag + m_tabpanel->GetBtnsListCtrl()->showNewTag(3, true); + return; + } + } + + m_tabpanel->GetBtnsListCtrl()->showNewTag(3, false); } bool MonitorPanel::Show(bool show) @@ -400,6 +437,8 @@ bool MonitorPanel::Show(bool show) NetworkAgent* m_agent = wxGetApp().getAgent(); DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (show) { + start_update(); + m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); @@ -418,6 +457,7 @@ bool MonitorPanel::Show(bool show) } } } else { + stop_update(); m_refresh_timer->Stop(); } return wxPanel::Show(show); @@ -470,7 +510,6 @@ Freeze(); m_status_info_panel->show_status(status); m_hms_panel->show_status(status); m_upgrade_panel->show_status(status); - m_media_file_panel->Enable(status == MonitorStatus::MONITOR_NORMAL); if ((status & (int)MonitorStatus::MONITOR_NO_PRINTER) != 0) { set_default(); @@ -493,5 +532,34 @@ Freeze(); Thaw(); } +std::string MonitorPanel::get_string_from_tab(PrinterTab tab) +{ + switch (tab) { + case PT_STATUS : + return "status"; + case PT_MEDIA: + return "sd_card"; + case PT_UPDATE: + return "update"; + case PT_HMS: + return "HMS"; + case PT_DEBUG: + return "debug"; + default: + return ""; + } + return ""; +} + +void MonitorPanel::jump_to_HMS(wxCommandEvent& e) +{ + if (!this->IsShown()) + return; + auto page = m_tabpanel->GetCurrentPage(); + if (page && page != m_hms_panel) + m_tabpanel->SetSelection(PT_HMS); +} + + } // GUI } // Slic3r diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index cb5615b044..8da56ddc3b 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -104,6 +104,7 @@ private: int last_wifi_signal = -1; int last_status; bool m_initialized { false }; + bool update_flag{false}; wxTimer* m_refresh_timer = nullptr; public: @@ -141,13 +142,21 @@ public: //void update_ams(MachineObject* obj); void update_all(); + void update_hms_tag(); bool Show(bool show); void update_side_panel(); void show_status(int status); + std::string get_string_from_tab(PrinterTab tab); + MachineObject *obj { nullptr }; std::string last_conn_type = "undedefined"; + + void stop_update() {update_flag = false;}; + void start_update() {update_flag = true;}; + + void jump_to_HMS(wxCommandEvent& e); }; diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index c8efc1b9eb..c5e0881ec8 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -146,11 +146,13 @@ static std::string format_device_string(int vid, int pid) static std::string detect_attached_device() { std::string ret; - // Initialize the hidapi library int res = hid_init(); if (res != 0) BOOST_LOG_TRIVIAL(error) << "Unable to initialize hidapi library"; + else if (wxGetApp().app_config->get("skip_3dmouse_detect") == "true") { + BOOST_LOG_TRIVIAL(info) << "do not detect 3d Mouse"; + } else { // Enumerates devices hid_device_info* devices = hid_enumerate(0, 0); @@ -927,7 +929,7 @@ void Mouse3DController::run() bool Mouse3DController::connect_device() { - if (m_stop) + if (m_stop || wxGetApp().app_config->get("skip_3dmouse_detect") == "true") return false; { diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index ed323417aa..3d67c5c2e5 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, David Kocík @kocikdav, Lukáš Hejl @hejllukas, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "MsgDialog.hpp" #include @@ -228,7 +224,7 @@ void MsgDialog::apply_style(long style) if (style & wxCANCEL) add_button(wxID_CANCEL, false, _L("Cancel")); logo->SetBitmap( create_scaled_bitmap(style & wxAPPLY ? "completed" : - style & wxICON_WARNING ? "obj_warning" : + style & wxICON_WARNING ? "exclamation" : // ORCA "exclamation" used for dialogs "obj_warning" used for 16x16 areas style & wxICON_INFORMATION ? "info" : style & wxICON_QUESTION ? "question" : "OrcaSlicer", this, 64, style & wxICON_ERROR)); } @@ -383,26 +379,27 @@ RichMessageDialog::RichMessageDialog(wxWindow* parent, : MsgDialog(parent, caption.IsEmpty() ? wxString::Format(_L("%s info"), SLIC3R_APP_FULL_NAME) : caption, wxEmptyString, style) { add_msg_content(this, content_sizer, message); - - m_checkBox = new wxCheckBox(this, wxID_ANY, m_checkBoxText); - wxGetApp().UpdateDarkUI(m_checkBox); - m_checkBox->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { m_checkBoxValue = m_checkBox->GetValue(); }); - - btn_sizer->Insert(0, m_checkBox, wxALIGN_CENTER_VERTICAL); - finalize(); } int RichMessageDialog::ShowModal() { - if (m_checkBoxText.IsEmpty()) - m_checkBox->Hide(); - else - m_checkBox->SetLabelText(m_checkBoxText); + if (!m_checkBoxText.IsEmpty()) { + show_dsa_button(m_checkBoxText); + m_checkbox_dsa->SetValue(m_checkBoxValue); + } Layout(); return wxDialog::ShowModal(); } + +bool RichMessageDialog::IsCheckBoxChecked() const +{ + if (m_checkbox_dsa) + return m_checkbox_dsa->GetValue(); + + return m_checkBoxValue; +} #endif // InfoDialog @@ -543,6 +540,126 @@ DeleteConfirmDialog::~DeleteConfirmDialog() {} void DeleteConfirmDialog::on_dpi_changed(const wxRect &suggested_rect) {} +Newer3mfVersionDialog::Newer3mfVersionDialog(wxWindow *parent, const Semver *file_version, const Semver *cloud_version, wxString new_keys) + : DPIDialog(parent ? parent : nullptr, wxID_ANY, wxString(SLIC3R_APP_FULL_NAME " - ") + _L("Newer 3mf version"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) + , m_file_version(file_version) + , m_cloud_version(cloud_version) + , m_new_keys(new_keys) +{ + this->SetBackgroundColour(*wxWHITE); + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL); + // top line + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line_top->SetBackgroundColour(wxColour(0xA6, 0xa9, 0xAA)); + main_sizer->Add(m_line_top, 0, wxEXPAND, 0); + main_sizer->Add(0, 0, 0, wxTOP, FromDIP(5)); + + wxBoxSizer * content_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticBitmap *info_bitmap = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("info", nullptr, 60), wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70)), 0); + wxBoxSizer * msg_sizer = get_msg_sizer(); + content_sizer->Add(info_bitmap, 0, wxEXPAND | wxALL, FromDIP(5)); + content_sizer->Add(msg_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); + main_sizer->Add(content_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); + main_sizer->Add(get_btn_sizer(), 0, wxEXPAND | wxALL, FromDIP(5)); + + this->SetSizer(main_sizer); + Layout(); + Fit(); + wxGetApp().UpdateDlgDarkUI(this); +} + +wxBoxSizer *Newer3mfVersionDialog::get_msg_sizer() +{ + wxBoxSizer *vertical_sizer = new wxBoxSizer(wxVERTICAL); + bool file_version_newer = (*m_file_version) > (*m_cloud_version); + wxStaticText *text1; + wxBoxSizer * horizontal_sizer = new wxBoxSizer(wxHORIZONTAL); + wxString msg_str; + if (file_version_newer) { + text1 = new wxStaticText(this, wxID_ANY, _L("The 3mf file version is in Beta and it is newer than the current OrcaSlicer version.")); + wxStaticText * text2 = new wxStaticText(this, wxID_ANY, _L("If you would like to try Orca Slicer Beta, you may click to")); + wxHyperlinkCtrl *github_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Download Beta Version"), "https://github.com/bambulab/BambuStudio/releases"); + horizontal_sizer->Add(text2, 0, wxEXPAND, 0); + horizontal_sizer->Add(github_link, 0, wxEXPAND | wxLEFT, 5); + + } else { + text1 = new wxStaticText(this, wxID_ANY, _L("The 3mf file version is newer than the current Orca Slicer version.")); + wxStaticText *text2 = new wxStaticText(this, wxID_ANY, _L("Update your Orca Slicer could enable all functionality in the 3mf file.")); + horizontal_sizer->Add(text2, 0, wxEXPAND, 0); + } + Semver app_version = *(Semver::parse(SLIC3R_VERSION)); + wxStaticText *cur_version = new wxStaticText(this, wxID_ANY, _L("Current Version: ") + app_version.to_string()); + + vertical_sizer->Add(text1, 0, wxEXPAND | wxTOP, FromDIP(5)); + vertical_sizer->Add(horizontal_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); + vertical_sizer->Add(cur_version, 0, wxEXPAND | wxTOP, FromDIP(5)); + if (!file_version_newer) { + wxStaticText *latest_version = new wxStaticText(this, wxID_ANY, _L("Latest Version: ") + m_cloud_version->to_string()); + vertical_sizer->Add(latest_version, 0, wxEXPAND | wxTOP, FromDIP(5)); + } + + wxStaticText *unrecognized_keys = new wxStaticText(this, wxID_ANY, m_new_keys); + vertical_sizer->Add(unrecognized_keys, 0, wxEXPAND | wxTOP, FromDIP(10)); + + return vertical_sizer; +} + +wxBoxSizer *Newer3mfVersionDialog::get_btn_sizer() +{ + wxBoxSizer *horizontal_sizer = new wxBoxSizer(wxHORIZONTAL); + horizontal_sizer->Add(0, 0, 1, wxEXPAND, 0); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + bool file_version_newer = (*m_file_version) > (*m_cloud_version); + if (!file_version_newer) { + m_update_btn = new Button(this, _L("Update")); + m_update_btn->SetBackgroundColor(btn_bg_green); + m_update_btn->SetBorderColor(*wxWHITE); + m_update_btn->SetTextColor(wxColour(0xFFFFFE)); + m_update_btn->SetFont(Label::Body_12); + m_update_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_update_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_update_btn->SetCornerRadius(FromDIP(12)); + horizontal_sizer->Add(m_update_btn, 0, wxRIGHT, FromDIP(10)); + + m_update_btn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + EndModal(wxID_OK); + if (wxGetApp().app_config->has("app", "cloud_software_url")) { + std::string download_url = wxGetApp().app_config->get("app", "cloud_software_url"); + wxLaunchDefaultBrowser(download_url); + } else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Bambu Studio conf has no cloud_software_url and file_version: " << m_file_version->to_string() + << " and cloud_version: " << m_cloud_version->to_string(); + } + }); + } + + if (!file_version_newer) { + m_later_btn = new Button(this, _L("Not for now")); + m_later_btn->SetBackgroundColor(btn_bg_white); + m_later_btn->SetBorderColor(wxColour(38, 46, 48)); + } else { + m_later_btn = new Button(this, _L("OK")); + m_later_btn->SetBackgroundColor(btn_bg_green); + m_later_btn->SetBorderColor(*wxWHITE); + m_later_btn->SetTextColor(wxColour(0xFFFFFE)); + } + m_later_btn->SetFont(Label::Body_12); + m_later_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_later_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); + m_later_btn->SetCornerRadius(FromDIP(12)); + horizontal_sizer->Add(m_later_btn, 0, wxRIGHT, FromDIP(10)); + m_later_btn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + EndModal(wxID_OK); + }); + return horizontal_sizer; +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 58e113acbe..e62251af7d 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2022 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, David Kocík @kocikdav, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_MsgDialog_hpp_ #define slic3r_MsgDialog_hpp_ @@ -20,6 +16,7 @@ #include "Widgets/TextInput.hpp" #include "BBLStatusBar.hpp" #include "BBLStatusBarSend.hpp" +#include "libslic3r/Semver.hpp" class wxBoxSizer; class wxCheckBox; @@ -196,7 +193,7 @@ public: } wxString GetCheckBoxText() const { return m_checkBoxText; } - bool IsCheckBoxChecked() const { return m_checkBoxValue; } + bool IsCheckBoxChecked() const; // This part o fcode isported from the "wx\msgdlg.h" using wxMD = wxMessageDialogBase; @@ -392,6 +389,27 @@ private: wxStaticText *m_msg_text = nullptr; }; +class Newer3mfVersionDialog : public DPIDialog +{ +public: + Newer3mfVersionDialog(wxWindow *parent, const Semver* file_version, const Semver* cloud_version, wxString new_keys); + ~Newer3mfVersionDialog(){}; + virtual void on_dpi_changed(const wxRect &suggested_rect){}; + +private: + wxBoxSizer *get_msg_sizer(); + wxBoxSizer *get_btn_sizer(); + + +private: + const Semver *m_file_version; + const Semver *m_cloud_version; + wxString m_new_keys; + Button * m_update_btn = nullptr; + Button * m_later_btn = nullptr; + wxStaticText *m_msg_text = nullptr; +}; + } } diff --git a/src/slic3r/GUI/MultiMachine.cpp b/src/slic3r/GUI/MultiMachine.cpp new file mode 100644 index 0000000000..220c3cab77 --- /dev/null +++ b/src/slic3r/GUI/MultiMachine.cpp @@ -0,0 +1,268 @@ +#include "MultiMachine.hpp" +#include "I18N.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" + +namespace Slic3r { +namespace GUI { + + +wxDEFINE_EVENT(EVT_MULTI_CLOUD_TASK_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_LOCAL_TASK_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_DEVICE_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_DEVICE_SELECTED_FINHSH, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_DEVICE_VIEW, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_REFRESH, wxCommandEvent); + +DeviceItem::DeviceItem(wxWindow* parent, MachineObject* obj) + : wxWindow(parent, wxID_ANY) + , obj_(obj) +{ + sync_state(); + Bind(EVT_MULTI_REFRESH, &DeviceItem::on_refresh, this); +} + +void DeviceItem::on_refresh(wxCommandEvent& evt) +{ + Refresh(); +} + +void DeviceItem::sync_state() +{ + if (obj_) { + state_online = obj_->is_online(); + state_dev_name = obj_->dev_name; + + //printable + if (obj_->print_status == "IDLE") { + state_printable = 0; + } + else if (obj_->print_status == "FINISH") { + state_printable = 1; + } + else if (obj_->print_status == "FAILED") { + state_printable = 2; + } + else if (obj_->is_in_printing()) { + state_printable = 3; + } + else { + state_printable = 6; + } + + if (is_blocking_printing(obj_)) { + state_printable = 5; + } + + if (obj_->is_in_upgrading()) { + state_printable = 4; + } + + state_enable_ams = obj_->ams_exist_bits; + + + //device + if (obj_->print_status == "IDLE") { + state_device = 0; + } + else if (obj_->print_status == "FINISH") { + state_device = 1; + } + else if (obj_->print_status == "FAILED") { + state_device = 2; + } + else if (obj_->print_status == "RUNNING") { + state_device = 3; + } + else if (obj_->print_status == "PAUSE") { + state_device = 4; + } + else if (obj_->print_status == "PREPARE") { + state_device = 5; + } + else if (obj_->print_status == "SLICING") { + state_device = 6; + } + else { + state_device = 7; + } + } +} + +void DeviceItem::selected() +{ + if (state_selected != 2) { + state_selected = 1; + } +} + +void DeviceItem::unselected() +{ + if (state_selected != 2) { + state_selected = 0; + } +} + +bool DeviceItem::is_blocking_printing(MachineObject* obj_) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return true; + auto target_model = obj_->printer_type; + std::string source_model = ""; + + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + + 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 DeviceItem::update_item(const DeviceItem* item) +{ + // Except for the selected status, everything else is updated + if (this == item) + return; + this->state_online = item->state_online; + this->state_printable = item->state_printable; + this->state_enable_ams = item->state_enable_ams; + this->state_device = item->state_device; + this->state_local_task = item->state_local_task; +} + +wxString DeviceItem::get_state_printable() +{ + //0-idle 1-finish 2-printing 3-upgrading 4-preset incompatible 5-unknown + std::vector str_state_printable; + str_state_printable.push_back(_L("Idle")); + str_state_printable.push_back(_L("Idle")); + str_state_printable.push_back(_L("Idle")); + str_state_printable.push_back(_L("Printing")); + str_state_printable.push_back(_L("Upgrading")); + str_state_printable.push_back(_L("Incompatible")); + str_state_printable.push_back(_L("syncing")); + + return str_state_printable[state_printable]; +} + +wxString DeviceItem::get_state_device() +{ + //0-idle 1-finish 2-running 3-pause 4-failed 5-prepare + std::vector str_state_device; + str_state_device.push_back(_L("Idle")); + str_state_device.push_back(_L("Printing Finish")); + str_state_device.push_back(_L("Printing Failed")); + str_state_device.push_back(_L("Printing")); + str_state_device.push_back(_L("Printing Pause")); + str_state_device.push_back(_L("Prepare")); + str_state_device.push_back(_L("Slicing")); + str_state_device.push_back(_L("syncing")); + + return str_state_device[state_device]; +} + +wxString DeviceItem::get_local_state_task() +{ + //0-padding 1-sending 2-sending finish 3-sending cancel 4-sending failed 5-Removed + std::vector str_state_task; + str_state_task.push_back(_L("Pending")); + str_state_task.push_back(_L("Sending")); + str_state_task.push_back(_L("Sending Finish")); + str_state_task.push_back(_L("Sending Cancel")); + str_state_task.push_back(_L("Sending Failed")); + str_state_task.push_back(_L("Printing")); + str_state_task.push_back(_L("Print Success")); + str_state_task.push_back(_L("Print Failed")); + str_state_task.push_back(_L("Removed")); + str_state_task.push_back(_L("Idle")); + return str_state_task[state_local_task]; +} + +wxString DeviceItem::get_cloud_state_task() +{ + //0-printing 1-printing finish 2-printing failed + std::vector str_state_task; + str_state_task.push_back(_L("Printing")); + str_state_task.push_back(_L("Printing Finish")); + str_state_task.push_back(_L("Printing Failed")); + + return str_state_task[state_cloud_task]; +} + + +std::vector selected_machines(const std::vector& dev_item_list, std::string search_text) +{ + std::vector res; + for (const auto& item : dev_item_list) { + const MachineObject* dev = item->get_obj(); + const std::string& dev_name = dev->dev_name; + const std::string& dev_ip = dev->dev_ip; + + auto name_it = dev_name.find(search_text); + auto ip_it = dev_ip.find(search_text); + + if (name_it != std::string::npos || ip_it != std::string::npos) + res.emplace_back(item); + } + + return res; +} + +SortItem::SortItem() +{ + sort_map.emplace(std::make_pair(SortRule::SR_None, [this](const DeviceItem* d1, const DeviceItem* d2) { + return d1->state_dev_name > d2->state_dev_name; + })); + sort_map.emplace(std::make_pair(SortRule::SR_DEV_NAME, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_dev_name > d2->state_dev_name : d1->state_dev_name < d2->state_dev_name; + })); + sort_map.emplace(std::make_pair(SortRule::SR_ONLINE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_online > d2->state_online : d1->state_online < d2->state_online; + })); + sort_map.emplace(std::make_pair(SortRule::SR_PRINTABLE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_printable > d2->state_printable : d1->state_printable < d2->state_printable; + })); + sort_map.emplace(std::make_pair(SortRule::SR_EN_AMS, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_enable_ams > d2->state_enable_ams : d1->state_enable_ams < d2->state_enable_ams; + })); + sort_map.emplace(std::make_pair(SortRule::SR_DEV_STATE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_device > d2->state_device : d1->state_device < d2->state_device; + })); + sort_map.emplace(std::make_pair(SortRule::SR_LOCAL_TASK_STATE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_local_task > d2->state_local_task : d1->state_local_task < d2->state_local_task; + })); + sort_map.emplace(std::make_pair(SortRule::SR_CLOUD_TASK_STATE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_cloud_task > d2->state_cloud_task : d1->state_cloud_task < d2->state_cloud_task; + })); + sort_map.emplace(std::make_pair(SortRule::SR_SEND_TIME, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->m_send_time > d2->m_send_time : d1->m_send_time < d2->m_send_time; + })); +} + +SortItem::SortCallBack SortItem::get_call_back() +{ + return sort_map[rule]; +} + +void SortItem::set_role(SortRule rule, bool big) +{ + this->rule = rule; + this->big = big; +} + +void SortItem::set_role(SortMultiMachineCB cb, SortRule rl, bool big) +{ + this->cb = cb; + this->rule = rl; + this->big = big; +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachine.hpp b/src/slic3r/GUI/MultiMachine.hpp new file mode 100644 index 0000000000..48a6ed4180 --- /dev/null +++ b/src/slic3r/GUI/MultiMachine.hpp @@ -0,0 +1,121 @@ +#ifndef slic3r_MultiMachine_hpp_ +#define slic3r_MultiMachine_hpp_ + +#include "GUI_Utils.hpp" +#include "DeviceManager.hpp" +#include + +namespace Slic3r { +namespace GUI { + + +#define DEVICE_ITEM_MAX_WIDTH 900 +#define SEND_ITEM_MAX_HEIGHT 30 +#define DEVICE_ITEM_MAX_HEIGHT 50 + +#define TABLE_HEAR_NORMAL_COLOUR wxColour(238, 238, 238) +#define TABLE_HEAD_PRESSED_COLOUR wxColour(150, 150, 150) +#define CTRL_BUTTON_NORMAL_COLOUR wxColour(255, 255, 255) +#define CTRL_BUTTON_PRESSEN_COLOUR wxColour(150, 150, 150) +#define TABLE_HEAD_FONT Label::Body_13 +#define ICON_SIZE FromDIP(16) + +class DeviceItem : public wxWindow +{ +public: + MachineObject* obj_{nullptr}; + int state_online = { 0 }; //0-Offline 1-Online + std::string state_dev_name; //device name + int state_printable{ 0 }; //0-idle 1-finish 2-failed 3-printing 4-upgrading 5-preset incompatible 6-unknown + int state_selected{ 0 }; //0-selected 1-unselected 2-un selectable + int state_enable_ams{ 0 };//0-no ams 1-enabled ams 2-not enabled ams + int state_device{ 0 }; //0-idle 1-finish 2-failed 3-running 4-pause 5-prepare 6-slicing 7-removed + int state_local_task{ 0 }; //0-padding 1-sending 2-sending finish 3-sending cancel 4-sending failed 5-TS_PRINT_SUCCESS 6- TS_PRINT_FAILED 7-TS_REMOVED 8-TS_IDLE + int state_cloud_task{ 0 }; //0-printing 1-printing finish 2-printing failed + int state_optional{0}; //0-Not optional 1-Optional + std::string m_send_time; + +public: + + DeviceItem(wxWindow* parent, MachineObject* obj); + ~DeviceItem() {}; + + void on_refresh(wxCommandEvent& evt); + void sync_state(); + wxString get_state_printable(); + wxString get_state_device(); + wxString get_local_state_task(); + wxString get_cloud_state_task(); + MachineObject* get_obj() const { return obj_; } + + int get_state_online() const { return state_online; } + int get_state_printable() const { return state_printable; } + int get_state_selected() const { return state_selected; } + int get_state_enable_ams() const { return state_enable_ams; } + int get_state_device() const { return state_device; } + int get_state_local_task() const { return state_local_task; } + int get_state_cloud_task() const { return state_cloud_task; } + std::string get_state_dev_name() const { return state_dev_name; } + + void selected(); + void unselected(); + bool is_blocking_printing(MachineObject* obj_); + void update_item(const DeviceItem* item); +}; + +std::vector selected_machines(const std::vector& dev_item_list, std::string search_text); + +struct ObjState +{ + std::string dev_id; + std::string state_dev_name; + int state_device{ 0 }; +}; + +struct SortItem +{ + typedef std::function SortCallBack; + typedef std::function SortMultiMachineCB; + + enum SortRule : uint8_t + { + SR_None = 0, + SR_DEV_NAME = 1, + SR_ONLINE, + SR_PRINTABLE, + SR_EN_AMS, + SR_DEV_STATE, + SR_LOCAL_TASK_STATE, + SR_CLOUD_TASK_STATE, + SR_SEND_TIME, + SR_MACHINE_NAME, + SR_MACHINE_STATE, + SR_COUNT + }; + + SortRule rule{ SortRule::SR_None }; + bool big{ true }; + std::unordered_map sort_map; + SortMultiMachineCB cb; + + SortItem(); + SortItem(SortRule sr) { rule = sr; } + + SortCallBack get_call_back(); + void set_role(SortRule rule, bool big); + void set_role(SortMultiMachineCB cb, SortRule rl, bool big); + SortMultiMachineCB get_machine_call_back() const { return cb; } +}; + + +wxDECLARE_EVENT(EVT_MULTI_DEVICE_SELECTED, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_DEVICE_SELECTED_FINHSH, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_DEVICE_VIEW, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_CLOUD_TASK_SELECTED, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_LOCAL_TASK_SELECTED, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_REFRESH, wxCommandEvent); + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp new file mode 100644 index 0000000000..b37810f07f --- /dev/null +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -0,0 +1,767 @@ +#include "MultiMachineManagerPage.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" + +namespace Slic3r { +namespace GUI { + +MultiMachineItem::MultiMachineItem(wxWindow* parent, MachineObject* obj) + : DeviceItem(parent, obj) +{ + SetBackgroundColour(*wxWHITE); + SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + Bind(wxEVT_PAINT, &MultiMachineItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &MultiMachineItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &MultiMachineItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &MultiMachineItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &MultiMachineItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_VIEW, [this, obj](auto& e) { + wxGetApp().mainframe->jump_to_monitor(obj->dev_id); + if (wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()) { + wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()->jump_to_play(); + } + }); + wxGetApp().UpdateDarkUIWin(this); +} + +void MultiMachineItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(); +} + +void MultiMachineItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(); +} + +void MultiMachineItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(DEVICE_LEFT_PADDING_LEFT + + DEVICE_LEFT_DEV_NAME + + DEVICE_LEFT_PRO_NAME + + DEVICE_LEFT_PRO_INFO); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + FromDIP(90)) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_VIEW)); + } +} + +void MultiMachineItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(DEVICE_LEFT_PADDING_LEFT + + DEVICE_LEFT_DEV_NAME + + DEVICE_LEFT_PRO_NAME + + DEVICE_LEFT_PRO_INFO); + + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + FromDIP(90)) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void MultiMachineItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void MultiMachineItem::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 MultiMachineItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top) { + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void MultiMachineItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(DEVICE_LEFT_PADDING_LEFT); + + if (obj_) { + //dev name + wxString dev_name = wxString::FromUTF8(obj_->dev_name); + if (!obj_->is_online()) { + dev_name = dev_name + "(" + _L("Offline") + ")"; + } + dc.SetFont(Label::Body_13); + DrawTextWithEllipsis(dc, dev_name, FromDIP(DEVICE_LEFT_DEV_NAME), left); + left += FromDIP(DEVICE_LEFT_DEV_NAME); + + //project name + wxString project_name = _L("No task"); + if (obj_->is_in_printing()) { + project_name = wxString::Format("%s", GUI::from_u8(obj_->subtask_name)); + } + dc.SetFont(Label::Body_13); + DrawTextWithEllipsis(dc, project_name, FromDIP(DEVICE_LEFT_PRO_NAME), left); + left += FromDIP(DEVICE_LEFT_PRO_NAME); + + //state + dc.SetFont(Label::Body_13); + if (state_device == 0) { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 1) { + dc.SetTextForeground(wxColour(0,174,66)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 2) + { + dc.SetTextForeground(wxColour(208,27,27)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device > 2 && state_device < 7) { + dc.SetFont(Label::Body_12); + dc.SetTextForeground(wxColour(0, 150, 136)); + if (obj_->get_curr_stage().IsEmpty() && obj_->subtask_) { + //wxString layer_info = wxString::Format(_L("Layer: %d/%d"), obj_->curr_layer, obj_->total_layers); + wxString progress_info = wxString::Format("%d", obj_->subtask_->task_progress); + wxString left_time = wxString::Format("%s", get_left_time(obj_->mc_left_time)); + + DrawTextWithEllipsis(dc, progress_info + "% | " + left_time, FromDIP(DEVICE_LEFT_PRO_INFO), left, FromDIP(10)); + + + dc.SetPen(wxPen(wxColour(233,233,233))); + dc.SetBrush(wxBrush(wxColour(233,233,233))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(10), 2); + + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(wxBrush(wxColour(0, 150, 136))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(DEVICE_LEFT_PRO_INFO) * (static_cast(obj_->subtask_->task_progress) / 100.0f), FromDIP(10), 2); + } + else { + DrawTextWithEllipsis(dc, obj_->get_curr_stage(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + + } + else { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + + left += FromDIP(DEVICE_LEFT_PRO_INFO); + + //button + dc.SetPen(wxPen(wxColour(38, 46, 48))); + dc.SetBrush(wxBrush(wxColour(*wxWHITE))); + dc.DrawRoundedRectangle(left, (size.y - FromDIP(38)) / 2, FromDIP(90), FromDIP(38), 6); + dc.SetFont(Label::Body_14); + dc.SetTextForeground(*wxBLACK); + dc.DrawText(_L("View"),left + FromDIP(90) / 2 - dc.GetTextExtent(_L("View")).x / 2, (size.y -dc.GetTextExtent(_L("View")).y) / 2); + + } + + if (m_hover) { + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + } +} + +void MultiMachineItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(obj_->dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void MultiMachineItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +wxString MultiMachineItem::get_left_time(int mc_left_time) +{ + // update gcode progress + std::string left_time; + wxString left_time_text = _L("N/A"); + + try { + left_time = get_bbl_monitor_time_dhm(mc_left_time); + } + catch (...) { + ; + } + + if (!left_time.empty()) left_time_text = wxString::Format("-%s", left_time); + return left_time_text; +} + + +MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(wxColour(0xEEEEEE)); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_main_panel->SetBackgroundColour(*wxWHITE); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + //edit prints + auto m_btn_bg_enable = 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) + ); + + + StateColor clean_bg(std::pair(wxColour(255, 255, 255), 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::Enabled), + std::pair(wxColour(255, 255, 255), StateColor::Normal)); + StateColor clean_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + StateColor clean_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + auto sizer_button_printer = new wxBoxSizer(wxHORIZONTAL); + sizer_button_printer->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_button_edit = new Button(m_main_panel, _L("Edit Printers")); + m_button_edit->SetBackgroundColor(clean_bg); + m_button_edit->SetBorderColor(clean_bd); + m_button_edit->SetTextColor(clean_text); + m_button_edit->SetFont(Label::Body_12); + m_button_edit->SetCornerRadius(6); + m_button_edit->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_edit->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + m_button_edit->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { + MultiMachinePickPage dlg; + dlg.ShowModal(); + refresh_user_device(); + evt.Skip(); + }); + + sizer_button_printer->Add( 0, 0, 1, wxEXPAND, 5 ); + sizer_button_printer->Add(m_button_edit, 0, wxALIGN_CENTER, 0); + + m_table_head_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_dev_name_big = !device_dev_name_big; + auto sortcb = [this](ObjState s1, ObjState s2) { + return device_dev_name_big ? s1.state_dev_name > s2.state_dev_name : s1.state_dev_name < s2.state_dev_name; + }; + this->m_sort.set_role(sortcb, SortItem::SR_MACHINE_NAME, device_dev_name_big); + this->refresh_user_device(); + }); + + + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_task_name->SetFont(TABLE_HEAD_FONT); + m_task_name->SetCornerRadius(0); + m_task_name->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetCenter(false); + + + + m_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status->SetBackgroundColor(head_bg); + m_status->SetFont(TABLE_HEAD_FONT); + m_status->SetCornerRadius(0); + m_status->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetCenter(false); + m_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_state_big = !device_state_big; + auto sortcb = [this](ObjState s1, ObjState s2) { + return device_state_big ? s1.state_device > s2.state_device : s1.state_device < s2.state_device; + }; + this->m_sort.set_role(sortcb, SortItem::SortRule::SR_MACHINE_STATE, device_state_big); + this->refresh_user_device(); + }); + + + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_action->SetFont(TABLE_HEAD_FONT); + m_action->SetCornerRadius(0); + m_action->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetCenter(false); + + + m_table_head_sizer->AddSpacer(FromDIP(DEVICE_LEFT_PADDING_LEFT)); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_sizer->Add(m_action, 0, wxLEFT, 0); + + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("Please select the devices you would like to manage here (up to 6 devices)")); + m_tip_text->SetForegroundColour(wxColour(50, 58, 61)); + m_tip_text->SetFont(::Label::Head_20); + m_tip_text->Wrap(-1); + + m_button_add = new Button(m_main_panel, _L("Add")); + m_button_add->SetBackgroundColor(m_btn_bg_enable); + m_button_add->SetBorderColor(m_btn_bg_enable); + m_button_add->SetTextColor(*wxWHITE); + m_button_add->SetFont(Label::Body_12); + m_button_add->SetCornerRadius(6); + m_button_add->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_add->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + m_button_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { + MultiMachinePickPage dlg; + dlg.ShowModal(); + refresh_user_device(); + evt.Skip(); + }); + + m_machine_list = new wxScrolledWindow(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_machine_list->SetBackgroundColour(*wxWHITE); + m_machine_list->SetScrollRate(0, 5); + m_machine_list->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_machine_list->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + m_sizer_machine_list = new wxBoxSizer(wxVERTICAL); + m_machine_list->SetSizer(m_sizer_machine_list); + m_machine_list->Layout(); + + // add flipping page + StateColor ctrl_bg( + std::pair(CTRL_BUTTON_PRESSEN_COLOUR, StateColor::Pressed), + std::pair(CTRL_BUTTON_NORMAL_COLOUR, StateColor::Normal) + ); + + m_flipping_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_flipping_panel->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetBackgroundColour(*wxWHITE); + + m_flipping_page_sizer = new wxBoxSizer(wxHORIZONTAL); + m_page_sizer = new wxBoxSizer(wxVERTICAL); + btn_last_page = new Button(m_flipping_panel, "", "go_last_plate", 0, FromDIP(20)); + btn_last_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetBackgroundColor(head_bg); + btn_last_page->Bind(wxEVT_LEFT_DOWN, [&](wxMouseEvent& evt) { + evt.Skip(); + if (m_current_page == 0) + return; + btn_last_page->Enable(false); + btn_next_page->Enable(false); + start_timer(); + m_current_page--; + if (m_current_page < 0) + m_current_page = 0; + refresh_user_device(); + update_page_number(); + }); + st_page_number = new wxStaticText(m_flipping_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + btn_next_page = new Button(m_flipping_panel, "", "go_next_plate", 0, FromDIP(20)); + btn_next_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetBackgroundColor(head_bg); + btn_next_page->Bind(wxEVT_LEFT_DOWN, [&](wxMouseEvent& evt) { + evt.Skip(); + if (m_current_page == m_total_page - 1) + return; + btn_last_page->Enable(false); + btn_next_page->Enable(false); + start_timer(); + m_current_page++; + if (m_current_page > m_total_page - 1) + m_current_page = m_total_page - 1; + refresh_user_device(); + update_page_number(); + }); + + m_page_num_input = new ::TextInput(m_flipping_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(50), -1), wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + m_page_num_input->SetBackgroundColor(input_bg); + m_page_num_input->GetTextCtrl()->SetValue("1"); + wxTextValidator validator(wxFILTER_DIGITS); + m_page_num_input->GetTextCtrl()->SetValidator(validator); + m_page_num_input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [&](wxCommandEvent& e) { + page_num_enter_evt(); + }); + + m_page_num_enter = new Button(m_flipping_panel, _("Go")); + m_page_num_enter->SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetBackgroundColor(ctrl_bg); + m_page_num_enter->SetCornerRadius(FromDIP(5)); + m_page_num_enter->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + page_num_enter_evt(); + }); + + m_flipping_page_sizer->Add(0, 0, 1, wxEXPAND, 0); + m_flipping_page_sizer->Add(btn_last_page, 0, wxALIGN_CENTER, 0); + m_flipping_page_sizer->Add(st_page_number, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(btn_next_page, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(m_page_num_input, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(20)); + m_flipping_page_sizer->Add(m_page_num_enter, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_page_sizer->Add(m_flipping_page_sizer, 0, wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + m_flipping_panel->SetSizer(m_page_sizer); + m_flipping_panel->Layout(); + + m_main_sizer->AddSpacer(FromDIP(16)); + m_main_sizer->Add(sizer_button_printer, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->AddSpacer(FromDIP(5)); + m_main_sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_button_add, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(16)); + m_main_sizer->Add(m_machine_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_flipping_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_panel->SetSizer(m_main_sizer); + m_main_panel->Layout(); + page_sizer = new wxBoxSizer(wxVERTICAL); + page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); + + SetSizer(page_sizer); + Layout(); + Fit(); + + Bind(wxEVT_TIMER, &MultiMachineManagerPage::on_timer, this); +} + +void MultiMachineManagerPage::update_page() +{ + for (int i = 0; i < m_device_items.size(); i++) { + m_device_items[i]->sync_state(); + m_device_items[i]->Refresh(); + } +} + +void MultiMachineManagerPage::refresh_user_device(bool clear) +{ + m_sizer_machine_list->Clear(true); + m_device_items.clear(); + + if(clear) return; + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = wxGetApp().app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + + m_total_count = user_machine.size(); + + m_state_objs.clear(); + for (auto it = user_machine.begin(); it != user_machine.end(); ++it) { + sync_state(it->second); + } + + //sort + if (m_sort.rule != SortItem::SortRule::SR_None) { + std::sort(m_state_objs.begin(), m_state_objs.end(), m_sort.get_machine_call_back()); + } + + double result = static_cast(user_machine.size()) / m_count_page_item; + m_total_page = std::ceil(result); + + std::vector sort_devices = extractRange(m_state_objs, m_current_page * m_count_page_item, (m_current_page + 1) * m_count_page_item - 1 ); + std::vector subscribe_list; + + for (auto i = 0; i < sort_devices.size(); ++i) { + auto dev_id = sort_devices[i].dev_id; + + auto machine = user_machine[dev_id]; + + MultiMachineItem* di = new MultiMachineItem(m_machine_list, machine); + m_device_items.push_back(di); + m_sizer_machine_list->Add(m_device_items[i], 0, wxALL | wxEXPAND, 0); + + subscribe_list.push_back(dev_id); + } + + dev->subscribe_device_list(subscribe_list); + + m_tip_text->Show(m_device_items.empty()); + m_button_add->Show(m_device_items.empty()); + + update_page_number(); + m_flipping_panel->Show(m_total_page > 1); + m_sizer_machine_list->Layout(); + Layout(); +} + +std::vector MultiMachineManagerPage::extractRange(const std::vector& source, int start, int end) { + std::vector result; + + if (start < 0 || start > end || source.size() <= 0) { + return result; + } + + if ( end >= source.size() ) { + end = source.size(); + } + + auto startIter = source.begin() + start; + auto endIter = source.begin() + end; + result.assign(startIter, endIter); + return result; +} + +void MultiMachineManagerPage::sync_state(MachineObject* obj_) +{ + ObjState state_obj; + + if (obj_) { + state_obj.dev_id = obj_->dev_id; + state_obj.state_dev_name = obj_->dev_name; + + if (obj_->print_status == "IDLE") { + state_obj.state_device = 0; + } + else if (obj_->print_status == "FINISH") { + state_obj.state_device = 1; + } + else if (obj_->print_status == "FAILED") { + state_obj.state_device = 2; + } + else if (obj_->print_status == "RUNNING") { + state_obj.state_device = 3; + } + else if (obj_->print_status == "PAUSE") { + state_obj.state_device = 4; + } + else if (obj_->print_status == "PREPARE") { + state_obj.state_device = 5; + } + else if (obj_->print_status == "SLICING") { + state_obj.state_device = 6; + } + else { + state_obj.state_device = 7; + } + } + m_state_objs.push_back(state_obj); +} + +bool MultiMachineManagerPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxPanel::Show(show); +} + +void MultiMachineManagerPage::start_timer() +{ + if (m_flipping_timer) { + m_flipping_timer->Stop(); + } + else { + m_flipping_timer = new wxTimer(); + } + + m_flipping_timer->SetOwner(this); + m_flipping_timer->Start(1000); + wxPostEvent(this, wxTimerEvent()); +} + +void MultiMachineManagerPage::update_page_number() +{ + double result = static_cast(m_total_count) / m_count_page_item; + m_total_page = std::ceil(result); + + wxString number = wxString(std::to_string(m_current_page + 1)) + " / " + wxString(std::to_string(m_total_page)); + st_page_number->SetLabel(number); +} + +void MultiMachineManagerPage::on_timer(wxTimerEvent& event) +{ + m_flipping_timer->Stop(); + if (btn_last_page) + btn_last_page->Enable(true); + if (btn_next_page) + btn_next_page->Enable(true); +} + +void MultiMachineManagerPage::clear_page() +{ + +} + +void MultiMachineManagerPage::page_num_enter_evt() +{ + btn_last_page->Enable(false); + btn_next_page->Enable(false); + start_timer(); + auto value = m_page_num_input->GetTextCtrl()->GetValue(); + long page_num = 0; + if (value.ToLong(&page_num)) { + if (page_num > m_total_page) + m_current_page = m_total_page - 1; + else if (page_num < 1) + m_current_page = 0; + else + m_current_page = page_num - 1; + } + refresh_user_device(); + update_page_number(); +} + +void MultiMachineManagerPage::msw_rescale() +{ + m_printer_name->Rescale(); + m_printer_name->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->Rescale(); + m_task_name->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->Rescale(); + m_status->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->Rescale(); + m_action->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_button_add->Rescale(); + m_button_add->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_add->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + btn_last_page->Rescale(); + btn_last_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->Rescale(); + btn_next_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + m_page_num_enter->Rescale(); + m_page_num_enter->SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + + m_button_edit->Rescale(); + m_button_edit->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_edit->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + + for (const auto& item : m_device_items) { + item->Refresh(); + } + + Fit(); + Layout(); + Refresh(); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp new file mode 100644 index 0000000000..c1086b4721 --- /dev/null +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -0,0 +1,116 @@ +#ifndef slic3r_MultiMachineMangerPage_hpp_ +#define slic3r_MultiMachineMangerPage_hpp_ + +#include "GUI_Utils.hpp" +#include "MultiMachine.hpp" + +namespace Slic3r { +namespace GUI { + +#define DEVICE_LEFT_PADDING_LEFT 15 +#define DEVICE_LEFT_DEV_NAME 180 +#define DEVICE_LEFT_PRO_NAME 180 +#define DEVICE_LEFT_PRO_INFO 320 + +class MultiMachineItem : public DeviceItem +{ + +public: + MultiMachineItem(wxWindow* parent, MachineObject* obj); + ~MultiMachineItem() {}; + + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void doRender(wxDC& dc); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + +public: + bool m_hover{ false }; + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; + wxString get_left_time(int mc_left_time); +}; + +class MultiMachineManagerPage : public wxPanel +{ +public: + MultiMachineManagerPage(wxWindow* parent); + ~MultiMachineManagerPage() {}; + + void update_page(); + void refresh_user_device(bool clear = false); + + void sync_state(MachineObject* obj_); + bool Show(bool show); + + std::vector extractRange(const std::vector& source, int start, int end); + + void start_timer(); + void update_page_number(); + void on_timer(wxTimerEvent& event); + void clear_page(); + + void page_num_enter_evt(); + + void msw_rescale(); + +private: + std::vector m_state_objs; + std::vector m_device_items; + SortItem m_sort; + bool device_dev_name_big{ true }; + bool device_state_big{ true }; + + + Button* m_button_edit{nullptr}; + wxBoxSizer* page_sizer{ nullptr }; + wxPanel* m_main_panel{ nullptr }; + wxBoxSizer* m_main_sizer{nullptr}; + wxBoxSizer* m_sizer_machine_list{nullptr}; + wxScrolledWindow* m_machine_list{ nullptr }; + wxStaticText* m_selected_num{ nullptr }; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_task_name{ nullptr }; + Button* m_status{ nullptr }; + Button* m_action{ nullptr }; + Button* m_stop_all_botton{nullptr}; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; + Button* m_button_add{ nullptr }; + + // Flipping pages + int m_current_page{ 0 }; + int m_total_page{ 0 }; + int m_total_count{ 0 }; + int m_count_page_item{ 10 }; + + bool prev{ false }; + bool next{ false }; + Button* btn_last_page{ nullptr }; + Button* btn_next_page{ nullptr }; + wxStaticText* st_page_number{ nullptr }; + wxBoxSizer* m_flipping_page_sizer{ nullptr }; + wxBoxSizer* m_page_sizer{ nullptr }; + wxPanel* m_flipping_panel{ nullptr }; + wxTimer* m_flipping_timer{ nullptr }; + TextInput* m_page_num_input{ nullptr }; + Button* m_page_num_enter{ nullptr }; +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp new file mode 100644 index 0000000000..9aed022ba3 --- /dev/null +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -0,0 +1,496 @@ +#include "MultiMachinePage.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" + +namespace Slic3r { +namespace GUI { + + +MultiMachinePage::MultiMachinePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) +{ + init_tabpanel(); + m_main_sizer = new wxBoxSizer(wxHORIZONTAL); + m_main_sizer->Add(m_tabpanel, 1, wxEXPAND | wxLEFT, 0); + SetSizerAndFit(m_main_sizer); + Layout(); + Fit(); + + wxGetApp().UpdateDarkUIWin(this); + + init_timer(); + Bind(wxEVT_TIMER, &MultiMachinePage::on_timer, this); +} + +MultiMachinePage::~MultiMachinePage() +{ + if (m_refresh_timer) + m_refresh_timer->Stop(); + delete m_refresh_timer; +} + +void MultiMachinePage::jump_to_send_page() +{ + m_tabpanel->SetSelection(1); +} + +void MultiMachinePage::on_sys_color_changed() +{ +} + +void MultiMachinePage::msw_rescale() +{ + m_tabpanel->Rescale(); + if (m_local_task_manager) + m_local_task_manager->msw_rescale(); + if (m_cloud_task_manager) + m_cloud_task_manager->msw_rescale(); + if (m_machine_manager) + m_machine_manager->msw_rescale(); + + this->Fit(); + this->Layout(); + this->Refresh(); +} + +bool MultiMachinePage::Show(bool show) +{ + if (show) { + m_refresh_timer->Stop(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(2000); + wxPostEvent(this, wxTimerEvent()); + } + else { + m_refresh_timer->Stop(); + } + + auto page = m_tabpanel->GetCurrentPage(); + if (page) + page->Show(show); + return wxPanel::Show(show); +} + +void MultiMachinePage::init_tabpanel() +{ + auto m_side_tools = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(220), FromDIP(18))); + wxBoxSizer* sizer_side_tools = new wxBoxSizer(wxHORIZONTAL); + 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_tabpanel->SetBackgroundColour(wxColour("#FEFFFF")); + m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) {; }); + + m_local_task_manager = new LocalTaskManagerPage(m_tabpanel); + m_cloud_task_manager = new CloudTaskManagerPage(m_tabpanel); + m_machine_manager = new MultiMachineManagerPage(m_tabpanel); + + m_tabpanel->AddPage(m_machine_manager, _L("Device"), "", true); + m_tabpanel->AddPage(m_local_task_manager, _L("Task Sending"), "", false); + m_tabpanel->AddPage(m_cloud_task_manager, _L("Task Sent"), "", false); +} + +void MultiMachinePage::init_timer() +{ + m_refresh_timer = new wxTimer(); + //m_refresh_timer->SetOwner(this); + //m_refresh_timer->Start(8000); + //wxPostEvent(this, wxTimerEvent()); +} + +void MultiMachinePage::on_timer(wxTimerEvent& event) +{ + m_local_task_manager->update_page(); + m_cloud_task_manager->update_page(); + m_machine_manager->update_page(); +} + +void MultiMachinePage::clear_page() +{ + m_local_task_manager->refresh_user_device(true); + m_cloud_task_manager->refresh_user_device(true); + m_machine_manager->refresh_user_device(true); +} + +DevicePickItem::DevicePickItem(wxWindow* parent, MachineObject* obj) + : DeviceItem(parent, obj) +{ + SetBackgroundColour(*wxWHITE); + m_bitmap_check_disable = ScalableBitmap(this, "check_off_disabled", 18); + m_bitmap_check_off = ScalableBitmap(this, "check_off_focused", 18); + m_bitmap_check_on = ScalableBitmap(this, "check_on", 18); + + + SetMinSize(wxSize(FromDIP(400), FromDIP(30))); + SetMaxSize(wxSize(FromDIP(400), FromDIP(30))); + + Bind(wxEVT_PAINT, &DevicePickItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &DevicePickItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &DevicePickItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &DevicePickItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &DevicePickItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_SELECTED, &DevicePickItem::OnSelectedDevice, this); + wxGetApp().UpdateDarkUIWin(this); +} + +void DevicePickItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top /*= 0*/) +{ + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void DevicePickItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(false); +} + +void DevicePickItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(false); +} + +void DevicePickItem::OnSelectedDevice(wxCommandEvent& evt) +{ + auto dev_id = evt.GetString(); + auto state = evt.GetInt(); + if (state == 0) { + state_selected = 1; + } + else if (state == 1) { + state_selected = 0; + } + Refresh(false); + evt.Skip(); + + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED_FINHSH)); +} + +void DevicePickItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } +} + +void DevicePickItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void DevicePickItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void DevicePickItem::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 DevicePickItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(PICK_LEFT_PADDING_LEFT); + + + //checkbox + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else if (state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + + left += FromDIP(PICK_LEFT_PRINTABLE); + + //dev names + DrawTextWithEllipsis(dc, wxString::FromUTF8(get_obj()->dev_name), FromDIP(PICK_LEFT_DEV_NAME), left); + left += FromDIP(PICK_LEFT_DEV_NAME); +} +void DevicePickItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(obj_->dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void DevicePickItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +MultiMachinePickPage::MultiMachinePickPage(Plater* plater /*= nullptr*/) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, + _L("Edit multiple printers"), + wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + app_config = get_app_config(); + + SetBackgroundColour(*wxWHITE); + // icon + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + auto line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + m_label = new Label(this, _L("Select connected printers (0/6)")); + + scroll_macine_list = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + scroll_macine_list->SetSize(wxSize(FromDIP(400), FromDIP(10 * 30))); + scroll_macine_list->SetMinSize(wxSize(FromDIP(400), FromDIP(10 * 30))); + scroll_macine_list->SetMaxSize(wxSize(FromDIP(400), FromDIP(10 * 30))); + scroll_macine_list->SetBackgroundColour(*wxWHITE); + scroll_macine_list->SetScrollRate(0, 5); + + sizer_machine_list = new wxBoxSizer(wxVERTICAL); + scroll_macine_list->SetSizer(sizer_machine_list); + scroll_macine_list->Layout(); + + main_sizer->Add(line_top, 0, wxEXPAND, 0); + main_sizer->AddSpacer(FromDIP(10)); + main_sizer->Add(m_label, 0, wxLEFT, FromDIP(20)); + main_sizer->Add(scroll_macine_list, 0, wxLEFT|wxRIGHT, FromDIP(20)); + main_sizer->AddSpacer(FromDIP(10)); + + SetSizer(main_sizer); + Layout(); + Fit(); + Centre(wxBOTH); + + wxGetApp().UpdateDlgDarkUI(this); +} + +MultiMachinePickPage::~MultiMachinePickPage() +{ + +} + +int MultiMachinePickPage::get_selected_count() +{ + int count = 0; + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + if (it->second->state_selected == 1) { + count++; + } + } + return count; +} + +void MultiMachinePickPage::update_selected_count() +{ + std::vector selected_multi_devices; + + int count = 0; + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + if (it->second->state_selected == 1 ) { + selected_multi_devices.push_back(it->second->obj_->dev_id); + count++; + } + } + + m_selected_count = count; + m_label->SetLabel(wxString::Format(_L("Select Connected Printers (%d/6)"), m_selected_count)); + + if (m_selected_count > PICK_DEVICE_MAX) { + MessageDialog msg_wingow(nullptr, wxString::Format(_L("The maximum number of printers that can be selected is %d"), PICK_DEVICE_MAX), "", wxAPPLY | wxOK); + if (msg_wingow.ShowModal() == wxOK) { + return; + } + } + + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + app_config->erase("multi_devices",std::to_string(i)); + } + + for (int j = 0; j < selected_multi_devices.size(); j++) { + app_config->set_str("multi_devices", std::to_string(j), selected_multi_devices[j]); + } + app_config->save(); +} + +void MultiMachinePickPage::on_dpi_changed(const wxRect& suggested_rect) +{ + +} + +void MultiMachinePickPage::on_sys_color_changed() +{ + +} + +void MultiMachinePickPage::refresh_user_device() +{ + std::vector selected_multi_devices; + + for(int i = 0; i < PICK_DEVICE_MAX; i++){ + auto dev_id = app_config->get("multi_devices", std::to_string(i)); + selected_multi_devices.push_back(dev_id); + } + + sizer_machine_list->Clear(false); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + return; + } + + auto user_machine = dev->get_my_cloud_machine_list(); + auto task_manager = wxGetApp().getTaskManager(); + + std::vector subscribe_list; + + for (auto it = user_machine.begin(); it != user_machine.end(); ++it) { + DevicePickItem* di = new DevicePickItem(scroll_macine_list, it->second); + + di->Bind(EVT_MULTI_DEVICE_SELECTED_FINHSH, [this, di](auto& e) { + int count = get_selected_count(); + if (count > PICK_DEVICE_MAX) { + di->unselected(); + return; + } + update_selected_count(); + }); + + /* if (m_device_items.find(it->first) != m_device_items.end()) { + auto item = m_device_items[it->first]; + if (item->state_selected == 1 && di->state_printable <= 2) + di->state_selected = item->state_selected; + item->Destroy(); + }*/ + m_device_items[it->first] = di; + + //update state + if (task_manager) { + m_device_items[it->first]->state_local_task = task_manager->query_task_state(it->first); + } + + //update selected + auto dev_it = std::find(selected_multi_devices.begin(), selected_multi_devices.end(), it->second->dev_id ); + if (dev_it != selected_multi_devices.end()) { + di->state_selected = 1; + } + + sizer_machine_list->Add(di, 0, wxALL | wxEXPAND, 0); + subscribe_list.push_back(it->first); + } + + dev->subscribe_device_list(subscribe_list); + + sizer_machine_list->Layout(); + Layout(); + Fit(); +} + +void MultiMachinePickPage::on_confirm(wxCommandEvent& event) +{ + +} + +bool MultiMachinePickPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + update_selected_count(); + //m_refresh_timer->Stop(); + //m_refresh_timer->SetOwner(this); + //m_refresh_timer->Start(4000); + //wxPostEvent(this, wxTimerEvent()); + } + else { + //m_refresh_timer->Stop(); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxDialog::Show(show); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachinePage.hpp b/src/slic3r/GUI/MultiMachinePage.hpp new file mode 100644 index 0000000000..0572c30d1b --- /dev/null +++ b/src/slic3r/GUI/MultiMachinePage.hpp @@ -0,0 +1,104 @@ +#ifndef slic3r_MultiMachinePage_hpp_ +#define slic3r_MultiMachinePage_hpp_ + +#include "libslic3r/libslic3r.h" +#include "GUI_App.hpp" +#include "GUI_Utils.hpp" +#include "MultiTaskManagerPage.hpp" +#include "MultiMachineManagerPage.hpp" +#include "Tabbook.hpp" + +#include "wx/button.h" + +namespace Slic3r { +namespace GUI { + +#define PICK_LEFT_PADDING_LEFT 15 +#define PICK_LEFT_PRINTABLE 40 +#define PICK_LEFT_DEV_NAME 250 +#define PICK_LEFT_DEV_STATUS 250 +#define PICK_DEVICE_MAX 6 + +class MultiMachinePage : public wxPanel +{ +private: + wxTimer* m_refresh_timer = nullptr; + wxSizer* m_main_sizer{ nullptr }; + LocalTaskManagerPage* m_local_task_manager{ nullptr }; + CloudTaskManagerPage* m_cloud_task_manager{ nullptr }; + MultiMachineManagerPage* m_machine_manager{ nullptr }; + Tabbook* m_tabpanel{ nullptr }; + +public: + MultiMachinePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~MultiMachinePage(); + + void jump_to_send_page(); + + void on_sys_color_changed(); + void msw_rescale(); + bool Show(bool show); + + void init_tabpanel(); + void init_timer(); + void on_timer(wxTimerEvent& event); + + void clear_page(); +}; + + +class DevicePickItem : public DeviceItem +{ + +public: + DevicePickItem(wxWindow* parent, MachineObject* obj); + ~DevicePickItem() {}; + + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnSelectedDevice(wxCommandEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + +public: + bool m_hover{ false }; + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; +}; + + +class MultiMachinePickPage : public DPIDialog +{ +private: + AppConfig* app_config; + Label* m_label{ nullptr }; + wxScrolledWindow* scroll_macine_list{ nullptr }; + wxBoxSizer* m_sizer_body{ nullptr }; + wxBoxSizer* sizer_machine_list{ nullptr }; + std::map m_device_items; + int m_selected_count{0}; +public: + MultiMachinePickPage(Plater* plater = nullptr); + ~MultiMachinePickPage(); + + int get_selected_count(); + void update_selected_count(); + void on_dpi_changed(const wxRect& suggested_rect); + void on_sys_color_changed(); + void refresh_user_device(); + void on_confirm(wxCommandEvent& event); + bool Show(bool show); +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiPrintJob.cpp b/src/slic3r/GUI/MultiPrintJob.cpp new file mode 100644 index 0000000000..6da49ebc6d --- /dev/null +++ b/src/slic3r/GUI/MultiPrintJob.cpp @@ -0,0 +1,7 @@ +#include "MultiPrintJob.hpp" + +namespace Slic3r { +namespace GUI { + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiPrintJob.hpp b/src/slic3r/GUI/MultiPrintJob.hpp new file mode 100644 index 0000000000..233b464a4d --- /dev/null +++ b/src/slic3r/GUI/MultiPrintJob.hpp @@ -0,0 +1,10 @@ +#ifndef slic3r_MultiPrintJob_hpp_ +#define slic3r_MultiPrintJob_hpp_ + +namespace Slic3r { +namespace GUI { + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiSendMachineModel.cpp b/src/slic3r/GUI/MultiSendMachineModel.cpp new file mode 100644 index 0000000000..101a3f1781 --- /dev/null +++ b/src/slic3r/GUI/MultiSendMachineModel.cpp @@ -0,0 +1,33 @@ +#include "MultiSendMachineModel.hpp" + +namespace Slic3r { +namespace GUI { + +MultiSendMachineModel::MultiSendMachineModel() +{ + ; +} + +MultiSendMachineModel::~MultiSendMachineModel() +{ + ; +} + +void MultiSendMachineModel::Init() +{ + ; +} + +wxDataViewItem MultiSendMachineModel::AddMachine(MachineObject* obj) +{ + wxString name = from_u8(obj->dev_name); + + wxDataViewItem new_item; + + // TODO + return new_item; +} + + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiSendMachineModel.hpp b/src/slic3r/GUI/MultiSendMachineModel.hpp new file mode 100644 index 0000000000..60318163c6 --- /dev/null +++ b/src/slic3r/GUI/MultiSendMachineModel.hpp @@ -0,0 +1,25 @@ +#ifndef slic3r_MultiSendMachineModel_hpp_ +#define slic3r_MultiSendMachineModel_hpp_ + +#include "DeviceManager.hpp" + +namespace Slic3r { +namespace GUI { + +class MultiSendMachineModel : public wxDataViewModel +{ +public: + MultiSendMachineModel(); + ~MultiSendMachineModel(); + + void Init(); + + wxDataViewItem AddMachine(MachineObject* obj); + +private: +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp new file mode 100644 index 0000000000..f2d159a7de --- /dev/null +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -0,0 +1,1518 @@ +#include "MultiTaskManagerPage.hpp" +#include "I18N.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "Widgets/RadioBox.hpp" +#include +#include + +namespace Slic3r { +namespace GUI { + +MultiTaskItem::MultiTaskItem(wxWindow* parent, MachineObject* obj, int type) + : DeviceItem(parent, obj), + m_task_type(type) +{ + SetBackgroundColour(*wxWHITE); + SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + Bind(wxEVT_PAINT, &MultiTaskItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &MultiTaskItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &MultiTaskItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &MultiTaskItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &MultiTaskItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_SELECTED, &MultiTaskItem::OnSelectedDevice, this); + + m_bitmap_check_disable = ScalableBitmap(this, "check_off_disabled", 18); + m_bitmap_check_off = ScalableBitmap(this, "check_off_focused", 18); + m_bitmap_check_on = ScalableBitmap(this, "check_on", 18); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* item_sizer = new wxBoxSizer(wxHORIZONTAL); + + + auto m_btn_bg_enable = 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_button_resume = new Button(this, _L("Resume")); + m_button_resume->SetBackgroundColor(m_btn_bg_enable); + m_button_resume->SetBorderColor(m_btn_bg_enable); + m_button_resume->SetFont(Label::Body_12); + m_button_resume->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); + m_button_resume->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + m_button_resume->SetCornerRadius(6); + + + StateColor clean_bg(std::pair(wxColour(255, 255, 255), 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::Enabled), + std::pair(wxColour(255, 255, 255), StateColor::Normal)); + StateColor clean_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + StateColor clean_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + m_button_cancel = new Button(this, _L("Cancel")); + m_button_cancel->SetBackgroundColor(clean_bg); + m_button_cancel->SetBorderColor(clean_bd); + m_button_cancel->SetTextColor(clean_text); + m_button_cancel->SetFont(Label::Body_12); + m_button_cancel->SetCornerRadius(6); + m_button_cancel->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + + m_button_pause = new Button(this, _L("Pause")); + m_button_pause->SetBackgroundColor(clean_bg); + m_button_pause->SetBorderColor(clean_bd); + m_button_pause->SetTextColor(clean_text); + m_button_pause->SetFont(Label::Body_12); + m_button_pause->SetCornerRadius(6); + m_button_pause->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + + m_button_stop = new Button(this, _L("Stop")); + m_button_stop->SetBackgroundColor(clean_bg); + m_button_stop->SetBorderColor(clean_bd); + m_button_stop->SetTextColor(clean_text); + m_button_stop->SetFont(Label::Body_12); + m_button_stop->SetCornerRadius(6); + m_button_stop->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + + + item_sizer->Add(0, 0, 1, wxEXPAND, 0); + item_sizer->Add(m_button_cancel, 0, wxALIGN_CENTER, 0); + item_sizer->Add(m_button_resume, 0, wxALIGN_CENTER, 0); + item_sizer->Add(m_button_pause, 0, wxALIGN_CENTER, 0); + item_sizer->Add(m_button_stop, 0, wxALIGN_CENTER, 0); + + m_button_cancel->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + m_button_stop->Hide(); + + main_sizer->Add(item_sizer, 1, wxEXPAND, 0); + SetSizer(main_sizer); + Layout(); + + m_button_cancel->Bind(wxEVT_BUTTON, [this](auto& e) { + onCancel(); + }); + + m_button_pause->Bind(wxEVT_BUTTON, [this](auto& e) { + onPause(); + }); + + m_button_resume->Bind(wxEVT_BUTTON, [this](auto& e) { + onResume(); + }); + + m_button_stop->Bind(wxEVT_BUTTON, [this](auto& e) { + onStop(); + }); + + wxGetApp().UpdateDarkUIWin(this); +} + +void MultiTaskItem::update_info() +{ + //local + if (m_task_type == 0) { + m_button_stop->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + if (state_local_task == 0 || state_local_task == 1) { + m_button_cancel->Show(); + Layout(); + } + else { + m_button_cancel->Hide(); + Layout(); + } + } + //cloud + else if (m_task_type == 1 && get_obj() && (m_job_id == get_obj()->profile_id_)) { + m_button_cancel->Hide(); + + if (obj_ && obj_->is_in_printing() && state_cloud_task == 0 ) { + if (obj_->can_abort()) { + m_button_stop->Show(); + } + else { + m_button_stop->Hide(); + } + + if (obj_->can_pause()) { + m_button_pause->Show(); + } + else { + m_button_pause->Hide(); + } + + if (obj_->can_resume()) { + m_button_resume->Show(); + } + else { + m_button_resume->Hide(); + } + + Layout(); + } + else { + m_button_stop->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + Layout(); + } + } + else { + m_button_cancel->Hide(); + m_button_stop->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + Layout(); + } +} + +void MultiTaskItem::onPause() +{ + if (get_obj() && !get_obj()->can_resume()) { + BOOST_LOG_TRIVIAL(info) << "MultiTask: pause current print task dev_id =" << get_obj()->dev_id; + get_obj()->command_task_pause(); + m_button_pause->Hide(); + m_button_resume->Show(); + Layout(); + } +} + +void MultiTaskItem::onResume() +{ + if (get_obj() && get_obj()->can_resume()) { + BOOST_LOG_TRIVIAL(info) << "MultiTask: resume current print task dev_id =" << get_obj()->dev_id; + get_obj()->command_task_resume(); + m_button_pause->Show(); + m_button_resume->Hide(); + Layout(); + } +} + +void MultiTaskItem::onStop() +{ + if (get_obj()) { + BOOST_LOG_TRIVIAL(info) << "MultiTask: abort current print task dev_id =" << get_obj()->dev_id; + get_obj()->command_task_abort(); + m_button_pause->Hide(); + m_button_resume->Hide(); + m_button_stop->Hide(); + state_cloud_task = 2; + Layout(); + Refresh(); + } +} + + +void MultiTaskItem::onCancel() +{ + if (task_obj) { + task_obj->cancel(); + if (!task_obj->get_job_id().empty()) { + get_obj()->command_task_cancel(task_obj->get_job_id()); + } + } +} + +void MultiTaskItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(); +} + +void MultiTaskItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(); +} + +void MultiTaskItem::OnSelectedDevice(wxCommandEvent& evt) +{ + auto dev_id = evt.GetString(); + auto state = evt.GetInt(); + if (state == 0) { + state_selected = 1; + } + else if (state == 1) { + state_selected = 0; + } + Refresh(); +} + +void MultiTaskItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + + if (m_task_type == 0 && state_local_task <= 1) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } + else if (m_task_type == 1 && state_cloud_task == 0) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } + } +} + +void MultiTaskItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void MultiTaskItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void MultiTaskItem::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 MultiTaskItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(TASK_LEFT_PADDING_LEFT); + + + //checkbox + if (m_task_type == 0) { + if (state_local_task >= 2) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else { + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else if (state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + } + } + else if(m_task_type == 1){ + if (state_cloud_task != 0) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else { + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else if (state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + } + } + + + left += FromDIP(TASK_LEFT_PRINTABLE); + + //project name + DrawTextWithEllipsis(dc, m_project_name, FromDIP(TASK_LEFT_PRO_NAME), left); + left += FromDIP(TASK_LEFT_PRO_NAME); + + //dev name + DrawTextWithEllipsis(dc, m_dev_name, FromDIP(TASK_LEFT_DEV_NAME), left); + left += FromDIP(TASK_LEFT_DEV_NAME); + + //local task state + if (m_task_type == 0) { + DrawTextWithEllipsis(dc, get_local_state_task(), FromDIP(TASK_LEFT_PRO_STATE), left); + } + else { + DrawTextWithEllipsis(dc, get_cloud_state_task(), FromDIP(TASK_LEFT_PRO_STATE), left); + } + + left += FromDIP(TASK_LEFT_PRO_STATE); + + //cloud task info + if (m_task_type == 1) { + if (get_obj()) { + if (state_cloud_task == 0 && m_job_id == get_obj()->profile_id_) { + dc.SetFont(Label::Body_13); + if (state_device == 0) { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 1) { + dc.SetTextForeground(wxColour(0, 150, 136)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 2) + { + dc.SetTextForeground(wxColour(208, 27, 27)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device > 2 && state_device < 7) { + dc.SetFont(Label::Body_12); + dc.SetTextForeground(wxColour(0, 150, 136)); + if (obj_->get_curr_stage().IsEmpty()) { + //wxString layer_info = wxString::Format(_L("Layer: %d/%d"), obj_->curr_layer, obj_->total_layers); + wxString progress_info = wxString::Format("%d", obj_->subtask_->task_progress); + wxString left_time = wxString::Format("%s", get_left_time(obj_->mc_left_time)); + + DrawTextWithEllipsis(dc, progress_info + "% | " + left_time, FromDIP(TASK_LEFT_PRO_INFO), left, FromDIP(10)); + + dc.SetPen(wxPen(wxColour(233, 233, 233))); + dc.SetBrush(wxBrush(wxColour(233, 233, 233))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO), FromDIP(10), 2); + + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(wxBrush(wxColour(0, 150, 136))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO) * (static_cast(obj_->subtask_->task_progress) / 100.0f), FromDIP(10), 2); + } + else { + DrawTextWithEllipsis(dc, obj_->get_curr_stage(), FromDIP(TASK_LEFT_PRO_INFO), left); + } + } + else { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(TASK_LEFT_PRO_INFO), left); + } + } + } + } + else { + if (state_local_task == 1) { + wxString progress_info = wxString::Format("%d", m_sending_percent); + DrawTextWithEllipsis(dc, progress_info + "% " , FromDIP(TASK_LEFT_PRO_INFO), left, FromDIP(10)); + + dc.SetPen(wxPen(wxColour(233, 233, 233))); + dc.SetBrush(wxBrush(wxColour(233, 233, 233))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO), FromDIP(10), 2); + + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(wxBrush(wxColour(0, 150, 136))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO) * (static_cast(m_sending_percent) / 100.0f), FromDIP(10), 2); + } + /*else { + if () { + + } + if (m_button_cancel->IsShown()) { + m_button_cancel->Hide(); + Layout(); + } + }*/ + } + left += FromDIP(TASK_LEFT_PRO_INFO); + + //send time + dc.SetFont(Label::Body_13); + dc.SetTextForeground(*wxBLACK); + + if (!boost::algorithm::contains(m_send_time, "1970")) { + DrawTextWithEllipsis(dc, m_send_time, FromDIP(TASK_LEFT_SEND_TIME), left); + } + + left += FromDIP(TASK_LEFT_SEND_TIME); + + if (m_hover) { + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + } +} + +void MultiTaskItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top) { + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void MultiTaskItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(m_dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void MultiTaskItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +wxString MultiTaskItem::get_left_time(int mc_left_time) +{ + // update gcode progress + std::string left_time; + wxString left_time_text = _L("N/A"); + + try { + left_time = get_bbl_monitor_time_dhm(mc_left_time); + } + catch (...) { + ; + } + + if (!left_time.empty()) left_time_text = wxString::Format("-%s", left_time); + return left_time_text; +} + + +LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(wxColour(0xEEEEEE)); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_main_panel->SetBackgroundColour(*wxWHITE); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + m_table_head_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_select_checkbox = new CheckBox(m_table_head_panel, wxID_ANY); + m_select_checkbox->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_select_checkbox->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_table_head_sizer->Add(m_select_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_select_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_select_checkbox->GetValue()) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + + if (it->second->state_local_task <= 1) { + it->second->selected(); + } + } + } + else { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->unselected(); + } + } + Refresh(false); + e.Skip(); + }); + + + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_task_name->SetFont(TABLE_HEAD_FONT); + m_task_name->SetCornerRadius(0); + m_task_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetCenter(false); + m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_name_big = !device_name_big; + this->m_sort.set_role(SortItem::SortRule::SR_DEV_NAME, device_name_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status->SetBackgroundColor(head_bg); + m_status->SetFont(TABLE_HEAD_FONT); + m_status->SetCornerRadius(0); + m_status->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetCenter(false); + m_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_state_big = !device_state_big; + this->m_sort.set_role(SortItem::SortRule::SR_LOCAL_TASK_STATE, device_state_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); + m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_info->SetFont(TABLE_HEAD_FONT); + m_info->SetCornerRadius(0); + m_info->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetCenter(false); + m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_send_time->SetBackgroundColor(head_bg); + m_send_time->SetFont(TABLE_HEAD_FONT); + m_send_time->SetCornerRadius(0); + m_send_time->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetCenter(false); + m_send_time->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_send_time->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_send_time->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_send_time = !device_send_time; + this->m_sort.set_role(SortItem::SortRule::SR_SEND_TIME, device_send_time); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_action->SetFont(TABLE_HEAD_FONT); + m_action->SetCornerRadius(0); + /* m_action->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT)));*/ + m_action->SetCenter(false); + m_table_head_sizer->Add(m_action, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("There are no tasks to be sent!")); + m_tip_text->SetForegroundColour(wxColour(50, 58, 61)); + m_tip_text->SetFont(::Label::Head_24); + m_tip_text->Wrap(-1); + + m_task_list = new wxScrolledWindow(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_task_list->SetBackgroundColour(*wxWHITE); + m_task_list->SetScrollRate(0, 5); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + m_sizer_task_list = new wxBoxSizer(wxVERTICAL); + m_task_list->SetSizer(m_sizer_task_list); + m_task_list->Layout(); + + m_main_sizer->AddSpacer(FromDIP(50)); + m_main_sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_task_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->AddSpacer(FromDIP(5)); + + // ctrl panel + StateColor ctrl_bg( + std::pair(CTRL_BUTTON_PRESSEN_COLOUR, StateColor::Pressed), + std::pair(CTRL_BUTTON_NORMAL_COLOUR, StateColor::Normal) + ); + + m_ctrl_btn_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_ctrl_btn_panel->SetBackgroundColour(*wxWHITE); + m_ctrl_btn_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_ctrl_btn_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_btn_sizer = new wxBoxSizer(wxHORIZONTAL); + btn_stop_all = new Button(m_ctrl_btn_panel, _L("Stop")); + btn_stop_all->SetBackgroundColor(ctrl_bg); + btn_stop_all->SetCornerRadius(FromDIP(5)); + m_sel_text = new wxStaticText(m_ctrl_btn_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + + m_btn_sizer->Add(m_sel_text, 0, wxLEFT, FromDIP(15));; + m_btn_sizer->Add(btn_stop_all, 0, wxLEFT, FromDIP(10)); + m_ctrl_btn_panel->SetSizer(m_btn_sizer); + m_ctrl_btn_panel->Layout(); + + m_main_sizer->AddSpacer(FromDIP(10)); + m_main_sizer->Add(m_ctrl_btn_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + btn_stop_all->Bind(wxEVT_BUTTON, &LocalTaskManagerPage::cancel_all, this); + m_main_panel->SetSizer(m_main_sizer); + m_main_panel->Layout(); + + page_sizer = new wxBoxSizer(wxVERTICAL); + page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); + + wxGetApp().UpdateDarkUIWin(this); + + SetSizer(page_sizer); + Layout(); + Fit(); +} + +void LocalTaskManagerPage::update_page() +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->update_info(); + } +} + +void LocalTaskManagerPage::refresh_user_device(bool clear) +{ + m_sizer_task_list->Clear(false); + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + m_ctrl_btn_panel->Show(false); + return; + } + + if(clear)return; + + std::vector subscribe_list; + std::vector task_temps; + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = wxGetApp().app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + auto task_manager = wxGetApp().getTaskManager(); + if (task_manager) { + auto m_task_obj_list = task_manager->get_local_task_list(); + + for (auto it = m_task_obj_list.rbegin(); it != m_task_obj_list.rend(); ++it) { + + TaskStateInfo* task_state_info = it->second; + + if(!task_state_info) continue; + + MultiTaskItem* mtitem = new MultiTaskItem(m_task_list, nullptr, 0); + mtitem->task_obj = task_state_info; + mtitem->m_project_name = wxString::FromUTF8(task_state_info->get_task_name()); + mtitem->m_dev_name = wxString::FromUTF8(task_state_info->get_device_name()); + mtitem->m_dev_id = task_state_info->params().dev_id; + mtitem->m_send_time = task_state_info->get_sent_time(); + mtitem->state_local_task = task_state_info->state(); + + task_state_info->set_state_changed_fn([this, mtitem](TaskState state, int percent) { + mtitem->state_local_task = state; + if (state == TaskState::TS_SEND_COMPLETED) { + + mtitem->m_send_time = mtitem->task_obj->get_sent_time(); + wxCommandEvent event(EVT_MULTI_REFRESH); + event.SetEventObject(mtitem); + wxPostEvent(mtitem, event); + } + mtitem->m_sending_percent = percent; + }); + + if (m_task_items.find(it->first) != m_task_items.end()) { + MultiTaskItem* item = m_task_items[it->first]; + if (item->state_selected == 1 && mtitem->state_local_task < 2) + mtitem->state_selected = item->state_selected; + item->Destroy(); + } + + m_task_items[it->first] = mtitem; + task_temps.push_back(mtitem); + } + + if (m_sort.rule != SortItem::SortRule::SR_None && m_sort.rule != SortItem::SortRule::SR_SEND_TIME) { + std::sort(task_temps.begin(), task_temps.end(), m_sort.get_call_back()); + } + + for (const auto& item : task_temps) + m_sizer_task_list->Add(item, 0, wxALL | wxEXPAND, 0); + + // maintenance + auto it = m_task_items.begin(); + while (it != m_task_items.end()) { + if (m_task_obj_list.find(it->first) != m_task_obj_list.end()) + ++it; + else { + it->second->Destroy(); + it = m_task_items.erase(it); + } + } + + dev->subscribe_device_list(subscribe_list); + int num = m_task_items.size() > 10 ? 10 : m_task_items.size(); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), num * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->Layout(); + } + m_tip_text->Show(m_task_items.empty()); + m_ctrl_btn_panel->Show(!m_task_items.empty()); + Layout(); +} + +bool LocalTaskManagerPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxPanel::Show(show); +} + +void LocalTaskManagerPage::cancel_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_cancel->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_local_task < 2) { + it->second->onCancel(); + } + } +} + +void LocalTaskManagerPage::msw_rescale() +{ + m_select_checkbox->Rescale(); + m_select_checkbox->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_select_checkbox->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->Rescale(); + m_task_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->Rescale(); + m_printer_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->Rescale(); + m_status->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->Rescale(); + m_info->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->Rescale(); + m_send_time->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->Rescale(); + m_action->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + btn_stop_all->Rescale(); + + for (auto it = m_task_items.begin(); it != m_task_items.end(); ++it) { + it->second->Refresh(); + } + + Fit(); + Layout(); + Refresh(); +} + +CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(wxColour(0xEEEEEE)); + m_sort.set_role(SortItem::SR_SEND_TIME, true); + + SetBackgroundColour(wxColour(0xEEEEEE)); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_main_panel->SetBackgroundColour(*wxWHITE); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + StateColor ctrl_bg( + std::pair(CTRL_BUTTON_PRESSEN_COLOUR, StateColor::Pressed), + std::pair(CTRL_BUTTON_NORMAL_COLOUR, StateColor::Normal) + ); + + m_table_head_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_select_checkbox = new CheckBox(m_table_head_panel, wxID_ANY); + m_select_checkbox->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_select_checkbox->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + //m_table_head_sizer->AddSpacer(FromDIP(TASK_LEFT_PADDING_LEFT)); + m_table_head_sizer->Add(m_select_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_select_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_select_checkbox->GetValue()) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + + if (it->second->state_cloud_task == 0) { + it->second->selected(); + } + } + } + else { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->unselected(); + } + } + Refresh(false); + e.Skip(); + }); + + + + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_task_name->SetFont(TABLE_HEAD_FONT); + m_task_name->SetCornerRadius(0); + m_task_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetCenter(false); + m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_name_big = !device_name_big; + this->m_sort.set_role(SortItem::SortRule::SR_DEV_NAME, device_name_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status->SetBackgroundColor(head_bg); + m_status->SetFont(TABLE_HEAD_FONT); + m_status->SetCornerRadius(0); + m_status->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetCenter(false); + m_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_state_big = !device_state_big; + this->m_sort.set_role(SortItem::SortRule::SR_CLOUD_TASK_STATE, device_state_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); + m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_info->SetFont(TABLE_HEAD_FONT); + m_info->SetCornerRadius(0); + m_info->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetCenter(false); + m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_send_time->SetBackgroundColor(head_bg); + m_send_time->SetFont(TABLE_HEAD_FONT); + m_send_time->SetCornerRadius(0); + m_send_time->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetCenter(false); + m_send_time->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_send_time->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_send_time->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_send_time = !device_send_time; + this->m_sort.set_role(SortItem::SortRule::SR_SEND_TIME, device_send_time); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_action->SetFont(TABLE_HEAD_FONT); + m_action->SetCornerRadius(0); + m_action->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetCenter(false); + m_table_head_sizer->Add(m_action, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("No historical tasks!")); + m_tip_text->SetForegroundColour(wxColour(50, 58, 61)); + m_tip_text->SetFont(::Label::Head_24); + m_tip_text->Wrap(-1); + + m_loading_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_loading_text->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_loading_text->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_loading_text->SetLabel(_L("Loading...")); + m_loading_text->SetForegroundColour(wxColour(50, 58, 61)); + m_loading_text->SetFont(::Label::Head_24); + m_loading_text->Wrap(-1); + m_loading_text->Show(false); + + m_task_list = new wxScrolledWindow(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_task_list->SetBackgroundColour(*wxWHITE); + m_task_list->SetScrollRate(0, 5); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + m_sizer_task_list = new wxBoxSizer(wxVERTICAL); + m_task_list->SetSizer(m_sizer_task_list); + m_task_list->Layout(); + m_task_list->Fit(); + + m_main_sizer->AddSpacer(FromDIP(50)); + m_main_sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_loading_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_task_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->AddSpacer(FromDIP(5)); + + // add flipping page + m_flipping_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_flipping_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetBackgroundColour(*wxWHITE); + + m_flipping_page_sizer = new wxBoxSizer(wxHORIZONTAL); + m_page_sizer = new wxBoxSizer(wxVERTICAL); + btn_last_page = new Button(m_flipping_panel, "", "go_last_plate", wxBORDER_NONE, FromDIP(20)); + btn_last_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetBackgroundColor(head_bg); + btn_last_page->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + evt.Skip(); + if (m_current_page == 0) + return; + enable_buttons(false); + start_timer(); + m_current_page--; + if (m_current_page < 0) + m_current_page = 0; + refresh_user_device(); + update_page_number(); + /*m_sizer_task_list->Clear(false); + m_loading_text->Show(true); + Layout();*/ + }); + st_page_number = new wxStaticText(m_flipping_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + btn_next_page = new Button(m_flipping_panel, "", "go_next_plate", wxBORDER_NONE, FromDIP(20)); + btn_next_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetBackgroundColor(head_bg); + btn_next_page->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + evt.Skip(); + if (m_current_page == m_total_page - 1) + return; + enable_buttons(false); + start_timer(); + m_current_page++; + if (m_current_page > m_total_page - 1) + m_current_page = m_total_page - 1; + refresh_user_device(); + update_page_number(); + /*m_sizer_task_list->Clear(false); + m_loading_text->Show(true); + Layout();*/ + }); + + m_page_num_input = new ::TextInput(m_flipping_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(50), -1), wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + m_page_num_input->SetBackgroundColor(input_bg); + m_page_num_input->GetTextCtrl()->SetValue("1"); + wxTextValidator validator(wxFILTER_DIGITS); + m_page_num_input->GetTextCtrl()->SetValidator(validator); + m_page_num_input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [&](wxCommandEvent& e) { + page_num_enter_evt(); + }); + + m_page_num_enter = new Button(m_flipping_panel, _("Go")); + m_page_num_enter->SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetBackgroundColor(ctrl_bg); + m_page_num_enter->SetCornerRadius(FromDIP(5)); + m_page_num_enter->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + page_num_enter_evt(); + }); + + m_flipping_page_sizer->Add(0, 0, 1, wxEXPAND, 0); + m_flipping_page_sizer->Add(btn_last_page, 0, wxALIGN_CENTER, 0); + m_flipping_page_sizer->Add(st_page_number, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(btn_next_page, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(m_page_num_input, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(20)); + m_flipping_page_sizer->Add(m_page_num_enter, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(0, 0, 1, wxEXPAND, 0); + m_page_sizer->Add(m_flipping_page_sizer, 0, wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + m_flipping_panel->SetSizer(m_page_sizer); + m_flipping_panel->Layout(); + m_main_sizer->Add(m_flipping_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + m_ctrl_btn_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_ctrl_btn_panel->SetBackgroundColour(*wxWHITE); + m_ctrl_btn_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_ctrl_btn_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_btn_sizer = new wxBoxSizer(wxHORIZONTAL); + btn_pause_all = new Button(m_ctrl_btn_panel, _L("Pause")); + btn_pause_all->SetBackgroundColor(ctrl_bg); + btn_pause_all->SetCornerRadius(FromDIP(5)); + btn_continue_all = new Button(m_ctrl_btn_panel, _L("Resume")); + btn_continue_all->SetBackgroundColor(ctrl_bg); + btn_continue_all->SetCornerRadius(FromDIP(5)); + btn_stop_all = new Button(m_ctrl_btn_panel, _L("Stop")); + btn_stop_all->SetBackgroundColor(ctrl_bg); + btn_stop_all->SetCornerRadius(FromDIP(5)); + m_sel_text = new wxStaticText(m_ctrl_btn_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + + btn_pause_all->Bind(wxEVT_BUTTON, &CloudTaskManagerPage::pause_all, this); + btn_continue_all->Bind(wxEVT_BUTTON, &CloudTaskManagerPage::resume_all, this); + btn_stop_all->Bind(wxEVT_BUTTON, &CloudTaskManagerPage::stop_all, this); + + m_btn_sizer->Add(m_sel_text, 0, wxLEFT, FromDIP(15)); + m_btn_sizer->Add(btn_pause_all, 0, wxLEFT, FromDIP(10)); + m_btn_sizer->Add(btn_continue_all, 0, wxLEFT, FromDIP(10)); + m_btn_sizer->Add(btn_stop_all, 0, wxLEFT, FromDIP(10)); + m_ctrl_btn_panel->SetSizer(m_btn_sizer); + m_ctrl_btn_panel->Layout(); + + m_main_sizer->AddSpacer(FromDIP(10)); + m_main_sizer->Add(m_ctrl_btn_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_panel->SetSizer(m_main_sizer); + m_main_panel->Layout(); + + page_sizer = new wxBoxSizer(wxVERTICAL); + page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); + Bind(wxEVT_TIMER, &CloudTaskManagerPage::on_timer, this); + + wxGetApp().UpdateDarkUIWin(this); + + SetSizer(page_sizer); + Layout(); + Fit(); +} + +CloudTaskManagerPage::~CloudTaskManagerPage() +{ + if (m_flipping_timer) + m_flipping_timer->Stop(); + delete m_flipping_timer; +} + + +void CloudTaskManagerPage::refresh_user_device(bool clear) +{ + m_sizer_task_list->Clear(false); + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + m_flipping_panel->Show(false); + m_ctrl_btn_panel->Show(false); + return; + } + + if (clear) return; + + std::vector task_temps; + std::vector subscribe_list; + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = wxGetApp().app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + auto task_manager = wxGetApp().getTaskManager(); + if (task_manager) { + auto m_task_obj_list = task_manager->get_task_list(m_current_page, m_count_page_item, m_total_count); + + for (auto it = m_task_obj_list.begin(); it != m_task_obj_list.end(); it++) { + + TaskStateInfo task_state_info = it->second; + MachineObject* machine_obj = nullptr; + + if (user_machine.count(task_state_info.params().dev_id)) { + machine_obj = user_machine[task_state_info.params().dev_id]; + } + + MultiTaskItem* mtitem = new MultiTaskItem(m_task_list, machine_obj, 1); + //mtitem->task_obj = task_state_info; + mtitem->m_job_id = task_state_info.get_job_id(); + mtitem->m_project_name = wxString::FromUTF8(task_state_info.get_task_name()); + mtitem->m_dev_name = wxString::FromUTF8(task_state_info.get_device_name()); + mtitem->m_dev_id = task_state_info.params().dev_id; + + mtitem->m_send_time = utc_time_to_date(task_state_info.start_time); + + if (task_state_info.state() == TS_PRINTING) { + mtitem->state_cloud_task = 0; + } + else if (task_state_info.state() == TS_PRINT_SUCCESS) { + mtitem->state_cloud_task = 1; + } + else if (task_state_info.state() == TS_PRINT_FAILED) { + mtitem->state_cloud_task = 2; + } + + if (m_task_items.find(it->first) != m_task_items.end()) { + MultiTaskItem* item = m_task_items[it->first]; + if (item->state_selected == 1 && mtitem->state_cloud_task == 0) + mtitem->state_selected = item->state_selected; + item->Destroy(); + } + + m_task_items[it->first] = mtitem; + mtitem->update_info(); + task_temps.push_back(mtitem); + + auto find_it = std::find(subscribe_list.begin(), subscribe_list.end(), mtitem->m_dev_id); + if (find_it == subscribe_list.end()) { + subscribe_list.push_back(mtitem->m_dev_id); + } + } + + dev->subscribe_device_list(subscribe_list); + + if (m_sort.rule == SortItem::SortRule::SR_None) { + this->device_send_time = true; + m_sort.set_role(SortItem::SortRule::SR_SEND_TIME, device_send_time); + } + std::sort(task_temps.begin(), task_temps.end(), m_sort.get_call_back()); + + for (const auto& item : task_temps) + m_sizer_task_list->Add(item, 0, wxALL | wxEXPAND, 0); + + // maintenance + auto it = m_task_items.begin(); + while (it != m_task_items.end()) { + if (m_task_obj_list.find(it->first) != m_task_obj_list.end()) { + ++it; + } + else { + it->second->Destroy(); + it = m_task_items.erase(it); + } + } + m_sizer_task_list->Layout(); + int num = m_task_items.size() > 10 ? 10 : m_task_items.size(); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), num * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->Layout(); + } + + update_page_number(); + + m_tip_text->Show(m_task_items.empty()); + m_flipping_panel->Show(m_total_page > 1); + m_ctrl_btn_panel->Show(!m_task_items.empty()); + Layout(); +} + +std::string CloudTaskManagerPage::utc_time_to_date(std::string utc_time) +{ + /*std::tm timeInfo = {}; + std::istringstream iss(utc_time); + iss >> std::get_time(&timeInfo, "%Y-%m-%dT%H:%M:%SZ"); + + std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(std::mktime(&timeInfo)); + std::time_t localTime = std::chrono::system_clock::to_time_t(tp); + std::tm* localTimeInfo = std::localtime(&localTime); + + std::stringstream ss; + ss << std::put_time(localTimeInfo, "%Y-%m-%d %H:%M:%S"); + return ss.str();*/ + std::string send_time; + + + std::tm timeInfo = {}; + std::istringstream iss(utc_time); + iss >> std::get_time(&timeInfo, "%Y-%m-%dT%H:%M:%SZ"); + + std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(std::mktime(&timeInfo)); + std::time_t utcTime = std::chrono::system_clock::to_time_t(tp); + + + wxDateTime::TimeZone tz(wxDateTime::Local); + long offset = tz.GetOffset(); + + + std::time_t localTime = utcTime + offset; + + std::tm* localTimeInfo = std::localtime(&localTime); + std::stringstream ss; + ss << std::put_time(localTimeInfo, "%Y-%m-%d %H:%M:%S"); + send_time = ss.str(); + + + return send_time; +} + + +bool CloudTaskManagerPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + + return wxPanel::Show(show); +} + +void CloudTaskManagerPage::update_page() +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->sync_state(); + it->second->update_info(); + } +} + +void CloudTaskManagerPage::update_page_number() +{ + double result = static_cast(m_total_count) / m_count_page_item; + m_total_page = std::ceil(result); + + wxString number = wxString(std::to_string(m_current_page + 1)) + " / " + wxString(std::to_string(m_total_page)); + st_page_number->SetLabel(number); +} + +void CloudTaskManagerPage::start_timer() +{ + if (m_flipping_timer) { + m_flipping_timer->Stop(); + } + else { + m_flipping_timer = new wxTimer(); + } + + m_flipping_timer->SetOwner(this); + m_flipping_timer->Start(1000); + wxPostEvent(this, wxTimerEvent()); +} + +void CloudTaskManagerPage::on_timer(wxTimerEvent& event) +{ + m_flipping_timer->Stop(); + enable_buttons(true); + update_page_number(); +} + +void CloudTaskManagerPage::pause_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_pause->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_cloud_task == 0) { + it->second->onPause(); + } + } +} + +void CloudTaskManagerPage::resume_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_resume->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_cloud_task == 0) { + it->second->onResume(); + } + } +} + +void CloudTaskManagerPage::stop_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_stop->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_cloud_task == 0) { + it->second->onStop(); + } + } +} + +void CloudTaskManagerPage::enable_buttons(bool enable) +{ + btn_last_page->Enable(enable); + btn_next_page->Enable(enable); + btn_pause_all->Enable(enable); + btn_continue_all->Enable(enable); + btn_stop_all->Enable(enable); +} + +void CloudTaskManagerPage::page_num_enter_evt() +{ + enable_buttons(false); + start_timer(); + auto value = m_page_num_input->GetTextCtrl()->GetValue(); + long page_num = 0; + if (value.ToLong(&page_num)) { + if (page_num > m_total_page) + m_current_page = m_total_page - 1; + else if (page_num < 1) + m_current_page = 0; + else + m_current_page = page_num - 1; + } + refresh_user_device(); + update_page_number(); + /*m_sizer_task_list->Clear(false); + m_loading_text->Show(true); + Layout();*/ +} + +void CloudTaskManagerPage::msw_rescale() +{ + btn_last_page->Rescale(); + btn_last_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->Rescale(); + btn_next_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + m_page_num_enter->Rescale(); + m_page_num_enter->SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + + m_select_checkbox->Rescale(); + m_select_checkbox->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_select_checkbox->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->Rescale(); + m_task_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->Rescale(); + m_printer_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->Rescale(); + m_status->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->Rescale(); + m_info->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->Rescale(); + m_send_time->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->Rescale(); + m_action->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + btn_pause_all->Rescale(); + btn_continue_all->Rescale(); + btn_stop_all->Rescale(); + + for (auto it = m_task_items.begin(); it != m_task_items.end(); ++it) { + it->second->Refresh(); + } + + Fit(); + Layout(); + Refresh(); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp new file mode 100644 index 0000000000..0f676d06b3 --- /dev/null +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -0,0 +1,211 @@ +#ifndef slic3r_MultiTaskManagerPage_hpp_ +#define slic3r_MultiTaskManagerPage_hpp_ + +#include "GUI_App.hpp" +#include "GUI_Utils.hpp" +#include "MultiMachine.hpp" +#include "DeviceManager.hpp" +#include "TaskManager.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/CheckBox.hpp" +#include "Widgets/ComboBox.hpp" +#include "Widgets/ScrolledWindow.hpp" +#include "Widgets/PopupWindow.hpp" +#include "Widgets/TextInput.hpp" + +namespace Slic3r { +namespace GUI { + +#define CLOUD_TASK_ITEM_MAX_WIDTH 1100 +#define TASK_ITEM_MAX_WIDTH 900 +#define TASK_LEFT_PADDING_LEFT 15 +#define TASK_LEFT_PRINTABLE 40 +#define TASK_LEFT_PRO_NAME 180 +#define TASK_LEFT_DEV_NAME 150 +#define TASK_LEFT_PRO_STATE 170 +#define TASK_LEFT_PRO_INFO 230 +#define TASK_LEFT_SEND_TIME 180 + +class MultiTaskItem : public DeviceItem +{ +public: + MultiTaskItem(wxWindow* parent, MachineObject* obj, int type); + ~MultiTaskItem() {}; + + + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnSelectedDevice(wxCommandEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + + bool m_hover{ false }; + wxString get_left_time(int mc_left_time); + + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; + + int m_sending_percent{0}; + int m_task_type{0}; //0-local 1-cloud + wxString m_project_name; + wxString m_dev_name; + std::string m_dev_id; + TaskStateInfo* task_obj { nullptr }; + std::string m_job_id; + //std::string m_sent_time; + + Button* m_button_resume{ nullptr }; + Button* m_button_cancel{ nullptr }; + Button* m_button_pause{ nullptr }; + Button* m_button_stop{ nullptr }; + + void update_info(); + void onPause(); + void onResume(); + void onStop(); + void onCancel(); +}; + +class LocalTaskManagerPage : public wxPanel +{ +public: + LocalTaskManagerPage(wxWindow* parent); + ~LocalTaskManagerPage() {}; + + void update_page(); + void refresh_user_device(bool clear = false); + bool Show(bool show); + void cancel_all(wxCommandEvent& evt); + void msw_rescale(); + +private: + SortItem m_sort; + std::map m_task_items; + bool device_name_big{ true }; + bool device_state_big{ true }; + bool device_send_time{ true }; + + wxPanel* m_main_panel{ nullptr }; + wxBoxSizer* m_main_sizer{ nullptr }; + wxBoxSizer* page_sizer{ nullptr }; + wxBoxSizer* m_sizer_task_list{ nullptr }; + wxScrolledWindow* m_task_list{ nullptr }; + wxStaticText* m_selected_num{ nullptr }; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + CheckBox* m_select_checkbox{ nullptr }; + Button* m_task_name{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_status{ nullptr }; + Button* m_info{ nullptr }; + Button* m_send_time{ nullptr }; + Button* m_action{ nullptr }; + + // ctrl button for all + int m_sel_number{0}; + wxPanel* m_ctrl_btn_panel{ nullptr }; + wxBoxSizer* m_btn_sizer{ nullptr }; + Button* btn_stop_all{ nullptr }; + wxStaticText* m_sel_text{ nullptr }; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; +}; + +class CloudTaskManagerPage : public wxPanel +{ +public: + CloudTaskManagerPage(wxWindow* parent); + ~CloudTaskManagerPage(); + + void update_page(); + void refresh_user_device(bool clear = false); + std::string utc_time_to_date(std::string utc_time); + bool Show(bool show); + void update_page_number(); + void start_timer(); + void on_timer(wxTimerEvent& event); + + void pause_all(wxCommandEvent& evt); + void resume_all(wxCommandEvent& evt); + void stop_all(wxCommandEvent& evt); + + void enable_buttons(bool enable); + void page_num_enter_evt(); + + void msw_rescale(); + +private: + SortItem m_sort; + bool device_name_big{ true }; + bool device_state_big{ true }; + bool device_send_time{ true }; + + /* job_id -> sel */ + std::map m_task_items; + + wxPanel* m_main_panel{ nullptr }; + wxBoxSizer* page_sizer{ nullptr }; + wxBoxSizer* m_sizer_task_list{ nullptr }; + wxBoxSizer* m_main_sizer{ nullptr }; + wxScrolledWindow* m_task_list{ nullptr }; + wxStaticText* m_selected_num{ nullptr }; + + // Flipping pages + int m_current_page{ 0 }; + int m_total_page{0}; + int m_total_count{ 0 }; + int m_count_page_item{ 10 }; + bool prev{ false }; + bool next{ false }; + Button* btn_last_page{ nullptr }; + Button* btn_next_page{ nullptr }; + wxStaticText* st_page_number{ nullptr }; + wxBoxSizer* m_flipping_page_sizer{ nullptr }; + wxBoxSizer* m_page_sizer{ nullptr }; + wxPanel* m_flipping_panel{ nullptr }; + wxTimer* m_flipping_timer{ nullptr }; + TextInput* m_page_num_input{ nullptr }; + Button* m_page_num_enter{ nullptr }; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + CheckBox* m_select_checkbox{ nullptr }; + Button* m_task_name{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_status{ nullptr }; + Button* m_info{ nullptr }; + Button* m_send_time{ nullptr }; + Button* m_action{ nullptr }; + + // ctrl button for all + int m_sel_number; + wxPanel* m_ctrl_btn_panel{ nullptr }; + wxBoxSizer* m_btn_sizer{ nullptr }; + Button* btn_pause_all{ nullptr }; + Button* btn_continue_all{ nullptr }; + Button* btn_stop_all{ nullptr }; + wxStaticText* m_sel_text{ nullptr }; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; + wxStaticText* m_loading_text{ nullptr }; +}; + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiTaskModel.cpp b/src/slic3r/GUI/MultiTaskModel.cpp new file mode 100644 index 0000000000..b23468b93e --- /dev/null +++ b/src/slic3r/GUI/MultiTaskModel.cpp @@ -0,0 +1,6 @@ + +namespace Slic3r { +namespace GUI { + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiTaskModel.hpp b/src/slic3r/GUI/MultiTaskModel.hpp new file mode 100644 index 0000000000..6b233e9302 --- /dev/null +++ b/src/slic3r/GUI/MultiTaskModel.hpp @@ -0,0 +1,11 @@ +#ifndef slic3r_MultiTaskModel_hpp_ +#define slic3r_MultiTaskModel_hpp_ + +namespace Slic3r { +namespace GUI { + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 390cae058b..08ef8c7493 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -1283,6 +1283,219 @@ void NotificationManager::UpdatedItemsInfoNotification::add_type(InfoItemType ty update(data); } +//------URLDownloadNotification---------------- + +void NotificationManager::URLDownloadNotification::render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + if (m_percentage < 0.f || m_percentage >= 1.f) { + render_close_button_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + if (m_percentage >= 1.f) + render_open_button_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + } else + render_pause_cancel_buttons_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); +} +void NotificationManager::URLDownloadNotification::render_close_button_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + + std::string button_text; + // Orca: Change based on dark mode + button_text = m_is_dark ? ImGui::CloseNotifDarkButton : ImGui::CloseNotifButton; + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), + ImVec2(win_pos.x, win_pos.y + win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0)), + true)) + { + // Orca: Change based on dark mode + button_text = m_is_dark ? ImGui::CloseNotifHoverDarkButton : ImGui::CloseNotifHoverButton; + } + ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.75f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + close(); + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.35f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", m_line_height * 2.125, win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0))) + { + close(); + } + ImGui::PopStyleColor(5); + +} + +void NotificationManager::URLDownloadNotification::render_pause_cancel_buttons_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + + render_cancel_button_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + render_pause_button_inner(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); +} +void NotificationManager::URLDownloadNotification::render_pause_button_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + std::wstring button_text; + // Orca: Change based on dark mode + button_text = m_is_dark ? (m_download_paused ? ImGui::PlayDarkButton : ImGui::PauseDarkButton) : (m_download_paused ? ImGui::PlayButton : ImGui::PauseButton); + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - m_line_height * 5.f, win_pos.y), + ImVec2(win_pos.x - m_line_height * 2.5f, win_pos.y + win_size.y), + true)) + { + // Orca: Change based on dark mode + button_text = m_is_dark ? (m_download_paused ? ImGui::PlayHoverDarkButton : ImGui::PauseHoverDarkButton) : (m_download_paused ? ImGui::PlayHoverButton : ImGui::PauseHoverButton); + } + + ImVec2 button_pic_size = ImGui::CalcTextSize(boost::nowide::narrow(button_text).c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 5.0f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + trigger_user_action_callback(m_download_paused ? DownloaderUserAction::DownloadUserContinued : DownloaderUserAction::DownloadUserPaused); + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - m_line_height * 4.625f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", m_line_height * 2.f, win_size.y)) + { + trigger_user_action_callback(m_download_paused ? DownloaderUserAction::DownloadUserContinued : DownloaderUserAction::DownloadUserPaused); + } + ImGui::PopStyleColor(5); +} + +void NotificationManager::URLDownloadNotification::render_open_button_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + std::wstring button_text; + // Orca: Change based on dark mode + button_text = m_is_dark ? ImGui::OpenDarkButton : ImGui::OpenButton; + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - m_line_height * 5.f, win_pos.y), + ImVec2(win_pos.x - m_line_height * 2.5f, win_pos.y + win_size.y), + true)) + { + // Orca: Change based on dark mode + button_text = m_is_dark ? ImGui::OpenHoverDarkButton : ImGui::OpenHoverButton; + } + + ImVec2 button_pic_size = ImGui::CalcTextSize(boost::nowide::narrow(button_text).c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 5.0f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + trigger_user_action_callback(DownloaderUserAction::DownloadUserOpenedFolder); + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - m_line_height * 4.625f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", m_line_height * 2.f, win_size.y)) + { + trigger_user_action_callback(DownloaderUserAction::DownloadUserOpenedFolder); + } + ImGui::PopStyleColor(5); +} + +void NotificationManager::URLDownloadNotification::render_cancel_button_inner(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ImVec2 win_size(win_size_x, win_size_y); + ImVec2 win_pos(win_pos_x, win_pos_y); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(.0f, .0f, .0f, .0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(.0f, .0f, .0f, .0f)); + push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); + + + std::string button_text; + button_text = ImGui::CancelButton; + + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), + ImVec2(win_pos.x, win_pos.y + win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0)), + true)) + { + button_text = ImGui::CancelHoverButton; + } + ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.75f); + ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); + if (imgui.button(button_text.c_str(), button_size.x, button_size.y)) + { + trigger_user_action_callback(DownloaderUserAction::DownloadUserCanceled); + } + + //invisible large button + ImGui::SetCursorPosX(win_size.x - m_line_height * 2.35f); + ImGui::SetCursorPosY(0); + if (imgui.button(" ", m_line_height * 2.125, win_size.y - (m_minimize_b_visible ? 2 * m_line_height : 0))) + { + trigger_user_action_callback(DownloaderUserAction::DownloadUserCanceled); + } + ImGui::PopStyleColor(5); + +} + +void NotificationManager::URLDownloadNotification::trigger_user_action_callback(DownloaderUserAction action) +{ + if (m_user_action_callback) { + if (m_user_action_callback(action, m_download_id)) {} + } +} + + +void NotificationManager::URLDownloadNotification::render_bar(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +{ + ProgressBarNotification::render_bar(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + std::string text; + if (m_percentage < 0.f) { + text = _u8L("ERROR") + ": " + m_error_message; + } else if (m_percentage >= 1.f) { + text = _u8L("COMPLETED"); + } else { + std::stringstream stream; + stream << std::fixed << std::setprecision(2) << (int)(m_percentage * 100) << "%"; + text = stream.str(); + } + ImGui::SetCursorPosX(m_left_indentation); + ImGui::SetCursorPosY(win_size_y / 2 + win_size_y / 6 - (m_multiline ? 0 : m_line_height / 4)); + imgui.text(text.c_str()); +} + +void NotificationManager::URLDownloadNotification::count_spaces() +{ + ProgressBarNotification::count_spaces(); + m_window_width_offset = m_line_height * 6; +} + //------PrintHostUploadNotification---------------- void NotificationManager::PrintHostUploadNotification::init() { @@ -1841,6 +2054,81 @@ void NotificationManager::push_import_finished_notification(const std::string& p set_slicing_progress_hidden(); } +void NotificationManager::push_download_URL_progress_notification(size_t id, const std::string& text, std::function user_action_callback) +{ + // If already exists + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::URLDownload && dynamic_cast(notification.get())->get_download_id() == id) { + return; + } + } + // push new one + NotificationData data{ NotificationType::URLDownload, NotificationLevel::ProgressBarNotificationLevel, 5, _u8L("Download") + ": " + text }; + push_notification_data(std::make_unique(data, m_id_provider, m_evt_handler, id, user_action_callback), 0); +} + +void NotificationManager::set_download_URL_progress(size_t id, float percentage) +{ + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::URLDownload) { + URLDownloadNotification* ntf = dynamic_cast(notification.get()); + if (ntf->get_download_id() != id) + continue; + // if this changes the percentage, it should be shown now + float percent_b4 = ntf->get_percentage(); + ntf->set_percentage(percentage); + ntf->set_paused(false); + if (ntf->get_percentage() != percent_b4) + wxGetApp().plater()->get_current_canvas3D()->schedule_extra_frame(0); + return; + } + } +} + +void NotificationManager::set_download_URL_paused(size_t id) +{ + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::URLDownload) { + URLDownloadNotification* ntf = dynamic_cast(notification.get()); + if (ntf->get_download_id() != id) + continue; + ntf->set_paused(true); + wxGetApp().plater()->get_current_canvas3D()->schedule_extra_frame(0); + return; + } + } +} + +void NotificationManager::set_download_URL_canceled(size_t id) +{ + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::URLDownload) { + URLDownloadNotification* ntf = dynamic_cast(notification.get()); + if (ntf->get_download_id() != id) + continue; + ntf->close(); + wxGetApp().plater()->get_current_canvas3D()->schedule_extra_frame(0); + return; + } + } +} +void NotificationManager::set_download_URL_error(size_t id, const std::string& text) +{ + for (std::unique_ptr& notification : m_pop_notifications) { + if (notification->get_type() == NotificationType::URLDownload) { + URLDownloadNotification* ntf = dynamic_cast(notification.get()); + if (ntf->get_download_id() != id) + continue; + float percent_b4 = ntf->get_percentage(); + ntf->set_percentage(-1.f); + ntf->set_error_message(text); + if (ntf->get_percentage() != percent_b4) + wxGetApp().plater()->get_current_canvas3D()->schedule_extra_frame(0); + return; + } + } +} + void NotificationManager::push_upload_job_notification(int id, float filesize, const std::string& filename, const std::string& host, float percentage) { // find if upload with same id was not already in notification diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index 68e26f4a0e..dce17f6080 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2020 - 2023 David Kocík @kocikdav, Lukáš Matěna @lukasmatena, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Lukáš Hejl @hejllukas, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_NotificationManager_hpp_ #define slic3r_GUI_NotificationManager_hpp_ @@ -11,6 +7,7 @@ #include "Event.hpp" #include "I18N.hpp" #include "Jobs/ProgressIndicator.hpp" +#include "Downloader.hpp" #include #include @@ -129,6 +126,8 @@ enum class NotificationType NetfabbFinished, // Short meesage to fill space between start and finish of export ExportOngoing, + // Progressbar of download from prusaslicer://url + URLDownload, // BBS: Short meesage to fill space between start and finish of arranging ArrangeOngoing, // BBL: Plate Info ,Design For @YangLeDuo @@ -247,6 +246,14 @@ public: // Exporting finished, show this information with path, button to open containing folder and if ejectable - eject button void push_exporting_finished_notification(const std::string& path, const std::string& dir_path, bool on_removable); void push_import_finished_notification(const std::string& path, const std::string& dir_path, bool on_removable); + + // Download URL progress notif + void push_download_URL_progress_notification(size_t id, const std::string& text, std::function user_action_callback); + void set_download_URL_progress(size_t id, float percentage); + void set_download_URL_paused(size_t id); + void set_download_URL_canceled(size_t id); + void set_download_URL_error(size_t id, const std::string& text); + // notifications with progress bar // slicing progress void init_slicing_progress_notification(std::function cancel_callback); @@ -593,6 +600,7 @@ private: ProgressBarNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler) : PopNotification(n, id_provider, evt_handler) { } virtual void set_percentage(float percent) { m_percentage = percent; } + float get_percentage() const { return m_percentage; } protected: virtual void init() override; virtual void render_text(ImGuiWrapper& imgui, @@ -615,6 +623,62 @@ private: }; + class URLDownloadNotification : public ProgressBarNotification + { + public: + URLDownloadNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler, size_t download_id, std::function user_action_callback) + //: ProgressBarWithCancelNotification(n, id_provider, evt_handler, cancel_callback) + : ProgressBarNotification(n, id_provider, evt_handler) + , m_download_id(download_id) + , m_user_action_callback(user_action_callback) + { + } + void set_percentage(float percent) override + { + m_percentage = percent; + if (m_percentage >= 1.f) { + m_notification_start = GLCanvas3D::timestamp_now(); + m_state = EState::Shown; + } else + m_state = EState::NotFading; + } + size_t get_download_id() { return m_download_id; } + void set_user_action_callback(std::function user_action_callback) { m_user_action_callback = user_action_callback; } + void set_paused(bool paused) { m_download_paused = paused; } + void set_error_message(const std::string& message) { m_error_message = message; } + bool compare_text(const std::string& text) const override { return false; }; + protected: + void render_close_button(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y) override; + void render_close_button_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_pause_cancel_buttons_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_open_button_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_cancel_button_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_pause_button_inner(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y); + void render_bar(ImGuiWrapper& imgui, + const float win_size_x, const float win_size_y, + const float win_pos_x, const float win_pos_y) override; + void trigger_user_action_callback(DownloaderUserAction action); + + void count_spaces() override; + + size_t m_download_id; + std::function m_user_action_callback; + bool m_download_paused {false}; + std::string m_error_message; + }; + class PrintHostUploadNotification : public ProgressBarNotification { public: diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp new file mode 100644 index 0000000000..648faffbf9 --- /dev/null +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -0,0 +1,817 @@ +#include +#include +//#include "libslic3r/FlushVolCalc.hpp" +#include "ObjColorDialog.hpp" +#include "BitmapCache.hpp" +#include "GUI.hpp" +#include "I18N.hpp" +#include "GUI_App.hpp" +#include "MsgDialog.hpp" +#include "Widgets/Button.hpp" +#include "slic3r/Utils/ColorSpaceConvert.hpp" +#include "MainFrame.hpp" +#include "libslic3r/Config.hpp" +#include "BitmapComboBox.hpp" +#include "Widgets/ComboBox.hpp" +#include + +#include "libslic3r/ObjColorUtils.hpp" + +using namespace Slic3r; +using namespace Slic3r::GUI; + +int objcolor_scale(const int val) { return val * Slic3r::GUI::wxGetApp().em_unit() / 10; } +int OBJCOLOR_ITEM_WIDTH() { return objcolor_scale(30); } +static const wxColour g_text_color = wxColour(107, 107, 107, 255); +const int HEADER_BORDER = 5; +const int CONTENT_BORDER = 3; +const int PANEL_WIDTH = 370; +const int COLOR_LABEL_WIDTH = 180; +#define ICON_SIZE wxSize(FromDIP(16), FromDIP(16)) +#define MIN_OBJCOLOR_DIALOG_WIDTH FromDIP(400) +#define FIX_SCROLL_HEIGTH FromDIP(400) +#define BTN_SIZE wxSize(FromDIP(58), FromDIP(24)) +#define BTN_GAP FromDIP(20) + +static void update_ui(wxWindow* window) +{ + Slic3r::GUI::wxGetApp().UpdateDarkUI(window); +} + +static const char g_min_cluster_color = 1; +//static const char g_max_cluster_color = 15; +static const char g_max_color = 16; +const StateColor ok_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); +const StateColor ok_btn_disable_bg(std::pair(wxColour(205, 201, 201), StateColor::Pressed), + std::pair(wxColour(205, 201, 201), StateColor::Hovered), + std::pair(wxColour(205, 201, 201), StateColor::Normal)); +wxBoxSizer* ObjColorDialog::create_btn_sizer(long flags) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + btn_sizer->AddStretchSpacer(); + + StateColor ok_btn_bd( + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + StateColor ok_btn_text( + std::pair(wxColour(255, 255, 254), StateColor::Normal) + ); + StateColor cancel_btn_bg( + 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 cancel_btn_bd_( + std::pair(wxColour(38, 46, 48), StateColor::Normal) + ); + StateColor cancel_btn_text( + std::pair(wxColour(38, 46, 48), StateColor::Normal) + ); + StateColor calc_btn_bg( + std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + StateColor calc_btn_bd( + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + StateColor calc_btn_text( + std::pair(wxColour(255, 255, 254), StateColor::Normal) + ); + if (flags & wxOK) { + Button* ok_btn = new Button(this, _L("OK")); + ok_btn->SetMinSize(BTN_SIZE); + ok_btn->SetCornerRadius(FromDIP(12)); + ok_btn->Enable(false); + ok_btn->SetBackgroundColor(ok_btn_disable_bg); + ok_btn->SetBorderColor(ok_btn_bd); + ok_btn->SetTextColor(ok_btn_text); + ok_btn->SetFocus(); + ok_btn->SetId(wxID_OK); + btn_sizer->Add(ok_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list[wxOK] = ok_btn; + } + if (flags & wxCANCEL) { + Button* cancel_btn = new Button(this, _L("Cancel")); + cancel_btn->SetMinSize(BTN_SIZE); + cancel_btn->SetCornerRadius(FromDIP(12)); + cancel_btn->SetBackgroundColor(cancel_btn_bg); + cancel_btn->SetBorderColor(cancel_btn_bd_); + cancel_btn->SetTextColor(cancel_btn_text); + cancel_btn->SetId(wxID_CANCEL); + btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list[wxCANCEL] = cancel_btn; + } + return btn_sizer; +} + +void ObjColorDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + for (auto button_item : m_button_list) + { + if (button_item.first == wxRESET) + { + button_item.second->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); + button_item.second->SetCornerRadius(FromDIP(12)); + } + if (button_item.first == wxOK) { + button_item.second->SetMinSize(BTN_SIZE); + button_item.second->SetCornerRadius(FromDIP(12)); + } + if (button_item.first == wxCANCEL) { + button_item.second->SetMinSize(BTN_SIZE); + button_item.second->SetCornerRadius(FromDIP(12)); + } + } + m_panel_ObjColor->msw_rescale(); + this->Refresh(); +}; + +ObjColorDialog::ObjColorDialog(wxWindow * parent, + std::vector & input_colors, + bool is_single_color, + const std::vector &extruder_colours, + std::vector & filament_ids, + unsigned char & first_extruder_id) + : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), + wxID_ANY, + _(L("Obj file Import color")), + wxDefaultPosition, + wxDefaultSize, + wxDEFAULT_DIALOG_STYLE /* | wxRESIZE_BORDER*/) + , m_filament_ids(filament_ids) + , m_first_extruder_id(first_extruder_id) +{ + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % Slic3r::resources_dir()).str(); + SetIcon(wxIcon(Slic3r::encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + this->SetBackgroundColour(*wxWHITE); + this->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, -1)); + + m_panel_ObjColor = new ObjColorPanel(this, input_colors, is_single_color, extruder_colours, filament_ids, first_extruder_id); + + auto main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer->Add(m_line_top, 0, wxEXPAND, 0); + // set min sizer width according to extruders count + auto sizer_width = (int) (2.8 * OBJCOLOR_ITEM_WIDTH()); + sizer_width = sizer_width > MIN_OBJCOLOR_DIALOG_WIDTH ? sizer_width : MIN_OBJCOLOR_DIALOG_WIDTH; + main_sizer->SetMinSize(wxSize(sizer_width, -1)); + main_sizer->Add(m_panel_ObjColor, 1, wxEXPAND | wxALL, 0); + + auto btn_sizer = create_btn_sizer(wxOK | wxCANCEL); + { + m_button_list[wxOK]->Bind(wxEVT_UPDATE_UI, ([this](wxUpdateUIEvent &e) { + if (m_panel_ObjColor->is_ok() == m_button_list[wxOK]->IsEnabled()) { return; } + m_button_list[wxOK]->Enable(m_panel_ObjColor->is_ok()); + m_button_list[wxOK]->SetBackgroundColor(m_panel_ObjColor->is_ok() ? ok_btn_bg : ok_btn_disable_bg); + })); + } + main_sizer->Add(btn_sizer, 0, wxBOTTOM | wxRIGHT | wxEXPAND, BTN_GAP); + SetSizer(main_sizer); + main_sizer->SetSizeHints(this); + + if (this->FindWindowById(wxID_OK, this)) { + this->FindWindowById(wxID_OK, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {// if OK button is clicked.. + m_panel_ObjColor->update_filament_ids(); + EndModal(wxID_OK); + }, wxID_OK); + } + if (this->FindWindowById(wxID_CANCEL, this)) { + update_ui(static_cast(this->FindWindowById(wxID_CANCEL, this))); + this->FindWindowById(wxID_CANCEL, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxCANCEL); }); + } + this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); }); + + wxGetApp().UpdateDlgDarkUI(this); +} +RGBA convert_to_rgba(const wxColour &color) +{ + RGBA rgba; + rgba[0] = std::clamp(color.Red() / 255.f, 0.f, 1.f); + rgba[1] = std::clamp(color.Green() / 255.f, 0.f, 1.f); + rgba[2] = std::clamp(color.Blue() / 255.f, 0.f, 1.f); + rgba[3] = std::clamp(color.Alpha() / 255.f, 0.f, 1.f); + return rgba; +} +wxColour convert_to_wxColour(const RGBA &color) +{ + auto r = std::clamp((int) (color[0] * 255.f), 0, 255); + auto g = std::clamp((int) (color[1] * 255.f), 0, 255); + auto b = std::clamp((int) (color[2] * 255.f), 0, 255); + auto a = std::clamp((int) (color[3] * 255.f), 0, 255); + wxColour wx_color(r,g,b,a); + return wx_color; +} +// This panel contains all control widgets for both simple and advanced mode (these reside in separate sizers) +ObjColorPanel::ObjColorPanel(wxWindow * parent, + std::vector& input_colors, + bool is_single_color, + const std::vector& extruder_colours, + std::vector & filament_ids, + unsigned char & first_extruder_id) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize /*,wxBORDER_RAISED*/) + , m_input_colors(input_colors) + , m_filament_ids(filament_ids) + , m_first_extruder_id(first_extruder_id) +{ + if (input_colors.size() == 0) { return; } + for (const std::string& color : extruder_colours) { + m_colours.push_back(wxColor(color)); + } + //deal input_colors + m_input_colors_size = input_colors.size(); + for (size_t i = 0; i < input_colors.size(); i++) { + if (color_is_equal(input_colors[i] , UNDEFINE_COLOR)) { // not define color range:0~1 + input_colors[i]=convert_to_rgba( m_colours[0]); + } + } + if (is_single_color && input_colors.size() >=1) { + m_cluster_colors_from_algo.emplace_back(input_colors[0]); + m_cluster_colours.emplace_back(convert_to_wxColour(input_colors[0])); + m_cluster_labels_from_algo.reserve(m_input_colors_size); + for (size_t i = 0; i < m_input_colors_size; i++) { + m_cluster_labels_from_algo.emplace_back(0); + } + m_cluster_map_filaments.resize(m_cluster_colors_from_algo.size()); + m_color_num_recommend = m_color_cluster_num_by_algo = m_cluster_colors_from_algo.size(); + } else {//cluster deal + deal_algo(-1); + } + //end first cluster + //draw ui + auto sizer_width = FromDIP(300); + // Create two switched panels with their own sizers + m_sizer_simple = new wxBoxSizer(wxVERTICAL); + m_page_simple = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_page_simple->SetSizer(m_sizer_simple); + m_page_simple->SetBackgroundColour(*wxWHITE); + + update_ui(m_page_simple); + // BBS + m_sizer_simple->AddSpacer(FromDIP(10)); + // BBS: for tunning flush volumes + { + //color cluster results + wxBoxSizer * specify_cluster_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticText *specify_color_cluster_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Specify number of colors:")); + specify_color_cluster_title->SetFont(Label::Head_14); + specify_cluster_sizer->Add(specify_color_cluster_title, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); + + m_color_cluster_num_by_user_ebox = new wxTextCtrl(m_page_simple, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(25), -1), wxTE_PROCESS_ENTER); + m_color_cluster_num_by_user_ebox->SetValue(std::to_string(m_color_cluster_num_by_algo).c_str()); + {//event + auto on_apply_color_cluster_text_modify = [this](wxEvent &e) { + wxString str = m_color_cluster_num_by_user_ebox->GetValue(); + int number = wxAtoi(str); + if (number > m_color_num_recommend || number < g_min_cluster_color) { + number = number < g_min_cluster_color ? g_min_cluster_color : m_color_num_recommend; + str = wxString::Format(("%d"), number); + m_color_cluster_num_by_user_ebox->SetValue(str); + MessageDialog dlg(nullptr, wxString::Format(_L("The color count should be in range [%d, %d]."), g_min_cluster_color, m_color_num_recommend), + _L("Warning"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + } + e.Skip(); + }; + m_color_cluster_num_by_user_ebox->Bind(wxEVT_TEXT_ENTER, on_apply_color_cluster_text_modify); + m_color_cluster_num_by_user_ebox->Bind(wxEVT_KILL_FOCUS, on_apply_color_cluster_text_modify); + m_color_cluster_num_by_user_ebox->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this](wxCommandEvent &) { + wxString str = m_color_cluster_num_by_user_ebox->GetValue(); + int number = wxAtof(str); + if (number > m_color_num_recommend || number < g_min_cluster_color) { + number = number < g_min_cluster_color ? g_min_cluster_color : m_color_num_recommend; + str = wxString::Format(("%d"), number); + m_color_cluster_num_by_user_ebox->SetValue(str); + m_color_cluster_num_by_user_ebox->SetInsertionPointEnd(); + } + if (m_last_cluster_num != number) { + deal_algo(number, true); + Layout(); + //Fit(); + Refresh(); + Update(); + m_last_cluster_num = number; + } + }); + m_color_cluster_num_by_user_ebox->Bind(wxEVT_CHAR, [this](wxKeyEvent &e) { + int keycode = e.GetKeyCode(); + wxString input_char = wxString::Format("%c", keycode); + long value; + if (!input_char.ToLong(&value)) + return; + e.Skip(); + }); + } + specify_cluster_sizer->AddSpacer(FromDIP(2)); + specify_cluster_sizer->Add(m_color_cluster_num_by_user_ebox, 0, wxALIGN_CENTER | wxALL, 0); + specify_cluster_sizer->AddSpacer(FromDIP(15)); + wxStaticText *recommend_color_cluster_title = new wxStaticText(m_page_simple, wxID_ANY, "(" + std::to_string(m_color_num_recommend) + " " + _L("Recommended ") + ")"); + specify_cluster_sizer->Add(recommend_color_cluster_title, 0, wxALIGN_CENTER | wxALL, 0); + + m_sizer_simple->Add(specify_cluster_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20)); + + wxBoxSizer * current_filaments_title_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticText *current_filaments_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Current filament colors:")); + current_filaments_title->SetFont(Label::Head_14); + current_filaments_title_sizer->Add(current_filaments_title, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); + m_sizer_simple->Add(current_filaments_title_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20)); + + wxBoxSizer * current_filaments_sizer = new wxBoxSizer(wxHORIZONTAL); + current_filaments_sizer->AddSpacer(FromDIP(10)); + for (size_t i = 0; i < m_colours.size(); i++) { + auto extruder_icon_sizer = create_extruder_icon_and_rgba_sizer(m_page_simple, i, m_colours[i]); + current_filaments_sizer->Add(extruder_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + } + m_sizer_simple->Add(current_filaments_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20)); + //colors table + m_scrolledWindow = new wxScrolledWindow(m_page_simple,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxSB_VERTICAL); + m_sizer_simple->Add(m_scrolledWindow, 0, wxEXPAND | wxALL, FromDIP(5)); + draw_table(); + //buttons + wxBoxSizer *quick_set_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticText *quick_set_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Quick set:")); + quick_set_title->SetFont(Label::Head_12); + quick_set_sizer->Add(quick_set_title, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + + auto calc_approximate_match_btn_sizer = create_approximate_match_btn_sizer(m_page_simple); + auto calc_add_btn_sizer = create_add_btn_sizer(m_page_simple); + auto calc_reset_btn_sizer = create_reset_btn_sizer(m_page_simple); + quick_set_sizer->Add(calc_add_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + quick_set_sizer->Add(calc_approximate_match_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + quick_set_sizer->Add(calc_reset_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + m_sizer_simple->Add(quick_set_sizer, 0, wxEXPAND | wxLEFT, FromDIP(30)); + + wxBoxSizer *warning_sizer = new wxBoxSizer(wxHORIZONTAL); + m_warning_text = new wxStaticText(m_page_simple, wxID_ANY, ""); + warning_sizer->Add(m_warning_text, 0, wxALIGN_CENTER | wxALL, 0); + m_sizer_simple->Add(warning_sizer, 0, wxEXPAND | wxLEFT, FromDIP(30)); + + m_sizer_simple->AddSpacer(10); + } + deal_default_strategy(); + //page_simple//page_advanced + m_sizer = new wxBoxSizer(wxVERTICAL); + m_sizer->Add(m_page_simple, 0, wxEXPAND, 0); + + m_sizer->SetSizeHints(this); + SetSizer(m_sizer); + this->Layout(); +} + +void ObjColorPanel::msw_rescale() +{ + for (unsigned int i = 0; i < m_extruder_icon_list.size(); ++i) { + auto bitmap = *get_extruder_color_icon(m_colours[i].GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(i + 1), FromDIP(16), FromDIP(16)); + m_extruder_icon_list[i]->SetBitmap(bitmap); + } + /* for (unsigned int i = 0; i < m_color_cluster_icon_list.size(); ++i) { + auto bitmap = *get_extruder_color_icon(m_cluster_colours[i].GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(i + 1), FromDIP(16), FromDIP(16)); + m_color_cluster_icon_list[i]->SetBitmap(bitmap); + }*/ +} + +bool ObjColorPanel::is_ok() { + for (auto item : m_result_icon_list) { + if (item->bitmap_combox->IsShown()) { + auto selection = item->bitmap_combox->GetSelection(); + if (selection < 1) { + return false; + } + } + } + return true; +} + +void ObjColorPanel::update_filament_ids() +{ + if (m_is_add_filament) { + for (auto c:m_new_add_colors) { + /*auto evt = new ColorEvent(EVT_ADD_CUSTOM_FILAMENT, c); + wxQueueEvent(wxGetApp().plater(), evt);*/ + wxGetApp().sidebar().add_custom_filament(c); + } + } + //deal m_filament_ids + m_filament_ids.clear(); + m_filament_ids.reserve(m_input_colors_size); + for (size_t i = 0; i < m_input_colors_size; i++) { + auto label = m_cluster_labels_from_algo[i]; + m_filament_ids.emplace_back(m_cluster_map_filaments[label]); + } + m_first_extruder_id = m_cluster_map_filaments[0]; +} + +wxBoxSizer *ObjColorPanel::create_approximate_match_btn_sizer(wxWindow *parent) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + StateColor calc_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_bd(std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_text(std::pair(wxColour(255, 255, 254), StateColor::Normal)); + //create btn + m_quick_approximate_match_btn = new Button(parent, _L("Color match")); + m_quick_approximate_match_btn->SetToolTip(_L("Approximate color matching.")); + auto cur_btn = m_quick_approximate_match_btn; + cur_btn->SetFont(Label::Body_13); + cur_btn->SetMinSize(wxSize(FromDIP(60), FromDIP(20))); + cur_btn->SetCornerRadius(FromDIP(10)); + cur_btn->SetBackgroundColor(calc_btn_bg); + cur_btn->SetBorderColor(calc_btn_bd); + cur_btn->SetTextColor(calc_btn_text); + cur_btn->SetFocus(); + btn_sizer->Add(cur_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 0); + cur_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { + deal_approximate_match_btn(); + }); + return btn_sizer; +} + +wxBoxSizer *ObjColorPanel::create_add_btn_sizer(wxWindow *parent) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + StateColor calc_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_bd(std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_text(std::pair(wxColour(255, 255, 254), StateColor::Normal)); + // create btn + m_quick_add_btn = new Button(parent, _L("Append")); + m_quick_add_btn->SetToolTip(_L("Add consumable extruder after existing extruders.")); + auto cur_btn = m_quick_add_btn; + cur_btn->SetFont(Label::Body_13); + cur_btn->SetMinSize(wxSize(FromDIP(60), FromDIP(20))); + cur_btn->SetCornerRadius(FromDIP(10)); + cur_btn->SetBackgroundColor(calc_btn_bg); + cur_btn->SetBorderColor(calc_btn_bd); + cur_btn->SetTextColor(calc_btn_text); + cur_btn->SetFocus(); + btn_sizer->Add(cur_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 0); + cur_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { + deal_add_btn(); + }); + return btn_sizer; +} + +wxBoxSizer *ObjColorPanel::create_reset_btn_sizer(wxWindow *parent) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + StateColor calc_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_bd(std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_text(std::pair(wxColour(255, 255, 254), StateColor::Normal)); + // create btn + m_quick_reset_btn = new Button(parent, _L("Reset")); + m_quick_add_btn->SetToolTip(_L("Reset mapped extruders.")); + auto cur_btn = m_quick_reset_btn; + cur_btn->SetFont(Label::Body_13); + cur_btn->SetMinSize(wxSize(FromDIP(60), FromDIP(20))); + cur_btn->SetCornerRadius(FromDIP(10)); + cur_btn->SetBackgroundColor(calc_btn_bg); + cur_btn->SetBorderColor(calc_btn_bd); + cur_btn->SetTextColor(calc_btn_text); + cur_btn->SetFocus(); + btn_sizer->Add(cur_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 0); + cur_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { + deal_reset_btn(); + }); + return btn_sizer; +} + +wxBoxSizer *ObjColorPanel::create_extruder_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour &color) +{ + auto icon_sizer = new wxBoxSizer(wxHORIZONTAL); + wxButton *icon = new wxButton(parent, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); + icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16))); + icon->SetCanFocus(false); + m_extruder_icon_list.emplace_back(icon); + icon_sizer->Add(icon, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(10)); // wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM + + icon_sizer->AddSpacer(FromDIP(5)); + return icon_sizer; +} + +std::string ObjColorPanel::get_color_str(const wxColour &color) { + std::string str = ("R:" + std::to_string(color.Red()) + + std::string(" G:") + std::to_string(color.Green()) + + std::string(" B:") + std::to_string(color.Blue()) + + std::string(" A:") + std::to_string(color.Alpha())); + return str; +} + +ComboBox *ObjColorPanel::CreateEditorCtrl(wxWindow *parent, int id) // wxRect labelRect,, const wxVariant &value +{ + std::vector icons = get_extruder_color_icons(); + const double em = Slic3r::GUI::wxGetApp().em_unit(); + bool thin_icon = false; + const int icon_width = lround((thin_icon ? 2 : 4.4) * em); + const int icon_height = lround(2 * em); + m_combox_icon_width = icon_width; + m_combox_icon_height = icon_height; + wxColour undefined_color(0,255,0,255); + icons.insert(icons.begin(), get_extruder_color_icon(undefined_color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(-1), icon_width, icon_height)); + if (icons.empty()) + return nullptr; + + ::ComboBox *c_editor = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(m_combox_width), -1), 0, nullptr, + wxCB_READONLY | CB_NO_DROP_ICON | CB_NO_TEXT); + c_editor->SetMinSize(wxSize(FromDIP(m_combox_width), -1)); + c_editor->SetMaxSize(wxSize(FromDIP(m_combox_width), -1)); + c_editor->GetDropDown().SetUseContentWidth(true); + for (size_t i = 0; i < icons.size(); i++) { + c_editor->Append(wxString::Format("%d", i), *icons[i]); + if (i == 0) { + c_editor->SetItemTooltip(i,undefined_color.GetAsString(wxC2S_HTML_SYNTAX)); + } else { + c_editor->SetItemTooltip(i, m_colours[i-1].GetAsString(wxC2S_HTML_SYNTAX)); + } + } + c_editor->SetSelection(0); + c_editor->SetName(wxString::Format("%d", id)); + c_editor->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &evt) { + auto *com_box = static_cast(evt.GetEventObject()); + int i = atoi(com_box->GetName().c_str()); + if (i < m_cluster_map_filaments.size()) { m_cluster_map_filaments[i] = com_box->GetSelection(); } + evt.StopPropagation(); + }); + return c_editor; +} + +void ObjColorPanel::deal_approximate_match_btn() +{ + auto calc_color_distance = [](wxColour c1, wxColour c2) { + float lab[2][3]; + RGB2Lab(c1.Red(), c1.Green(), c1.Blue(), &lab[0][0], &lab[0][1], &lab[0][2]); + RGB2Lab(c2.Red(), c2.Green(), c2.Blue(), &lab[1][0], &lab[1][1], &lab[1][2]); + + return DeltaE76(lab[0][0], lab[0][1], lab[0][2], lab[1][0], lab[1][1], lab[1][2]); + }; + m_warning_text->SetLabelText(""); + if (m_result_icon_list.size() == 0) { return; } + auto map_count = m_result_icon_list[0]->bitmap_combox->GetCount() -1; + if (map_count < 1) { return; } + for (size_t i = 0; i < m_cluster_colours.size(); i++) { + auto c = m_cluster_colours[i]; + std::vector color_dists; + color_dists.resize(map_count); + for (size_t j = 0; j < map_count; j++) { + auto tip_color = m_result_icon_list[0]->bitmap_combox->GetItemTooltip(j+1); + wxColour candidate_c(tip_color); + color_dists[j].distance = calc_color_distance(c, candidate_c); + color_dists[j].id = j + 1; + } + std::sort(color_dists.begin(), color_dists.end(), [](ColorDistValue &a, ColorDistValue& b) { + return a.distance < b.distance; + }); + auto new_index= color_dists[0].id; + m_result_icon_list[i]->bitmap_combox->SetSelection(new_index); + m_cluster_map_filaments[i] = new_index; + } +} + +void ObjColorPanel::show_sizer(wxSizer *sizer, bool show) +{ + wxSizerItemList items = sizer->GetChildren(); + for (wxSizerItemList::iterator it = items.begin(); it != items.end(); ++it) { + wxSizerItem *item = *it; + if (wxWindow *window = item->GetWindow()) { + window->Show(show); + } + if (wxSizer *son_sizer = item->GetSizer()) { + show_sizer(son_sizer, show); + } + } +} + +void ObjColorPanel::redraw_part_table() { + //show all and set -1 + deal_reset_btn(); + for (size_t i = 0; i < m_row_sizer_list.size(); i++) { + show_sizer(m_row_sizer_list[i], true); + } + if (m_cluster_colours.size() < m_row_sizer_list.size()) { // show part + for (size_t i = m_cluster_colours.size(); i < m_row_sizer_list.size(); i++) { + show_sizer(m_row_sizer_list[i], false); + //m_row_panel_list[i]->Show(false); // show_sizer(m_left_color_cluster_boxsizer_list[i],false); + // m_result_icon_list[i]->bitmap_combox->Show(false); + } + } else if (m_cluster_colours.size() > m_row_sizer_list.size()) { + for (size_t i = m_row_sizer_list.size(); i < m_cluster_colours.size(); i++) { + int id = i; + wxPanel *row_panel = new wxPanel(m_scrolledWindow); + row_panel->SetBackgroundColour((i+1) % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238)); + auto row_sizer = new wxGridSizer(1, 2, 1, 3); + row_panel->SetSizer(row_sizer); + + row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + + auto cluster_color_icon_sizer = create_color_icon_and_rgba_sizer(row_panel, id, m_cluster_colours[id]); + row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER)); + // result_combox + create_result_button_sizer(row_panel, id); + row_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, 0); + + m_row_sizer_list.emplace_back(row_sizer); + m_gridsizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER)); + } + m_gridsizer->Layout(); + } + for (size_t i = 0; i < m_cluster_colours.size(); i++) { // update data + // m_color_cluster_icon_list//m_color_cluster_text_list + update_color_icon_and_rgba_sizer(i, m_cluster_colours[i]); + } + m_scrolledWindow->Refresh(); +} + +void ObjColorPanel::draw_table() +{ + auto row = std::max(m_cluster_colours.size(), m_colours.size()) + 1; + m_gridsizer = new wxGridSizer(row, 1, 1, 3); //(int rows, int cols, int vgap, int hgap ); + + m_color_cluster_icon_list.clear(); + m_extruder_icon_list.clear(); + float row_height ; + for (size_t ii = 0; ii < row; ii++) { + wxPanel *row_panel = new wxPanel(m_scrolledWindow); + row_panel->SetBackgroundColour(ii % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238)); + auto row_sizer = new wxGridSizer(1, 2, 1, 5); + row_panel->SetSizer(row_sizer); + + row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + if (ii == 0) { + wxStaticText *colors_left_title = new wxStaticText(row_panel, wxID_ANY, _L("Cluster colors")); + colors_left_title->SetFont(Label::Head_14); + row_sizer->Add(colors_left_title, 0, wxALIGN_CENTER | wxALL, FromDIP(HEADER_BORDER)); + + wxStaticText *colors_middle_title = new wxStaticText(row_panel, wxID_ANY, _L("Map Filament")); + colors_middle_title->SetFont(Label::Head_14); + row_sizer->Add(colors_middle_title, 0, wxALIGN_CENTER | wxALL, FromDIP(HEADER_BORDER)); + } else { + int id = ii - 1; + if (id < m_cluster_colours.size()) { + auto cluster_color_icon_sizer = create_color_icon_and_rgba_sizer(row_panel, id, m_cluster_colours[id]); + row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER)); + // result_combox + create_result_button_sizer(row_panel, id); + row_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER)); + } + } + row_height = row_panel->GetSize().GetHeight(); + if (ii>=1) { + m_row_sizer_list.emplace_back(row_sizer); + } + m_gridsizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER)); + } + m_scrolledWindow->SetSizer(m_gridsizer); + int totalHeight = row_height *(row+1) * 2; + m_scrolledWindow->SetVirtualSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight); + auto look = FIX_SCROLL_HEIGTH; + if (totalHeight > FIX_SCROLL_HEIGTH) { + m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); + m_scrolledWindow->SetMaxSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); + } + else { + m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight)); + } + m_scrolledWindow->EnableScrolling(false, true); + m_scrolledWindow->ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT);//wxSHOW_SB_ALWAYS + m_scrolledWindow->SetScrollRate(20, 20); +} + +void ObjColorPanel::deal_algo(char cluster_number, bool redraw_ui) +{ + if (m_last_cluster_number == cluster_number) { + return; + } + m_last_cluster_number = cluster_number; + QuantKMeans quant(10); + quant.apply(m_input_colors, m_cluster_colors_from_algo, m_cluster_labels_from_algo, (int)cluster_number); + m_cluster_colours.clear(); + m_cluster_colours.reserve(m_cluster_colors_from_algo.size()); + for (size_t i = 0; i < m_cluster_colors_from_algo.size(); i++) { + m_cluster_colours.emplace_back(convert_to_wxColour(m_cluster_colors_from_algo[i])); + } + if (m_cluster_colours.size() == 0) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",m_cluster_colours.size() = 0\n"; + return; + } + m_cluster_map_filaments.resize(m_cluster_colors_from_algo.size()); + m_color_cluster_num_by_algo = m_cluster_colors_from_algo.size(); + if (cluster_number == -1) { + m_color_num_recommend = m_color_cluster_num_by_algo; + } + //redraw ui + if (redraw_ui) { + redraw_part_table(); + deal_default_strategy(); + } +} + +void ObjColorPanel::deal_default_strategy() +{ + deal_add_btn(); + deal_approximate_match_btn(); + m_warning_text->SetLabelText(_L("Note:The color has been selected, you can choose OK \n to continue or manually adjust it.")); +} + +void ObjColorPanel::deal_add_btn() +{ + if (m_colours.size() > g_max_color) { return; } + deal_reset_btn(); + std::vector new_icons; + auto new_color_size = m_cluster_colors_from_algo.size(); + new_icons.reserve(new_color_size); + m_new_add_colors.clear(); + m_new_add_colors.reserve(new_color_size); + int new_index = m_colours.size() + 1; + bool is_exceed = false; + for (size_t i = 0; i < new_color_size; i++) { + if (m_colours.size() + new_icons.size() >= g_max_color) { + is_exceed = true; + break; + } + wxColour cur_color = convert_to_wxColour(m_cluster_colors_from_algo[i]); + m_new_add_colors.emplace_back(cur_color); + new_icons.emplace_back(get_extruder_color_icon(cur_color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), + std::to_string(new_index), m_combox_icon_width, m_combox_icon_height)); + new_index++; + } + new_index = m_colours.size() + 1; + for (size_t i = 0; i < m_result_icon_list.size(); i++) { + auto item = m_result_icon_list[i]; + for (size_t k = 0; k < new_icons.size(); k++) { + item->bitmap_combox->Append(wxString::Format("%d", item->bitmap_combox->GetCount()), *new_icons[k]); + item->bitmap_combox->SetItemTooltip(item->bitmap_combox->GetCount() -1,m_new_add_colors[k].GetAsString(wxC2S_HTML_SYNTAX)); + } + item->bitmap_combox->SetSelection(new_index); + m_cluster_map_filaments[i] = new_index; + new_index++; + } + if (is_exceed) { + deal_approximate_match_btn(); + m_warning_text->SetLabelText(_L("Waring:The count of newly added and \n current extruders exceeds 16.")); + } + m_is_add_filament = true; +} + +void ObjColorPanel::deal_reset_btn() +{ + for (auto item : m_result_icon_list) { + // delete redundant bitmap + while (item->bitmap_combox->GetCount() > m_colours.size()+ 1) { + item->bitmap_combox->DeleteOneItem(item->bitmap_combox->GetCount() - 1); + } + item->bitmap_combox->SetSelection(0); + } + m_is_add_filament = false; + m_new_add_colors.clear(); + m_warning_text->SetLabelText(""); +} + +void ObjColorPanel::create_result_button_sizer(wxWindow *parent, int id) +{ + for (size_t i = m_result_icon_list.size(); i < id + 1; i++) { + m_result_icon_list.emplace_back(new ButtonState()); + } + m_result_icon_list[id]->bitmap_combox = CreateEditorCtrl(parent,id); +} + +wxBoxSizer *ObjColorPanel::create_color_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color) +{ + auto icon_sizer = new wxBoxSizer(wxHORIZONTAL); + icon_sizer->AddSpacer(FromDIP(40)); + wxButton *icon = new wxButton(parent, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); + icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16))); + icon->SetCanFocus(false); + m_color_cluster_icon_list.emplace_back(icon); + icon_sizer->Add(icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); // wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM + icon_sizer->AddSpacer(FromDIP(10)); + + std::string message = get_color_str(color); + wxStaticText *rgba_title = new wxStaticText(parent, wxID_ANY, message.c_str()); + m_color_cluster_text_list.emplace_back(rgba_title); + rgba_title->SetMinSize(wxSize(FromDIP(COLOR_LABEL_WIDTH), -1)); + rgba_title->SetMaxSize(wxSize(FromDIP(COLOR_LABEL_WIDTH), -1)); + //rgba_title->SetFont(Label::Head_12); + icon_sizer->Add(rgba_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); + return icon_sizer; +} + +void ObjColorPanel::update_color_icon_and_rgba_sizer(int id, const wxColour &color) +{ + if (id < m_color_cluster_text_list.size()) { + auto icon = m_color_cluster_icon_list[id]; + icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16))); + std::string message = get_color_str(color); + m_color_cluster_text_list[id]->SetLabelText(message.c_str()); + } +} diff --git a/src/slic3r/GUI/ObjColorDialog.hpp b/src/slic3r/GUI/ObjColorDialog.hpp new file mode 100644 index 0000000000..6019035973 --- /dev/null +++ b/src/slic3r/GUI/ObjColorDialog.hpp @@ -0,0 +1,114 @@ +#ifndef _OBJ_COLOR_DIALOG_H_ +#define _OBJ_COLOR_DIALOG_H_ + +#include "GUI_Utils.hpp" +#include "libslic3r/Color.hpp" +#include +#include +#include +#include +#include +#include +class Button; +class Label; +class ComboBox; +struct ColorDistValue +{ + int id; + float distance; +}; +class ObjColorPanel : public wxPanel +{ +public: + // BBS + ObjColorPanel(wxWindow * parent, + std::vector & input_colors,bool is_single_color, + const std::vector & extruder_colours, + std::vector & filament_ids, + unsigned char & first_extruder_id); + void msw_rescale(); + bool is_ok(); + void update_filament_ids(); + struct ButtonState + { + ComboBox* bitmap_combox{nullptr}; + bool is_map{false};//int id{0}; + }; +private: + wxBoxSizer *create_approximate_match_btn_sizer(wxWindow *parent); + wxBoxSizer *create_add_btn_sizer(wxWindow *parent); + wxBoxSizer *create_reset_btn_sizer(wxWindow *parent); + wxBoxSizer *create_extruder_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color); + std::string get_color_str(const wxColour &color); + void create_result_button_sizer(wxWindow *parent, int id); + wxBoxSizer *create_color_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color); + void update_color_icon_and_rgba_sizer(int id, const wxColour &color); + ComboBox* CreateEditorCtrl(wxWindow *parent,int id); + void draw_table(); + void show_sizer(wxSizer *sizer, bool show); + void redraw_part_table(); + void deal_approximate_match_btn(); + void deal_add_btn(); + void deal_reset_btn(); + void deal_algo(char cluster_number,bool redraw_ui =false); + void deal_default_strategy(); +private: + //view ui + wxScrolledWindow * m_scrolledWindow = nullptr; + wxPanel * m_page_simple = nullptr; + wxBoxSizer * m_sizer = nullptr; + wxBoxSizer * m_sizer_simple = nullptr; + wxTextCtrl *m_color_cluster_num_by_user_ebox{nullptr}; + wxStaticText * m_warning_text{nullptr}; + Button * m_quick_approximate_match_btn{nullptr}; + Button * m_quick_add_btn{nullptr}; + Button * m_quick_reset_btn{nullptr}; + std::vector m_extruder_icon_list; + std::vector m_color_cluster_icon_list;//need modeify + std::vector m_color_cluster_text_list;//need modeify + std::vector m_row_sizer_list; // control show or not + std::vector m_result_icon_list; + int m_last_cluster_num{-1}; + const int m_combox_width{50}; + int m_combox_icon_width; + int m_combox_icon_height; + wxGridSizer* m_gridsizer = nullptr; + wxStaticText * m_test = nullptr; + //data + char m_last_cluster_number{-2}; + std::vector& m_input_colors; + int m_color_num_recommend{0}; + int m_color_cluster_num_by_algo{0}; + int m_input_colors_size{0}; + std::vector m_colours;//from project and show right + std::vector m_cluster_map_filaments;//show middle + std::vector m_cluster_colours;//from_algo and show left + bool m_can_add_filament{true}; + std::vector m_new_add_colors; + //algo result + std::vector m_cluster_colors_from_algo; + std::vector m_cluster_labels_from_algo; + //result + bool m_is_add_filament{false}; + unsigned char& m_first_extruder_id; + std::vector &m_filament_ids; +}; + +class ObjColorDialog : public Slic3r::GUI::DPIDialog +{ +public: + ObjColorDialog(wxWindow * parent, + std::vector& input_colors, bool is_single_color, + const std::vector & extruder_colours, + std::vector& filament_ids, + unsigned char & first_extruder_id); + wxBoxSizer* create_btn_sizer(long flags); + void on_dpi_changed(const wxRect &suggested_rect) override; +private: + ObjColorPanel* m_panel_ObjColor = nullptr; + std::unordered_map m_button_list; + std::vector& m_filament_ids; + unsigned char & m_first_extruder_id; +}; + +#endif // _WIPE_TOWER_DIALOG_H_ \ No newline at end of file diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index b320ea4f4a..cc28670443 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1,8 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Tomáš Mészáros @tamasmeszaros, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2020 Gianni Ceccarelli @dakkar -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "ObjectDataViewModel.hpp" #include "slic3r/GUI/wxExtensions.hpp" #include "wxExtensions.hpp" @@ -43,8 +38,8 @@ void ObjectDataViewModelNode::init_container() #endif //__WXGTK__ } -static constexpr char LayerRootIcon[] = "blank"; -static constexpr char LayerIcon[] = "blank"; +static constexpr char LayerRootIcon[] = "height_range_modifier"; +static constexpr char LayerIcon[] = "height_range_layer"; static constexpr char WarningIcon[] = "obj_warning"; static constexpr char WarningManifoldIcon[] = "obj_warning"; static constexpr char LockIcon[] = "cut_"; @@ -232,7 +227,7 @@ void ObjectDataViewModelNode::set_color_icon(bool enable) return; m_color_enable = enable; if ((m_type & itObject) && enable) - m_color_icon = create_scaled_bitmap("mmu_segmentation"); + m_color_icon = create_scaled_bitmap("objlist_color_painting"); else m_color_icon = create_scaled_bitmap("dot"); } @@ -243,7 +238,7 @@ void ObjectDataViewModelNode::set_support_icon(bool enable) return; m_support_enable = enable; if ((m_type & itObject) && enable) - m_support_icon = create_scaled_bitmap("toolbar_support"); + m_support_icon = create_scaled_bitmap("objlist_support_painting"); else m_support_icon = create_scaled_bitmap("dot"); } @@ -558,13 +553,19 @@ void ObjectDataViewModel::UpdateBitmapForNode(ObjectDataViewModelNode *node) std::vector bmps; if (node->has_warning_icon()) bmps.emplace_back(node->warning_icon_name() == WarningIcon ? m_warning_bmp : m_warning_manifold_bmp); - if (node->has_lock()) + if (node->has_lock()) { + if (!bmps.empty()) // ORCA: Add spacing between icons if there are multiple + bmps.emplace_back(create_scaled_bitmap("dot", nullptr, int(wxGetApp().em_unit() / 10) * 4)); bmps.emplace_back(m_lock_bmp); - if (is_volume_node) + } + if (is_volume_node) { + if (!bmps.empty()) // ORCA: Add spacing between icons if there are multiple + bmps.emplace_back(create_scaled_bitmap("dot", nullptr, int(wxGetApp().em_unit() / 10) * 4)); bmps.emplace_back( node->is_text_volume() ? m_text_volume_bmps[vol_type] : node->is_svg_volume() ? m_svg_volume_bmps[vol_type] : m_volume_bmps[vol_type]); + } bmp = m_bitmap_cache->insert(scaled_bitmap_name, bmps); } @@ -1532,7 +1533,10 @@ void ObjectDataViewModel::assembly_name(ObjectDataViewModelNode* item, wxString auto type = this->GetItemType(wxDataViewItem(item)); if (type != itPlate) { wxString str = name + ":" + item->GetName(); - assembly_name_list.push_back(std::make_pair(item, str)); + assembly_name_list.push_back(std::make_tuple(item, str, str)); + } + else { + assembly_name_list.push_back(std::make_tuple(item, name, name)); } for (size_t i = 0; i < item->GetChildCount(); ++i) { wxString str_name = name + ":" + item->GetName(); @@ -1552,18 +1556,27 @@ void ObjectDataViewModel::search_object(wxString search_text) search_found_list.clear(); search_text = search_text.MakeLower(); - for (auto pair : assembly_name_list) { - wxString need_str = pair.second.AfterFirst(':'); - need_str = need_str.MakeLower(); - size_t pos = need_str.find(search_text); - if ( pos != wxString::npos) { - size_t len = search_text.length(); - size_t before_size = pair.second.BeforeFirst(':').length(); - wxString new_search_str = "" + pair.second.Mid(before_size + pos + 1, len) + ""; - wxString new_str = pair.second.Mid(0, before_size + pos + 1) + new_search_str + pair.second.Mid(before_size + pos + len + 1, wxString::npos); + for (const auto& [model_node, name, tip] : assembly_name_list) { + wxString sub_str = name; + sub_str = sub_str.MakeLower(); - search_found_list.push_back(std::make_pair(pair.first, new_str)); + wxString new_str = ""; + size_t search_text_len = search_text.length(); + size_t curr_str_len = 0; + size_t pos = sub_str.find(search_text); + while (pos != wxString::npos) { + wxString new_search_str = "" + name.Mid(curr_str_len + pos, search_text_len) + ""; + new_str += name.Mid(curr_str_len, pos) + new_search_str; + curr_str_len += search_text_len + pos; + sub_str = sub_str.substr(pos + search_text_len); + pos = sub_str.find(search_text); } + + if (curr_str_len > 0 && curr_str_len < name.length()) { + new_str += name.substr(curr_str_len); + } + if (!new_str.empty()) + search_found_list.push_back(std::tuple(model_node, new_str, tip)); } } } diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 47ac80d3d3..5cb4cf5ef2 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Enrico Turri @enricoturri1966, David Kocík @kocikdav, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_ObjectDataViewModel_hpp_ #define slic3r_GUI_ObjectDataViewModel_hpp_ @@ -341,8 +337,8 @@ class ObjectDataViewModel :public wxDataViewModel ObjectDataViewModelNode* m_plate_outside; wxDataViewCtrl* m_ctrl { nullptr }; - std::vector> assembly_name_list; - std::vector> search_found_list; + std::vector> assembly_name_list; + std::vector> search_found_list; std::map m_ui_and_3d_volume_map; public: @@ -518,9 +514,9 @@ public: void assembly_name(ObjectDataViewModelNode* item, wxString name); void assembly_name(); - std::vector> get_assembly_name_list() { return assembly_name_list; } + std::vector> get_assembly_name_list() const { return assembly_name_list; } void search_object(wxString search_text); - std::vector> get_found_list() { return search_found_list; } + std::vector> get_found_list() const { return search_found_list; } void sys_color_changed(); diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index 12912d750d..45879b9a40 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "OpenGLManager.hpp" diff --git a/src/slic3r/GUI/OpenGLManager.hpp b/src/slic3r/GUI/OpenGLManager.hpp index 65a3dce6e8..52d50a9578 100644 --- a/src/slic3r/GUI/OpenGLManager.hpp +++ b/src/slic3r/GUI/OpenGLManager.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Enrico Turri @enricoturri1966, Lukáš Matěna @lukasmatena, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_OpenGLManager_hpp_ #define slic3r_OpenGLManager_hpp_ diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index eb25999cc8..4a1299b119 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -289,7 +289,7 @@ void OptionsGroup::activate_line(Line& line) // Set sidetext width for a better alignment of options in line // "m_show_modified_btns==true" means that options groups are in tabs if (option_set.size() > 1 && m_use_custom_ctrl) { - // sublabel_width = Field::def_width(); + sublabel_width = Field::def_width() + 1; sidetext_width = Field::def_width_thinner(); } @@ -532,6 +532,9 @@ bool OptionsGroup::activate(std::function throw_if_canceled/* = [](){}*/ return true; } + +void free_window(wxWindow *win); + // delete all controls from the option group void OptionsGroup::clear(bool destroy_custom_ctrl) { @@ -560,8 +563,10 @@ void OptionsGroup::clear(bool destroy_custom_ctrl) if (custom_ctrl) { for (auto const &item : m_fields) { wxWindow* win = item.second.get()->getWindow(); - if (win) + if (win) { + free_window(win); win = nullptr; + } } //BBS: custom_ctrl already destroyed from sizer->clear(), no need to destroy here anymore if (destroy_custom_ctrl) @@ -692,8 +697,9 @@ void ConfigOptionsGroup::back_to_config_value(const DynamicPrintConfig& config, opt_key == "printable_area" || opt_key == "compatible_printers" || opt_key == "compatible_prints" || opt_key == "thumbnails" || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model") { value = get_config_value(config, opt_key); - this->change_opt_value(opt_key, value); - OptionsGroup::on_change_OG(opt_key, value); + set_value(opt_key, value); + this->change_opt_value(opt_key, get_value(opt_key)); + OptionsGroup::on_change_OG(opt_key, get_value(opt_key)); return; } else { auto opt_id = m_opt_map.find(opt_key)->first; @@ -1048,6 +1054,11 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config ret = 0; break; } + if (!config.has("other_layers_sequence_choice") && opt_key == "other_layers_sequence_choice") { + // reset to Auto value + ret = 0; + break; + } if (!config.has("curr_bed_type") && opt_key == "curr_bed_type") { // reset to global value DynamicConfig& global_cfg = wxGetApp().preset_bundle->project_config; @@ -1067,8 +1078,6 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config if (opt_key == "printable_area") ret = get_thumbnails_string(config.option(opt_key)->values); else if (opt_key == "bed_exclude_area") - ret = get_thumbnails_string(config.option(opt_key)->values); - else if (opt_key == "thumbnails") ret = get_thumbnails_string(config.option(opt_key)->values); else ret = config.option(opt_key)->get_at(idx); @@ -1183,8 +1192,6 @@ boost::any ConfigOptionsGroup::get_config_value2(const DynamicPrintConfig& confi ret = get_thumbnails_string(config.option(opt_key)->values); else if (opt_key == "bed_exclude_area") ret = get_thumbnails_string(config.option(opt_key)->values); - else if (opt_key == "thumbnails") - ret = get_thumbnails_string(config.option(opt_key)->values); else ret = config.option(opt_key)->get_at(idx); break; diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp index 8c7585cd83..a3809a0cb7 100644 --- a/src/slic3r/GUI/OptionsGroup.hpp +++ b/src/slic3r/GUI/OptionsGroup.hpp @@ -324,9 +324,9 @@ protected: // It is designed for single extruder multiple material machine. class ExtruderOptionsGroup : public ConfigOptionsGroup { public: - ExtruderOptionsGroup(wxWindow* parent, const wxString& title, DynamicPrintConfig* config = nullptr, + ExtruderOptionsGroup(wxWindow* parent, const wxString& title, const wxString& icon, DynamicPrintConfig* config = nullptr, // ORCA: add support for icons bool is_tab_opt = false, column_t extra_clmn = nullptr) : - ConfigOptionsGroup(parent, title, wxEmptyString, config, is_tab_opt, extra_clmn) {} + ConfigOptionsGroup(parent, title, icon, config, is_tab_opt, extra_clmn) {} void on_change_OG(const t_config_option_key& opt_id, const boost::any& value) override; }; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 61480e49af..c4dfc651b9 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -282,16 +282,12 @@ PrintSequence PartPlate::get_print_seq() const PrintSequence PartPlate::get_real_print_seq(bool* plate_same_as_global) const { - PrintSequence global_print_seq = PrintSequence::ByDefault; - auto curr_preset_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - if (curr_preset_config.has("print_sequence")) - global_print_seq = curr_preset_config.option>("print_sequence")->value; - + PrintSequence global_print_seq = wxGetApp().global_print_sequence(); PrintSequence curr_plate_seq = get_print_seq(); if (curr_plate_seq == PrintSequence::ByDefault) { curr_plate_seq = global_print_seq; } - + if(plate_same_as_global) *plate_same_as_global = (curr_plate_seq == global_print_seq); @@ -323,8 +319,20 @@ void PartPlate::set_spiral_vase_mode(bool spiral_mode, bool as_global) std::string key = "spiral_mode"; if (as_global) m_config.erase(key); - else - m_config.set_key_value(key, new ConfigOptionBool(spiral_mode)); + else { + if (spiral_mode) { + if (get_spiral_vase_mode()) + return; + // Secondary confirmation + auto answer = static_cast(wxGetApp().plate_tab)->show_spiral_mode_settings_dialog(false); + if (answer == wxID_YES) { + m_config.set_key_value(key, new ConfigOptionBool(true)); + set_vase_mode_related_object_config(); + } + } + else + m_config.set_key_value(key, new ConfigOptionBool(false)); + } } bool PartPlate::valid_instance(int obj_id, int instance_id) @@ -460,7 +468,14 @@ void PartPlate::calc_gridlines(const ExPolygon& poly, const BoundingBox& pp_bbox Polylines axes_lines, axes_lines_bolder; int count = 0; - for (coord_t x = pp_bbox.min(0); x <= pp_bbox.max(0); x += scale_(10.0)) { + int step = 10; + // Orca: use 500 x 500 bed size as baseline. + auto grid_counts = pp_bbox.size() / ((coord_t) scale_(step * 50)); + // if the grid is too dense, we increase the step + if (grid_counts.minCoeff() > 1) { + step = static_cast(grid_counts.minCoeff() + 1) * 10; + } + for (coord_t x = pp_bbox.min(0); x <= pp_bbox.max(0); x += scale_(step)) { Polyline line; line.append(Point(x, pp_bbox.min(1))); line.append(Point(x, pp_bbox.max(1))); @@ -472,7 +487,7 @@ void PartPlate::calc_gridlines(const ExPolygon& poly, const BoundingBox& pp_bbox count ++; } count = 0; - for (coord_t y = pp_bbox.min(1); y <= pp_bbox.max(1); y += scale_(10.0)) { + for (coord_t y = pp_bbox.min(1); y <= pp_bbox.max(1); y += scale_(step)) { Polyline line; line.append(Point(pp_bbox.min(0), y)); line.append(Point(pp_bbox.max(0), y)); @@ -1020,16 +1035,17 @@ void PartPlate::render_icons(bool bottom, bool only_name, int hover_id) else render_icon_texture(m_plate_name_edit_icon.model, m_partplate_list->m_plate_name_edit_texture); - if (m_partplate_list->render_plate_settings) { + if (m_partplate_list->render_plate_settings) { + bool has_plate_settings = get_bed_type() != BedType::btDefault || get_print_seq() != PrintSequence::ByDefault || !get_first_layer_print_sequence().empty() || !get_other_layers_print_sequence().empty() || has_spiral_mode_config(); if (hover_id == 5) { - if (get_bed_type() == BedType::btDefault && get_print_seq() == PrintSequence::ByDefault && get_first_layer_print_sequence().empty()) + if (!has_plate_settings) render_icon_texture(m_plate_settings_icon.model, m_partplate_list->m_plate_settings_hovered_texture); else render_icon_texture(m_plate_settings_icon.model, m_partplate_list->m_plate_settings_changed_hovered_texture); show_tooltip(_u8L("Customize current plate")); } else { - if (get_bed_type() == BedType::btDefault && get_print_seq() == PrintSequence::ByDefault && get_first_layer_print_sequence().empty()) + if (!has_plate_settings) render_icon_texture(m_plate_settings_icon.model, m_partplate_list->m_plate_settings_texture); else render_icon_texture(m_plate_settings_icon.model, m_partplate_list->m_plate_settings_changed_texture); @@ -1569,11 +1585,12 @@ std::vector PartPlate::get_used_extruders() if (!result) return used_extruders; + std::set used_extruders_set; PrintEstimatedStatistics& ps = result->print_statistics; - for (auto it = ps.volumes_per_extruder.begin(); it != ps.volumes_per_extruder.end(); it++) { - used_extruders.push_back(it->first + 1); - } - return used_extruders; + for (const auto& item : ps.total_volumes_per_extruder) + used_extruders_set.emplace(item.first + 1); + + return std::vector(used_extruders_set.begin(), used_extruders_set.end()); } Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, const double w, const double d, int plate_extruder_size, bool use_global_objects) const @@ -1657,10 +1674,11 @@ arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const Dynamic float w = dynamic_cast(config.option("prime_tower_width"))->value; //float a = dynamic_cast(config.option("wipe_tower_rotation_angle"))->value; float v = dynamic_cast(config.option("prime_volume"))->value; - Vec3d wipe_tower_size = estimate_wipe_tower_size(config, w, v, plate_extruder_size, use_global_objects); + float tower_brim_width = dynamic_cast(config.option("prime_tower_brim_width"))->value; + Vec3d wipe_tower_size = estimate_wipe_tower_size(config, w, v, plate_extruder_size, use_global_objects); int plate_width=m_width, plate_depth=m_depth; float depth = wipe_tower_size(1); - float margin = WIPE_TOWER_MARGIN, wp_brim_width = 0.f; + float margin = WIPE_TOWER_MARGIN + tower_brim_width, wp_brim_width = 0.f; const ConfigOption* wipe_tower_brim_width_opt = config.option("prime_tower_brim_width"); if (wipe_tower_brim_width_opt) { wp_brim_width = wipe_tower_brim_width_opt->getFloat(); @@ -1900,6 +1918,16 @@ bool PartPlate::is_valid_gcode_file() return true; } +ModelObjectPtrs PartPlate::get_objects_on_this_plate() { + ModelObjectPtrs objects_ptr; + int obj_id; + for (auto it = obj_to_instance_set.begin(); it != obj_to_instance_set.end(); it++) { + obj_id = it->first; + objects_ptr.push_back(m_model->objects[obj_id]); + } + return objects_ptr; +} + ModelInstance* PartPlate::get_instance(int obj_id, int instance_id) { if (!contain_instance(obj_id, instance_id)) @@ -1969,13 +1997,10 @@ bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* boundi ModelInstance* instance = object->instances[instance_id]; BoundingBoxf3 instance_box = bounding_box? *bounding_box: object->instance_convex_hull_bounding_box(instance_id); - Vec3d up_point = m_bounding_box.max + Vec3d(Slic3r::BuildVolume::SceneEpsilon, Slic3r::BuildVolume::SceneEpsilon, - m_origin.z() + m_height + Slic3r::BuildVolume::SceneEpsilon); - Vec3d low_point = m_bounding_box.min + Vec3d(-Slic3r::BuildVolume::SceneEpsilon, -Slic3r::BuildVolume::SceneEpsilon, - m_origin.z() - Slic3r::BuildVolume::SceneEpsilon); - Polygon hull = instance->convex_hull_2d(); - if (instance_box.max.z() > low_point.z()) low_point.z() += instance_box.min.z(); // not considering outsize if sinking - BoundingBoxf3 plate_box(low_point, up_point); + Polygon hull = instance->convex_hull_2d(); + BoundingBoxf3 plate_box = get_plate_box(); + if (instance_box.max.z() > plate_box.min.z()) + plate_box.min.z() += instance_box.min.z(); // not considering outsize if sinking if (plate_box.contains(instance_box)) { @@ -2018,15 +2043,7 @@ bool PartPlate::intersect_instance(int obj_id, int instance_id, BoundingBoxf3* b ModelObject* object = m_model->objects[obj_id]; ModelInstance* instance = object->instances[instance_id]; BoundingBoxf3 instance_box = bounding_box? *bounding_box: object->instance_convex_hull_bounding_box(instance_id); - Vec3d up_point = - m_bounding_box.max + Vec3d(Slic3r::BuildVolume::SceneEpsilon, Slic3r::BuildVolume::SceneEpsilon, - m_origin.z() + m_height + Slic3r::BuildVolume::SceneEpsilon); - Vec3d low_point = - m_bounding_box.min + Vec3d(-Slic3r::BuildVolume::SceneEpsilon, -Slic3r::BuildVolume::SceneEpsilon, - m_origin.z() - Slic3r::BuildVolume::SceneEpsilon); - BoundingBoxf3 plate_box(low_point, up_point); - - result = plate_box.intersects(instance_box); + result = get_plate_box().intersects(instance_box); } else { @@ -2069,7 +2086,7 @@ int PartPlate::add_instance(int obj_id, int instance_id, bool move_position, Bou ModelInstance* instance = object->instances[instance_id]; std::pair pair(obj_id, instance_id); - obj_to_instance_set.insert(pair); + obj_to_instance_set.insert(pair); BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": plate_id %1%, add instance obj_id %2%, instance_id %3%, move_position %4%") % m_plate_index % obj_id % instance_id % move_position; @@ -2129,6 +2146,27 @@ int PartPlate::remove_instance(int obj_id, int instance_id) return result; } +BoundingBoxf3 PartPlate::get_objects_bounding_box() +{ + BoundingBoxf3 bbox; + for (std::set>::iterator it = obj_to_instance_set.begin(); it != obj_to_instance_set.end(); ++it) + { + int obj_id = it->first; + int instance_id = it->second; + + if ((obj_id >= 0) && (obj_id < m_model->objects.size())) + { + ModelObject* object = m_model->objects[obj_id]; + if ((instance_id >= 0) && (instance_id < object->instances.size())) + { + BoundingBoxf3 instance_bbox = object->instance_bounding_box(instance_id); + bbox.merge(instance_bbox); + } + } + } + return bbox; +} + //translate instance on the plate void PartPlate::translate_all_instance(Vec3d position) { @@ -2267,6 +2305,43 @@ void PartPlate::update_object_index(int obj_idx_removed, int obj_idx_max) } +void PartPlate::set_vase_mode_related_object_config(int obj_id) { + ModelObjectPtrs obj_ptrs; + if (obj_id != -1) { + ModelObject* object = m_model->objects[obj_id]; + obj_ptrs.push_back(object); + } + else + obj_ptrs = get_objects_on_this_plate(); + + DynamicPrintConfig* global_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + DynamicPrintConfig new_conf; + new_conf.set_key_value("wall_loops", new ConfigOptionInt(1)); + new_conf.set_key_value("top_shell_layers", new ConfigOptionInt(0)); + new_conf.set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); + new_conf.set_key_value("enable_support", new ConfigOptionBool(false)); + new_conf.set_key_value("enforce_support_layers", new ConfigOptionInt(0)); + new_conf.set_key_value("detect_thin_wall", new ConfigOptionBool(false)); + new_conf.set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); + new_conf.set_key_value("overhang_reverse", new ConfigOptionBool(false)); + new_conf.set_key_value("wall_direction", new ConfigOptionEnum(WallDirection::Auto)); + auto applying_keys = global_config->diff(new_conf); + + for (ModelObject* object : obj_ptrs) { + ModelConfigObject& config = object->config; + + for (auto opt_key : applying_keys) { + config.set_key_value(opt_key, new_conf.option(opt_key)->clone()); + } + + applying_keys = config.get().diff(new_conf); + for (auto opt_key : applying_keys) { + config.set_key_value(opt_key, new_conf.option(opt_key)->clone()); + } + } + //wxGetApp().obj_list()->update_selections(); +} + int PartPlate::printable_instance_size() { int size = 0; @@ -2512,7 +2587,7 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon) bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Vec2d position, float height_to_lid, float height_to_rod) { Pointfs new_shape, new_exclude_areas; - + m_raw_shape = shape; for (const Vec2d& p : shape) { new_shape.push_back(Vec2d(p.x() + position.x(), p.y() + position.y())); } @@ -2889,6 +2964,20 @@ std::vector PartPlate::get_first_layer_print_sequence() const return std::vector(); } +std::vector PartPlate::get_other_layers_print_sequence() const +{ + const ConfigOptionInts* other_layers_print_sequence_op = m_config.option("other_layers_print_sequence"); + const ConfigOptionInt* other_layers_print_sequence_nums_op = m_config.option("other_layers_print_sequence_nums"); + if (other_layers_print_sequence_op && other_layers_print_sequence_nums_op) { + const std::vector& print_sequence = other_layers_print_sequence_op->values; + int sequence_nums = other_layers_print_sequence_nums_op->value; + auto other_layers_seqs = Slic3r::get_other_layers_print_sequence(sequence_nums, print_sequence); + return other_layers_seqs; + } + else + return {}; +} + void PartPlate::set_first_layer_print_sequence(const std::vector& sorted_filaments) { if (sorted_filaments.size() > 0) { @@ -2908,8 +2997,52 @@ void PartPlate::set_first_layer_print_sequence(const std::vector& sorted_fi } } +void PartPlate::set_other_layers_print_sequence(const std::vector& layer_seq_list) +{ + if (layer_seq_list.empty()) { + m_config.erase("other_layers_print_sequence"); + m_config.erase("other_layers_print_sequence_nums"); + return; + } + + int sequence_nums; + std::vector other_layers_seqs; + Slic3r::get_other_layers_print_sequence(layer_seq_list, sequence_nums, other_layers_seqs); + ConfigOptionInts* other_layers_print_sequence_op = m_config.option("other_layers_print_sequence"); + ConfigOptionInt* other_layers_print_sequence_nums_op = m_config.option("other_layers_print_sequence_nums"); + if (other_layers_print_sequence_op) + other_layers_print_sequence_op->values = other_layers_seqs; + else + m_config.set_key_value("other_layers_print_sequence", new ConfigOptionInts(other_layers_seqs)); + if (other_layers_print_sequence_nums_op) + other_layers_print_sequence_nums_op->value = sequence_nums; + else + m_config.set_key_value("other_layers_print_sequence_nums", new ConfigOptionInt(sequence_nums)); +} + void PartPlate::update_first_layer_print_sequence(size_t filament_nums) { + auto other_layers_seqs = get_other_layers_print_sequence(); + if (!other_layers_seqs.empty()) { + bool need_update_data = false; + for (auto& other_layers_seq : other_layers_seqs) { + std::vector& orders = other_layers_seq.second; + if (orders.size() > filament_nums) { + orders.erase(std::remove_if(orders.begin(), orders.end(), [filament_nums](int n) { return n > filament_nums; }), orders.end()); + need_update_data = true; + } + if (orders.size() < filament_nums) { + for (size_t extruder_id = orders.size(); extruder_id < filament_nums; ++extruder_id) { + orders.push_back(extruder_id + 1); + need_update_data = true; + } + } + } + if (need_update_data) + set_other_layers_print_sequence(other_layers_seqs); + } + + ConfigOptionInts * op_print_sequence_1st = m_config.option("first_layer_print_sequence"); if (!op_print_sequence_1st) { return; @@ -3957,7 +4090,7 @@ int PartPlateList::find_instance_belongs(int obj_id, int instance_id) //notify instance's update, need to refresh the instance in plates //newly added or modified -int PartPlateList::notify_instance_update(int obj_id, int instance_id) +int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_new) { int ret = 0, index; PartPlate* plate = NULL; @@ -3972,6 +4105,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) PartPlate* plate = m_plate_list[obj_id - 1000]; plate->update_slice_result_valid_state( false ); plate->thumbnail_data.reset(); + plate->no_light_thumbnail_data.reset(); plate->top_thumbnail_data.reset(); plate->pick_thumbnail_data.reset(); @@ -4002,12 +4136,14 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) plate->update_states(); plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->no_light_thumbnail_data.reset(); plate->top_thumbnail_data.reset(); plate->pick_thumbnail_data.reset(); return 0; } plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->no_light_thumbnail_data.reset(); plate->top_thumbnail_data.reset(); plate->pick_thumbnail_data.reset(); } @@ -4028,6 +4164,21 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) } } + auto is_object_config_compatible_with_spiral_vase = [](ModelObject* object) { + const DynamicPrintConfig& config = object->config.get(); + if (config.has("wall_loops") && config.opt_int("wall_loops") == 1 && + config.has("top_shell_layers") && config.opt_int("top_shell_layers") == 0 && + config.has("sparse_infill_density") && config.option("sparse_infill_density")->value == 0 && + config.has("enable_support") && !config.opt_bool("enable_support") && + config.has("enforce_support_layers") && config.opt_int("enforce_support_layers") == 0 && + config.has("ensure_vertical_shell_thickness") && config.opt_bool("ensure_vertical_shell_thickness") && + config.has("detect_thin_wall") && !config.opt_bool("detect_thin_wall") && + config.has("timelapse_type") && config.opt_enum("timelapse_type") == TimelapseType::tlTraditional) + return true; + else + return false; + }; + //try to find a new plate for (unsigned int i = 0; i < (unsigned int)m_plate_list.size(); ++i) { @@ -4038,8 +4189,23 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) { //found a new plate, add it to plate plate->add_instance(obj_id, instance_id, false, &boundingbox); + + // spiral mode, update object setting + if (plate->config()->has("spiral_mode") && plate->config()->opt_bool("spiral_mode") && !is_object_config_compatible_with_spiral_vase(object)) { + if (!is_new) { + auto answer = static_cast(wxGetApp().plate_tab)->show_spiral_mode_settings_dialog(true); + if (answer == wxID_YES) { + plate->set_vase_mode_related_object_config(obj_id); + } + } + else { + plate->set_vase_mode_related_object_config(obj_id); + } + } + plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->no_light_thumbnail_data.reset(); plate->top_thumbnail_data.reset(); plate->pick_thumbnail_data.reset(); BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": add it to new plate %1%") % i; @@ -4077,6 +4243,7 @@ int PartPlateList::notify_instance_removed(int obj_id, int instance_id) plate->remove_instance(obj_id, instance_to_delete); plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->no_light_thumbnail_data.reset(); plate->top_thumbnail_data.reset(); plate->pick_thumbnail_data.reset(); } @@ -5001,6 +5168,8 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w %(i+1) %plate_data_item->plate_thumbnail.width %plate_data_item->plate_thumbnail.height %plate_data_item->plate_thumbnail.pixels.size(); plate_data_item->config.apply(*m_plate_list[i]->config()); + if (m_plate_list[i]->no_light_thumbnail_data.is_valid()) + plate_data_item->no_light_thumbnail_file = "valid_no_light"; if (m_plate_list[i]->top_thumbnail_data.is_valid()) plate_data_item->top_file = "valid_top"; if (m_plate_list[i]->pick_thumbnail_data.is_valid()) @@ -5116,6 +5285,13 @@ int PartPlateList::load_from_3mf_structure(PlateDataPtrs& plate_data_list) } } + if (m_plater && !plate_data_list[i]->no_light_thumbnail_file.empty()) { + if (boost::filesystem::exists(plate_data_list[i]->no_light_thumbnail_file)) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": plate %1%, load no_light_thumbnail_file from %2%.")%(i+1) %plate_data_list[i]->no_light_thumbnail_file; + m_plate_list[index]->load_thumbnail_data(plate_data_list[i]->no_light_thumbnail_file, m_plate_list[index]->no_light_thumbnail_data); + } + } + /*if (m_plater && !plate_data_list[i]->pattern_file.empty()) { if (boost::filesystem::exists(plate_data_list[i]->pattern_file)) { //no need to load pattern data currently diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index b6c5d430ff..e0b0e90ace 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -22,6 +22,7 @@ #include "GLModel.hpp" #include "3DBed.hpp" #include "MeshUtils.hpp" +#include "libslic3r/ParameterUtils.hpp" class GLUquadric; typedef class GLUquadric GLUquadricObject; @@ -116,6 +117,7 @@ private: friend class PartPlateList; + Pointfs m_raw_shape; Pointfs m_shape; Pointfs m_exclude_area; BoundingBoxf3 m_bounding_box; @@ -244,6 +246,7 @@ public: //static const int plate_x_offset = 20; //mm //static const double plate_x_gap = 0.2; ThumbnailData thumbnail_data; + ThumbnailData no_light_thumbnail_data; static const int plate_thumbnail_width = 512; static const int plate_thumbnail_height = 512; @@ -291,7 +294,9 @@ public: // BBS Vec2d get_size() const { return Vec2d(m_width, m_depth); } ModelObjectPtrs get_objects() { return m_model->objects; } + ModelObjectPtrs get_objects_on_this_plate(); ModelInstance* get_instance(int obj_id, int instance_id); + BoundingBoxf3 get_objects_bounding_box(); Vec3d get_origin() { return m_origin; } Vec3d estimate_wipe_tower_size(const DynamicPrintConfig & config, const double w, const double d, int plate_extruder_size = 0, bool use_global_objects = false) const; @@ -335,6 +340,9 @@ public: //update object's index caused by original object deleted void update_object_index(int obj_idx_removed, int obj_idx_max); + // set objects configs when enabling spiral vase mode. + void set_vase_mode_related_object_config(int obj_id = -1); + //whether it is empty bool empty() { return obj_to_instance_set.empty(); } @@ -362,10 +370,13 @@ public: void set_hover_id(int id) { m_hover_id = id; } const BoundingBoxf3& get_bounding_box(bool extended = false) { return extended ? m_extended_bounding_box : m_bounding_box; } const BoundingBox get_bounding_box_crd(); + BoundingBoxf3 get_plate_box() {return get_build_volume();} + // Orca: support non-rectangular bed BoundingBoxf3 get_build_volume() { - Vec3d up_point = m_bounding_box.max + Vec3d(0, 0, m_origin.z() + m_height); - Vec3d low_point = m_bounding_box.min + Vec3d(0, 0, m_origin.z()); + auto eps=Slic3r::BuildVolume::SceneEpsilon; + Vec3d up_point = m_bounding_box.max + Vec3d(eps, eps, m_origin.z() + m_height + eps); + Vec3d low_point = m_bounding_box.min + Vec3d(-eps, -eps, m_origin.z() - eps); BoundingBoxf3 plate_box(low_point, up_point); return plate_box; } @@ -460,7 +471,9 @@ public: int load_pattern_box_data(std::string filename); std::vector get_first_layer_print_sequence() const; + std::vector get_other_layers_print_sequence() const; void set_first_layer_print_sequence(const std::vector &sorted_filaments); + void set_other_layers_print_sequence(const std::vector& layer_seq_list); void update_first_layer_print_sequence(size_t filament_nums); void print() const; @@ -733,7 +746,7 @@ public: int find_instance_belongs(int obj_id, int instance_id); //notify instance's update, need to refresh the instance in plates - int notify_instance_update(int obj_id, int instance_id); + int notify_instance_update(int obj_id, int instance_id, bool is_new = false); //notify instance is removed int notify_instance_removed(int obj_id, int instance_id); diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 621248cb11..1ec7b537e3 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -130,6 +130,8 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr this->update_printhost_buttons(); if (opt_key == "printhost_port") this->update_ports(); + if (opt_key == "bbl_use_print_host_webui") + this->update_webui(); }; m_optgroup->append_single_option_line("host_type"); @@ -253,6 +255,19 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr option.opt.width = Field::def_width_wider(); m_optgroup->append_single_option_line(option); + { + // For bbl printers, we build a fake option to control whether the original device tab should be used + ConfigOptionDef def; + def.type = coBool; + def.width = Field::def_width(); + def.label = L("View print host webui in Device tab"); + def.tooltip = L("Replace the BambuLab's device tab with print host webui"); + def.set_default_value(new ConfigOptionBool(false)); + + auto option = Option(def, "bbl_use_print_host_webui"); + m_optgroup->append_single_option_line(option); + } + m_optgroup->append_single_option_line("printhost_authorization_type"); option = m_optgroup->get_option("printhost_apikey"); @@ -402,6 +417,30 @@ void PhysicalPrinterDialog::update_ports() { } } +void PhysicalPrinterDialog::update_webui() +{ + const PrinterTechnology tech = Preset::printer_technology(*m_config); + if (tech == ptFFF) { + const auto opt = m_config->option>("host_type"); + if (opt->value == htSimplyPrint) { + bool bbl_use_print_host_webui = false; + if (Field* printhost_webui_field = m_optgroup->get_field("bbl_use_print_host_webui"); printhost_webui_field) { + if (CheckBox* temp = dynamic_cast(printhost_webui_field); temp) { + bbl_use_print_host_webui = boost::any_cast(temp->get_value()); + } + } + + const std::string v = bbl_use_print_host_webui ? "https://simplyprint.io/panel" : ""; + if (Field* printhost_webui_field = m_optgroup->get_field("print_host_webui"); printhost_webui_field) { + if (wxTextCtrl* temp = dynamic_cast(printhost_webui_field)->text_ctrl(); temp) { + temp->SetValue(v); + } + } + m_config->opt_string("print_host_webui") = v; + } + } +} + void PhysicalPrinterDialog::update_printhost_buttons() { std::unique_ptr host(PrintHost::get_print_host(m_config)); @@ -504,7 +543,8 @@ void PhysicalPrinterDialog::update(bool printer_change) m_optgroup->show_field("host_type"); m_optgroup->enable_field("print_host"); - m_optgroup->enable_field("print_host_webui"); + m_optgroup->show_field("print_host_webui"); + m_optgroup->hide_field("bbl_use_print_host_webui"); m_optgroup->enable_field("printhost_cafile"); m_optgroup->enable_field("printhost_ssl_ignore_revoke"); if (m_printhost_cafile_browse_btn) @@ -516,21 +556,12 @@ void PhysicalPrinterDialog::update(bool printer_change) const auto current_host = temp->GetValue(); if (current_host == L"https://connect.prusa3d.com" || current_host == L"https://app.obico.io" || - current_host == "https://simplyprint.io") { + current_host == "https://simplyprint.io" || current_host == "https://simplyprint.io/panel") { temp->SetValue(wxString()); m_config->opt_string("print_host") = ""; } } } - if (Field* printhost_webui_field = m_optgroup->get_field("print_host_webui"); printhost_webui_field) { - if (wxTextCtrl* temp = dynamic_cast(printhost_webui_field)->text_ctrl(); temp) { - const auto current_host = temp->GetValue(); - if (current_host == "https://simplyprint.io/panel") { - temp->SetValue(wxString()); - m_config->opt_string("print_host_webui") = ""; - } - } - } if (opt->value == htPrusaLink) { // PrusaConnect does NOT allow http digest m_optgroup->show_field("printhost_authorization_type"); AuthorizationType auth_type = m_config->option>("printhost_authorization_type")->value; @@ -548,6 +579,7 @@ void PhysicalPrinterDialog::update(bool printer_change) if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) { if (wxTextCtrl* temp = dynamic_cast(printhost_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) { temp->SetValue(L"https://connect.prusa3d.com"); + m_config->opt_string("print_host") = "https://connect.prusa3d.com"; } } } else if (opt->value == htObico) { // automatically show default obico address @@ -562,17 +594,33 @@ void PhysicalPrinterDialog::update(bool printer_change) if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) { printhost_field->disable(); if (wxTextCtrl* temp = dynamic_cast(printhost_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) { - temp->SetValue("https://simplyprint.io"); - } - m_config->opt_string("print_host") = "https://simplyprint.io"; - } - if (Field* printhost_webui_field = m_optgroup->get_field("print_host_webui"); printhost_webui_field) { - printhost_webui_field->disable(); - if (wxTextCtrl* temp = dynamic_cast(printhost_webui_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) { temp->SetValue("https://simplyprint.io/panel"); } + m_config->opt_string("print_host") = "https://simplyprint.io/panel"; + } + + const auto current_webui = m_config->opt_string("print_host_webui"); + if (!current_webui.empty()) { + if (Field* printhost_webui_field = m_optgroup->get_field("print_host_webui"); printhost_webui_field) { + if (wxTextCtrl* temp = dynamic_cast(printhost_webui_field)->text_ctrl(); temp) { + temp->SetValue("https://simplyprint.io/panel"); + } + } m_config->opt_string("print_host_webui") = "https://simplyprint.io/panel"; } + + // For bbl printers, show option to control the device tab + if (wxGetApp().preset_bundle->is_bbl_vendor()) { + m_optgroup->show_field("bbl_use_print_host_webui"); + const bool use_print_host_webui = !current_webui.empty(); + if (Field* printhost_webui_field = m_optgroup->get_field("bbl_use_print_host_webui"); printhost_webui_field) { + if (CheckBox* temp = dynamic_cast(printhost_webui_field); temp) { + temp->set_value(use_print_host_webui); + } + } + } + + m_optgroup->hide_field("print_host_webui"); m_optgroup->hide_field("printhost_apikey"); m_optgroup->disable_field("printhost_cafile"); m_optgroup->disable_field("printhost_ssl_ignore_revoke"); diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp index 855370568f..b6faff82f9 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.hpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -63,6 +63,7 @@ public: void update_printhost_buttons(); void update_printers(); void update_ports(); + void update_webui(); protected: void on_dpi_changed(const wxRect& suggested_rect) override; diff --git a/src/slic3r/GUI/PlateSettingsDialog.cpp b/src/slic3r/GUI/PlateSettingsDialog.cpp index d45c93091d..88f9391773 100644 --- a/src/slic3r/GUI/PlateSettingsDialog.cpp +++ b/src/slic3r/GUI/PlateSettingsDialog.cpp @@ -1,11 +1,368 @@ #include "PlateSettingsDialog.hpp" - +#include "MsgDialog.hpp" namespace Slic3r { namespace GUI { +static constexpr int MIN_LAYER_VALUE = 2; +static constexpr int MAX_LAYER_VALUE = INT_MAX - 1; wxDEFINE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); +wxDEFINE_EVENT(EVT_NEED_RESORT_LAYERS, wxCommandEvent); -PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title, bool only_first_layer_seq, const wxPoint& pos, const wxSize& size, long style) +bool LayerSeqInfo::operator<(const LayerSeqInfo& another) const +{ + if (this->begin_layer_number < MIN_LAYER_VALUE) + return false; + if (another.begin_layer_number < MIN_LAYER_VALUE) + return true; + if (this->begin_layer_number == another.begin_layer_number) { + if (this->end_layer_number < MIN_LAYER_VALUE) + return false; + if (another.end_layer_number < MIN_LAYER_VALUE) + return true; + return this->end_layer_number < another.end_layer_number; + } + return this->begin_layer_number < another.begin_layer_number; +} + +LayerNumberTextInput::LayerNumberTextInput(wxWindow* parent, int layer_number, wxSize size, Type type, ValueType value_type) + :ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, size, 0, NULL) + , m_layer_number(layer_number) + , m_type(type) + , m_value_type(value_type) +{ + GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_DIGITS)); + GetTextCtrl()->SetFont(::Label::Body_14); + Append(_L("End")); + Append(_L("Customize")); + if (m_value_type == ValueType::End) + SetSelection(0); + if (m_value_type == ValueType::Custom) { + SetSelection(1); + update_label(); + } + + Bind(wxEVT_TEXT, [this](auto& evt) { + if (m_value_type == ValueType::End) { + // TextCtrl->SetValue() will generate a wxEVT_TEXT event + GetTextCtrl()->ChangeValue(_L("End")); + return; + } + evt.Skip(); + }); + + auto validate_input_value = [this](int gui_value) { + // value should not be less than MIN_LAYER_VALUE, and should not be greater than MAX_LAYER_VALUE + gui_value = std::clamp(gui_value, MIN_LAYER_VALUE, MAX_LAYER_VALUE); + + int begin_value; + int end_value; + LayerNumberTextInput* end_layer_input = nullptr; + if (this->m_type == Type::Begin) { + begin_value = gui_value; + end_value = m_another_layer_input->get_layer_number(); + end_layer_input = m_another_layer_input; + } + if (this->m_type == Type::End) { + begin_value = m_another_layer_input->get_layer_number(); + end_value = gui_value; + end_layer_input = this; + } + + // end value should not be less than begin value + if (begin_value > end_value) { + // set new value for end_layer_input + if (this->m_type == Type::Begin) { + if (end_layer_input->is_layer_number_valid()) { + end_layer_input->set_layer_number(begin_value); + } + } + if (this->m_type == Type::End) { + if (!this->is_layer_number_valid()) { + this->set_layer_number(begin_value); + wxCommandEvent evt(EVT_NEED_RESORT_LAYERS); + wxPostEvent(m_parent, evt); + } + else { + // do nothing + // reset to the last value for end_layer_input + } + return; + } + } + m_layer_number = gui_value; + wxCommandEvent evt(EVT_NEED_RESORT_LAYERS); + wxPostEvent(m_parent, evt); + }; + auto commit_layer_number_from_gui = [this, validate_input_value]() { + if (m_value_type == ValueType::End) + return; + + auto gui_str = GetTextCtrl()->GetValue().ToStdString(); + if (gui_str.empty()) { + m_layer_number = -1; + wxCommandEvent evt(EVT_NEED_RESORT_LAYERS); + wxPostEvent(m_parent, evt); + } + if (!gui_str.empty()) { + int gui_value = atoi(gui_str.c_str()); + validate_input_value(gui_value); + } + update_label(); + }; + Bind(wxEVT_TEXT_ENTER, [commit_layer_number_from_gui](wxEvent& evt) { + commit_layer_number_from_gui(); + evt.Skip(); + }); + Bind(wxEVT_KILL_FOCUS, [commit_layer_number_from_gui](wxFocusEvent& evt) { + commit_layer_number_from_gui(); + evt.Skip(); + }); + + Bind(wxEVT_COMBOBOX, [this](auto& e) { + if (e.GetSelection() == 0) { + m_value_type = ValueType::End; + } + else if (e.GetSelection() == 1) { + m_value_type = ValueType::Custom; + m_layer_number = -1; + update_label(); + } + e.Skip(); + }); +} + +void LayerNumberTextInput::update_label() +{ + if (m_value_type == ValueType::End) + return; + + if (!is_layer_number_valid()) { + SetLabel(""); + } + else + SetLabel(std::to_string(m_layer_number)); +} + +void LayerNumberTextInput::set_layer_number(int layer_number) +{ + m_layer_number = layer_number; + if (layer_number == MAX_LAYER_VALUE) + m_value_type = ValueType::End; + else + m_value_type = ValueType::Custom; + + if (m_value_type == ValueType::End) + SetSelection(0); + if (m_value_type == ValueType::Custom) { + SetSelection(1); + update_label(); + } +} + +int LayerNumberTextInput::get_layer_number() +{ + return m_value_type == ValueType::End ? MAX_LAYER_VALUE : m_layer_number; +} + +bool LayerNumberTextInput::is_layer_number_valid() +{ + if (m_value_type == ValueType::End) + return true; + return m_layer_number >= MIN_LAYER_VALUE; +} + +OtherLayersSeqPanel::OtherLayersSeqPanel(wxWindow* parent) + :wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) +{ + m_bmp_delete = ScalableBitmap(this, "delete_filament"); + m_bmp_add = ScalableBitmap(this, "add_filament"); + + SetBackgroundColour(*wxWHITE); + + wxBoxSizer* top_sizer = new wxBoxSizer(wxVERTICAL); + + wxBoxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL); + m_other_layer_print_seq_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240), -1), 0, NULL, wxCB_READONLY); + m_other_layer_print_seq_choice->Append(_L("Auto")); + m_other_layer_print_seq_choice->Append(_L("Customize")); + m_other_layer_print_seq_choice->SetSelection(0); + wxStaticText* other_layer_txt = new wxStaticText(this, wxID_ANY, _L("Other layer filament sequence")); + other_layer_txt->SetFont(Label::Body_14); + title_sizer->Add(other_layer_txt, 0, wxALIGN_CENTER | wxALIGN_LEFT, 0); + title_sizer->AddStretchSpacer(); + title_sizer->Add(m_other_layer_print_seq_choice, 0, wxALIGN_CENTER | wxALIGN_RIGHT, 0); + + wxBoxSizer* buttons_sizer = new wxBoxSizer(wxHORIZONTAL); + ScalableButton* add_layers_btn = new ScalableButton(this, wxID_ANY, m_bmp_add); + add_layers_btn->SetBackgroundColour(GetBackgroundColour()); + ScalableButton* delete_layers_btn = new ScalableButton(this, wxID_ANY, m_bmp_delete); + delete_layers_btn->SetBackgroundColour(GetBackgroundColour()); + buttons_sizer->Add(add_layers_btn, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + buttons_sizer->Add(delete_layers_btn, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + buttons_sizer->Show(false); + + m_layer_input_panel = new wxPanel(this); + wxBoxSizer* layer_panel_sizer = new wxBoxSizer(wxVERTICAL); + m_layer_input_panel->SetSizer(layer_panel_sizer); + m_layer_input_panel->Hide(); + append_layer(); + + top_sizer->Add(title_sizer, 0, wxEXPAND, 0); + top_sizer->Add(buttons_sizer, 0, wxALIGN_CENTER, 0); + top_sizer->Add(m_layer_input_panel, 0, wxEXPAND, 0); + + SetSizer(top_sizer); + Layout(); + top_sizer->Fit(this); + + + m_other_layer_print_seq_choice->Bind(wxEVT_COMBOBOX, [this, buttons_sizer](auto& e) { + if (e.GetSelection() == 0) { + m_layer_input_panel->Show(false); + buttons_sizer->Show(false); + } + else if (e.GetSelection() == 1) { + m_layer_input_panel->Show(true); + buttons_sizer->Show(true); + } + m_parent->Layout(); + m_parent->Fit(); + }); + add_layers_btn->Bind(wxEVT_BUTTON, [this](wxEvent&) { + Freeze(); + append_layer(); + m_parent->Layout(); + m_parent->Fit(); + Thaw(); + }); + delete_layers_btn->Bind(wxEVT_BUTTON, [this](wxEvent&) { + popup_layer(); + m_parent->Layout(); + m_parent->Fit(); + }); + Bind(EVT_NEED_RESORT_LAYERS, [this](auto& evt) { + std::vector result; + for (int i = 0; i < m_layer_input_sizer_list.size(); i++) { + int begin_layer_number = m_begin_layer_input_list[i]->get_layer_number(); + int end_layer_number = m_end_layer_input_list[i]->get_layer_number(); + result.push_back({ begin_layer_number, end_layer_number, m_drag_canvas_list[i]->get_shape_list_order() }); + } + if (!std::is_sorted(result.begin(), result.end())) { + std::sort(result.begin(), result.end()); + sync_layers_print_seq(1, result); + } + result.swap(m_layer_seq_infos); + }); + Bind(EVT_SET_BED_TYPE_CONFIRM, [this](auto& evt) { + std::vector result; + for (int i = 0; i < m_layer_input_sizer_list.size(); i++) { + int begin_layer_number = m_begin_layer_input_list[i]->get_layer_number(); + int end_layer_number = m_end_layer_input_list[i]->get_layer_number(); + + if (!m_begin_layer_input_list[i]->is_layer_number_valid() || !m_end_layer_input_list[i]->is_layer_number_valid()) { + MessageDialog msg_dlg(nullptr, _L("Please input layer value (>= 2)."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + evt.SetString("Invalid"); + return; + } + + result.push_back({ begin_layer_number, end_layer_number, m_drag_canvas_list[i]->get_shape_list_order() }); + } + result.swap(m_layer_seq_infos); + }); +} + +void OtherLayersSeqPanel::append_layer(const LayerSeqInfo* layer_info) +{ + wxBoxSizer* layer_panel_sizer = static_cast(m_layer_input_panel->GetSizer()); + + wxStaticText* choose_layer_head_txt = new wxStaticText(m_layer_input_panel, wxID_ANY, _L("Layer")); + choose_layer_head_txt->SetFont(Label::Body_14); + + LayerNumberTextInput* begin_layer_input = new LayerNumberTextInput(m_layer_input_panel, -1, wxSize(FromDIP(100), -1), LayerNumberTextInput::Type::Begin, LayerNumberTextInput::ValueType::Custom); + + wxStaticText* choose_layer_to_txt = new wxStaticText(m_layer_input_panel, wxID_ANY, _L("to")); + choose_layer_to_txt->SetFont(Label::Body_14); + + LayerNumberTextInput* end_layer_input = new LayerNumberTextInput(m_layer_input_panel, -1, wxSize(FromDIP(100), -1), LayerNumberTextInput::Type::End, LayerNumberTextInput::ValueType::End); + + begin_layer_input->link(end_layer_input); + if (m_begin_layer_input_list.size() == 0) { + begin_layer_input->set_layer_number(MIN_LAYER_VALUE); + end_layer_input->set_layer_number(MAX_LAYER_VALUE); + } + + const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); + std::vector order(extruder_colours.size()); + for (int i = 0; i < order.size(); i++) { + order[i] = i + 1; + } + auto drag_canvas = new DragCanvas(m_layer_input_panel, extruder_colours, order); + + if (layer_info) { + begin_layer_input->set_layer_number(layer_info->begin_layer_number); + end_layer_input->set_layer_number(layer_info->end_layer_number); + drag_canvas->set_shape_list(extruder_colours, layer_info->print_sequence); + } + + wxBoxSizer* single_layer_input_sizer = new wxBoxSizer(wxHORIZONTAL); + single_layer_input_sizer->Add(choose_layer_head_txt, 0, wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + single_layer_input_sizer->Add(begin_layer_input, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + single_layer_input_sizer->Add(choose_layer_to_txt, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, 0); + single_layer_input_sizer->Add(end_layer_input, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + single_layer_input_sizer->AddStretchSpacer(); + single_layer_input_sizer->Add(drag_canvas, 0, wxLEFT | wxALIGN_CENTER, FromDIP(5)); + layer_panel_sizer->Add(single_layer_input_sizer, 0, wxEXPAND | wxALIGN_CENTER | wxBOTTOM, FromDIP(10)); + m_layer_input_sizer_list.push_back(single_layer_input_sizer); + m_begin_layer_input_list.push_back(begin_layer_input); + m_end_layer_input_list.push_back(end_layer_input); + m_drag_canvas_list.push_back(drag_canvas); +} + +void OtherLayersSeqPanel::popup_layer() +{ + if (m_layer_input_sizer_list.size() > 1) { + m_layer_input_sizer_list.back()->Clear(true); + m_layer_input_sizer_list.pop_back(); + m_begin_layer_input_list.pop_back(); + m_end_layer_input_list.pop_back(); + m_drag_canvas_list.pop_back(); + } +} + +void OtherLayersSeqPanel::clear_all_layers() +{ + for (auto sizer : m_layer_input_sizer_list) { + sizer->Clear(true); + } + m_layer_input_sizer_list.clear(); + m_begin_layer_input_list.clear(); + m_end_layer_input_list.clear(); + m_drag_canvas_list.clear(); +} + +void OtherLayersSeqPanel::sync_layers_print_seq(int selection, const std::vector& seq) +{ + if (m_other_layer_print_seq_choice != nullptr) { + if (selection == 1) { + clear_all_layers(); + Freeze(); + for (int i = 0; i < seq.size(); i++) { + append_layer(&seq[i]); + } + Thaw(); + } + m_other_layer_print_seq_choice->SetSelection(selection); + + wxCommandEvent event(wxEVT_COMBOBOX); + event.SetInt(selection); + event.SetEventObject(m_other_layer_print_seq_choice); + wxPostEvent(m_other_layer_print_seq_choice, event); + } +} + + +PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title, bool only_layer_seq, const wxPoint& pos, const wxSize& size, long style) :DPIDialog(parent, wxID_ANY, title, pos, size, style) { std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); @@ -13,10 +370,9 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title SetBackgroundColour(*wxWHITE); wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), -1)); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(650), -1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); - m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); wxFlexGridSizer* top_sizer = new wxFlexGridSizer(0, 2, FromDIP(5), 0); top_sizer->AddGrowableCol(0,1); @@ -40,10 +396,10 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title wxStaticText* m_bed_type_txt = new wxStaticText(this, wxID_ANY, _L("Bed type")); m_bed_type_txt->SetFont(Label::Body_14); - top_sizer->Add(m_bed_type_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); - top_sizer->Add(m_bed_type_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5)); + top_sizer->Add(m_bed_type_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_bed_type_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); - wxBoxSizer* m_sizer_selectbox = new wxBoxSizer(wxHORIZONTAL); + // Print Sequence m_print_seq_choice = new ComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240),-1), 0, NULL, wxCB_READONLY ); m_print_seq_choice->Append(_L("Same as Global Print Sequence")); for (auto i = PrintSequence::ByLayer; i < PrintSequence::ByDefault; i = PrintSequence(int(i) + 1)) { @@ -51,9 +407,21 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title } wxStaticText* m_print_seq_txt = new wxStaticText(this, wxID_ANY, _L("Print sequence")); m_print_seq_txt->SetFont(Label::Body_14); - top_sizer->Add(m_print_seq_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT |wxALL, FromDIP(5)); - top_sizer->Add(m_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5)); + top_sizer->Add(m_print_seq_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); + // Spiral mode + m_spiral_mode_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240), -1), 0, NULL, wxCB_READONLY); + m_spiral_mode_choice->Append(_L("Same as Global")); + m_spiral_mode_choice->Append(_L("Enable")); + m_spiral_mode_choice->Append(_L("Disable")); + m_spiral_mode_choice->SetSelection(0); + wxStaticText* spiral_mode_txt = new wxStaticText(this, wxID_ANY, _L("Spiral vase")); + spiral_mode_txt->SetFont(Label::Body_14); + top_sizer->Add(spiral_mode_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_spiral_mode_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); + + // First layer filament sequence m_first_layer_print_seq_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240), -1), 0, NULL, wxCB_READONLY); m_first_layer_print_seq_choice->Append(_L("Auto")); m_first_layer_print_seq_choice->Append(_L("Customize")); @@ -70,22 +438,26 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title }); wxStaticText* first_layer_txt = new wxStaticText(this, wxID_ANY, _L("First layer filament sequence")); first_layer_txt->SetFont(Label::Body_14); - top_sizer->Add(first_layer_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); - top_sizer->Add(m_first_layer_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5)); + top_sizer->Add(first_layer_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_first_layer_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - std::vector order; - if (order.empty()) { - for (int i = 1; i <= extruder_colours.size(); i++) { - order.push_back(i); - } + std::vector order(extruder_colours.size()); + for (int i = 0; i < order.size(); i++) { + order[i] = i + 1; } m_drag_canvas = new DragCanvas(this, extruder_colours, order); m_drag_canvas->Hide(); - top_sizer->Add(0, 0, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); - top_sizer->Add(m_drag_canvas, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); + top_sizer->Add(0, 0, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT, 0); + top_sizer->Add(m_drag_canvas, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxBOTTOM, FromDIP(10)); + + m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(30)); + + // Other layer filament sequence + m_other_layers_seq_panel = new OtherLayersSeqPanel(this); + m_sizer_main->AddSpacer(FromDIP(5)); + m_sizer_main->Add(m_other_layers_seq_panel, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30)); - m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxALL, FromDIP(30)); auto sizer_button = new wxBoxSizer(wxHORIZONTAL); StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), @@ -102,10 +474,12 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); m_button_ok->SetCornerRadius(FromDIP(12)); - m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + m_button_ok->Bind(wxEVT_BUTTON, [this](auto& e) { wxCommandEvent evt(EVT_SET_BED_TYPE_CONFIRM, GetId()); - e.SetEventObject(this); + static_cast(m_other_layers_seq_panel)->ProcessEvent(evt); GetEventHandler()->ProcessEvent(evt); + if (evt.GetString() == "Invalid") + return; if (this->IsModal()) EndModal(wxID_YES); else @@ -119,7 +493,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); m_button_cancel->SetCornerRadius(FromDIP(12)); - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + m_button_cancel->Bind(wxEVT_BUTTON, [this](auto& e) { if (this->IsModal()) EndModal(wxID_NO); else @@ -131,7 +505,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); sizer_button->Add(FromDIP(30),0, 0, 0); - m_sizer_main->Add(sizer_button, 0, wxEXPAND, FromDIP(20)); + m_sizer_main->Add(sizer_button, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(20)); SetSizer(m_sizer_main); Layout(); @@ -141,7 +515,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title wxGetApp().UpdateDlgDarkUI(this); - if (only_first_layer_seq) { + if (only_layer_seq) { for (auto item : top_sizer->GetChildren()) { if (item->GetWindow()) item->GetWindow()->Show(false); @@ -149,6 +523,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title first_layer_txt->Show(); m_first_layer_print_seq_choice->Show(); m_drag_canvas->Show(); + m_other_layers_seq_panel->Show(); Layout(); Fit(); } @@ -189,6 +564,21 @@ void PlateSettingsDialog::sync_first_layer_print_seq(int selection, const std::v } } +void PlateSettingsDialog::sync_other_layers_print_seq(int selection, const std::vector& seq) { + if (selection == 1) { + std::vector sequences; + sequences.reserve(seq.size()); + for (int i = 0; i < seq.size(); i++) { + LayerSeqInfo info{ seq[i].first.first, seq[i].first.second, seq[i].second }; + sequences.push_back(info); + } + m_other_layers_seq_panel->sync_layers_print_seq(selection, sequences); + } + else { + m_other_layers_seq_panel->sync_layers_print_seq(selection, {}); + } +} + void PlateSettingsDialog::sync_spiral_mode(bool spiral_mode, bool as_global) { if (m_spiral_mode_choice) { @@ -349,4 +739,6 @@ void PlateNameEditDialog::set_plate_name(const wxString &name) { m_ti_plate_name->GetTextCtrl()->SetInsertionPointEnd(); } -}} // namespace Slic3r::GUI \ No newline at end of file + +} +} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/PlateSettingsDialog.hpp b/src/slic3r/GUI/PlateSettingsDialog.hpp index debad2a7f6..00dbbe4011 100644 --- a/src/slic3r/GUI/PlateSettingsDialog.hpp +++ b/src/slic3r/GUI/PlateSettingsDialog.hpp @@ -7,10 +7,78 @@ #include "Widgets/RadioBox.hpp" #include "Widgets/ComboBox.hpp" #include "DragCanvas.hpp" +#include "libslic3r/ParameterUtils.hpp" namespace Slic3r { namespace GUI { wxDECLARE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); +wxDECLARE_EVENT(EVT_NEED_RESORT_LAYERS, wxCommandEvent); + +struct LayerSeqInfo { + int begin_layer_number; + int end_layer_number; + std::vector print_sequence; + + bool operator<(const LayerSeqInfo& another) const; +}; + +class LayerNumberTextInput : public ComboBox { +public: + enum class Type { + Begin, + End + }; + enum class ValueType { + Custom, + End + }; + LayerNumberTextInput(wxWindow* parent, int layer_number, wxSize size, Type type, ValueType value_type = ValueType::Custom); + void link(LayerNumberTextInput* layer_input) { + if (m_another_layer_input) return; + m_another_layer_input = layer_input; + layer_input->link(this); } + void set_layer_number(int layer_number); + int get_layer_number(); + Type get_input_type() { return m_type; } + ValueType get_value_type() { return m_value_type; } + bool is_layer_number_valid(); + +protected: + void update_label(); + +private: + LayerNumberTextInput* m_another_layer_input{ nullptr }; + int m_layer_number; + Type m_type; + ValueType m_value_type; +}; + +class OtherLayersSeqPanel : public wxPanel { +public: + OtherLayersSeqPanel(wxWindow* parent); + + void sync_layers_print_seq(int selection, const std::vector& seq); + + int get_layers_print_seq_choice() { return m_other_layer_print_seq_choice->GetSelection(); }; + + std::vector get_layers_print_seq_infos() { return m_layer_seq_infos; } + +protected: + void append_layer(const LayerSeqInfo* layer_info = nullptr); + void popup_layer(); + void clear_all_layers(); + +private: + ScalableBitmap m_bmp_delete; + ScalableBitmap m_bmp_add; + ComboBox* m_other_layer_print_seq_choice{ nullptr }; + wxPanel* m_layer_input_panel{ nullptr }; + std::vector m_layer_input_sizer_list; + std::vector m_begin_layer_input_list; + std::vector m_end_layer_input_list; + std::vector m_drag_canvas_list; + std::vector m_layer_seq_infos; +}; class PlateSettingsDialog : public DPIDialog { @@ -23,7 +91,7 @@ public: PlateSettingsDialog( wxWindow* parent, const wxString& title = wxEmptyString, - bool only_first_layer_seq = false, + bool only_layer_seq = false, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLOSE_BOX | wxCAPTION @@ -33,6 +101,7 @@ public: void sync_bed_type(BedType type); void sync_print_seq(int print_seq = 0); void sync_first_layer_print_seq(int selection, const std::vector& seq = std::vector()); + void sync_other_layers_print_seq(int selection, const std::vector& seq); void sync_spiral_mode(bool spiral_mode, bool as_global); wxString to_bed_type_name(BedType bed_type); wxString to_print_sequence_name(PrintSequence print_seq); @@ -62,8 +131,25 @@ public: return choice; }; + int get_other_layers_print_seq_choice() { + if (m_other_layers_seq_panel) + return m_other_layers_seq_panel->get_layers_print_seq_choice(); + return 0; + }; + std::vector get_first_layer_print_seq(); + std::vector get_other_layers_print_seq_infos() { + const std::vector& layer_seq_infos = m_other_layers_seq_panel->get_layers_print_seq_infos(); + std::vector result; + result.reserve(layer_seq_infos.size()); + for (int i = 0; i < layer_seq_infos.size(); i++) { + LayerPrintSequence item = std::make_pair(std::make_pair(layer_seq_infos[i].begin_layer_number, layer_seq_infos[i].end_layer_number), layer_seq_infos[i].print_sequence); + result.push_back(item); + } + return result; + } + int get_spiral_mode_choice() { int choice = 0; if (m_spiral_mode_choice != nullptr) @@ -76,11 +162,16 @@ public: } protected: - DragCanvas* m_drag_canvas; - ComboBox* m_first_layer_print_seq_choice { nullptr }; - ComboBox* m_print_seq_choice { nullptr }; + void add_layers(); + void delete_layers(); + +protected: ComboBox* m_bed_type_choice { nullptr }; + ComboBox* m_print_seq_choice { nullptr }; + ComboBox* m_first_layer_print_seq_choice { nullptr }; ComboBox* m_spiral_mode_choice { nullptr }; + DragCanvas* m_drag_canvas; + OtherLayersSeqPanel* m_other_layers_seq_panel; Button* m_button_ok; Button* m_button_cancel; TextInput *m_ti_plate_name; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 22868af0cb..629ba996d1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1,22 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros, David Kocík @kocikdav, Lukáš Hejl @hejllukas, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ Copyright (c) 2022 Michael Kirsch -///|/ Copyright (c) 2021 Boleslaw Ciesielski -///|/ Copyright (c) 2019 John Drake @foxox -///|/ -///|/ ported from lib/Slic3r/GUI/Plater.pm: -///|/ Copyright (c) Prusa Research 2016 - 2019 Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) 2018 Martin Loidl @LoidlM -///|/ Copyright (c) 2017 Matthias Gazzari @qtux -///|/ Copyright (c) Slic3r 2012 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2017 Joseph Lenox @lordofhyphens -///|/ Copyright (c) 2015 Daren Schwenke -///|/ Copyright (c) 2014 Mark Hindess -///|/ Copyright (c) 2012 Mike Sheldrake @mesheldrake -///|/ Copyright (c) 2012 Henrik Brix Andersen @henrikbrixandersen -///|/ Copyright (c) 2012 Sam Wong -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "Plater.hpp" #include "libslic3r/Config.hpp" #include "libslic3r_version.h" @@ -116,6 +97,7 @@ #include "Jobs/BoostThreadWorker.hpp" #include "BackgroundSlicingProcess.hpp" #include "SelectMachine.hpp" +#include "SendMultiMachinePage.hpp" #include "SendToPrinter.hpp" #include "PublishDialog.hpp" #include "ModelMall.hpp" @@ -155,7 +137,9 @@ #include #include // Needs to be last because reasons :-/ +#include #include "WipeTowerDialog.hpp" +#include "ObjColorDialog.hpp" #include "libslic3r/CustomGCode.hpp" #include "libslic3r/Platform.hpp" @@ -166,6 +150,7 @@ #include "PlateSettingsDialog.hpp" #include "DailyTips.hpp" #include "CreatePresetsDialog.hpp" +#include "FileArchiveDialog.hpp" using boost::optional; namespace fs = boost::filesystem; @@ -209,7 +194,9 @@ wxDEFINE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent); wxDEFINE_EVENT(EVT_CREATE_FILAMENT, SimpleEvent); wxDEFINE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent); - +wxDEFINE_EVENT(EVT_ADD_FILAMENT, SimpleEvent); +wxDEFINE_EVENT(EVT_DEL_FILAMENT, SimpleEvent); +wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); bool Plater::has_illegal_filename_characters(const wxString& wxs_name) { std::string name = into_u8(wxs_name); @@ -431,7 +418,7 @@ void Sidebar::priv::show_preset_comboboxes() void Sidebar::priv::on_search_update() { m_object_list->assembly_plate_object_name(); - + wxString search_text = m_search_bar->GetValue(); m_object_list->GetModel()->search_object(search_text); dia->update_list(); @@ -491,6 +478,71 @@ void Sidebar::priv::hide_rich_tip(wxButton* btn) } #endif +std::vector get_min_flush_volumes(const DynamicPrintConfig& full_config) +{ + std::vectorextra_flush_volumes; + //const auto& full_config = wxGetApp().preset_bundle->full_config(); + //auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; + + const ConfigOption* nozzle_volume_opt = full_config.option("nozzle_volume"); + int nozzle_volume_val = nozzle_volume_opt ? (int)nozzle_volume_opt->getFloat() : 0; + + const ConfigOptionInt* enable_long_retraction_when_cut_opt = full_config.option("enable_long_retraction_when_cut"); + int machine_enabled_level = 0; + if (enable_long_retraction_when_cut_opt) { + machine_enabled_level = enable_long_retraction_when_cut_opt->value; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get enable_long_retraction_when_cut from config, value=%1%")%machine_enabled_level; + } + const ConfigOptionBools* long_retractions_when_cut_opt = full_config.option("long_retractions_when_cut"); + bool machine_activated = false; + if (long_retractions_when_cut_opt) { + machine_activated = long_retractions_when_cut_opt->values[0] == 1; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get long_retractions_when_cut from config, value=%1%, activated=%2%")%long_retractions_when_cut_opt->values[0] %machine_activated; + } + + size_t filament_size = full_config.option("filament_diameter")->values.size(); + std::vector filament_retraction_distance_when_cut(filament_size, 18.0f), printer_retraction_distance_when_cut(filament_size, 18.0f); + std::vector filament_long_retractions_when_cut(filament_size, 0); + const ConfigOptionFloats* filament_retraction_distances_when_cut_opt = full_config.option("filament_retraction_distances_when_cut"); + if (filament_retraction_distances_when_cut_opt) { + filament_retraction_distance_when_cut = filament_retraction_distances_when_cut_opt->values; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get filament_retraction_distance_when_cut from config, size=%1%, values=%2%")%filament_retraction_distance_when_cut.size() %filament_retraction_distances_when_cut_opt->serialize(); + } + + const ConfigOptionFloats* printer_retraction_distance_when_cut_opt = full_config.option("retraction_distances_when_cut"); + if (printer_retraction_distance_when_cut_opt) { + printer_retraction_distance_when_cut = printer_retraction_distance_when_cut_opt->values; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get retraction_distances_when_cut from config, size=%1%, values=%2%")%printer_retraction_distance_when_cut.size() %printer_retraction_distance_when_cut_opt->serialize(); + } + + const ConfigOptionBools* filament_long_retractions_when_cut_opt = full_config.option("filament_long_retractions_when_cut"); + if (filament_long_retractions_when_cut_opt) { + filament_long_retractions_when_cut = filament_long_retractions_when_cut_opt->values; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get filament_long_retractions_when_cut from config, size=%1%, values=%2%")%filament_long_retractions_when_cut.size() %filament_long_retractions_when_cut_opt->serialize(); + } + + for (size_t idx = 0; idx < filament_size; ++idx) { + int extra_flush_volume = nozzle_volume_val; + int retract_length = machine_enabled_level && machine_activated ? printer_retraction_distance_when_cut[0] : 0; + + unsigned char filament_activated = filament_long_retractions_when_cut[idx]; + double filament_retract_length = filament_retraction_distance_when_cut[idx]; + + if (filament_activated == 0) + retract_length = 0; + else if (filament_activated == 1 && machine_enabled_level == LongRectrationLevel::EnableFilament) { + if (!std::isnan(filament_retract_length)) + retract_length = (int)filament_retraction_distance_when_cut[idx]; + else + retract_length = printer_retraction_distance_when_cut[0]; + } + + extra_flush_volume -= PI * 1.75 * 1.75 / 4 * retract_length; + extra_flush_volumes.emplace_back(extra_flush_volume); + } + return extra_flush_volumes; +} + // Sidebar / public static struct DynamicFilamentList : DynamicList @@ -804,18 +856,15 @@ Sidebar::Sidebar(Plater *parent) p->m_flushing_volume_btn->Bind(wxEVT_BUTTON, ([parent](wxCommandEvent &e) { auto& project_config = wxGetApp().preset_bundle->project_config; - auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; const std::vector& init_matrix = (project_config.option("flush_volumes_matrix"))->values; const std::vector& init_extruders = (project_config.option("flush_volumes_vector"))->values; - ConfigOption* extra_flush_volume_opt = printer_config.option("nozzle_volume"); - int extra_flush_volume = extra_flush_volume_opt ? (int)extra_flush_volume_opt->getFloat() : 0; ConfigOptionFloat* flush_multi_opt = project_config.option("flush_multiplier"); float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f; const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - - WipingDialog dlg(parent, cast(init_matrix), cast(init_extruders), extruder_colours, extra_flush_volume, flush_multiplier); - + const auto& full_config = wxGetApp().preset_bundle->full_config(); + const auto& extra_flush_volumes = get_min_flush_volumes(full_config); + WipingDialog dlg(parent, cast(init_matrix), cast(init_extruders), extruder_colours, extra_flush_volumes, flush_multiplier); if (dlg.ShowModal() == wxID_OK) { std::vector matrix = dlg.get_matrix(); std::vector extruders = dlg.get_extruders(); @@ -1132,14 +1181,11 @@ void Sidebar::update_all_preset_comboboxes() const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); - const bool use_bbl_network = preset_bundle.use_bbl_network(); - // Orca:: show device tab based on vendor type auto p_mainframe = wxGetApp().mainframe; - p_mainframe->show_device(use_bbl_network); auto cfg = preset_bundle.printers.get_edited_preset().config; - if (use_bbl_network) { + if (preset_bundle.use_bbl_network()) { //only show connection button for not-BBL printer connection_btn->Hide(); //only show sync-ams button for BBL printer @@ -1157,9 +1203,10 @@ void Sidebar::update_all_preset_comboboxes() else { if (!url.Lower().starts_with("http")) url = wxString::Format("http://%s", url); - if (cfg.has("printhost_apikey")) + const auto host_type = cfg.option>("host_type")->value; + if (cfg.has("printhost_apikey") && (host_type != htSimplyPrint)) apikey = cfg.opt_string("printhost_apikey"); - print_btn_type = MainFrame::PrintSelectType::eSendGcode; + print_btn_type = preset_bundle.is_bbl_vendor() ? MainFrame::PrintSelectType::ePrintPlate : MainFrame::PrintSelectType::eSendGcode; } p_mainframe->load_printer_url(url, apikey); @@ -1202,6 +1249,8 @@ void Sidebar::update_all_preset_comboboxes() if (p->combo_printer) p->combo_printer->update(); + // Orca:: show device tab based on vendor type + p_mainframe->show_device(preset_bundle.use_bbl_device_tab()); p_mainframe->m_tabpanel->SetSelection(p_mainframe->m_tabpanel->GetSelection()); } @@ -1231,7 +1280,7 @@ void Sidebar::update_presets(Preset::Type preset_type) if (preset) { if (preset->is_compatible) preset_bundle.set_filament_preset(0, name); } - + } for (size_t i = 0; i < filament_cnt; i++) @@ -1271,9 +1320,6 @@ void Sidebar::update_presets(Preset::Type preset_type) } Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); - bool isBBL = preset_bundle.use_bbl_network(); - wxGetApp().mainframe->show_calibration_button(!isBBL); - if (auto printer_structure_opt = printer_preset.config.option>("printer_structure")) { wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3); } @@ -1433,6 +1479,7 @@ void Sidebar::sys_color_changed() p->combo_printer }) combo->sys_color_changed(); #endif + p->combo_printer->sys_color_changed(); for (PlaterPresetComboBox* combo : p->combos_filament) combo->sys_color_changed(); @@ -1524,6 +1571,43 @@ void Sidebar::on_filaments_change(size_t num_filaments) dynamic_filament_list.update(); } +void Sidebar::add_filament() { + // BBS: limit filament choices to 16 + if (p->combos_filament.size() >= 16) return; + wxColour new_col = Plater::get_next_color_for_filament(); + add_custom_filament(new_col); +} + +void Sidebar::delete_filament() { + if (p->combos_filament.size() <= 1) return; + + size_t filament_count = p->combos_filament.size() - 1; + if (wxGetApp().preset_bundle->is_the_only_edited_filament(filament_count) || (filament_count == 1)) { + wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0], false, "", true); + } + + if (p->editing_filament >= filament_count) { + p->editing_filament = -1; + } + + wxGetApp().preset_bundle->set_num_filaments(filament_count); + wxGetApp().plater()->on_filaments_change(filament_count); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); +} + +void Sidebar::add_custom_filament(wxColour new_col) { + if (p->combos_filament.size() >= 16) return; + + int filament_count = p->combos_filament.size() + 1; + std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + wxGetApp().preset_bundle->set_num_filaments(filament_count, new_color); + wxGetApp().plater()->on_filaments_change(filament_count); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); + auto_calc_flushing_volumes(filament_count - 1); +} + void Sidebar::on_bed_type_change(BedType bed_type) { // btDefault option is not included in global bed type setting @@ -1859,17 +1943,18 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) auto& preset_bundle = wxGetApp().preset_bundle; auto& project_config = preset_bundle->project_config; auto& printer_config = preset_bundle->printers.get_edited_preset().config; + const auto& full_config = wxGetApp().preset_bundle->full_config(); auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment; auto& ams_filament_list = preset_bundle->filament_ams_list; const std::vector& init_matrix = (project_config.option("flush_volumes_matrix"))->values; const std::vector& init_extruders = (project_config.option("flush_volumes_vector"))->values; - ConfigOption* extra_flush_volume_opt = printer_config.option("nozzle_volume"); - int extra_flush_volume = extra_flush_volume_opt ? (int)extra_flush_volume_opt->getFloat() : 0; + + const std::vector& min_flush_volumes= get_min_flush_volumes(full_config); + ConfigOptionFloat* flush_multi_opt = project_config.option("flush_multiplier"); float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f; std::vector matrix = init_matrix; - int m_min_flush_volume = extra_flush_volume; int m_max_flush_volume = Slic3r::g_max_flush_volume; unsigned int m_number_of_extruders = (int)(sqrt(init_matrix.size()) + 0.001); @@ -1896,12 +1981,10 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) if (modify_id >= 0 && modify_id < multi_colours.size()) { for (int i = 0; i < multi_colours.size(); ++i) { - - Slic3r::FlushVolCalculator calculator(m_min_flush_volume, m_max_flush_volume); - // from to modify int from_idx = i; if (from_idx != modify_id) { + Slic3r::FlushVolCalculator calculator(min_flush_volumes[from_idx], m_max_flush_volume); int flushing_volume = 0; bool is_from_support = is_support_filament(from_idx); bool is_to_support = is_support_filament(modify_id); @@ -1926,6 +2009,7 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) // modify to to int to_idx = i; if (to_idx != modify_id) { + Slic3r::FlushVolCalculator calculator(min_flush_volumes[modify_id], m_max_flush_volume); bool is_from_support = is_support_filament(modify_id); bool is_to_support = is_support_filament(to_idx); int flushing_volume = 0; @@ -2043,6 +2127,7 @@ struct Plater::priv MenuFactory menus; SelectMachineDialog* m_select_machine_dlg = nullptr; + SendMultiMachinePage* m_send_multi_dlg = nullptr; SendToPrinterDialog* m_send_to_sdcard_dlg = nullptr; PublishDialog *m_publish_dlg = nullptr; @@ -2271,6 +2356,7 @@ struct Plater::priv void select_all(); void deselect_all(); + void exit_gizmo(); void remove(size_t obj_idx); bool delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); //BBS void delete_all_objects_from_model(); @@ -2390,6 +2476,9 @@ struct Plater::priv void on_action_layersediting(SimpleEvent&); void on_create_filament(SimpleEvent &); void on_modify_filament(SimpleEvent &); + void on_add_filament(SimpleEvent &); + void on_delete_filament(SimpleEvent &); + void on_add_custom_filament(ColorEvent &); void on_object_select(SimpleEvent&); void show_right_click_menu(Vec2d mouse_position, wxMenu *menu); @@ -2466,7 +2555,7 @@ struct Plater::priv //BBS: add plate_id for thumbnail void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, - Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + Camera::EType camera_type, bool use_top_view = false, bool for_picking = false,bool ban_light = false); ThumbnailsList generate_thumbnails(const ThumbnailsParams& params, Camera::EType camera_type); //BBS void generate_calibration_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params); @@ -2506,6 +2595,7 @@ struct Plater::priv //BBS: add popup object table logic bool PopupObjectTable(int object_id, int volume_id, const wxPoint& position); void on_action_send_to_printer(bool isall = false); + void on_action_send_to_multi_machine(SimpleEvent&); int update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path); private: bool layers_height_allowed() const; @@ -2546,7 +2636,6 @@ private: //record print preset void record_start_print_preset(std::string action); - }; const std::regex Plater::priv::pattern_bundle(".*[.](amf|amf[.]xml|zip[.]amf|3mf)", std::regex::icase); @@ -2592,7 +2681,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) //BBS: add bed_exclude_area , config(Slic3r::DynamicPrintConfig::new_from_defaults_keys({ "printable_area", "bed_exclude_area", "bed_custom_texture", "bed_custom_model", "print_sequence", - "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "skirt_loops", "skirt_speed", "skirt_distance", + "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", + "nozzle_height", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "brim_width", "brim_object_gap", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "preferred_orientation", "enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_volume", "extruder_colour", "filament_colour", "material_colour", "printable_height", "printer_model", "printer_technology", @@ -2601,7 +2691,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) "brim_width", "wall_loops", "wall_filament", "sparse_infill_density", "sparse_infill_filament", "top_shell_layers", "enable_support", "support_filament", "support_interface_filament", "support_top_z_distance", "support_bottom_z_distance", "raft_layers", - "wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_extruder", + "wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing","wipe_tower_max_purge_speed", "wipe_tower_extruder", "best_object_pos" })) , sidebar(new Sidebar(q)) @@ -2663,7 +2753,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) this->q->Bind(wxEVT_SYS_COLOUR_CHANGED, &priv::on_apple_change_color_mode, this); this->q->Bind(EVT_CREATE_FILAMENT, &priv::on_create_filament, this); this->q->Bind(EVT_MODIFY_FILAMENT, &priv::on_modify_filament, this); - + this->q->Bind(EVT_ADD_CUSTOM_FILAMENT, &priv::on_add_custom_filament, this); main_frame->m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, &priv::on_tab_selection_changing, this); auto* panel_3d = new wxPanel(q); @@ -2855,6 +2945,16 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) //preview_canvas->Bind(EVT_GLTOOLBAR_PRINT_PLATE, &priv::on_action_print_plate, this); //preview_canvas->Bind(EVT_GLTOOLBAR_PRINT_ALL, &priv::on_action_print_all, this); //review_canvas->Bind(EVT_GLTOOLBAR_EXPORT_GCODE, &priv::on_action_export_gcode, this); + view3D_canvas->Bind(EVT_GLCANVAS_SWITCH_TO_OBJECT, [main_frame](SimpleEvent&) { + if (main_frame->m_param_panel) { + main_frame->m_param_panel->switch_to_object(false); + } + }); + view3D_canvas->Bind(EVT_GLCANVAS_SWITCH_TO_GLOBAL, [main_frame](SimpleEvent&) { + if (main_frame->m_param_panel) { + main_frame->m_param_panel->switch_to_global(); + } + }); } view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); @@ -2924,6 +3024,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) q->Bind(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE, &priv::on_action_export_all_sliced_file, this); q->Bind(EVT_GLTOOLBAR_SEND_TO_PRINTER, &priv::on_action_export_to_sdcard, this); q->Bind(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, &priv::on_action_export_to_sdcard_all, this); + q->Bind(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, &priv::on_action_send_to_multi_machine, this); q->Bind(EVT_GLCANVAS_PLATE_SELECT, &priv::on_plate_selected, this); q->Bind(EVT_DOWNLOAD_PROJECT, &priv::on_action_download_project, this); q->Bind(EVT_IMPORT_MODEL_ID, &priv::on_action_request_model_id, this); @@ -3047,7 +3148,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) //wxPostEvent(this->q, wxCommandEvent{EVT_RESTORE_PROJECT}); } - /*this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) { + this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) { BOOST_LOG_TRIVIAL(trace) << "Received load from other instance event."; wxArrayString input_files; for (size_t i = 0; i < evt.data.size(); ++i) { @@ -3056,10 +3157,19 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) wxGetApp().mainframe->Raise(); this->q->load_files(input_files); }); + + this->q->Bind(EVT_START_DOWNLOAD_OTHER_INSTANCE, [](StartDownloadOtherInstanceEvent& evt) { + BOOST_LOG_TRIVIAL(trace) << "Received url from other instance event."; + wxGetApp().mainframe->Raise(); + for (size_t i = 0; i < evt.data.size(); ++i) { + wxGetApp().start_download(evt.data[i]); + } + + }); this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) { bring_instance_forward(); - });*/ - //wxGetApp().other_instance_message_handler()->init(this->q); + }); + wxGetApp().other_instance_message_handler()->init(this->q); // collapse sidebar according to saved value //if (wxGetApp().is_editor()) { @@ -3349,53 +3459,70 @@ BoundingBox Plater::priv::scaled_bed_shape_bb() const return printable_area.bounding_box(); } -std::string read_binary_stl(const std::string& filename) { - std::string model_id; - std::ifstream file(filename, std::ios::binary); + +void read_binary_stl(const std::string& filename, std::string& model_id, std::string& code) { + std::ifstream file( encode_path(filename.c_str()), std::ios::binary); if (!file) { - return model_id; + return; } - try{ + try { // Read the first 80 bytes char data[80]; file.read(data, 80); if (!file) { file.close(); - return model_id; + return; } if (data[0] == '\0' || data[0] == ' ') { file.close(); - return model_id; + return; } char magic[2] = { data[0], data[1] }; if (magic[0] != 'M' || magic[1] != 'W') { file.close(); - return model_id; + return; } if (data[2] != ' ') { file.close(); - return model_id; + return; } char protocol_version[3] = { data[3], data[4], data[5] }; - //version - if (protocol_version[0] == '1' && protocol_version[1] == '.' && protocol_version[2] == '0') { - model_id = std::string(&data[7], &data[80]); + //version + if (protocol_version[0] != '1' || protocol_version[1] != '.' || protocol_version[2] != '0') { + file.close(); + return; } + std::vector tokens; + std::istringstream iss(data); + std::string token; + while (std::getline(iss, token, ' ')) { + char* tokenPtr = new char[token.length() + 1]; + std::strcpy(tokenPtr, token.c_str()); + tokens.push_back(tokenPtr); + } + + //model id + if (tokens.size() < 4) { + file.close(); + return; + } + + model_id = tokens[2]; + code = tokens[3]; file.close(); } - catch (...){ + catch (...) { } - return model_id; + return; } - // BBS: backup & restore std::vector Plater::priv::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) { @@ -3438,6 +3565,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ std::vector obj_idxs; std::string designer_model_id; + std::string designer_country_code; int answer_convert_from_meters = wxOK_DEFAULT; int answer_convert_from_imperial_units = wxOK_DEFAULT; @@ -3792,6 +3920,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ //always load config { + // BBS: save the wipe tower pos in file here, will be used later + ConfigOptionFloats* wipe_tower_x_opt = config.opt("wipe_tower_x"); + ConfigOptionFloats* wipe_tower_y_opt = config.opt("wipe_tower_y"); + std::optionalfile_wipe_tower_x; + std::optionalfile_wipe_tower_y; + if (wipe_tower_x_opt) + file_wipe_tower_x = *wipe_tower_x_opt; + if (wipe_tower_y_opt) + file_wipe_tower_y = *wipe_tower_y_opt; + preset_bundle->load_config_model(filename.string(), std::move(config), file_version); ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); @@ -3867,6 +4005,17 @@ std::vector Plater::priv::load_files(const std::vector& input_ // when for extruder colors are used filament colors q->on_filaments_change(preset_bundle->filament_presets.size()); is_project_file = true; + + //BBS: rewrite wipe tower pos stored in 3mf file , the code above should be seriously reconsidered + { + DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; + ConfigOptionFloats* wipe_tower_x = proj_cfg.opt("wipe_tower_x"); + ConfigOptionFloats* wipe_tower_y = proj_cfg.opt("wipe_tower_y"); + if (file_wipe_tower_x) + *wipe_tower_x = *file_wipe_tower_x; + if (file_wipe_tower_y) + *wipe_tower_y = *file_wipe_tower_y; + } } } if (!silence) wxGetApp().app_config->update_config_dir(path.parent_path().string()); @@ -3878,12 +4027,24 @@ std::vector Plater::priv::load_files(const std::vector& input_ std::vector project_presets; bool is_xxx; Semver file_version; - + + //ObjImportColorFn obj_color_fun=nullptr; + auto obj_color_fun = [this, &path](std::vector &input_colors, bool is_single_color, std::vector &filament_ids, + unsigned char &first_extruder_id) { + if (!boost::iends_with(path.string(), ".obj")) { return; } + const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); + ObjColorDialog color_dlg(nullptr, input_colors, is_single_color, extruder_colours, filament_ids, first_extruder_id); + if (color_dlg.ShowModal() != wxID_OK) { + filament_ids.clear(); + } + }; model = Slic3r::Model::read_from_file( path.string(), nullptr, nullptr, strategy, &plate_data, &project_presets, &is_xxx, &file_version, nullptr, - [this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id](int current, int total, bool &cancel, std::string &mode_id) + [this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) { designer_model_id = mode_id; + designer_country_code = code; + bool cont = true; float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * 100.0f * ((float)current / (float)total) / (float)total_files; BOOST_LOG_TRIVIAL(trace) << "load_stl_file: percent(float)=" << percent_float << ", curr = " << current << ", total = " << total; @@ -3903,14 +4064,24 @@ std::vector Plater::priv::load_files(const std::vector& input_ cancel = !cont; }, [](int isUtf8StepFile) { - if (!isUtf8StepFile) - Slic3r::GUI::show_info(nullptr, _L("Name of components inside step file is not UTF8 format!") + "\n\n" + _L("The name may show garbage characters!"), - _L("Attention!")); - }); + if (!isUtf8StepFile) { + const auto no_warn = wxGetApp().app_config->get_bool("step_not_utf8_no_warn"); + if (!no_warn) { + MessageDialog dlg(nullptr, _L("Name of components inside step file is not UTF8 format!") + "\n\n" + _L("The name may show garbage characters!"), + wxString(SLIC3R_APP_FULL_NAME " - ") + _L("Attention!"), wxOK | wxICON_INFORMATION); + dlg.show_dsa_button(_L("Remember my choice.")); + dlg.ShowModal(); + if (dlg.get_checkbox_state()) { + wxGetApp().app_config->set_bool("step_not_utf8_no_warn", true); + } + } + } + }, + nullptr, 0, obj_color_fun); if (designer_model_id.empty() && boost::algorithm::iends_with(path.string(), ".stl")) { - designer_model_id = read_binary_stl(path.string()); + read_binary_stl(path.string(), designer_model_id, designer_country_code); } if (type_any_amf && is_xxx) imperial_units = true; @@ -4080,10 +4251,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ q->model().load_from(model); load_auxiliary_files(); } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", before load_model_objects, count %1%")%model.objects.size(); auto loaded_idxs = load_model_objects(model.objects, is_project_file); obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end()); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format("import 3mf IMPORT_LOAD_MODEL_OBJECTS \n"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", finished load_model_objects"); wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename)); dlg_cont = dlg.Update(progress_percent, msg); if (!dlg_cont) { @@ -4095,7 +4267,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ for (const ModelObject *model_object : model.objects) { new_model->add_object(*model_object); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format("import 3mf IMPORT_ADD_MODEL_OBJECTS \n"); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":" << __LINE__ << boost::format(", added object %1%")%model_object->name; wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename)); dlg_cont = dlg.Update(progress_percent, msg); if (!dlg_cont) { @@ -4213,9 +4385,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ obj_idxs, model.objects, *notification_manager); //set designer_model_id - if (!designer_model_id.empty() && q->model().stl_design_id.empty()) { - q->model().stl_design_id = designer_model_id; - } + q->model().stl_design_id = designer_model_id; + q->model().stl_design_country = designer_country_code; + //if (!designer_model_id.empty() && q->model().stl_design_id.empty() && !designer_country_code.empty()) { + // q->model().stl_design_id = designer_model_id; + // q->model().stl_design_country = designer_country_code; + //} + //else { + // q->model().stl_design_id = ""; + // q->model().stl_design_country = ""; + //} if (tolal_model_count <= 0 && !q->m_exported_file) { dlg.Hide(); @@ -4309,6 +4488,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode } } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", loaded objects, begin to auto placement"); #ifdef AUTOPLACEMENT_ON_LOAD #if 0 // FIXME distance should be a config value ///////////////////////////////// @@ -4353,9 +4533,19 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode // _L("Object too large?")); //} + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", finished auto placement, before add_objects_to_list"); notification_manager->close_notification_of_type(NotificationType::UpdatedItemsInfo); - wxGetApp().obj_list()->add_objects_to_list(obj_idxs); + if (obj_idxs.size() > 1) { + std::vector obj_idxs_1 (obj_idxs.begin(), obj_idxs.end() - 1); + + wxGetApp().obj_list()->add_objects_to_list(obj_idxs_1, false); + wxGetApp().obj_list()->add_object_to_list(obj_idxs[obj_idxs.size() - 1]); + } + else + wxGetApp().obj_list()->add_objects_to_list(obj_idxs); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", after add_objects_to_list"); update(); // Update InfoItems in ObjectList after update() to use of a correct value of the GLCanvas3D::is_sinking(), // which is updated after a view3D->reload_scene(false, flags & (unsigned int)UpdateParams::FORCE_FULL_SCREEN_REFRESH) call @@ -4388,7 +4578,14 @@ fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) if (file_type == FT_3MF) // for 3mf take the path from the project filename, if any output_file = into_path(get_project_filename(".3mf")); - + else if (file_type == FT_STL) { + if (obj_idx > 0 && obj_idx < this->model.objects.size() && selection.is_single_full_object()) { + output_file = this->model.objects[obj_idx]->get_export_filename(); + } + else { + output_file = into_path(get_project_name()); + } + } //bbs name the project using the part name if (output_file.empty()) { if (get_project_name() != _L("Untitled")) { @@ -4540,7 +4737,11 @@ void Plater::priv::selection_changed() } // forces a frame render to update the view (to avoid a missed update if, for example, the context menu appears) - view3D->render(); + if (get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView) { + assemble_view->render(); + } else { + view3D->render(); + } } void Plater::priv::object_list_changed() @@ -4585,6 +4786,11 @@ void Plater::priv::deselect_all() view3D->deselect_all(); } +void Plater::priv::exit_gizmo() +{ + view3D->exit_gizmo(); +} + void Plater::priv::remove(size_t obj_idx) { if (view3D->is_layers_editing_enabled()) @@ -4965,6 +5171,12 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool notification_manager->set_slicing_progress_hidden(); } + else { + if (preview && preview->get_reload_paint_after_background_process_apply()) { + preview->set_reload_paint_after_background_process_apply(false); + preview->reload_print(); + } + } if ((invalidated != Print::APPLY_STATUS_UNCHANGED || force_validation) && ! background_process.empty()) { // The delayed error message is no more valid. @@ -5583,7 +5795,12 @@ void Plater::priv::reload_from_disk() // load one file at a time for (size_t i = 0; i < input_paths.size(); ++i) { const auto& path = input_paths[i].string(); - + auto obj_color_fun = [this, &path](std::vector &input_colors, bool is_single_color, std::vector &filament_ids, unsigned char &first_extruder_id) { + if (!boost::iends_with(path, ".obj")) { return; } + const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); + ObjColorDialog color_dlg(nullptr, input_colors, is_single_color, extruder_colours, filament_ids, first_extruder_id); + if (color_dlg.ShowModal() != wxID_OK) { filament_ids.clear(); } + }; wxBusyCursor wait; wxBusyInfo info(_L("Reload from:") + " " + from_u8(path), q->get_current_canvas3D()->get_wxglcanvas()); @@ -5596,7 +5813,8 @@ void Plater::priv::reload_from_disk() std::vector project_presets; // BBS: backup - new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, &plate_data, &project_presets); + new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, &plate_data, &project_presets, nullptr, + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0, obj_color_fun); for (ModelObject* model_object : new_model.objects) { model_object->center_around_origin(); @@ -5778,7 +5996,8 @@ void Plater::priv::reload_from_disk() for (auto [src, dest] : replace_paths) { for (auto [obj_idx, vol_idx] : selected_volumes) { if (boost::algorithm::iequals(model.objects[obj_idx]->volumes[vol_idx]->source.input_file, src.string())) - replace_volume_with_stl(obj_idx, vol_idx, dest, ""); + // When an error occurs, either the dest parsing error occurs, or the number of objects in the dest is greater than 1 and cannot be replaced, and cannot be replaced in this loop. + if (!replace_volume_with_stl(obj_idx, vol_idx, dest, "")) break; } } #else @@ -5918,18 +6137,21 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) preview->set_as_dirty(); }; - //BBS: add the collapse logic + // Add sidebar and toolbar collapse logic if (panel == view3D || panel == preview) { this->enable_sidebar(!q->only_gcode_mode()); } - if (panel == preview && q->only_gcode_mode()) { - preview->get_canvas3d()->enable_select_plate_toolbar(false); - } - else if (panel == preview && q->using_exported_file() && (q->m_valid_plates_count <= 1)) { - preview->get_canvas3d()->enable_select_plate_toolbar(false); + if (panel == preview) { + if (q->only_gcode_mode()) { + preview->get_canvas3d()->enable_select_plate_toolbar(false); + } else if (q->using_exported_file() && (q->m_valid_plates_count <= 1)) { + preview->get_canvas3d()->enable_select_plate_toolbar(false); + } else { + preview->get_canvas3d()->enable_select_plate_toolbar(true); + } } else { - preview->get_canvas3d()->enable_select_plate_toolbar(true); + preview->get_canvas3d()->enable_select_plate_toolbar(false); } if (current_panel == panel) @@ -6002,6 +6224,18 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) else if (old_panel == assemble_view) assemble_view->get_canvas3d()->unbind_event_handlers(); + GLCanvas3D* assemble_canvas = assemble_view->get_canvas3d(); + Selection::IndicesList select_idxs = assemble_canvas->get_selection().get_volume_idxs(); + Selection& view3d_selection = view3D->get_canvas3d()->get_selection(); + view3d_selection.clear(); + for (unsigned int idx : select_idxs) { + auto v = assemble_canvas->get_selection().get_volume(idx); + auto real_idx = view3d_selection.query_real_volume_idx_from_other_view(v->object_idx(), v->instance_idx(), v->volume_idx()); + if (real_idx >= 0) { + view3d_selection.add(real_idx, false); + } + } + view3D->get_canvas3d()->bind_event_handlers(); if (view3D->is_reload_delayed()) { @@ -6080,6 +6314,20 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) assemble_view->get_canvas3d()->bind_event_handlers(); assemble_view->reload_scene(true); + if (old_panel == view3D) { + GLCanvas3D* view3D_canvas = view3D->get_canvas3d(); + Selection::IndicesList select_idxs = view3D_canvas->get_selection().get_volume_idxs(); + Selection& assemble_selection = assemble_view->get_canvas3d()->get_selection(); + assemble_selection.clear(); + for (unsigned int idx : select_idxs) { + auto v = view3D_canvas->get_selection().get_volume(idx); + auto real_idx = assemble_selection.query_real_volume_idx_from_other_view(v->object_idx(), v->instance_idx(), v->volume_idx()); + if (real_idx >= 0) { + assemble_selection.add(real_idx, false); + } + } + } + // BBS set default view and zoom if (first_enter_assemble) { wxGetApp().plater()->get_camera().requires_zoom_to_volumes = true; @@ -6260,6 +6508,12 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) view3D->deselect_all(); } +#if 0 // do not toggle auto calc when change printer + // update flush matrix + size_t filament_size = wxGetApp().plater()->get_extruder_colors_from_plater_config().size(); + for (size_t idx = 0; idx < filament_size; ++idx) + wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(idx); +#endif } #ifdef __WXMSW__ @@ -6268,6 +6522,10 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) // So, set the focus to the combobox explicitly combo->SetFocus(); #endif + if (preset_type == Preset::TYPE_FILAMENT && wxGetApp().app_config->get("auto_calculate_when_filament_change") == "true") { + wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(idx); + } + // BBS: log modify of filament selection Slic3r::put_other_changes(); @@ -6811,12 +7069,26 @@ void Plater::priv::on_action_print_plate(SimpleEvent&) BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print plate event\n" ; } - //BBS - if (!m_select_machine_dlg) m_select_machine_dlg = new SelectMachineDialog(q); - m_select_machine_dlg->set_print_type(PrintFromType::FROM_NORMAL); - m_select_machine_dlg->prepare(partplate_list.get_curr_plate_index()); - m_select_machine_dlg->ShowModal(); - record_start_print_preset("print_plate"); + PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + if (preset_bundle.use_bbl_network()) { + // BBS + if (!m_select_machine_dlg) + m_select_machine_dlg = new SelectMachineDialog(q); + m_select_machine_dlg->set_print_type(PrintFromType::FROM_NORMAL); + m_select_machine_dlg->prepare(partplate_list.get_curr_plate_index()); + m_select_machine_dlg->ShowModal(); + record_start_print_preset("print_plate"); + } else { + q->send_gcode_legacy(PLATE_CURRENT_IDX, nullptr, true); + } +} + +void Plater::priv::on_action_send_to_multi_machine(SimpleEvent&) +{ + if (!m_send_multi_dlg) + m_send_multi_dlg = new SendMultiMachinePage(q); + m_send_multi_dlg->prepare(partplate_list.get_curr_plate_index()); + m_send_multi_dlg->ShowModal(); } void Plater::priv::on_action_print_plate_from_sdcard(SimpleEvent&) @@ -6838,7 +7110,7 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) sidebar_layout.show = new_sel == MainFrame::tp3DEditor || new_sel == MainFrame::tpPreview; update_sidebar(); int old_sel = e.GetOldSelection(); - if (wxGetApp().preset_bundle && wxGetApp().preset_bundle->use_bbl_network() && new_sel == MainFrame::tpMonitor) { + if (wxGetApp().preset_bundle && wxGetApp().preset_bundle->use_bbl_device_tab() && new_sel == MainFrame::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; @@ -6851,7 +7123,7 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) if (new_sel == MainFrame::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()) { + if (main_frame->m_printer_view && url.empty()) { // It's missing_connection page, reload so that we can replay the gif image main_frame->m_printer_view->reload(); } @@ -6878,6 +7150,7 @@ void Plater::priv::on_action_send_to_printer(bool isall) m_send_to_sdcard_dlg->ShowModal(); } + void Plater::priv::on_action_select_sliced_plate(wxCommandEvent &evt) { if (q != nullptr) { @@ -6892,12 +7165,18 @@ void Plater::priv::on_action_print_all(SimpleEvent&) BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print all event\n" ; } - //BBS - if (!m_select_machine_dlg) m_select_machine_dlg = new SelectMachineDialog(q); - m_select_machine_dlg->set_print_type(PrintFromType::FROM_NORMAL); - m_select_machine_dlg->prepare(PLATE_ALL_IDX); - m_select_machine_dlg->ShowModal(); - record_start_print_preset("print_all"); + PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + if (preset_bundle.use_bbl_network()) { + // BBS + if (!m_select_machine_dlg) + m_select_machine_dlg = new SelectMachineDialog(q); + m_select_machine_dlg->set_print_type(PrintFromType::FROM_NORMAL); + m_select_machine_dlg->prepare(PLATE_ALL_IDX); + m_select_machine_dlg->ShowModal(); + record_start_print_preset("print_all"); + } else { + q->send_gcode_legacy(PLATE_ALL_IDX, nullptr, true); + } } void Plater::priv::on_action_export_gcode(SimpleEvent&) @@ -6948,7 +7227,6 @@ void Plater::priv::on_action_export_to_sdcard_all(SimpleEvent&) } } - //BBS: add plate select logic void Plater::priv::on_plate_selected(SimpleEvent&) { @@ -7007,13 +7285,14 @@ void Plater::priv::on_filament_color_changed(wxCommandEvent &event) //q->update_all_plate_thumbnails(true); //q->get_preview_canvas3D()->update_plate_thumbnails(); int modify_id = event.GetInt(); - if (wxGetApp().app_config->get("auto_calculate") == "true") { - sidebar->auto_calc_flushing_volumes(modify_id); - } auto& ams_multi_color_filment = wxGetApp().preset_bundle->ams_multi_color_filment; if (modify_id >= 0 && modify_id < ams_multi_color_filment.size()) ams_multi_color_filment[modify_id].clear(); + + if (wxGetApp().app_config->get("auto_calculate") == "true") { + sidebar->auto_calc_flushing_volumes(modify_id); + } } void Plater::priv::install_network_plugin(wxCommandEvent &event) @@ -7215,10 +7494,9 @@ void Plater::priv::on_3dcanvas_mouse_dragging_finished(SimpleEvent&) } //BBS: add plate id for thumbnail generate param -void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, - Camera::EType camera_type, bool use_top_view, bool for_picking) +void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type, bool use_top_view, bool for_picking, bool ban_light) { - view3D->get_canvas3d()->render_thumbnail(data, w, h, thumbnail_params, camera_type, use_top_view, for_picking); + view3D->get_canvas3d()->render_thumbnail(data, w, h, thumbnail_params, camera_type, use_top_view, for_picking, ban_light); } //BBS: add plate id for thumbnail generate param @@ -7331,9 +7609,9 @@ wxString Plater::priv::get_export_gcode_filename(const wxString& extension, bool } } else { if (export_all) - return m_project_name + from_u8(plate_index_str) + extension; - else return m_project_name + extension; + else + return m_project_name + from_u8(plate_index_str) + extension; } } else { if (only_filename) { @@ -7361,10 +7639,11 @@ void Plater::priv::set_project_name(const wxString& project_name) BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " project is:" << project_name; m_project_name = project_name; //update topbar title - wxGetApp().mainframe->SetTitle(m_project_name); #ifdef __WINDOWS__ + wxGetApp().mainframe->SetTitle(m_project_name + " - OrcaSlicer"); wxGetApp().mainframe->topbar()->SetTitle(m_project_name); #else + wxGetApp().mainframe->SetTitle(m_project_name); if (!m_project_name.IsEmpty()) wxGetApp().mainframe->update_title_colour_after_set_title(); #endif @@ -7538,8 +7817,8 @@ bool Plater::priv::init_collapse_toolbar() collapse_toolbar.set_layout_type(GLToolbar::Layout::Vertical); collapse_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Right); collapse_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); - collapse_toolbar.set_border(5.0f); - collapse_toolbar.set_separator_size(5); + collapse_toolbar.set_border(4.0f); + collapse_toolbar.set_separator_size(4); collapse_toolbar.set_gap_size(2); collapse_toolbar.del_all_item(); @@ -7740,6 +8019,13 @@ bool Plater::priv::show_publish_dlg(bool show) //BBS: add bed exclude area void Plater::priv::set_bed_shape(const Pointfs& shape, const Pointfs& exclude_areas, const double printable_height, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom) { + //Orca: reduce resolution for large bed printer + BoundingBoxf bed_size = get_extents(shape); + if (bed_size.size().maxCoeff() <= LARGE_BED_THRESHOLD) + SCALING_FACTOR = SCALING_FACTOR_INTERNAL; + else + SCALING_FACTOR = SCALING_FACTOR_INTERNAL_LARGE_PRINTER; + //BBS: add shape position Vec2d shape_position = partplate_list.get_current_shape_position(); bool new_shape = bed.set_shape(shape, printable_height, custom_model, force_as_custom, shape_position); @@ -7929,6 +8215,19 @@ void Plater::priv::on_modify_filament(SimpleEvent &evt) } +void Plater::priv::on_add_filament(SimpleEvent &evt) { + sidebar->add_filament(); +} + +void Plater::priv::on_delete_filament(SimpleEvent &evt) { + sidebar->delete_filament(); +} + +void Plater::priv::on_add_custom_filament(ColorEvent &evt) +{ + sidebar->add_custom_filament(evt.data); +} + void Plater::priv::enter_gizmos_stack() { assert(m_undo_redo_stack_active == &m_undo_redo_stack_main); @@ -8268,10 +8567,10 @@ void Plater::priv::update_after_undo_redo(const UndoRedo::Snapshot& snapshot, bo void Plater::priv::bring_instance_forward() const { -/*#ifdef __APPLE__ +#ifdef __APPLE__ wxGetApp().other_instance_message_handler()->bring_instance_forward(); return; -#endif //__APPLE__*/ +#endif //__APPLE__ if (main_frame == nullptr) { BOOST_LOG_TRIVIAL(debug) << "Couldnt bring instance forward - mainframe is null"; return; @@ -8378,6 +8677,7 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) { // Initialization performed in the private c-tor enable_wireframe(true); + m_only_gcode = false; } bool Plater::Show(bool show) @@ -8485,7 +8785,7 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ void Plater::load_project(wxString const& filename2, wxString const& originfile) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "filename is: " << filename2 << "and originfile is: " << originfile; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "filename is: " << filename2 << "and originfile is: " << originfile; BOOST_LOG_TRIVIAL(info) << __FUNCTION__; auto filename = filename2; auto check = [&filename, this] (bool yes_or_no) { @@ -8559,13 +8859,13 @@ void Plater::load_project(wxString const& filename2, if (load_restore && originfile.IsEmpty()) { p->set_project_name(_L("Untitled")); } - + } else { if (using_exported_file()) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " using ecported set project filename: " << filename; p->set_project_filename(filename); } - + } // BBS set default 3D view and direction after loading project @@ -8706,8 +9006,9 @@ void Plater::import_model_id(wxString download_info) /* prepare project and profile */ boost::thread import_thread = Slic3r::create_thread([&percent, &cont, &cancel, &retry_count, max_retries, &msg, &target_path, &download_ok, download_url, &filename] { - NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); - if (!m_agent) return; + // Orca: NetworkAgent is not needed and only prevents this from running +// NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); +// if (!m_agent) return; int res = 0; unsigned int http_code; @@ -8726,6 +9027,14 @@ void Plater::import_model_id(wxString download_info) { vecFiles.clear(); wxString extension = fs::path(filename.wx_str()).extension().c_str(); + + + //check file suffix + if (!extension.Contains(".3mf")) { + msg = _L("Download failed, unknown file format."); + return; + } + auto name = filename.substr(0, filename.length() - extension.length() - 1); for (const auto& iter : boost::filesystem::directory_iterator(target_path)) @@ -8773,17 +9082,35 @@ void Plater::import_model_id(wxString download_info) fs::path tmp_path = target_path; tmp_path += format(".%1%", ".download"); - + auto filesize = 0; + bool size_limit = false; auto http = Http::get(download_url.ToStdString()); while (cont && retry_count < max_retries) { retry_count++; - http.on_progress([&percent, &cont, &msg](Http::Progress progress, bool& cancel) { + http.on_progress([&percent, &cont, &msg, &filesize, &size_limit](Http::Progress progress, bool& cancel) { + if (!cont) cancel = true; if (progress.dltotal != 0) { + + if (filesize == 0) { + filesize = progress.dltotal; + double megabytes = static_cast(progress.dltotal) / (1024 * 1024); + //The maximum size of a 3mf file is 500mb + if (megabytes > 500) { + cont = false; + size_limit = true; + } + } percent = progress.dlnow * 100 / progress.dltotal; } - msg = wxString::Format(_L("Project downloaded %d%%"), percent); + + if (size_limit) { + msg = _L("Download failed, File size exception."); + } + else { + msg = wxString::Format(_L("Project downloaded %d%%"), percent); + } }) .on_error([&msg, &cont, &retry_count, max_retries](std::string body, std::string error, unsigned http_status) { (void)body; @@ -8832,7 +9159,11 @@ void Plater::import_model_id(wxString download_info) if (download_ok) { BOOST_LOG_TRIVIAL(trace) << "import_model_id: target_path = " << target_path.string(); /* load project */ - this->load_project(target_path.wstring()); + // Orca: If download is a zip file, treat it as if file has been drag and dropped on the plater + if (target_path.extension() == ".zip") + this->load_files(wxArrayString(1, target_path.string())); + else + this->load_project(target_path.wstring()); /*BBS set project info after load project, project info is reset in load project */ //p->project.project_model_id = model_id; //p->project.project_design_id = design_id; @@ -8842,7 +9173,7 @@ void Plater::import_model_id(wxString download_info) } // show save new project - p->set_project_filename(filename); + p->set_project_filename(target_path.wstring()); p->notification_manager->push_import_finished_notification(target_path.string(), target_path.parent_path().string(), false); } else { @@ -8854,7 +9185,6 @@ void Plater::import_model_id(wxString download_info) return; } } - //BBS download project by project id void Plater::download_project(const wxString& project_id) { @@ -9028,11 +9358,6 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) new ConfigOptionFloat(opt.second) ); } - print_config.set_key_value( - "outer_wall_speed", - new ConfigOptionFloat(CalibPressureAdvance::find_optimal_PA_speed( - wxGetApp().preset_bundle->full_config(), (fabs(print_config.get_abs_value("line_width", nozzle_diameter)) <= DBL_EPSILON)? (nozzle_diameter*1.125) : print_config.get_abs_value("line_width", nozzle_diameter), - print_config.get_abs_value("layer_height"), 0))); for (const auto opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { print_config.set_key_value( @@ -9053,6 +9378,14 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) new ConfigOptionEnum(SuggestedConfigCalibPAPattern().brim_pair.second) ); + // Orca: Set the outer wall speed to the optimal speed for the test, cap it with max volumetric speed + print_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(CalibPressureAdvance::find_optimal_PA_speed( + wxGetApp().preset_bundle->full_config(), + (fabs(print_config.get_abs_value("line_width", nozzle_diameter)) <= DBL_EPSILON) ? + (nozzle_diameter * 1.125) : + print_config.get_abs_value("line_width", nozzle_diameter), + print_config.get_abs_value("layer_height"), 0))); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINTER)->update_dirty(); @@ -9262,6 +9595,8 @@ void Plater::calib_flowrate(int pass) { _obj->config.set_key_value("top_surface_pattern", new ConfigOptionEnum(ipMonotonic)); _obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f)); _obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45)); + _obj->config.set_key_value("solid_infill_direction", new ConfigOptionFloat(135)); + _obj->config.set_key_value("rotate_solid_infill_direction", new ConfigOptionBool(true)); _obj->config.set_key_value("ironing_type", new ConfigOptionEnum(IroningType::NoIroning)); _obj->config.set_key_value("internal_solid_infill_speed", new ConfigOptionFloat(internal_solid_speed)); _obj->config.set_key_value("top_surface_speed", new ConfigOptionFloat(top_surface_speed)); @@ -9501,6 +9836,19 @@ void Plater::calib_VFA(const Calib_Params& params) p->background_process.fff_print()->set_calib_params(params); } BuildVolume_Type Plater::get_build_volume_type() const { return p->bed.get_build_volume_type(); } + +void Plater::import_zip_archive() +{ + wxString input_file; + wxGetApp().import_zip(this, input_file); + if (input_file.empty()) + return; + + wxArrayString arr; + arr.Add(input_file); + load_files(arr); +} + void Plater::import_sl1_archive() { auto &w = get_ui_job_worker(); @@ -9588,14 +9936,12 @@ void Plater::load_gcode(const wxString& filename) //BBS: add cost info when drag in gcode auto& ps = current_result->print_statistics; double total_cost = 0.0; - for (auto& volumes_map : { ps.volumes_per_extruder,ps.flush_per_filament ,ps.wipe_tower_volumes_per_extruder }) { - for (auto volume : volumes_map) { - size_t extruder_id = volume.first; - double density = current_result->filament_densities.at(extruder_id); - double cost = current_result->filament_costs.at(extruder_id); - double weight = volume.second * density * 0.001; - total_cost += weight * cost * 0.001; - } + for (auto volume : ps.total_volumes_per_extruder) { + size_t extruder_id = volume.first; + double density = current_result->filament_densities.at(extruder_id); + double cost = current_result->filament_costs.at(extruder_id); + double weight = volume.second * density * 0.001; + total_cost += weight * cost * 0.001; } current_print.print_statistics().total_cost = total_cost; @@ -9614,7 +9960,7 @@ void Plater::load_gcode(const wxString& filename) } else { set_project_filename(filename); } - + } void Plater::reload_gcode_from_disk() @@ -9643,6 +9989,10 @@ void Plater::update_all_plate_thumbnails(bool force_update) if (force_update || !plate->thumbnail_data.is_valid()) { get_view3D_canvas3D()->render_thumbnail(plate->thumbnail_data, plate->plate_thumbnail_width, plate->plate_thumbnail_height, thumbnail_params, Camera::EType::Ortho); } + if (force_update || !plate->no_light_thumbnail_data.is_valid()) { + get_view3D_canvas3D()->render_thumbnail(plate->no_light_thumbnail_data, plate->plate_thumbnail_width, plate->plate_thumbnail_height, thumbnail_params, + Camera::EType::Ortho,false,false,true); + } } } @@ -9655,6 +10005,7 @@ void Plater::invalid_all_plate_thumbnails() for (int i = 0; i < get_partplate_list().get_plate_count(); i++) { PartPlate* plate = get_partplate_list().get_plate(i); plate->thumbnail_data.reset(); + plate->no_light_thumbnail_data.reset(); } } @@ -9688,6 +10039,186 @@ std::vector Plater::load_files(const std::vector& input_fil return p->load_files(paths, strategy, ask_multi); } +bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) +{ + //std::vector unzipped_paths; + std::vector non_project_paths; + std::vector project_paths; + try + { + mz_zip_archive archive; + mz_zip_zero_struct(&archive); + + if (!open_zip_reader(&archive, archive_path.string())) { + // TRN %1% is archive path + std::string err_msg = GUI::format(_u8L("Loading of a ZIP archive on path %1% has failed."), archive_path.string()); + throw Slic3r::FileIOError(err_msg); + } + mz_uint num_entries = mz_zip_reader_get_num_files(&archive); + mz_zip_archive_file_stat stat; + // selected_paths contains paths and its uncompressed size. The size is used to distinguish between files with same path. + std::vector> selected_paths; + FileArchiveDialog dlg(static_cast(wxGetApp().mainframe), &archive, selected_paths); + if (dlg.ShowModal() == wxID_OK) + { + std::string archive_path_string = archive_path.string(); + archive_path_string = archive_path_string.substr(0, archive_path_string.size() - 4); + fs::path archive_dir(wxStandardPaths::Get().GetTempDir().utf8_str().data()); + + for (auto& path_w_size : selected_paths) { + const fs::path& path = path_w_size.first; + size_t size = path_w_size.second; + // find path in zip archive + for (mz_uint i = 0; i < num_entries; ++i) { + if (mz_zip_reader_file_stat(&archive, i, &stat)) { + if (size != stat.m_uncomp_size) // size must fit + continue; + wxString wname = boost::nowide::widen(stat.m_filename); + std::string name = boost::nowide::narrow(wname); + fs::path archive_path(name); + + std::string extra(1024, 0); + size_t extra_size = mz_zip_reader_get_filename_from_extra(&archive, i, extra.data(), extra.size()); + if (extra_size > 0) { + archive_path = fs::path(extra.substr(0, extra_size)); + name = archive_path.string(); + } + + if (archive_path.empty()) + continue; + if (path != archive_path) + continue; + // decompressing + try + { + std::replace(name.begin(), name.end(), '\\', '/'); + // rename if file exists + std::string filename = path.filename().string(); + std::string extension = boost::filesystem::extension(path); + std::string just_filename = filename.substr(0, filename.size() - extension.size()); + std::string final_filename = just_filename; + + size_t version = 0; + while (fs::exists(archive_dir / (final_filename + extension))) + { + ++version; + final_filename = just_filename + "(" + std::to_string(version) + ")"; + } + filename = final_filename + extension; + fs::path final_path = archive_dir / filename; + std::string buffer((size_t)stat.m_uncomp_size, 0); + // Decompress action. We already has correct file index in stat structure. + mz_bool res = mz_zip_reader_extract_to_mem(&archive, stat.m_file_index, (void*)buffer.data(), (size_t)stat.m_uncomp_size, 0); + if (res == 0) { + // TRN: First argument = path to file, second argument = error description + wxString error_log = GUI::format_wxstr(_L("Failed to unzip file to %1%: %2%"), final_path.string(), mz_zip_get_error_string(mz_zip_get_last_error(&archive))); + BOOST_LOG_TRIVIAL(error) << error_log; + show_error(nullptr, error_log); + break; + } + // write buffer to file + fs::fstream file(final_path, std::ios::out | std::ios::binary | std::ios::trunc); + file.write(buffer.c_str(), buffer.size()); + file.close(); + if (!fs::exists(final_path)) { + wxString error_log = GUI::format_wxstr(_L("Failed to find unzipped file at %1%. Unzipping of file has failed."), final_path.string()); + BOOST_LOG_TRIVIAL(error) << error_log; + show_error(nullptr, error_log); + break; + } + BOOST_LOG_TRIVIAL(info) << "Unzipped " << final_path; + if (!boost::algorithm::iends_with(filename, ".3mf") && !boost::algorithm::iends_with(filename, ".amf")) { + non_project_paths.emplace_back(final_path); + break; + } + // if 3mf - read archive headers to find project file + if (/*(boost::algorithm::iends_with(filename, ".3mf") && !is_project_3mf(final_path.string())) ||*/ + (boost::algorithm::iends_with(filename, ".amf") && !boost::algorithm::iends_with(filename, ".zip.amf"))) { + non_project_paths.emplace_back(final_path); + break; + } + + project_paths.emplace_back(final_path); + break; + } + catch (const std::exception& e) + { + // ensure the zip archive is closed and rethrow the exception + close_zip_reader(&archive); + throw Slic3r::FileIOError(e.what()); + } + } + } + } + close_zip_reader(&archive); + if (non_project_paths.size() + project_paths.size() != selected_paths.size()) + BOOST_LOG_TRIVIAL(error) << "Decompresing of archive did not retrieve all files. Expected files: " + << selected_paths.size() + << " Decopressed files: " + << non_project_paths.size() + project_paths.size(); + } else { + close_zip_reader(&archive); + return false; + } + + } + catch (const Slic3r::FileIOError& e) { + // zip reader should be already closed or not even opened + GUI::show_error(this, e.what()); + return false; + } + // none selected + if (project_paths.empty() && non_project_paths.empty()) + { + return false; + } + + // 1 project file and some models - behave like drag n drop of 3mf and then load models + if (project_paths.size() == 1) + { + wxArrayString aux; + aux.Add(from_u8(project_paths.front().string())); + bool loaded3mf = load_files(aux); + load_files(non_project_paths, LoadStrategy::LoadModel); + boost::system::error_code ec; + if (loaded3mf) { + fs::remove(project_paths.front(), ec); + if (ec) + BOOST_LOG_TRIVIAL(error) << ec.message(); + } + for (const fs::path& path : non_project_paths) { + // Delete file from temp file (path variable), it will stay only in app memory. + boost::system::error_code ec; + fs::remove(path, ec); + if (ec) + BOOST_LOG_TRIVIAL(error) << ec.message(); + } + return true; + } + + // load all projects and all models as geometry + load_files(project_paths, LoadStrategy::LoadModel); + load_files(non_project_paths, LoadStrategy::LoadModel); + + + for (const fs::path& path : project_paths) { + // Delete file from temp file (path variable), it will stay only in app memory. + boost::system::error_code ec; + fs::remove(path, ec); + if (ec) + BOOST_LOG_TRIVIAL(error) << ec.message(); + } + for (const fs::path& path : non_project_paths) { + // Delete file from temp file (path variable), it will stay only in app memory. + boost::system::error_code ec; + fs::remove(path, ec); + if (ec) + BOOST_LOG_TRIVIAL(error) << ec.message(); + } + + return true; +} + class RadioBox; class RadioSelector { @@ -10026,7 +10557,7 @@ void ProjectDropDialog::on_dpi_changed(const wxRect& suggested_rect) //BBS: remove GCodeViewer as seperate APP logic bool Plater::load_files(const wxArrayString& filenames) { - const std::regex pattern_drop(".*[.](stp|step|stl|obj|amf|3mf|svg)", std::regex::icase); + const std::regex pattern_drop(".*[.](stp|step|stl|oltp|obj|amf|3mf|svg|zip)", std::regex::icase); const std::regex pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase); std::vector normal_paths; @@ -10116,6 +10647,21 @@ bool Plater::load_files(const wxArrayString& filenames) } } + // Orca: Iters through given paths and imports files from zip then remove zip from paths + // returns true if zip files were found + auto handle_zips = [this](vector& paths) { // NOLINT(*-no-recursion) - Recursion is intended and should be managed properly + bool res = false; + for (auto it = paths.begin(); it != paths.end();) { + if (boost::algorithm::iends_with(it->string(), ".zip")) { + res = true; + preview_zip_archive(*it); + it = paths.erase(it); + } else + it++; + } + return res; + }; + switch (loadfiles_type) { case LoadFilesType::Single3MF: open_3mf_file(normal_paths[0]); @@ -10123,6 +10669,7 @@ bool Plater::load_files(const wxArrayString& filenames) case LoadFilesType::SingleOther: { Plater::TakeSnapshot snapshot(this, snapshot_label); + if (handle_zips(normal_paths)) return true; if (load_files(normal_paths, LoadStrategy::LoadModel, false).empty()) { res = false; } break; } @@ -10138,6 +10685,9 @@ bool Plater::load_files(const wxArrayString& filenames) case LoadFilesType::MultipleOther: { Plater::TakeSnapshot snapshot(this, snapshot_label); + if (handle_zips(normal_paths)) { + if (normal_paths.empty()) return true; + } if (load_files(normal_paths, LoadStrategy::LoadModel, true).empty()) { res = false; } break; } @@ -10156,6 +10706,9 @@ bool Plater::load_files(const wxArrayString& filenames) open_3mf_file(first_file[0]); if (load_files(tmf_file, LoadStrategy::LoadModel).empty()) { res = false; } + if (res && handle_zips(other_file)) { + if (normal_paths.empty()) return true; + } if (load_files(other_file, LoadStrategy::LoadModel, false).empty()) { res = false; } break; default: break; @@ -10173,21 +10726,23 @@ bool Plater::open_3mf_file(const fs::path &file_path) } LoadType load_type = LoadType::Unknown; - - bool show_drop_project_dialog = true; - if (show_drop_project_dialog) { - ProjectDropDialog dlg(filename); - if (dlg.ShowModal() == wxID_OK) { - int choice = dlg.get_action(); - load_type = static_cast(choice); - wxGetApp().app_config->set("import_project_action", std::to_string(choice)); + if (!model().objects.empty()) { + bool show_drop_project_dialog = true; + if (show_drop_project_dialog) { + ProjectDropDialog dlg(filename); + if (dlg.ShowModal() == wxID_OK) { + int choice = dlg.get_action(); + load_type = static_cast(choice); + wxGetApp().app_config->set("import_project_action", std::to_string(choice)); - // BBS: jump to plater panel - wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor); - } + // BBS: jump to plater panel + wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor); + } + } else + load_type = static_cast( + std::clamp(std::stoi(wxGetApp().app_config->get("import_project_action")), static_cast(LoadType::OpenProject), static_cast(LoadType::LoadConfig))); } else - load_type = static_cast( - std::clamp(std::stoi(wxGetApp().app_config->get("import_project_action")), static_cast(LoadType::OpenProject), static_cast(LoadType::LoadConfig))); + load_type = LoadType::OpenProject; if (load_type == LoadType::Unknown) return false; @@ -10342,6 +10897,10 @@ void Plater::select_view(const std::string& direction) { p->select_view(directio //BBS: add no_slice logic void Plater::select_view_3D(const std::string& name, bool no_slice) { p->select_view_3D(name, no_slice); } +void Plater::reload_paint_after_background_process_apply() { + p->preview->set_reload_paint_after_background_process_apply(true); +} + bool Plater::is_preview_shown() const { return p->is_preview_shown(); } bool Plater::is_preview_loaded() const { return p->is_preview_loaded(); } bool Plater::is_view3D_shown() const { return p->is_view3D_shown(); } @@ -10366,6 +10925,7 @@ void Plater::remove_curr_plate_all() { p->remove_curr_plate_all(); } void Plater::select_all() { p->select_all(); } void Plater::deselect_all() { p->deselect_all(); } +void Plater::exit_gizmo() { p->exit_gizmo(); } void Plater::remove(size_t obj_idx) { p->remove(obj_idx); } void Plater::reset(bool apply_presets_change) { p->reset(apply_presets_change); } @@ -10863,12 +11423,24 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st csgmesh.reserve(2 * mo.volumes.size()); bool has_splitable_volume = csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), csg::mpartsPositive | csg::mpartsNegative); - - if (csg::check_csgmesh_booleans(Range{ std::begin(csgmesh), std::end(csgmesh) }) == csgmesh.end()) { + + std::string fail_msg = _u8L("Unable to perform boolean operation on model meshes. " + "Only positive parts will be kept. You may fix the meshes and try agian."); + if (auto fail_reason_name = csg::check_csgmesh_booleans(Range{ std::begin(csgmesh), std::end(csgmesh) }); std::get<0>(fail_reason_name) != csg::BooleanFailReason::OK) { + std::string name = std::get<1>(fail_reason_name); + std::map fail_reasons = { + {csg::BooleanFailReason::OK, "OK"}, + {csg::BooleanFailReason::MeshEmpty, Slic3r::format( _u8L("Reason: part \"%1%\" is empty."), name)}, + {csg::BooleanFailReason::NotBoundAVolume, Slic3r::format(_u8L("Reason: part \"%1%\" does not bound a volume."), name)}, + {csg::BooleanFailReason::SelfIntersect, Slic3r::format(_u8L("Reason: part \"%1%\" has self intersection."), name)}, + {csg::BooleanFailReason::NoIntersection, Slic3r::format(_u8L("Reason: \"%1%\" and another part have no intersection."), name)} }; + fail_msg += " " + fail_reasons[std::get<0>(fail_reason_name)]; + } + else { try { MeshBoolean::mcut::McutMeshPtr meshPtr = csg::perform_csgmesh_booleans_mcut(Range{ std::begin(csgmesh), std::end(csgmesh) }); mesh = MeshBoolean::mcut::mcut_to_triangle_mesh(*meshPtr); - } + } catch (...) {} #if 0 // if mcut fails, try again with CGAL @@ -10884,8 +11456,7 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st if (mesh.empty()) { if (notify_func) - notify_func(_u8L("Unable to perform boolean operation on model meshes. " - "Only positive parts will be exported.")); + notify_func(fail_msg); for (const ModelVolume* v : mo.volumes) if (v->is_model_part()) { @@ -11264,6 +11835,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy //BBS: add plate logic for thumbnail generate std::vector thumbnails; + std::vector no_light_thumbnails; std::vector calibration_thumbnails; std::vector top_thumbnails; std::vector picking_thumbnails; @@ -11284,6 +11856,17 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy } thumbnails.push_back(thumbnail_data); + ThumbnailData *no_light_thumbnail_data = &p->partplate_list.get_plate(i)->no_light_thumbnail_data; + if (p->partplate_list.get_plate(i)->no_light_thumbnail_data.is_valid() && using_exported_file()) { + // no need to generate thumbnail + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate thumbnail for gcode/exported mode of plate %1%") % i; + } else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate thumbnail for plate %1%") % i; + const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; + p->generate_thumbnail(p->partplate_list.get_plate(i)->no_light_thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, + thumbnail_params, Camera::EType::Ortho,false,false,true); + } + no_light_thumbnails.push_back(no_light_thumbnail_data); //ThumbnailData* calibration_data = &p->partplate_list.get_plate(i)->cali_thumbnail_data; //calibration_thumbnails.push_back(calibration_data); PlateBBoxData* plate_bbox_data = &p->partplate_list.get_plate(i)->cali_bboxes_data; @@ -11347,6 +11930,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy store_params.project_presets = project_presets; store_params.config = export_config ? &cfg : nullptr; store_params.thumbnail_data = thumbnails; + store_params.no_light_thumbnail_data = no_light_thumbnails; store_params.top_thumbnail_data = top_thumbnails; store_params.pick_thumbnail_data = picking_thumbnails; store_params.calibration_thumbnail_data = calibration_thumbnails; @@ -11359,6 +11943,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy // get type and color for platedata auto* filament_color = dynamic_cast(cfg.option("filament_colour")); auto* nozzle_diameter_option = dynamic_cast(cfg.option("nozzle_diameter")); + auto* filament_id_opt = dynamic_cast(cfg.option("filament_ids")); std::string nozzle_diameter_str; if (nozzle_diameter_option) nozzle_diameter_str = nozzle_diameter_option->serialize(); @@ -11372,6 +11957,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { std::string display_filament_type; it->type = cfg.get_filament_type(display_filament_type, it->id); + it->filament_id = filament_id_opt ? filament_id_opt->get_at(it->id) : ""; it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; // save filament info used in curr plate int index = p->partplate_list.get_curr_plate_index(); @@ -11438,6 +12024,10 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy //release the data here, as it will always be generated when export calibration_thumbnails[i]->reset(); } + for (unsigned int i = 0; i < no_light_thumbnails.size(); i++) { + // release the data here, as it will always be generated when export + no_light_thumbnails[i]->reset(); + } for (unsigned int i = 0; i < top_thumbnails.size(); i++) { //release the data here, as it will always be generated when export @@ -11697,7 +12287,7 @@ int Plater::start_next_slice() this->p->view3D->reload_scene(false); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": update_background_process returns %1%")%state; - if (p->partplate_list.get_curr_plate()->is_apply_result_invalid()) { + if (!p->partplate_list.get_curr_plate()->can_slice()) { p->process_completed_with_error = p->partplate_list.get_curr_plate_index(); BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": found invalidated apply in update_background_process."); return -1; @@ -11754,7 +12344,7 @@ void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject & // and let the background processing start. this->p->restart_background_process(state | priv::UPDATE_BACKGROUND_PROCESS_FORCE_RESTART); } -void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) +void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn, bool use_3mf) { // if physical_printer is selected, send gcode for this printer // DynamicPrintConfig* physical_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config(); @@ -11766,6 +12356,8 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) if (upload_job.empty()) return; + upload_job.upload_data.use_3mf = use_3mf; + // Obtain default output path fs::path default_output_file; try { @@ -11784,6 +12376,9 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) return; } default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); + if (use_3mf) { + default_output_file.replace_extension("3mf"); + } // Repetier specific: Query the server for the list of file groups. wxArrayString groups; @@ -11805,8 +12400,11 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) } } - PrintHostSendDialog dlg(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage_paths, storage_names); + auto config = get_app_config(); + PrintHostSendDialog dlg(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage_paths, storage_names, config->get_bool("open_device_tab_post_upload")); if (dlg.ShowModal() == wxID_OK) { + config->set_bool("open_device_tab_post_upload", dlg.switch_to_device_tab()); + upload_job.switch_to_device_tab = dlg.switch_to_device_tab(); upload_job.upload_data.upload_path = dlg.filename(); upload_job.upload_data.post_action = dlg.post_action(); upload_job.upload_data.group = dlg.group(); @@ -11819,6 +12417,19 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) return; } + if (use_3mf) { + // Process gcode + const int result = send_gcode(plate_idx, nullptr); + + if (result < 0) { + wxString msg = _L("Abnormal print file data. Please slice again"); + show_error(this, msg, false); + return; + } + + upload_job.upload_data.source_path = p->m_print_job_data._3mf_path; + } + p->export_gcode(fs::path(), false, std::move(upload_job)); } } @@ -12616,6 +13227,38 @@ void Plater::clone_selection() selection.clone(res); } +std::vector Plater::get_empty_cells(const Vec2f step) +{ + PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + BoundingBoxf3 build_volume = plate->get_build_volume(); + Vec2d vmin(build_volume.min.x(), build_volume.min.y()), vmax(build_volume.max.x(), build_volume.max.y()); + BoundingBoxf bbox(vmin, vmax); + std::vector cells; + auto min_x = step(0)/2;// start_point.x() - step(0) * int((start_point.x() - bbox.min.x()) / step(0)); + auto min_y = step(1)/2;// start_point.y() - step(1) * int((start_point.y() - bbox.min.y()) / step(1)); + auto& exclude_box3s = plate->get_exclude_areas(); + std::vector exclude_boxs; + for (auto& box : exclude_box3s) { + Vec2d vmin(box.min.x(), box.min.y()), vmax(box.max.x(), box.max.y()); + exclude_boxs.emplace_back(vmin, vmax); + } + for (float x = min_x + bbox.min.x(); x < bbox.max.x() - step(0) / 2; x += step(0)) + for (float y = min_y + bbox.min.y(); y < bbox.max.y() - step(1) / 2; y += step(1)) { + bool in_exclude = false; + BoundingBoxf cell(Vec2d(x - step(0) / 2, y - step(1) / 2), Vec2d(x + step(0) / 2, y + step(1) / 2)); + for (auto& box : exclude_boxs) { + if (box.overlap(cell)) { + in_exclude = true; + break; + } + } + if(in_exclude) + continue; + cells.emplace_back(x, y); + } + return cells; +} + void Plater::search(bool plater_is_active, Preset::Type type, wxWindow *tag, TextInput *etag, wxWindow *stag) { if (plater_is_active) { @@ -12936,7 +13579,7 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) void Plater::open_platesettings_dialog(wxCommandEvent& evt) { int plate_index = evt.GetInt(); - PlateSettingsDialog dlg(this, _L("Plate Settings"), evt.GetString() == "only_first_layer_sequence"); + PlateSettingsDialog dlg(this, _L("Plate Settings"), evt.GetString() == "only_layer_sequence"); PartPlate* curr_plate = p->partplate_list.get_curr_plate(); dlg.sync_bed_type(curr_plate->get_bed_type()); @@ -12953,6 +13596,13 @@ void Plater::open_platesettings_dialog(wxCommandEvent& evt) { else dlg.sync_first_layer_print_seq(1, curr_plate->get_first_layer_print_sequence()); + auto other_layers_print_seq = curr_plate->get_other_layers_print_sequence(); + if (other_layers_print_seq.empty()) + dlg.sync_other_layers_print_seq(0, {}); + else { + dlg.sync_other_layers_print_seq(1, curr_plate->get_other_layers_print_sequence()); + } + dlg.sync_spiral_mode(curr_plate->get_spiral_vase_mode(), !curr_plate->has_spiral_mode_config()); dlg.Bind(EVT_SET_BED_TYPE_CONFIRM, [this, plate_index, &dlg](wxCommandEvent& e) { @@ -12971,6 +13621,11 @@ void Plater::open_platesettings_dialog(wxCommandEvent& evt) { else curr_plate->set_first_layer_print_sequence({}); + if (dlg.get_other_layers_print_seq_choice() != 0) + curr_plate->set_other_layers_print_sequence(dlg.get_other_layers_print_seq_infos()); + else + curr_plate->set_other_layers_print_sequence({}); + int ps_sel = dlg.get_print_seq_choice(); if (ps_sel != 0) curr_plate->set_print_seq(PrintSequence(ps_sel - 1)); @@ -13348,13 +14003,13 @@ void Plater::post_process_string_object_exception(StringObjectException &err) filament_name = filament_it->alias; } else { auto preset = preset_bundle->filaments.get_preset_base(*filament_it); - if (!preset->alias.empty()) { + if (preset && !preset->alias.empty()) { filament_name = preset->alias; } else { char target = '@'; - size_t pos = preset->name.find(target); + size_t pos = filament_name.find(target); if (pos != std::string::npos) { - filament_name = preset->name.substr(0, pos - 1); + filament_name = filament_name.substr(0, pos - 1); } } } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 681db56703..66d63fd54a 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -1,19 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Tomáš Mészáros @tamasmeszaros, Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, David Kocík @kocikdav, Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Pavel Mikuš @Godrak, Filip Sykala @Jony01, Vojtěch Král @vojtechkral -///|/ -///|/ ported from lib/Slic3r/GUI/Plater.pm: -///|/ Copyright (c) Prusa Research 2016 - 2019 Vojtěch Bubník @bubnikv, Vojtěch Král @vojtechkral, Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Tomáš Mészáros @tamasmeszaros -///|/ Copyright (c) 2018 Martin Loidl @LoidlM -///|/ Copyright (c) 2017 Matthias Gazzari @qtux -///|/ Copyright (c) Slic3r 2012 - 2016 Alessandro Ranellucci @alranel -///|/ Copyright (c) 2017 Joseph Lenox @lordofhyphens -///|/ Copyright (c) 2015 Daren Schwenke -///|/ Copyright (c) 2014 Mark Hindess -///|/ Copyright (c) 2012 Mike Sheldrake @mesheldrake -///|/ Copyright (c) 2012 Henrik Brix Andersen @henrikbrixandersen -///|/ Copyright (c) 2012 Sam Wong -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_Plater_hpp_ #define slic3r_Plater_hpp_ @@ -72,6 +56,7 @@ class Ams; using ModelInstancePtrs = std::vector; + namespace UndoRedo { class Stack; enum class SnapshotType : unsigned char; @@ -116,7 +101,10 @@ wxDECLARE_EVENT(EVT_GLCANVAS_COLOR_MODE_CHANGED, SimpleEvent); wxDECLARE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent); wxDECLARE_EVENT(EVT_CREATE_FILAMENT, SimpleEvent); wxDECLARE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent); - +wxDECLARE_EVENT(EVT_ADD_FILAMENT, SimpleEvent); +wxDECLARE_EVENT(EVT_DEL_FILAMENT, SimpleEvent); +using ColorEvent = Event; +wxDECLARE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); const wxString DEFAULT_PROJECT_NAME = "Untitled"; class Sidebar : public wxPanel @@ -152,6 +140,9 @@ public: void jump_to_option(const std::string& opt_key, Preset::Type type, const std::wstring& category); // BBS. Add on_filaments_change() method. void on_filaments_change(size_t num_filaments); + void add_filament(); + void delete_filament(); + void add_custom_filament(wxColour new_col); // BBS void on_bed_type_change(BedType bed_type); void load_ams_list(std::string const & device, MachineObject* obj); @@ -255,6 +246,7 @@ public: int get_3mf_file_count(std::vector paths); void add_file(); void add_model(bool imperial_units = false, std::string fname = ""); + void import_zip_archive(); void import_sl1_archive(); void extract_config_from_project(); void load_gcode(); @@ -291,6 +283,8 @@ public: static wxColour get_next_color_for_filament(); static wxString get_slice_warning_string(GCodeProcessorResult::SliceWarning& warning); + bool preview_zip_archive(const boost::filesystem::path& archive_path); + // BBS: restore std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false); // To be called when providing a list of files to the GUI slic3r on command line. @@ -342,6 +336,7 @@ public: //BBS: add no_slice logic void select_view_3D(const std::string& name, bool no_slice = true); + void reload_paint_after_background_process_apply(); bool is_preview_shown() const; bool is_preview_loaded() const; bool is_view3D_shown() const; @@ -370,6 +365,7 @@ public: void select_all(); void deselect_all(); + void exit_gizmo(); void remove(size_t obj_idx); void reset(bool apply_presets_change = false); void reset_with_confirm(); @@ -435,7 +431,7 @@ public: /* -1: send current gcode if not specified * -2: send all gcode to target machine */ int send_gcode(int plate_idx = -1, Export3mfProgressFn proFn = nullptr); - void send_gcode_legacy(int plate_idx = -1, Export3mfProgressFn proFn = nullptr); + void send_gcode_legacy(int plate_idx = -1, Export3mfProgressFn proFn = nullptr, bool use_3mf = false); int export_config_3mf(int plate_idx = -1, Export3mfProgressFn proFn = nullptr); //BBS jump to nonitor after print job finished void send_calibration_job_finished(wxCommandEvent &evt); @@ -536,6 +532,8 @@ public: void split_object(); void split_volume(); void optimize_rotation(); + // find all empty cells on the plate and won't overlap with exclusion areas + static std::vector get_empty_cells(const Vec2f step); //BBS: void fill_color(int extruder_id); @@ -792,7 +790,7 @@ private: bool m_only_gcode { false }; bool m_exported_file { false }; bool skip_thumbnail_invalid { false }; - bool m_loading_project {false }; + bool m_loading_project { false }; std::string m_preview_only_filename; int m_valid_plates_count { 0 }; @@ -823,6 +821,7 @@ private: bool m_was_scheduled; }; +std::vector get_min_flush_volumes(const DynamicPrintConfig& full_config); } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 725ffe3726..79b3cd2646 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -173,6 +173,9 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CATALAN)) { language_name = wxString::FromUTF8("Catalan"); } + else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_PORTUGUESE_BRAZILIAN)) { + language_name = wxString::FromUTF8("Português (Brasil)"); + } if (app_config->get(param) == vlist[i]->CanonicalName) { m_current_language_selected = i; @@ -742,16 +745,18 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa return m_sizer_checkbox; } -wxBoxSizer *PreferencesDialog::create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::function onclick) +wxBoxSizer* PreferencesDialog::create_item_button( + wxString title, wxString title2, wxWindow* parent, wxString tooltip, wxString tooltip2, std::function onclick, bool button_on_left/* = false*/) { wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); auto m_staticTextPath = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - // m_staticTextPath->SetMaxSize(wxSize(FromDIP(440), -1)); + m_staticTextPath->SetMaxSize(wxSize(FromDIP(240), -1)); m_staticTextPath->SetForegroundColour(DESIGN_GRAY900_COLOR); m_staticTextPath->SetFont(::Label::Body_13); m_staticTextPath->Wrap(-1); + m_staticTextPath->SetToolTip(tooltip); auto m_button_download = new Button(parent, title2); @@ -767,12 +772,17 @@ wxBoxSizer *PreferencesDialog::create_item_button(wxString title, wxString title m_button_download->SetMinSize(wxSize(FromDIP(58), FromDIP(22))); m_button_download->SetSize(wxSize(FromDIP(58), FromDIP(22))); m_button_download->SetCornerRadius(FromDIP(12)); - m_button_download->SetToolTip(tooltip); + m_button_download->SetToolTip(tooltip2); m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); + if (button_on_left) { + m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); + m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); + } else { + m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); + m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); + } return m_sizer_checkbox; } @@ -852,6 +862,85 @@ wxWindow *PreferencesDialog ::create_item_radiobox(wxString title, wxWindow *par return item; } +#ifdef WIN32 +wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wxString url_prefix, wxString website_name) +{ + wxString title = _L("Associate") + (boost::format(" %1%://") % url_prefix.c_str()).str(); + wxString tooltip = _L("Associate") + " " + url_prefix + ":// " + _L("with OrcaSlicer so that Orca can open models from") + " " + website_name; + + std::wstring registered_bin; // not used, just here to provide a ref to check fn + bool reg_to_current_instance = wxGetApp().check_url_association(url_prefix.ToStdWstring(), registered_bin); + + auto* h_sizer = new wxBoxSizer(wxHORIZONTAL); // contains checkbox and other elements on the first line + h_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + + // build checkbox + auto checkbox = new ::CheckBox(parent); + checkbox->SetToolTip(tooltip); + checkbox->SetValue(reg_to_current_instance); // If registered to the current instance, checkbox should be checked + checkbox->Enable(!reg_to_current_instance); // Since unregistering isn't supported, checkbox is disabled when checked + + h_sizer->Add(checkbox, 0, wxALIGN_CENTER, 0); + h_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); + + // build text next to checkbox + auto checkbox_title = new wxStaticText(parent, wxID_ANY, title); + checkbox_title->SetToolTip(tooltip); + checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetFont(::Label::Body_13); + auto size = checkbox_title->GetTextExtent(title); + checkbox_title->SetMinSize({ size.x + FromDIP(5), -1 }); + checkbox_title->Wrap(-1); + h_sizer->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + + auto* v_sizer = new wxBoxSizer(wxVERTICAL); + v_sizer->Add(h_sizer); + + // build text below checkbox that indicates the instance currently registered to handle the link type + auto* registered_instance_title = new wxStaticText(parent, wxID_ANY, ""); + registered_instance_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + registered_instance_title->SetFont(::Label::Body_13); + registered_instance_title->Wrap(-1); + + // update the text below checkbox + auto update_current_association_str = [=, ®_to_current_instance](){ + // get registered binary for given link type + std::wstring registered_bin; + reg_to_current_instance = wxGetApp().check_url_association(url_prefix.wc_str(), registered_bin); + + // format registered binary to get only the path and remove excess chars + if (!registered_bin.empty()) + // skip idx 0 because it is the first quotation mark + registered_bin = registered_bin.substr(1, registered_bin.find(L'\"', 1) - 1); + + wxString current_association_str = _L("Current Association: "); + if (reg_to_current_instance) { + current_association_str += _L("Current Instance"); + registered_instance_title->SetToolTip(_L("Current Instance Path: ") + registered_bin); + } else if (registered_bin.empty()) + current_association_str += _L("None"); + else + current_association_str += registered_bin; + + registered_instance_title->SetLabel(current_association_str); + auto size = registered_instance_title->GetTextExtent(current_association_str); + registered_instance_title->SetMinSize({ size.x + FromDIP(5), -1 }); + }; + update_current_association_str(); + + v_sizer->Add(registered_instance_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 60); + + checkbox->Bind(wxEVT_TOGGLEBUTTON, [=](wxCommandEvent& e) { + wxGetApp().associate_url(url_prefix.ToStdWstring()); + checkbox->Disable(); + update_current_association_str(); + e.Skip(); + }); + + return v_sizer; +} +#endif // WIN32 + PreferencesDialog::PreferencesDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos, const wxSize &size, long style) : DPIDialog(parent, id, _L("Preferences"), pos, size, style) { @@ -866,6 +955,8 @@ PreferencesDialog::PreferencesDialog(wxWindow *parent, wxWindowID id, const wxSt std::string value; value = wxGetApp().app_config->get("auto_calculate"); j["auto_flushing"] = value; + value = wxGetApp().app_config->get("auto_calculate_when_filament_change"); + j["auto_calculate_when_filament_change"] = value; agent->track_event("preferences_changed", j.dump()); } } catch(...) {} @@ -984,7 +1075,8 @@ wxWindow* PreferencesDialog::create_general_page() wxLANGUAGE_UKRAINIAN, wxLANGUAGE_TURKISH, wxLANGUAGE_POLISH, - wxLANGUAGE_CATALAN + wxLANGUAGE_CATALAN, + wxLANGUAGE_PORTUGUESE_BRAZILIAN }; auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); @@ -1009,12 +1101,20 @@ wxWindow* PreferencesDialog::create_general_page() std::vector Regions = {_L("Asia-Pacific"), _L("China"), _L("Europe"), _L("North America"), _L("Others")}; auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions); - auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("Stealth Mode"), 50, "stealth_mode"); + auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("This stops the transmission of data to Bambu's cloud services. Users who don't use BBL machines or use LAN mode only can safely turn on this function."), 50, "stealth_mode"); auto item_enable_plugin = create_item_checkbox(_L("Enable network plugin"), page, _L("Enable network plugin"), 50, "installed_networking"); auto item_check_stable_version_only = create_item_checkbox(_L("Check for stable updates only"), page, _L("Check for stable updates only"), 50, "check_stable_update_only"); std::vector Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units); + auto item_single_instance = create_item_checkbox(_L("Allow only one OrcaSlicer instance"), page, + #if __APPLE__ + _L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances " + "of same app from the command line. In such case this settings will allow only one instance."), + #else + _L("If this is enabled, when starting OrcaSlicer and another instance of the same OrcaSlicer is already running, that instance will be reactivated instead."), + #endif + 50, "single_instance"); std::vector DefaultPage = {_L("Home"), _L("Prepare")}; auto item_default_page = create_item_combobox(_L("Default Page"), page, _L("Set the page opened on startup."), "default_page", DefaultPage); @@ -1030,11 +1130,14 @@ wxWindow* PreferencesDialog::create_general_page() auto item_hints = create_item_checkbox(_L("Show \"Tip of the day\" notification after start"), page, _L("If enabled, useful hints are displayed at startup."), 50, "show_hints"); auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate everytime the color changed."), page, _L("If enabled, auto-calculate everytime the color changed."), 50, "auto_calculate"); + auto item_calc_in_long_retract = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time when the filament is changed."), page, _L("If enabled, auto-calculate every time when filament is changed"), 50, "auto_calculate_when_filament_change"); + auto item_remember_printer_config = create_item_checkbox(_L("Remember printer configuration"), page, _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), 50, "remember_printer_config"); + auto item_multi_machine = create_item_checkbox(_L("Multi-device Management(Take effect after restarting Orca)."), page, _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), 50, "enable_multi_machine"); auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); auto title_network = create_item_title(_L("Network"), page, _L("Network")); auto item_user_sync = create_item_checkbox(_L("Auto sync user presets(Printer/Filament/Process)"), page, _L("User Sync"), 50, "sync_user_preset"); auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), page, _L("System Sync"), 50, "sync_system_preset"); - auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, _L("Clear my choice on the unsaved presets."), []() { + auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, L"", _L("Clear my choice on the unsaved presets."), []() { wxGetApp().app_config->set("save_preset_choise", ""); }); @@ -1048,6 +1151,12 @@ wxWindow* PreferencesDialog::create_general_page() _L("If enabled, sets OrcaSlicer as default application to open .stl files"), 50, "associate_stl"); auto item_associate_step = create_item_checkbox(_L("Associate .step/.stp files to OrcaSlicer"), page, _L("If enabled, sets OrcaSlicer as default application to open .step files"), 50, "associate_step"); + + auto title_associate_url = create_item_title(_L("Associate web links to OrcaSlicer"), page, _L("Associate URLs to OrcaSlicer")); + + auto associate_url_prusaslicer = create_item_link_association(page, L"prusaslicer", "Printables.com"); + auto associate_url_bambustudio = create_item_link_association(page, L"bambustudio", "Makerworld.com"); + auto associate_url_cura = create_item_link_association(page, L"cura", "Thingiverse.com"); #endif // _WIN32 // auto title_modelmall = create_item_title(_L("Online Models"), page, _L("Online Models")); @@ -1060,7 +1169,7 @@ wxWindow* PreferencesDialog::create_general_page() if (value.ToLong(&max)) wxGetApp().mainframe->set_max_recent_count(max); }); - auto item_save_choise = create_item_button(_L("Clear my choice on the unsaved projects."), _L("Clear"), page, _L("Clear my choice on the unsaved projects."), []() { + auto item_save_choise = create_item_button(_L("Clear my choice on the unsaved projects."), _L("Clear"), page, L"", _L("Clear my choice on the unsaved projects."), []() { wxGetApp().app_config->set("save_project_choise", ""); }); // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); @@ -1088,15 +1197,19 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_currency, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_default_page, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_camera_navigation_style, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_single_instance, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_mouse_zoom_settings, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_use_free_camera_settings, 0, wxTOP, FromDIP(3)); sizer_page->Add(reverse_mouse_zoom, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_show_splash_screen, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_calc_in_long_retract, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_multi_machine, 0, wxTOP, FromDIP(3)); sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_remember_printer_config, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_save_presets, 0, wxTOP, FromDIP(3)); sizer_page->Add(title_network, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3)); @@ -1107,6 +1220,10 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_associate_3mf, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_associate_stl, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_associate_step, 0, wxTOP, FromDIP(3)); + sizer_page->Add(title_associate_url, 0, wxTOP| wxEXPAND, FromDIP(20)); + sizer_page->Add(associate_url_prusaslicer, 0, wxTOP, FromDIP(3)); + sizer_page->Add(associate_url_bambustudio, 0, wxTOP, FromDIP(3)); + sizer_page->Add(associate_url_cura, 0, wxTOP, FromDIP(3)); #endif // _WIN32 // auto item_title_modelmall = sizer_page->Add(title_modelmall, 0, wxTOP | wxEXPAND, FromDIP(20)); // auto item_item_modelmall = sizer_page->Add(item_modelmall, 0, wxTOP, FromDIP(3)); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index a417d47de9..29649be719 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -111,7 +111,7 @@ public: wxBoxSizer *create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); wxBoxSizer *create_item_darkmode_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); void set_dark_mode(); - wxBoxSizer *create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::function onclick); + wxBoxSizer *create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, wxString tooltip2, std::function onclick, bool button_on_left = false); wxWindow* create_item_downloads(wxWindow* parent, int padding_left, std::string param); wxBoxSizer *create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange = {}); wxBoxSizer *create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param); @@ -119,6 +119,9 @@ public: wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string parama, std::vector vlista, std::vector vlistb); wxBoxSizer *create_item_switch(wxString title, wxWindow *parent, wxString tooltip, std::string param); wxWindow * create_item_radiobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, int groupid, std::string param); +#ifdef WIN32 + wxBoxSizer* create_item_link_association(wxWindow* parent, wxString url_prefix, wxString website_name); +#endif // WIN32 wxWindow* create_general_page(); void create_gui_page(); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index d037a62394..e634c4fe1a 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -36,7 +36,9 @@ #include "../Utils/ASCIIFolding.hpp" #include "../Utils/FixModelByWin10.hpp" #include "../Utils/UndoRedo.hpp" +#include "../Utils/ColorSpaceConvert.hpp" #include "BitmapCache.hpp" +#include "SavePresetDialog.hpp" #include "MsgDialog.hpp" #include "ParamsDialog.hpp" @@ -674,12 +676,22 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset m_clrData.SetChooseFull(true); m_clrData.SetChooseAlpha(false); + std::vector colors = wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < colors.size(); i++) { + m_clrData.SetCustomColour(i, string_to_wxColor(colors[i])); + } wxColourDialog dialog(this, &m_clrData); dialog.SetTitle(_L("Please choose the filament colour")); if ( dialog.ShowModal() == wxID_OK ) { m_clrData = dialog.GetColourData(); - + if (colors.size() != CUSTOM_COLOR_COUNT) { + colors.resize(CUSTOM_COLOR_COUNT); + } + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { + colors[i] = color_to_string(m_clrData.GetCustomColour(i)); + } + wxGetApp().app_config->save_custom_color_to_config(colors); // get current color DynamicPrintConfig* cfg = &wxGetApp().preset_bundle->project_config; auto colors = static_cast(cfg->option("filament_colour")->clone()); @@ -946,7 +958,8 @@ void PlaterPresetComboBox::update() std::map nonsys_presets; //BBS: add project embedded presets logic std::map project_embedded_presets; - std::map system_presets; + std::map system_presets; + std::map preset_descriptions; //BBS: move system to the end wxString selected_system_preset; @@ -987,13 +1000,15 @@ void PlaterPresetComboBox::update() wxBitmap* bmp = get_bmp(preset); assert(bmp); - const std::string name = preset.alias.empty() ? preset.name : preset.alias; + const wxString name = get_preset_name(preset); + preset_descriptions.emplace(name, from_u8(preset.description)); + if (preset.is_default || preset.is_system) { //BBS: move system to the end - system_presets.emplace(get_preset_name(preset), bmp); + system_presets.emplace(name, bmp); if (is_selected) { tooltip = get_tooltip(preset); - selected_system_preset = get_preset_name(preset); + selected_system_preset = name; } //Append(get_preset_name(preset), *bmp); //validate_selection(is_selected); @@ -1004,17 +1019,17 @@ void PlaterPresetComboBox::update() //BBS: add project embedded preset logic else if (preset.is_project_embedded) { - project_embedded_presets.emplace(get_preset_name(preset), bmp); + project_embedded_presets.emplace(name, bmp); if (is_selected) { - selected_user_preset = get_preset_name(preset); + selected_user_preset = name; tooltip = wxString::FromUTF8(preset.name.c_str()); } } else { - nonsys_presets.emplace(get_preset_name(preset), bmp); + nonsys_presets.emplace(name, bmp); if (is_selected) { - selected_user_preset = get_preset_name(preset); + selected_user_preset = name; //BBS set tooltip tooltip = get_tooltip(preset); } @@ -1031,7 +1046,7 @@ void PlaterPresetComboBox::update() { set_label_marker(Append(separator(L("Project-inside presets")), wxNullBitmap)); for (std::map::iterator it = project_embedded_presets.begin(); it != project_embedded_presets.end(); ++it) { - Append(it->first, *it->second); + SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]); validate_selection(it->first == selected_user_preset); } } @@ -1039,7 +1054,7 @@ void PlaterPresetComboBox::update() { set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); for (std::map::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { - Append(it->first, *it->second); + SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]); validate_selection(it->first == selected_user_preset); } } @@ -1048,7 +1063,7 @@ void PlaterPresetComboBox::update() { set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); for (std::map::iterator it = system_presets.begin(); it != system_presets.end(); ++it) { - Append(it->first, *it->second); + SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]); validate_selection(it->first == selected_system_preset); } } @@ -1197,6 +1212,7 @@ void TabPresetComboBox::update() std::map> project_embedded_presets; //BBS: move system to the end std::map> system_presets; + std::map preset_descriptions; wxString selected = ""; //BBS: move system to the end @@ -1223,11 +1239,14 @@ void TabPresetComboBox::update() wxBitmap* bmp = get_bmp(preset); assert(bmp); + const wxString name = get_preset_name(preset); + preset_descriptions.emplace(name, from_u8(preset.description)); + if (preset.is_default || preset.is_system) { //BBS: move system to the end - system_presets.emplace(get_preset_name(preset), std::pair(bmp, is_enabled)); + system_presets.emplace(name, std::pair(bmp, is_enabled)); if (i == idx_selected) - selected = get_preset_name(preset); + selected = name; //int item_id = Append(get_preset_name(preset), *bmp); //if (!is_enabled) // set_label_marker(item_id, LABEL_ITEM_DISABLED); @@ -1237,16 +1256,16 @@ void TabPresetComboBox::update() else if (preset.is_project_embedded) { //std::pair pair(bmp, is_enabled); - project_embedded_presets.emplace(get_preset_name(preset), std::pair(bmp, is_enabled)); + project_embedded_presets.emplace(name, std::pair(bmp, is_enabled)); if (i == idx_selected) - selected = get_preset_name(preset); + selected = name; } else { std::pair pair(bmp, is_enabled); - nonsys_presets.emplace(get_preset_name(preset), std::pair(bmp, is_enabled)); + nonsys_presets.emplace(name, std::pair(bmp, is_enabled)); if (i == idx_selected) - selected = get_preset_name(preset); + selected = name; } //BBS: move system to the end //if (i + 1 == m_collection->num_default_presets()) @@ -1262,6 +1281,7 @@ void TabPresetComboBox::update() set_label_marker(Append(separator(L("Project-inside presets")), wxNullBitmap)); for (std::map>::iterator it = project_embedded_presets.begin(); it != project_embedded_presets.end(); ++it) { int item_id = Append(it->first, *it->second.first); + SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; if (!is_enabled) set_label_marker(item_id, LABEL_ITEM_DISABLED); @@ -1273,6 +1293,7 @@ void TabPresetComboBox::update() set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); for (std::map>::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { int item_id = Append(it->first, *it->second.first); + SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; if (!is_enabled) set_label_marker(item_id, LABEL_ITEM_DISABLED); @@ -1285,6 +1306,7 @@ void TabPresetComboBox::update() set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); for (std::map>::iterator it = system_presets.begin(); it != system_presets.end(); ++it) { int item_id = Append(it->first, *it->second.first); + SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; if (!is_enabled) set_label_marker(item_id, LABEL_ITEM_DISABLED); diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp index 954c06862f..8069e687ef 100644 --- a/src/slic3r/GUI/PresetComboBoxes.hpp +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -2,9 +2,9 @@ #define slic3r_PresetComboBoxes_hpp_ //#include +#include #include #include -#include #include "libslic3r/Preset.hpp" #include "wxExtensions.hpp" diff --git a/src/slic3r/GUI/PrintHostDialogs.cpp b/src/slic3r/GUI/PrintHostDialogs.cpp index 338b60eae0..14a5866635 100644 --- a/src/slic3r/GUI/PrintHostDialogs.cpp +++ b/src/slic3r/GUI/PrintHostDialogs.cpp @@ -38,7 +38,7 @@ static const char *CONFIG_KEY_PATH = "printhost_path"; static const char *CONFIG_KEY_GROUP = "printhost_group"; static const char* CONFIG_KEY_STORAGE = "printhost_storage"; -PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups, const wxArrayString& storage_paths, const wxArrayString& storage_names) +PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups, const wxArrayString& storage_paths, const wxArrayString& storage_names, bool switch_to_device_tab) : MsgDialog(static_cast(wxGetApp().mainframe), _L("Send G-Code to printer host"), _L("Upload to Printer Host with the following filename:"), 0) // Set style = 0 to avoid default creation of the "OK" button. // All buttons will be added later in this constructor , txt_filename(new wxTextCtrl(this, wxID_ANY)) @@ -46,6 +46,7 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo , combo_storage(storage_names.GetCount() > 1 ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, storage_names, wxCB_READONLY) : nullptr) , post_upload_action(PrintHostPostUploadAction::None) , m_paths(storage_paths) + , m_switch_to_device_tab(switch_to_device_tab) { #ifdef __APPLE__ txt_filename->OSXDisableAllSmartSubstitutions(); @@ -97,6 +98,22 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo txt_filename->SetValue(recent_path); + auto checkbox_sizer = new wxBoxSizer(wxHORIZONTAL); + auto checkbox = new ::CheckBox(this, wxID_APPLY); + checkbox->SetValue(m_switch_to_device_tab); + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + m_switch_to_device_tab = e.IsChecked(); + e.Skip(); + }); + checkbox_sizer->Add(checkbox, 0, wxALL | wxALIGN_CENTER, FromDIP(2)); + + auto checkbox_text = new wxStaticText(this, wxID_ANY, _L("Switch to Device tab after upload."), wxDefaultPosition, wxDefaultSize, 0); + checkbox_sizer->Add(checkbox_text, 0, wxALL | wxALIGN_CENTER, FromDIP(2)); + checkbox_text->SetFont(::Label::Body_13); + checkbox_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D"))); + content_sizer->Add(checkbox_sizer); + content_sizer->AddSpacer(VERT_SPACING); + if (size_t extension_start = recent_path.find_last_of('.'); extension_start != std::string::npos) m_valid_suffix = recent_path.substr(extension_start); // .gcode suffix control diff --git a/src/slic3r/GUI/PrintHostDialogs.hpp b/src/slic3r/GUI/PrintHostDialogs.hpp index b3f5504050..8befa21d98 100644 --- a/src/slic3r/GUI/PrintHostDialogs.hpp +++ b/src/slic3r/GUI/PrintHostDialogs.hpp @@ -26,11 +26,12 @@ namespace GUI { class PrintHostSendDialog : public GUI::MsgDialog { public: - PrintHostSendDialog(const boost::filesystem::path &path, PrintHostPostUploadActions post_actions, const wxArrayString& groups, const wxArrayString& storage_paths, const wxArrayString& storage_names); + PrintHostSendDialog(const boost::filesystem::path &path, PrintHostPostUploadActions post_actions, const wxArrayString& groups, const wxArrayString& storage_paths, const wxArrayString& storage_names, bool switch_to_device_tab); boost::filesystem::path filename() const; PrintHostPostUploadAction post_action() const; std::string group() const; std::string storage() const; + bool switch_to_device_tab() const {return m_switch_to_device_tab;} virtual void EndModal(int ret) override; private: @@ -41,6 +42,7 @@ private: wxString m_valid_suffix; wxString m_preselected_storage; wxArrayString m_paths; + bool m_switch_to_device_tab; }; diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 67d8f4fd52..c22b62727a 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.cpp +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -67,6 +67,12 @@ PrintOptionsDialog::PrintOptionsDialog(wxWindow* parent) } evt.Skip(); }); + m_cb_nozzle_blob->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& evt) { + if (obj) { + obj->command_nozzle_blob_detect(m_cb_nozzle_blob->GetValue()); + } + evt.Skip(); + }); wxGetApp().UpdateDlgDarkUI(this); } @@ -163,6 +169,18 @@ void PrintOptionsDialog::update_options(MachineObject* obj_) m_cb_filament_tangle->Hide(); line6->Hide(); } + if (false/*obj_->is_support_nozzle_blob_detection*/) { + text_nozzle_blob->Show(); + m_cb_nozzle_blob->Show(); + text_nozzle_blob_caption->Show(); + line7->Show(); + } + else { + text_nozzle_blob->Hide(); + m_cb_nozzle_blob->Hide(); + text_nozzle_blob_caption->Hide(); + line7->Hide(); + } this->Freeze(); @@ -171,6 +189,7 @@ void PrintOptionsDialog::update_options(MachineObject* obj_) m_cb_auto_recovery->SetValue(obj_->xcam_auto_recovery_step_loss); m_cb_sup_sound->SetValue(obj_->xcam_allow_prompt_sound); m_cb_filament_tangle->SetValue(obj_->xcam_filament_tangle_detect); + m_cb_nozzle_blob->SetValue(obj_->nozzle_blob_detection_enabled); m_cb_ai_monitoring->SetValue(obj_->xcam_ai_monitoring); for (auto i = AiMonitorSensitivityLevel::LOW; i < LEVELS_NUM; i = (AiMonitorSensitivityLevel) (i + 1)) { @@ -198,7 +217,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) // ai monitoring with levels line_sizer = new wxBoxSizer(wxHORIZONTAL); m_cb_ai_monitoring = new CheckBox(parent); - text_ai_monitoring = new wxStaticText(parent, wxID_ANY, _L("Enable AI monitoring of printing")); + text_ai_monitoring = new Label(parent, _L("Enable AI monitoring of printing")); text_ai_monitoring->SetFont(Label::Body_14); line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer->Add(m_cb_ai_monitoring, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -208,7 +227,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer = new wxBoxSizer(wxHORIZONTAL); - text_ai_monitoring_caption = new wxStaticText(parent, wxID_ANY, _L("Sensitivity of pausing is")); + text_ai_monitoring_caption = new Label(parent, _L("Sensitivity of pausing is")); text_ai_monitoring_caption->SetFont(Label::Body_14); text_ai_monitoring_caption->SetForegroundColour(STATIC_TEXT_CAPTION_COL); text_ai_monitoring_caption->Wrap(-1); @@ -236,7 +255,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) // detection of build plate position line_sizer = new wxBoxSizer(wxHORIZONTAL); m_cb_plate_mark = new CheckBox(parent); - text_plate_mark = new wxStaticText(parent, wxID_ANY, _L("Enable detection of build plate position")); + text_plate_mark = new Label(parent, _L("Enable detection of build plate position")); text_plate_mark->SetFont(Label::Body_14); line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer->Add(m_cb_plate_mark, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -263,7 +282,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) // detection of first layer line_sizer = new wxBoxSizer(wxHORIZONTAL); m_cb_first_layer = new CheckBox(parent); - text_first_layer = new wxStaticText(parent, wxID_ANY, _L("First Layer Inspection")); + text_first_layer = new Label(parent, _L("First Layer Inspection")); text_first_layer->SetFont(Label::Body_14); line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer->Add(m_cb_first_layer, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -279,7 +298,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) // auto-recovery from step loss line_sizer = new wxBoxSizer(wxHORIZONTAL); m_cb_auto_recovery = new CheckBox(parent); - text_auto_recovery = new wxStaticText(parent, wxID_ANY, _L("Auto-recovery from step loss")); + text_auto_recovery = new Label(parent, _L("Auto-recovery from step loss")); text_auto_recovery->SetFont(Label::Body_14); line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer->Add(m_cb_auto_recovery, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -296,7 +315,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) //Allow prompt sound line_sizer = new wxBoxSizer(wxHORIZONTAL); m_cb_sup_sound = new CheckBox(parent); - text_sup_sound = new wxStaticText(parent, wxID_ANY, _L("Allow Prompt Sound")); + text_sup_sound = new Label(parent, _L("Allow Prompt Sound")); text_sup_sound->SetFont(Label::Body_14); line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer->Add(m_cb_sup_sound, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -313,7 +332,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) //filament tangle detect line_sizer = new wxBoxSizer(wxHORIZONTAL); m_cb_filament_tangle = new CheckBox(parent); - text_filament_tangle = new wxStaticText(parent, wxID_ANY, _L("Filament Tangle Detect")); + text_filament_tangle = new Label(parent, _L("Filament Tangle Detect")); text_filament_tangle->SetFont(Label::Body_14); line_sizer->Add(FromDIP(5), 0, 0, 0); line_sizer->Add(m_cb_filament_tangle, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -325,6 +344,38 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) line6 = new StaticLine(parent, false); line6->SetLineColour(STATIC_BOX_LINE_COL); sizer->Add(line6, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(20)); + + //nozzle blob detect + line_sizer = new wxBoxSizer(wxHORIZONTAL); + m_cb_nozzle_blob = new CheckBox(parent); + text_nozzle_blob = new Label(parent, _L("Nozzle Clumping Detection")); + text_nozzle_blob->SetFont(Label::Body_14); + line_sizer->Add(FromDIP(5), 0, 0, 0); + line_sizer->Add(m_cb_nozzle_blob, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + line_sizer->Add(text_nozzle_blob, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(15)); + sizer->Add(line_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(18)); + line_sizer->Add(FromDIP(5), 0, 0, 0); + + line_sizer = new wxBoxSizer(wxHORIZONTAL); + wxString nozzle_blob_caption_text = _L("Check if the nozzle is clumping by filament or other foreign objects."); + text_nozzle_blob_caption = new Label(parent, nozzle_blob_caption_text); + text_nozzle_blob_caption->SetFont(Label::Body_14); + text_nozzle_blob_caption->Wrap(-1); + text_nozzle_blob_caption->SetForegroundColour(STATIC_TEXT_CAPTION_COL); + line_sizer->Add(FromDIP(30), 0, 0, 0); + line_sizer->Add(text_nozzle_blob_caption, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(0)); + sizer->Add(line_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(18)); + + line7 = new StaticLine(parent, false); + line7->SetLineColour(STATIC_BOX_LINE_COL); + sizer->Add(line7, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + + text_nozzle_blob->Hide(); + m_cb_nozzle_blob->Hide(); + text_nozzle_blob_caption->Hide(); + line7->Hide(); ai_monitoring_level_list->Connect( wxEVT_COMBOBOX, wxCommandEventHandler(PrintOptionsDialog::set_ai_monitor_sensitivity), NULL, this ); @@ -385,4 +436,198 @@ bool PrintOptionsDialog::Show(bool show) return DPIDialog::Show(show); } +PrinterPartsDialog::PrinterPartsDialog(wxWindow* parent) +: DPIDialog(parent, wxID_ANY, _L("Printer Parts"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) +{ + nozzle_type_map[0] = "hardened_steel"; + nozzle_type_map[1] = "stainless_steel"; + + nozzle_stainless_diameter_map[0] = 0.2; + nozzle_stainless_diameter_map[1] = 0.4; + + nozzle_hard_diameter_map[0] = 0.4; + nozzle_hard_diameter_map[1] = 0.6; + nozzle_hard_diameter_map[2] = 0.8; + + SetBackgroundColour(*wxWHITE); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + + + auto m_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line->SetBackgroundColour(wxColour(166, 169, 170)); + + //nozzle type + wxBoxSizer* line_sizer_nozzle_type = new wxBoxSizer(wxHORIZONTAL); + + auto nozzle_type = new Label(this, _L("Nozzle Type")); + nozzle_type->SetFont(Label::Body_14); + nozzle_type->SetMinSize(wxSize(FromDIP(180), -1)); + nozzle_type->SetMaxSize(wxSize(FromDIP(180), -1)); + nozzle_type->SetForegroundColour(STATIC_TEXT_CAPTION_COL); + nozzle_type->Wrap(-1); + + nozzle_type_checkbox = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(140), -1), 0, NULL, wxCB_READONLY); + nozzle_type_checkbox->Append(_L("Stainless Steel")); + nozzle_type_checkbox->Append(_L("Hardened Steel")); + nozzle_type_checkbox->SetSelection(0); + + + line_sizer_nozzle_type->Add(nozzle_type, 0, wxALIGN_CENTER, 5); + line_sizer_nozzle_type->Add(0, 0, 1, wxEXPAND, 5); + line_sizer_nozzle_type->Add(nozzle_type_checkbox, 0, wxALIGN_CENTER, 5); + + + //nozzle diameter + wxBoxSizer* line_sizer_nozzle_diameter = new wxBoxSizer(wxHORIZONTAL); + auto nozzle_diameter = new Label(this, _L("Nozzle Diameter")); + nozzle_diameter->SetFont(Label::Body_14); + nozzle_diameter->SetMinSize(wxSize(FromDIP(180), -1)); + nozzle_diameter->SetMaxSize(wxSize(FromDIP(180), -1)); + nozzle_diameter->SetForegroundColour(STATIC_TEXT_CAPTION_COL); + nozzle_diameter->Wrap(-1); + + nozzle_diameter_checkbox = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(140), -1), 0, NULL, wxCB_READONLY); + + + line_sizer_nozzle_diameter->Add(nozzle_diameter, 0, wxALIGN_CENTER, 5); + line_sizer_nozzle_diameter->Add(0, 0, 1, wxEXPAND, 5); + line_sizer_nozzle_diameter->Add(nozzle_diameter_checkbox, 0, wxALIGN_CENTER, 5); + + sizer->Add(m_line, 0, wxEXPAND, 0); + sizer->Add(0, 0, 0, wxTOP, FromDIP(24)); + sizer->Add(line_sizer_nozzle_type, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(18)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(20)); + sizer->Add(line_sizer_nozzle_diameter, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(18)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(24)); + + + nozzle_type_checkbox->Connect( wxEVT_COMBOBOX, wxCommandEventHandler(PrinterPartsDialog::set_nozzle_type), NULL, this ); + nozzle_diameter_checkbox->Connect( wxEVT_COMBOBOX, wxCommandEventHandler(PrinterPartsDialog::set_nozzle_diameter), NULL, this ); + + SetSizer(sizer); + Layout(); + Fit(); + wxGetApp().UpdateDlgDarkUI(this); +} + +PrinterPartsDialog::~PrinterPartsDialog() +{ + nozzle_type_checkbox->Disconnect(wxEVT_COMBOBOX, wxCommandEventHandler(PrinterPartsDialog::set_nozzle_type), NULL, this); + nozzle_diameter_checkbox->Disconnect(wxEVT_COMBOBOX, wxCommandEventHandler(PrinterPartsDialog::set_nozzle_diameter), NULL, this); +} + +void PrinterPartsDialog::set_nozzle_type(wxCommandEvent& evt) +{ + auto type = nozzle_type_map[nozzle_type_checkbox->GetSelection()]; + + if (type == last_nozzle_type) { + return; + } + + std::map diameter_list; + if (type == "hardened_steel") { + diameter_list = nozzle_hard_diameter_map; + } + else if (type == "stainless_steel") { + diameter_list = nozzle_stainless_diameter_map; + } + + nozzle_diameter_checkbox->Clear(); + for (int i = 0; i < diameter_list.size(); i++) + { + nozzle_diameter_checkbox->Append(wxString::Format(_L("%.1f"), diameter_list[i])); + } + nozzle_diameter_checkbox->SetSelection(0); + + + last_nozzle_type = type; + set_nozzle_diameter(evt); +} + +void PrinterPartsDialog::set_nozzle_diameter(wxCommandEvent& evt) +{ + if (obj) { + try + { + auto nozzle_type = nozzle_type_map[nozzle_type_checkbox->GetSelection()]; + auto nozzle_diameter = std::stof(nozzle_diameter_checkbox->GetStringSelection().ToStdString()); + nozzle_diameter = round(nozzle_diameter * 10) / 10; + + obj->nozzle_diameter = nozzle_diameter; + obj->nozzle_type = nozzle_type; + + obj->command_set_printer_nozzle(nozzle_type, nozzle_diameter); + } + catch (...) {} + } +} + +void PrinterPartsDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + Fit(); +} + +void PrinterPartsDialog::update_machine_obj(MachineObject* obj_) +{ + obj = obj_; +} + +bool PrinterPartsDialog::Show(bool show) +{ + if (show) { + wxGetApp().UpdateDlgDarkUI(this); + CentreOnParent(); + + auto type = obj->nozzle_type; + auto diameter = 0.4f; + + if (obj->nozzle_diameter > 0) { + diameter = round(obj->nozzle_diameter * 10) / 10; + } + + nozzle_type_checkbox->Clear(); + nozzle_diameter_checkbox->Clear(); + + if (type.empty()) { + nozzle_type_checkbox->SetValue(wxEmptyString); + nozzle_diameter_checkbox->SetValue(wxEmptyString); + + nozzle_type_checkbox->Disable(); + nozzle_diameter_checkbox->Disable(); + return DPIDialog::Show(show); + } + else { + nozzle_type_checkbox->Enable(); + nozzle_diameter_checkbox->Enable(); + } + + last_nozzle_type = type; + + for (int i=0; i < nozzle_type_map.size(); i++) + { + nozzle_type_checkbox->Append( nozzle_type_map[i] ); + if (nozzle_type_map[i] == type) { + nozzle_type_checkbox->SetSelection(i); + } + } + + std::map diameter_list; + if (type == "hardened_steel") { + diameter_list = nozzle_hard_diameter_map; + } + else if (type == "stainless_steel") { + diameter_list = nozzle_stainless_diameter_map; + } + + for (int i = 0; i < diameter_list.size(); i++) + { + nozzle_diameter_checkbox->Append( wxString::Format(_L("%.1f"), diameter_list[i])); + if (diameter_list[i] == diameter) { + nozzle_diameter_checkbox->SetSelection(i); + } + } + } + return DPIDialog::Show(show); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PrintOptionsDialog.hpp b/src/slic3r/GUI/PrintOptionsDialog.hpp index 21865bda3c..db55d12dcc 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.hpp +++ b/src/slic3r/GUI/PrintOptionsDialog.hpp @@ -18,6 +18,27 @@ namespace Slic3r { namespace GUI { +class PrinterPartsDialog : public DPIDialog +{ +protected: + MachineObject* obj{ nullptr }; + ComboBox* nozzle_type_checkbox; + ComboBox* nozzle_diameter_checkbox; + std::string last_nozzle_type; + std::map nozzle_type_map; + std::map nozzle_stainless_diameter_map; + std::map nozzle_hard_diameter_map; +public: + PrinterPartsDialog(wxWindow* parent); + ~PrinterPartsDialog(); + void set_nozzle_type(wxCommandEvent& evt); + void set_nozzle_diameter(wxCommandEvent& evt); + void on_dpi_changed(const wxRect& suggested_rect) override; + void update_machine_obj(MachineObject* obj_); + bool Show(bool show) override; +}; + + class PrintOptionsDialog : public DPIDialog { protected: @@ -28,21 +49,25 @@ protected: CheckBox* m_cb_auto_recovery; CheckBox* m_cb_sup_sound; CheckBox* m_cb_filament_tangle; - wxStaticText* text_first_layer; - wxStaticText* text_ai_monitoring; - wxStaticText* text_ai_monitoring_caption; + CheckBox* m_cb_nozzle_blob; + Label* text_first_layer; + Label* text_ai_monitoring; + Label* text_ai_monitoring_caption; ComboBox* ai_monitoring_level_list; - wxStaticText* text_plate_mark; - wxStaticText* text_plate_mark_caption; - wxStaticText* text_auto_recovery; - wxStaticText* text_sup_sound; - wxStaticText* text_filament_tangle; + Label* text_plate_mark; + Label* text_plate_mark_caption; + Label* text_auto_recovery; + Label* text_sup_sound; + Label* text_filament_tangle; + Label* text_nozzle_blob; + Label* text_nozzle_blob_caption; StaticLine* line1; StaticLine* line2; StaticLine* line3; StaticLine* line4; StaticLine* line5; StaticLine* line6; + StaticLine* line7; wxBoxSizer* create_settings_group(wxWindow* parent); bool print_halt = false; diff --git a/src/slic3r/GUI/Printer/BambuTunnel.h b/src/slic3r/GUI/Printer/BambuTunnel.h index bd00bdce9c..f578fa0cab 100644 --- a/src/slic3r/GUI/Printer/BambuTunnel.h +++ b/src/slic3r/GUI/Printer/BambuTunnel.h @@ -19,6 +19,8 @@ #ifdef __cplusplus extern "C" { +#else +#include #endif // __cplusplus #ifdef _WIN32 @@ -117,7 +119,9 @@ BAMBU_EXPORT void BAMBU_FUNC(Bambu_SetLogger)(Bambu_Tunnel tunnel, Logger logger BAMBU_EXPORT int BAMBU_FUNC(Bambu_Open)(Bambu_Tunnel tunnel); -BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStream)(Bambu_Tunnel tunnel, int video); +BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStream)(Bambu_Tunnel tunnel, bool video); + +BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStreamEx)(Bambu_Tunnel tunnel, int type); BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamCount)(Bambu_Tunnel tunnel); diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 886421c65f..8d272057f8 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -7,9 +7,9 @@ #include "../../Utils/NetworkAgent.hpp" #include "../BitmapCache.hpp" +#include #include #include -#include #include #include @@ -45,9 +45,9 @@ wxDEFINE_EVENT(EVT_FILE_CALLBACK, wxCommandEvent); static wxBitmap default_thumbnail; static std::map error_messages = { - {PrinterFileSystem::ERROR_PIPE, L("Connection lost. Please retry.")}, + {PrinterFileSystem::ERROR_PIPE, L("Reconnecting the printer, the operation cannot be completed immediately, please try again later.")}, {PrinterFileSystem::ERROR_RES_BUSY, L("The device cannot handle more conversations. Please retry later.")}, - {PrinterFileSystem::FILE_NO_EXIST, L("File not exists.")}, + {PrinterFileSystem::FILE_NO_EXIST, L("File does not exist.")}, {PrinterFileSystem::FILE_CHECK_ERR, L("File checksum error. Please retry.")}, {PrinterFileSystem::FILE_TYPE_ERR, L("Not supported on the current printer version.")}, {PrinterFileSystem::STORAGE_UNAVAILABLE, L("Storage unavailable, insert SD card.")} @@ -73,7 +73,7 @@ PrinterFileSystem::PrinterFileSystem() wxString path = "D:\\work\\pic\\"; for (int i = 0; i < 10; ++i) { auto name = wxString::Format(L"gcode-%02d.3mf", i + 1); - m_file_list.push_back({name.ToUTF8().data(), "", time.GetTicks(), 26937, i < 5 ? FF_DOWNLOAD : 0, default_thumbnail, i * 34 - 35}); + m_file_list.push_back({name.ToUTF8().data(), "", time.GetTicks(), 26937, i < 5 ? FF_DOWNLOAD : 0, default_thumbnail}); std::ifstream ifs((path + name).ToUTF8().data(), std::ios::binary); if (ifs) ParseThumbnail(m_file_list.back(), ifs); @@ -84,7 +84,7 @@ PrinterFileSystem::PrinterFileSystem() for (int i = 0; i < 100; ++i) { auto name = wxString::Format(L"img-%03d.jpg", i + 1); wxImage im(path + name); - m_file_list.push_back({name.ToUTF8().data(), "", time.GetTicks(), 26937, i < 20 ? FF_DOWNLOAD : 0, i > 3 ? im : default_thumbnail, i * 10 - 40 - 1}); + m_file_list.push_back({name.ToUTF8().data(), "", time.GetTicks(), 26937, i < 20 ? FF_DOWNLOAD : 0, i > 3 ? im : default_thumbnail}); time.Add(wxDateSpan::Days(-1)); } m_file_list[0].thumbnail = default_thumbnail; @@ -203,6 +203,7 @@ void PrinterFileSystem::ListAllFiles() } BuildGroups(); UpdateGroupSelect(); + m_last_error = 0; m_status = Status::ListReady; SendChangedEvent(EVT_STATUS_CHANGED, m_status); SendChangedEvent(EVT_FILE_CHANGED); @@ -357,6 +358,13 @@ void PrinterFileSystem::FetchModel(size_t index, std::functionsecond.c_str()); + else + file_data->clear(); + } callback(result, *file_data); }); } @@ -376,7 +384,7 @@ size_t PrinterFileSystem::GetCount() const int PrinterFileSystem::File::DownloadProgress() const { return download ? download->progress : !local_path.empty() ? 100 : -2; } -std::string PrinterFileSystem::File::Title() const { return Metadata("Title", name); } +std::string PrinterFileSystem::File::Title() const { return Metadata("Title", ""); } std::string PrinterFileSystem::File::Metadata(std::string const &key, std::string const &dflt) const { @@ -950,13 +958,13 @@ void PrinterFileSystem::FileRemoved(std::pair type, size_ if (file_index.second == size_t(-1)) return; if (&file_index.first == &m_file_list) { - auto removeFromGroup = [](std::vector &group, size_t index, int total) { + auto removeFromGroup = [](std::vector &group, size_t index, size_t total) { for (auto iter = group.begin(); iter != group.end(); ++iter) { size_t index2 = -1; if (*iter < index) continue; if (*iter == index) { auto iter2 = iter + 1; - if (iter2 == group.end() ? index == total - 1 : *iter2 == index + 1) { + if (index + 1 == (iter2 == group.end() ? total : *iter2)) { index2 = std::distance(group.begin(), iter); } ++iter; @@ -970,18 +978,18 @@ void PrinterFileSystem::FileRemoved(std::pair type, size_ }; size_t index2 = removeFromGroup(m_group_month, index, m_file_list.size()); if (index2 < m_group_month.size()) { - int index3 = removeFromGroup(m_group_year, index, m_group_month.size()); + int index3 = removeFromGroup(m_group_year, index2, m_group_month.size()); if (index3 < m_group_year.size()) { m_group_year.erase(m_group_year.begin() + index3); if (m_group_mode == G_YEAR) - m_group_flags.erase(m_group_flags.begin() + index2); + m_group_flags.erase(m_group_flags.begin() + index3); } m_group_month.erase(m_group_month.begin() + index2); if (m_group_mode == G_MONTH) m_group_flags.erase(m_group_flags.begin() + index2); } } - m_file_list.erase(file_index.first.begin() + index); + file_index.first.erase(file_index.first.begin() + index); } struct CallbackEvent : wxCommandEvent @@ -1025,10 +1033,7 @@ void PrinterFileSystem::DumpLog(void * thiz, int, tchar const *msg) boost::uint32_t PrinterFileSystem::SendRequest(int type, json const &req, callback_t2 const &callback) { if (m_session.tunnel == nullptr) { - { - boost::unique_lock l(m_mutex); - m_cond.notify_all(); - } + Retry(); callback(ERROR_PIPE, json(), nullptr); return 0; } @@ -1134,8 +1139,7 @@ void PrinterFileSystem::RecvMessageThread() if (n == 0) { HandleResponse(l, sample); } else if (n == Bambu_stream_end) { - if (m_status == ListSyncing) - m_stopped = true; + m_stopped = true; Reconnect(l, m_status == ListSyncing ? ERROR_RES_BUSY : ERROR_PIPE); } else if (n == Bambu_would_block) { m_cond.timed_wait(l, boost::posix_time::milliseconds(m_messages.empty() && m_callbacks.empty() ? 1000 : 20)); @@ -1214,16 +1218,12 @@ void PrinterFileSystem::HandleResponse(boost::unique_lock &l, Bamb } } -namespace Slic3r { namespace GUI { - extern wxString hide_passwd(wxString url, std::vector const &passwords); -}} - void PrinterFileSystem::Reconnect(boost::unique_lock &l, int result) { if (m_session.tunnel) { auto tunnel = m_session.tunnel; m_session.tunnel = nullptr; - wxLogMessage("PrinterFileSystem::Reconnect close"); + wxLogMessage("PrinterFileSystem::Reconnect close %d", result); l.unlock(); Bambu_Close(tunnel); Bambu_Destroy(tunnel); @@ -1258,8 +1258,10 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul if (url.size() < 2) { wxLogMessage("PrinterFileSystem::Reconnect Initialize failed: %s", wxString::FromUTF8(url)); m_last_error = atoi(url.c_str()); + if (m_last_error == 0) + m_stopped = true; } else { - wxLogMessage("PrinterFileSystem::Reconnect Initialized: %s", Slic3r::GUI::hide_passwd(wxString::FromUTF8(url), {"authkey=", "passwd="})); + wxLogInfo("PrinterFileSystem::Reconnect Initialized: %s", wxString::FromUTF8(url)); l.unlock(); m_status = Status::Connecting; wxLogMessage("PrinterFileSystem::Reconnect Connecting"); @@ -1271,12 +1273,19 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul ret = Bambu_Open(tunnel); } if (ret == 0) - ret = Bambu_StartStream(tunnel, false); + do { + ret = Bambu_StartStreamEx + ? Bambu_StartStreamEx(tunnel, CTRL_TYPE) + : Bambu_StartStream(tunnel, false); + } while (ret == Bambu_would_block); l.lock(); if (ret == 0) { m_session.tunnel = tunnel; wxLogMessage("PrinterFileSystem::Reconnect Connected"); break; + } else if (ret == 1) { + m_stopped = true; + ret = ERROR_RES_BUSY; } if (tunnel) { Bambu_Close(tunnel); @@ -1286,7 +1295,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul } wxLogMessage("PrinterFileSystem::Reconnect Failed"); m_status = Status::Failed; - SendChangedEvent(EVT_STATUS_CHANGED, m_status, "", url.size() < 2 ? 1 : 0); + SendChangedEvent(EVT_STATUS_CHANGED, m_status, "", url.size() < 2 ? 1 : m_last_error); m_cond.timed_wait(l, boost::posix_time::seconds(10)); } m_status = Status::ListSyncing; @@ -1352,6 +1361,7 @@ StaticBambuLib &StaticBambuLib::get() GET_FUNC(Bambu_Create); GET_FUNC(Bambu_Open); GET_FUNC(Bambu_StartStream); + GET_FUNC(Bambu_StartStreamEx); GET_FUNC(Bambu_GetStreamCount); GET_FUNC(Bambu_GetStreamInfo); GET_FUNC(Bambu_SendMessage); diff --git a/src/slic3r/GUI/PrinterWebView.hpp b/src/slic3r/GUI/PrinterWebView.hpp index 5b1908c9ee..070bd4ea97 100644 --- a/src/slic3r/GUI/PrinterWebView.hpp +++ b/src/slic3r/GUI/PrinterWebView.hpp @@ -6,7 +6,7 @@ #include "wx/cmdline.h" #include "wx/notifmsg.h" #include "wx/settings.h" -#include "wx/webview.h" +#include #include #if wxUSE_WEBVIEW_EDGE diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 539f9c08e9..617397f32f 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -30,12 +30,17 @@ namespace Slic3r { namespace GUI { wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_DONE, wxCommandEvent); +wxDEFINE_EVENT(EVT_SECONDARY_CHECK_RESUME, wxCommandEvent); +wxDEFINE_EVENT(EVT_LOAD_VAMS_TRAY, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECKBOX_CHANGE, wxCommandEvent); wxDEFINE_EVENT(EVT_ENTER_IP_ADDRESS, wxCommandEvent); wxDEFINE_EVENT(EVT_CLOSE_IPADDRESS_DLG, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECK_IP_ADDRESS_FAILED, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_RETRY, wxCommandEvent); +wxDEFINE_EVENT(EVT_PRINT_ERROR_STOP, wxCommandEvent); wxDEFINE_EVENT(EVT_UPDATE_NOZZLE, wxCommandEvent); +wxDEFINE_EVENT(EVT_JUMP_TO_HMS, wxCommandEvent); +wxDEFINE_EVENT(EVT_JUMP_TO_LIVEVIEW, wxCommandEvent); ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Release Note"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) @@ -649,6 +654,21 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons e.Skip(); }); + m_button_resume = new Button(this, _L("resume")); + m_button_resume->SetBackgroundColor(btn_bg_white); + m_button_resume->SetBorderColor(wxColour(38, 46, 48)); + m_button_resume->SetFont(Label::Body_12); + m_button_resume->SetSize(wxSize(FromDIP(58), FromDIP(24))); + m_button_resume->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_resume->SetMaxSize(wxSize(-1, FromDIP(24))); + m_button_resume->SetCornerRadius(FromDIP(12)); + + m_button_resume->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + m_button_resume->Hide(); + if (btn_style == CONFIRM_AND_CANCEL) { m_button_cancel->Show(); m_button_fn->Hide(); @@ -673,6 +693,7 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons } sizer_button->AddStretchSpacer(); + sizer_button->Add(m_button_resume, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_retry, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_fn, 0, wxALL, FromDIP(5)); sizer_button->Add(m_button_ok, 0, wxALL, FromDIP(5)); @@ -776,26 +797,39 @@ void SecondaryCheckDialog::update_title_style(wxString title, SecondaryCheckDial m_button_cancel->Show(); m_button_fn->Hide(); m_button_retry->Hide(); + m_button_resume->Hide(); } else if (style == CONFIRM_AND_DONE) { m_button_cancel->Hide(); m_button_fn->Show(); m_button_retry->Hide(); + m_button_resume->Hide(); } else if (style == CONFIRM_AND_RETRY) { m_button_retry->Show(); m_button_cancel->Hide(); m_button_fn->Hide(); + m_button_resume->Hide(); } else if (style == DONE_AND_RETRY) { m_button_retry->Show(); m_button_fn->Show(); m_button_cancel->Hide(); + m_button_resume->Hide(); + } + else if(style == CONFIRM_AND_RESUME) + { + m_button_retry->Hide(); + m_button_fn->Hide(); + m_button_cancel->Hide(); + m_button_resume->Show(); } else { m_button_retry->Hide(); m_button_cancel->Hide(); m_button_fn->Hide(); + m_button_resume->Hide(); + } @@ -830,6 +864,306 @@ void SecondaryCheckDialog::rescale() m_button_cancel->Rescale(); } +PrintErrorDialog::PrintErrorDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) + :DPIFrame(parent, id, title, pos, size, style) +{ + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + SetBackgroundColour(*wxWHITE); + + btn_bg_white = StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(350), 1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); + + wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); + + m_sizer_right->Add(0, 0, 1, wxTOP, FromDIP(5)); + + m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_vebview_release_note->SetScrollRate(0, 5); + m_vebview_release_note->SetBackgroundColour(*wxWHITE); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), FromDIP(250))); + m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + + m_error_prompt_pic_static = new wxStaticBitmap(m_vebview_release_note, wxID_ANY, wxBitmap(), wxDefaultPosition, wxSize(FromDIP(300), FromDIP(180))); + + auto bottom_sizer = new wxBoxSizer(wxVERTICAL); + m_sizer_button = new wxBoxSizer(wxVERTICAL); + + bottom_sizer->Add(m_sizer_button, 0, wxEXPAND | wxRIGHT | wxLEFT, 0); + + m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(10)); + + m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); + + Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {this->on_hide(); }); + Bind(wxEVT_ACTIVATE, [this](auto& e) { if (!e.GetActive()) this->RequestUserAttention(wxUSER_ATTENTION_ERROR); }); + Bind(wxEVT_WEBREQUEST_STATE, &PrintErrorDialog::on_webrequest_state, this); + + + SetSizer(m_sizer_main); + Layout(); + m_sizer_main->Fit(this); + + init_button_list(); + + CenterOnParent(); + wxGetApp().UpdateFrameDarkUI(this); +} + +void PrintErrorDialog::post_event(wxCommandEvent&& event) +{ + if (event_parent) { + event.SetString(""); + event.SetEventObject(event_parent); + wxPostEvent(event_parent, event); + event.Skip(); + } +} + +void PrintErrorDialog::on_webrequest_state(wxWebRequestEvent& evt) +{ + BOOST_LOG_TRIVIAL(trace) << "monitor: monitor_panel web request state = " << evt.GetState(); + switch (evt.GetState()) { + case wxWebRequest::State_Completed: { + wxImage img(*evt.GetResponse().GetStream()); + wxImage resize_img = img.Scale(FromDIP(320), FromDIP(180), wxIMAGE_QUALITY_HIGH); + wxBitmap error_prompt_pic = resize_img; + m_error_prompt_pic_static->SetBitmap(error_prompt_pic); + Layout(); + Fit(); + + break; + } + case wxWebRequest::State_Failed: + case wxWebRequest::State_Cancelled: + case wxWebRequest::State_Unauthorized: { + m_error_prompt_pic_static->SetBitmap(wxBitmap()); + break; + } + case wxWebRequest::State_Active: + case wxWebRequest::State_Idle: break; + default: break; + } +} + +void PrintErrorDialog::update_text_image(wxString text, wxString image_url) +{ + //if (!m_sizer_text_release_note) { + // m_sizer_text_release_note = new wxBoxSizer(wxVERTICAL); + //} + wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); + + + if (!m_staticText_release_note) { + m_staticText_release_note = new Label(m_vebview_release_note, text, LB_AUTO_WRAP); + sizer_text_release_note->Add(m_error_prompt_pic_static, 0, wxALIGN_CENTER, FromDIP(5)); + sizer_text_release_note->Add(m_staticText_release_note, 0, wxALIGN_CENTER , FromDIP(5)); + m_vebview_release_note->SetSizer(sizer_text_release_note); + } + if (!image_url.empty()) { + web_request = wxWebSession::GetDefault().CreateRequest(this, image_url); + BOOST_LOG_TRIVIAL(trace) << "monitor: create new webrequest, state = " << web_request.GetState() << ", url = " << image_url; + if (web_request.GetState() == wxWebRequest::State_Idle) + web_request.Start(); + BOOST_LOG_TRIVIAL(trace) << "monitor: start new webrequest, state = " << web_request.GetState() << ", url = " << image_url; + m_error_prompt_pic_static->Show(); + + } + else { + m_error_prompt_pic_static->Hide(); + } + sizer_text_release_note->Layout(); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(300), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(300), -1)); + m_staticText_release_note->SetLabelText(text); + m_vebview_release_note->Layout(); + + auto text_size = m_staticText_release_note->GetBestSize(); + if (text_size.y < FromDIP(360)) + if (!image_url.empty()) { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(220))); + } + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(25))); + } + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), FromDIP(340))); + } + + Layout(); + Fit(); +} + +void PrintErrorDialog::on_show() +{ + wxGetApp().UpdateFrameDarkUI(this); + + this->Show(); + this->Raise(); +} + +void PrintErrorDialog::on_hide() +{ + //m_sizer_button->Clear(); + //m_sizer_button->Layout(); + //m_used_button.clear(); + this->Hide(); + if (web_request.IsOk() && web_request.GetState() == wxWebRequest::State_Active) { + BOOST_LOG_TRIVIAL(info) << "web_request: cancelled"; + web_request.Cancel(); + } + m_error_prompt_pic_static->SetBitmap(wxBitmap()); + + if (wxGetApp().mainframe != nullptr) { + wxGetApp().mainframe->Show(); + wxGetApp().mainframe->Raise(); + } +} + +void PrintErrorDialog::update_title_style(wxString title, std::vector button_style, wxWindow* parent) +{ + SetTitle(title); + event_parent = parent; + for (int used_button_id : m_used_button) { + if (m_button_list.find(used_button_id) != m_button_list.end()) { + m_button_list[used_button_id]->Hide(); + } + } + m_sizer_button->Clear(); + m_used_button = button_style; + for (int button_id : button_style) { + if (m_button_list.find(button_id) != m_button_list.end()) { + m_sizer_button->Add(m_button_list[button_id], 0, wxALL, FromDIP(5)); + m_button_list[button_id]->Show(); + } + } + Layout(); + Fit(); + +} + +void PrintErrorDialog::init_button(PrintErrorButton style,wxString buton_text) { + Button* print_error_button = new Button(this, buton_text); + print_error_button->SetBackgroundColor(btn_bg_white); + print_error_button->SetBorderColor(wxColour(38, 46, 48)); + print_error_button->SetFont(Label::Body_14); + print_error_button->SetSize(wxSize(FromDIP(300), FromDIP(30))); + print_error_button->SetMinSize(wxSize(FromDIP(300), FromDIP(30))); + print_error_button->SetMaxSize(wxSize(-1, FromDIP(30))); + print_error_button->SetCornerRadius(FromDIP(5)); + print_error_button->Hide(); + m_button_list[style] = print_error_button; + +} + +void PrintErrorDialog::init_button_list() { + + init_button(RESUME_PRINTING, _L("Resume Printing")); + m_button_list[RESUME_PRINTING]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + init_button(RESUME_PRINTING_DEFECTS, _L("Resume Printing(defects acceptable)")); + m_button_list[RESUME_PRINTING_DEFECTS]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + + init_button(RESUME_PRINTING_PROBELM_SOLVED, _L("Resume Printing(problem solved)")); + m_button_list[RESUME_PRINTING_PROBELM_SOLVED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + init_button(STOP_PRINTING, _L("Stop Printing")); + m_button_list[STOP_PRINTING]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_PRINT_ERROR_STOP)); + e.Skip(); + }); + + init_button(CHECK_ASSISTANT, _L("Check Assistant")); + m_button_list[CHECK_ASSISTANT]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_JUMP_TO_HMS)); + this->on_hide(); + }); + + init_button(FILAMENT_EXTRUDED, _L("Filament Extruded, Continue")); + m_button_list[FILAMENT_EXTRUDED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_DONE)); + e.Skip(); + }); + + init_button(RETRY_FILAMENT_EXTRUDED, _L("Not Extruded Yet, Retry")); + m_button_list[RETRY_FILAMENT_EXTRUDED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_SECONDARY_CHECK_RETRY, GetId()); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); + }); + + init_button(CONTINUE, _L("Finished, Continue")); + m_button_list[CONTINUE]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_DONE)); + e.Skip(); + }); + + init_button(LOAD_VIRTUAL_TRAY, _L("Load Filament")); + m_button_list[LOAD_VIRTUAL_TRAY]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_LOAD_VAMS_TRAY)); + e.Skip(); + }); + + init_button(OK_BUTTON, _L("OK")); + m_button_list[OK_BUTTON]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_SECONDARY_CHECK_CONFIRM, GetId()); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); + }); + + init_button(FILAMENT_LOAD_RESUME, _L("Filament Loaded, Resume")); + m_button_list[FILAMENT_LOAD_RESUME]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + init_button(JUMP_TO_LIVEVIEW, _L("View Liveview")); + m_button_list[JUMP_TO_LIVEVIEW]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_JUMP_TO_LIVEVIEW)); + e.Skip(); + }); +} + +PrintErrorDialog::~PrintErrorDialog() +{ + +} + +void PrintErrorDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + rescale(); +} + +void PrintErrorDialog::msw_rescale() { + wxGetApp().UpdateFrameDarkUI(this); + Refresh(); +} + +void PrintErrorDialog::rescale() +{ + for(auto used_button:m_used_button) + m_button_list[used_button]->Rescale(); +} + ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style, bool not_show_again_check) :DPIDialog(parent, id, title, pos, size, style) { @@ -965,16 +1299,46 @@ void ConfirmBeforeSendDialog::update_text(wxString text) sizer_text_release_note->Add(bottom_blank_sizer, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); m_vebview_release_note->SetSizer(sizer_text_release_note); } - m_staticText_release_note->SetMaxSize(wxSize(FromDIP(330), -1)); - m_staticText_release_note->SetMinSize(wxSize(FromDIP(330), -1)); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(380), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(380), -1)); m_staticText_release_note->SetLabelText(text); m_vebview_release_note->Layout(); auto text_size = m_staticText_release_note->GetBestSize(); - if (text_size.y < FromDIP(360)) - m_vebview_release_note->SetMinSize(wxSize(FromDIP(360), text_size.y + FromDIP(25))); + if (text_size.y < FromDIP(380)) + m_vebview_release_note->SetMinSize(wxSize(FromDIP(400), text_size.y + FromDIP(25))); else { - m_vebview_release_note->SetMinSize(wxSize(FromDIP(360), FromDIP(360))); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(400), FromDIP(380))); + } + + Layout(); + Fit(); +} + +void ConfirmBeforeSendDialog::update_text(std::vector texts) +{ + wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); + m_vebview_release_note->SetSizer(sizer_text_release_note); + + auto height = 0; + for (auto text : texts) { + auto label_item = new Label(m_vebview_release_note, text.text, LB_AUTO_WRAP); + if (text.level == ConfirmBeforeSendInfo::InfoLevel::Warning) { + label_item->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00)); + } + label_item->SetMaxSize(wxSize(FromDIP(380), -1)); + label_item->SetMinSize(wxSize(FromDIP(380), -1)); + label_item->Wrap(FromDIP(380)); + label_item->Layout(); + sizer_text_release_note->Add(label_item, 0, wxALIGN_CENTER | wxALL, FromDIP(3)); + height += label_item->GetSize().y; + } + + m_vebview_release_note->Layout(); + if (height < FromDIP(380)) + m_vebview_release_note->SetMinSize(wxSize(FromDIP(400), height + FromDIP(25))); + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(400), FromDIP(380))); } Layout(); @@ -1035,12 +1399,38 @@ void ConfirmBeforeSendDialog::on_dpi_changed(const wxRect& suggested_rect) rescale(); } -void ConfirmBeforeSendDialog::show_update_nozzle_button() +void ConfirmBeforeSendDialog::show_update_nozzle_button(bool show) { - m_button_update_nozzle->Show(true); + m_button_update_nozzle->Show(show); Layout(); } +void ConfirmBeforeSendDialog::hide_button_ok() +{ + m_button_ok->Hide(); +} + +void ConfirmBeforeSendDialog::edit_cancel_button_txt(wxString txt) +{ + m_button_cancel->SetLabel(txt); +} + +void ConfirmBeforeSendDialog::disable_button_ok() +{ + m_button_ok->Disable(); + m_button_ok->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); + m_button_ok->SetBorderColor(wxColour(0x90, 0x90, 0x90)); +} + +void ConfirmBeforeSendDialog::enable_button_ok() +{ + m_button_ok->Enable(); + StateColor btn_bg_green(std::pair(wxColour(38, 166, 154), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); + m_button_ok->SetBackgroundColor(btn_bg_green); + m_button_ok->SetBorderColor(btn_bg_green); +} + void ConfirmBeforeSendDialog::rescale() { m_button_ok->Rescale(); diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index 98d42b964c..d8ad66644c 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -46,7 +46,12 @@ wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_RETRY, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_DONE, wxCommandEvent); +wxDECLARE_EVENT(EVT_SECONDARY_CHECK_RESUME, wxCommandEvent); +wxDECLARE_EVENT(EVT_PRINT_ERROR_STOP, wxCommandEvent); wxDECLARE_EVENT(EVT_UPDATE_NOZZLE, wxCommandEvent); +wxDECLARE_EVENT(EVT_LOAD_VAMS_TRAY, wxCommandEvent); +wxDECLARE_EVENT(EVT_JUMP_TO_HMS, wxCommandEvent); +wxDECLARE_EVENT(EVT_JUMP_TO_LIVEVIEW, wxCommandEvent); class ReleaseNoteDialog : public DPIDialog { @@ -116,8 +121,9 @@ public: CONFIRM_AND_CANCEL = 1, CONFIRM_AND_DONE = 2, CONFIRM_AND_RETRY = 3, - DONE_AND_RETRY = 4, - MAX_STYLE_NUM = 5 + CONFIRM_AND_RESUME = 4, + DONE_AND_RETRY = 5, + MAX_STYLE_NUM = 6 }; SecondaryCheckDialog( wxWindow* parent, @@ -150,12 +156,76 @@ public: Button* m_button_retry { nullptr }; Button* m_button_cancel { nullptr }; Button* m_button_fn { nullptr }; + Button* m_button_resume { nullptr }; wxCheckBox* m_show_again_checkbox; ButtonStyle m_button_style; bool not_show_again = false; std::string show_again_config_text = ""; }; +class PrintErrorDialog : public DPIFrame +{ +private: + wxWindow* event_parent{ nullptr }; +public: + enum PrintErrorButton { + RESUME_PRINTING = 2, + RESUME_PRINTING_DEFECTS = 3, + RESUME_PRINTING_PROBELM_SOLVED = 4, + STOP_PRINTING = 5, + CHECK_ASSISTANT = 6, + FILAMENT_EXTRUDED = 7, + RETRY_FILAMENT_EXTRUDED = 8, + CONTINUE = 9, + LOAD_VIRTUAL_TRAY = 10, + OK_BUTTON = 11, + FILAMENT_LOAD_RESUME, + JUMP_TO_LIVEVIEW, + ERROR_BUTTON_COUNT + }; + PrintErrorDialog( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCLOSE_BOX | wxCAPTION + ); + void update_text_image(wxString text, wxString image_url); + void on_show(); + void on_hide(); + void update_title_style(wxString title, std::vector style, wxWindow* parent = nullptr); + void post_event(wxCommandEvent&& event); + void rescale(); + ~PrintErrorDialog(); + void on_dpi_changed(const wxRect& suggested_rect); + void msw_rescale(); + void init_button(PrintErrorButton style, wxString buton_text); + void init_button_list(); + void on_webrequest_state(wxWebRequestEvent& evt); + + StateColor btn_bg_white; + wxWebRequest web_request; + wxStaticBitmap* m_error_prompt_pic_static; + Label* m_staticText_release_note{ nullptr }; + wxBoxSizer* m_sizer_main; + wxBoxSizer* m_sizer_button; + wxScrolledWindow* m_vebview_release_note{ nullptr }; + std::map m_button_list; + std::vector m_used_button; +}; + +struct ConfirmBeforeSendInfo +{ + enum InfoLevel { + Normal = 0, + Warning = 1 + }; + InfoLevel level; + wxString text; + ConfirmBeforeSendInfo(wxString txt, InfoLevel lev = Normal) : text(txt), level(lev) {} +}; + class ConfirmBeforeSendDialog : public DPIDialog { public: @@ -175,12 +245,17 @@ public: bool not_show_again_check = false ); void update_text(wxString text); + void update_text(std::vector texts); void on_show(); void on_hide(); void update_btn_label(wxString ok_btn_text, wxString cancel_btn_text); void rescale(); void on_dpi_changed(const wxRect& suggested_rect); - void show_update_nozzle_button(); + void show_update_nozzle_button(bool show = false); + void hide_button_ok(); + void edit_cancel_button_txt(wxString txt); + void disable_button_ok(); + void enable_button_ok(); wxString format_text(wxString str, int warp); ~ConfirmBeforeSendDialog(); diff --git a/src/slic3r/GUI/SceneRaycaster.cpp b/src/slic3r/GUI/SceneRaycaster.cpp index 96be46de29..08c3407632 100644 --- a/src/slic3r/GUI/SceneRaycaster.cpp +++ b/src/slic3r/GUI/SceneRaycaster.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "SceneRaycaster.hpp" diff --git a/src/slic3r/GUI/SceneRaycaster.hpp b/src/slic3r/GUI/SceneRaycaster.hpp index 778ec0ab43..8102e20de4 100644 --- a/src/slic3r/GUI/SceneRaycaster.hpp +++ b/src/slic3r/GUI/SceneRaycaster.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 - 2023 Oleksandra Iushchenko @YuSanka, Enrico Turri @enricoturri1966, Tomáš Mészáros @tamasmeszaros -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_SceneRaycaster_hpp_ #define slic3r_SceneRaycaster_hpp_ diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 6184086dc0..5579fb7bcf 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -395,7 +395,7 @@ void OptionsSearcher::add_key(const std::string &opt_key, Preset::Type type, con // SearchItem //------------------------------------------ -SearchItem::SearchItem(wxWindow *parent, wxString text, int index, SearchDialog* sdialog, SearchObjectDialog* search_dialog) +SearchItem::SearchItem(wxWindow *parent, wxString text, int index, SearchDialog* sdialog, SearchObjectDialog* search_dialog, wxString tooltip) : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(parent->GetSize().GetWidth(), 3 * GUI::wxGetApp().em_unit())) { m_sdialog = sdialog; @@ -403,6 +403,8 @@ SearchItem::SearchItem(wxWindow *parent, wxString text, int index, SearchDialog* m_text = text; m_index = index; + this->SetToolTip(tooltip); + SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#FFFFFF"))); Bind(wxEVT_ENTER_WINDOW, &SearchItem::on_mouse_enter, this); Bind(wxEVT_LEAVE_WINDOW, &SearchItem::on_mouse_leave, this); @@ -997,13 +999,11 @@ void SearchObjectDialog::update_list() m_listPanel->SetBackgroundColour(StateColor::darkModeColorFor(m_bg_color)); m_listPanel->SetSize(wxSize(m_scrolledWindow->GetSize().GetWidth(), -1)); - const std::vector>& found = m_object_list->GetModel()->get_found_list(); + const std::vector>& found = m_object_list->GetModel()->get_found_list(); auto index = 0; - for (const auto& item : found) { - GUI::ObjectDataViewModelNode* data_item = item.first; - wxString data_str = item.second; - auto tmp = new SearchItem(m_listPanel, data_str, index, nullptr, this); - tmp->m_item = data_item; + for (const auto& [model_node, name, tip] : found) { + auto tmp = new SearchItem(m_listPanel, name, index, nullptr, this, tip); + tmp->m_item = model_node; m_listsizer->Add(tmp, 0, wxEXPAND, 0); index++; } diff --git a/src/slic3r/GUI/Search.hpp b/src/slic3r/GUI/Search.hpp index 8d20a14e1c..31b83b8cf3 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -166,7 +166,7 @@ public: SearchObjectDialog* m_search_object_dialog{ nullptr }; GUI::ObjectDataViewModelNode* m_item{ nullptr }; - SearchItem(wxWindow *parent, wxString text, int index, SearchDialog *sdialog = nullptr, SearchObjectDialog* search_dialog = nullptr); + SearchItem(wxWindow *parent, wxString text, int index, SearchDialog *sdialog = nullptr, SearchObjectDialog* search_dialog = nullptr, wxString tooltip = ""); ~SearchItem(){}; wxSize DrawTextString(wxDC &dc, const wxString &text, const wxPoint &pt, bool bold); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 9c9bfb259a..416f047e19 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -24,6 +24,7 @@ #include #include #include "Plater.hpp" +#include "Notebook.hpp" #include "BitmapCache.hpp" #include "BindDialog.hpp" @@ -398,12 +399,15 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) auto other_title = create_title_panel(_L("Other Device")); m_sizer_other_devices = new wxBoxSizer(wxVERTICAL); + + m_panel_ping_code = new PinCodePanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_ITEM_SIZE); + m_sizxer_scrolledWindow->Add(own_title, 0, wxEXPAND | wxLEFT, FromDIP(15)); m_sizxer_scrolledWindow->Add(m_sizer_my_devices, 0, wxEXPAND, 0); + m_sizxer_scrolledWindow->Add(m_panel_ping_code, 0, wxEXPAND, 0); m_sizxer_scrolledWindow->Add(other_title, 0, wxEXPAND | wxLEFT, FromDIP(15)); m_sizxer_scrolledWindow->Add(m_sizer_other_devices, 0, wxEXPAND, 0); - m_sizer_main->Add(m_scrolledWindow, 0, wxALL | wxEXPAND, FromDIP(2)); SetSizer(m_sizer_main); @@ -872,6 +876,17 @@ void SelectMachinePopup::OnLeftUp(wxMouseEvent &event) } } + //pin code + auto pc_rect = m_panel_ping_code->ClientToScreen(wxPoint(0, 0)); + if (mouse_pos.x > pc_rect.x && mouse_pos.y > pc_rect.y && mouse_pos.x < (pc_rect.x + m_panel_ping_code->GetSize().x) && mouse_pos.y < (pc_rect.y + m_panel_ping_code->GetSize().y)) { + /*wxMouseEvent event(wxEVT_LEFT_UP); + auto tag_pos = m_panel_ping_code->ScreenToClient(mouse_pos); + event.SetPosition(tag_pos); + event.SetEventObject(m_panel_ping_code); + wxPostEvent(m_panel_ping_code, event);*/ + wxGetApp().popup_ping_bind_dialog(); + } + //hyper link auto h_rect = m_hyperlink->ClientToScreen(wxPoint(0, 0)); if (mouse_pos.x > h_rect.x && mouse_pos.y > h_rect.y && mouse_pos.x < (h_rect.x + m_hyperlink->GetSize().x) && mouse_pos.y < (h_rect.y + m_hyperlink->GetSize().y)) { @@ -1434,7 +1449,8 @@ void SelectMachineDialog::init_bind() if (obj->dev_id == e.GetString()) { m_comboBox_printer->SetValue(obj->dev_name + "(LAN)"); } - }else if(e.GetInt() == 1 && (m_print_type == PrintFromType::FROM_SDCARD_VIEW)){ + } + /*else if (e.GetInt() == 1 && (m_print_type == PrintFromType::FROM_SDCARD_VIEW)) { on_send_print(); } else if (e.GetInt() == -2 && (m_print_type == PrintFromType::FROM_SDCARD_VIEW)) { @@ -1457,7 +1473,7 @@ void SelectMachineDialog::init_bind() this->connect_printer_mqtt(); } } - } + }*/ }); m_bitmap_last_plate->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { @@ -1800,13 +1816,20 @@ void SelectMachineDialog::sync_ams_mapping_result(std::vector &res // default color ams_col = wxColour(0xCE, 0xCE, 0xCE); } - - m->set_ams_info(ams_col, ams_id); + std::vector cols; + for (auto col : f->colors) { + cols.push_back(AmsTray::decode_color(col)); + } + m->set_ams_info(ams_col, ams_id,f->ctype, cols); break; } iter++; } } + auto tab_index = (MainFrame::TabPosition) dynamic_cast(wxGetApp().tab_panel())->GetSelection(); + if (tab_index == MainFrame::TabPosition::tp3DEditor || tab_index == MainFrame::TabPosition::tpPreview) { + updata_thumbnail_data_after_connected_printer(); + } } void print_ams_mapping_result(std::vector& result) @@ -1825,7 +1848,7 @@ void print_ams_mapping_result(std::vector& result) bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) { if (!obj_) return false; - + obj_->get_ams_colors(m_cur_colors_in_thumbnail); // try color and type mapping int result = obj_->ams_filament_mapping(m_filaments, m_ams_mapping_result); if (result == 0) { @@ -2141,9 +2164,39 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vectorget_selected_machine(); + if (obj_ == nullptr) return; + auto sourcet_print_name = obj_->get_printer_type_display_str(); + sourcet_print_name.Replace(wxT("Bambu Lab "), wxEmptyString); + + //target print + std::string target_model_id; + if (m_print_type == PrintFromType::FROM_NORMAL){ + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + target_model_id = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + } + else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { + if (m_required_data_plate_data_list.size() > 0) { + target_model_id = m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id; + } + } + + auto target_print_name = wxString(obj_->get_preset_printer_model_name(target_model_id)); + target_print_name.Replace(wxT("Bambu Lab "), wxEmptyString); + msg_text = wxString::Format(_L("The selected printer (%s) is incompatible with the chosen printer profile in the slicer (%s)."), sourcet_print_name, target_print_name); + + update_print_status_msg(msg_text, true, true); + } + catch (...){} + Enable_Send_Button(false); Enable_Refresh_Button(true); }else if (status == PrintDialogStatus::PrintStatusTimelapseNoSdcard) { @@ -2217,10 +2270,19 @@ bool SelectMachineDialog::is_blocking_printing(MachineObject* obj_) { DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) 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; + std::string source_model = ""; + + if (m_print_type == PrintFromType::FROM_NORMAL) { + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + + + }else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { + if (m_required_data_plate_data_list.size() > 0) { + source_model = m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id; + } + } if (source_model != target_model) { std::vector compatible_machine = dev->get_compatible_machine(target_model); @@ -2279,7 +2341,7 @@ bool SelectMachineDialog::is_same_nozzle_diameters(std::string& tag_nozzle_type, } //nozzle_type = preset_nozzle_type; - nozzle_diameter = wxString::Format("%.1f", preset_nozzle_diameters).ToStdString(); + nozzle_diameter = wxString::Format("%.2f", preset_nozzle_diameters).ToStdString(); return is_same_nozzle_diameters; } @@ -2378,7 +2440,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) { bool has_slice_warnings = false; - bool has_update_nozzle = false; + bool is_printing_block = false; DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -2386,14 +2448,13 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) if (!obj_) return; - std::vector confirm_text; - confirm_text.push_back(_L("Please check the following:") + "\n\n"); + std::vector confirm_text; + confirm_text.push_back(ConfirmBeforeSendInfo(_L("Please check the following:"))); //Check Printer Model Id bool is_same_printer_type = is_same_printer_model(); if (!is_same_printer_type && (m_print_type == PrintFromType::FROM_NORMAL)) { - confirm_text.push_back(_L("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.") + "\n"); - + confirm_text.push_back(ConfirmBeforeSendInfo(_L("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."))); has_slice_warnings = true; } @@ -2421,7 +2482,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) if (in_blacklist && action == "warning") { wxString prohibited_error = wxString::FromUTF8(info); - confirm_text.push_back(prohibited_error + "\n"); + confirm_text.push_back(ConfirmBeforeSendInfo(prohibited_error)); has_slice_warnings = true; } } @@ -2437,20 +2498,20 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) } else if (warning.msg == NOT_SUPPORT_TRADITIONAL_TIMELAPSE) { if (obj_->get_printer_arch() == PrinterArch::ARCH_I3 && m_checkbox_list["timelapse"]->GetValue()) { - confirm_text.push_back(Plater::get_slice_warning_string(warning) + "\n"); + confirm_text.push_back(ConfirmBeforeSendInfo(Plater::get_slice_warning_string(warning))); has_slice_warnings = true; } } else if (warning.msg == NOT_GENERATE_TIMELAPSE) { continue; } - else { + else if(warning.msg == NOZZLE_HRC_CHECKER){ wxString error_info = Plater::get_slice_warning_string(warning); if (error_info.IsEmpty()) { error_info = wxString::Format("%s\n", warning.msg); - confirm_text.push_back(error_info + "\n"); - } else - confirm_text.push_back(error_info + "\n"); + } + + confirm_text.push_back(ConfirmBeforeSendInfo(error_info)); has_slice_warnings = true; } } @@ -2508,7 +2569,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) if (has_unknown_filament) { has_slice_warnings = true; - confirm_text.push_back(_L("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.") + "\n"); + confirm_text.push_back(ConfirmBeforeSendInfo(_L("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."))); } std::string nozzle_diameter; @@ -2518,23 +2579,24 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) if (!obj_->nozzle_type.empty() && (m_print_type == PrintFromType::FROM_NORMAL)) { if (!is_same_nozzle_diameters(tag_nozzle_type, nozzle_diameter)) { has_slice_warnings = true; - has_update_nozzle = true; + is_printing_block = true; wxString nozzle_in_preset = wxString::Format(_L("nozzle in preset: %s %s"),nozzle_diameter, ""); - wxString nozzle_in_printer = wxString::Format(_L("nozzle memorized: %.1f %s"), obj_->nozzle_diameter, ""); + wxString nozzle_in_printer = wxString::Format(_L("nozzle memorized: %.2f %s"), obj_->nozzle_diameter, ""); - confirm_text.push_back(_L("Your nozzle diameter in preset is not consistent with memorized nozzle diameter. Did you change your nozzle lately?") + confirm_text.push_back(ConfirmBeforeSendInfo(_L("Your nozzle diameter in sliced file is not consistent with memorized nozzle. If you changed your nozzle lately, please go to Device > Printer Parts to change settings.") + "\n " + nozzle_in_preset + "\n " + nozzle_in_printer - + "\n"); + + "\n", ConfirmBeforeSendInfo::InfoLevel::Warning)); } - else if (!is_same_nozzle_type(filament_type, tag_nozzle_type)){ + + if (!is_same_nozzle_type(filament_type, tag_nozzle_type)){ has_slice_warnings = true; - has_update_nozzle = true; + is_printing_block = true; nozzle_diameter = wxString::Format("%.1f", obj_->nozzle_diameter).ToStdString(); - wxString nozzle_in_preset = wxString::Format(_L("*Printing %s material with %s may cause nozzle damage"), filament_type, format_steel_name(obj_->nozzle_type)); - confirm_text.push_back(nozzle_in_preset + "\n"); + wxString nozzle_in_preset = wxString::Format(_L("Printing high temperature material(%s material) with %s may cause nozzle damage"), filament_type, format_steel_name(obj_->nozzle_type)); + confirm_text.push_back(ConfirmBeforeSendInfo(nozzle_in_preset, ConfirmBeforeSendInfo::InfoLevel::Warning)); } } @@ -2543,55 +2605,62 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) wxString confirm_title = _L("Warning"); ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, confirm_title); - if(has_update_nozzle){confirm_dlg.show_update_nozzle_button();} + if(is_printing_block){ + confirm_dlg.hide_button_ok(); + confirm_dlg.edit_cancel_button_txt(_L("Close")); + confirm_text.push_back(ConfirmBeforeSendInfo(_L("Please fix the error above, otherwise printing cannot continue."), ConfirmBeforeSendInfo::InfoLevel::Warning)); + } + else { + confirm_text.push_back(ConfirmBeforeSendInfo(_L("Please click the confirm button if you still want to proceed with printing."))); + } confirm_dlg.Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, &confirm_dlg](wxCommandEvent& e) { confirm_dlg.on_hide(); - if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { + /* if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { this->connect_printer_mqtt(); } - else { + else {*/ this->on_send_print(); - } + //} }); - confirm_dlg.Bind(EVT_UPDATE_NOZZLE, [this, obj_, tag_nozzle_type, nozzle_diameter, &confirm_dlg](wxCommandEvent& e) { - if (obj_ && !tag_nozzle_type.empty() && !nozzle_diameter.empty()) { - try - { - float diameter = std::stof(nozzle_diameter); - diameter = round(diameter * 10) / 10; - obj_->command_set_printer_nozzle(tag_nozzle_type, diameter); - } - catch (...) {} - } - }); + //confirm_dlg.Bind(EVT_UPDATE_NOZZLE, [this, obj_, tag_nozzle_type, nozzle_diameter, &confirm_dlg](wxCommandEvent& e) { + // if (obj_ && !tag_nozzle_type.empty() && !nozzle_diameter.empty()) { + // try + // { + // float diameter = std::stof(nozzle_diameter); + // diameter = round(diameter * 10) / 10; + // obj_->command_set_printer_nozzle(tag_nozzle_type, diameter); + // } + // catch (...) {} + // } + // }); - confirm_text.push_back(_L("Please click the confirm button if you still want to proceed with printing.") + "\n"); + wxString info_msg = wxEmptyString; for (auto i = 0; i < confirm_text.size(); i++) { if (i == 0) { - info_msg += confirm_text[i]; + //info_msg += confirm_text[i]; } else if (i == confirm_text.size() - 1) { - info_msg += confirm_text[i]; + //info_msg += confirm_text[i]; } else { - info_msg += wxString::Format("%d. %s\n",i, confirm_text[i]); + confirm_text[i].text = wxString::Format("%d. %s",i, confirm_text[i].text); } } - confirm_dlg.update_text(info_msg); + confirm_dlg.update_text(confirm_text); confirm_dlg.on_show(); } else { - if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { - this->connect_printer_mqtt(); - } - else { + /* if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { + this->connect_printer_mqtt(); + } + else {*/ this->on_send_print(); - } + //} } } @@ -2762,7 +2831,7 @@ void SelectMachineDialog::on_send_print() else if(m_print_type == PrintFromType::FROM_SDCARD_VIEW){ BOOST_LOG_TRIVIAL(info) << "print_job: m_print_type = from_sdcard_view"; m_print_job->m_print_type = "from_sdcard_view"; - m_print_job->connection_type = "lan"; + //m_print_job->connection_type = "lan"; try { m_print_job->m_print_from_sdc_plate_idx = m_required_data_plate_data_list[m_print_plate_idx]->plate_index + 1; @@ -2882,15 +2951,40 @@ void SelectMachineDialog::on_set_finish_mapping(wxCommandEvent &evt) BOOST_LOG_TRIVIAL(info) << "The ams mapping selection result: data is " << selection_data; if (selection_data_arr.size() == 6) { - for (auto i = 0; i < m_ams_mapping_result.size(); i++) { + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + int old_filament_id = (int) wxAtoi(selection_data_arr[5]); + if (m_print_type == PrintFromType::FROM_NORMAL) {//todo:support sd card + change_default_normal(old_filament_id, ams_colour); + final_deal_edge_pixels_data(m_preview_thumbnail_data); + set_default_normal(m_preview_thumbnail_data); // do't reset ams + } + + int ctype = 0; + std::vector material_cols; + std::vector tray_cols; + for (auto mapping_item : m_mapping_popup.m_mapping_item_list) { + if (mapping_item->m_tray_data.id == evt.GetInt()) { + ctype = mapping_item->m_tray_data.ctype; + material_cols = mapping_item->m_tray_data.material_cols; + for (auto col : mapping_item->m_tray_data.material_cols) { + wxString color = wxString::Format("#%02X%02X%02X%02X", col.Red(), col.Green(), col.Blue(), col.Alpha()); + tray_cols.push_back(color.ToStdString()); + } + break; + } + } + + for (auto i = 0; i < m_ams_mapping_result.size(); i++) { if (m_ams_mapping_result[i].id == wxAtoi(selection_data_arr[5])) { m_ams_mapping_result[i].tray_id = evt.GetInt(); - auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); - wxString color = wxString::Format("#%02X%02X%02X%02X", ams_colour.Red(), ams_colour.Green(), ams_colour.Blue(), ams_colour.Alpha()); - m_ams_mapping_result[i].color = color.ToStdString(); + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + wxString color = wxString::Format("#%02X%02X%02X%02X", ams_colour.Red(), ams_colour.Green(), ams_colour.Blue(), ams_colour.Alpha()); + m_ams_mapping_result[i].color = color.ToStdString(); + m_ams_mapping_result[i].ctype = ctype; + m_ams_mapping_result[i].colors = tray_cols; } BOOST_LOG_TRIVIAL(trace) << "The ams mapping result: id is " << m_ams_mapping_result[i].id << "tray_id is " << m_ams_mapping_result[i].tray_id; - } + } MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { @@ -2898,7 +2992,7 @@ void SelectMachineDialog::on_set_finish_mapping(wxCommandEvent &evt) MaterialItem *m = item->item; if (item->id == m_current_filament_id) { auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); - m->set_ams_info(ams_colour, selection_data_arr[4]); + m->set_ams_info(ams_colour, selection_data_arr[4], ctype, material_cols); } iter++; } @@ -3157,7 +3251,7 @@ void SelectMachineDialog::on_rename_enter() m_current_project_name = new_file_name; m_rename_switch_panel->SetSelection(0); - m_rename_text->SetLabel(m_current_project_name); + m_rename_text->SetLabelText(m_current_project_name); m_rename_normal_panel->Layout(); } @@ -3270,8 +3364,6 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) show_status(PrintDialogStatus::PrintStatusInit); - reset_ams_material(); - update_show_status(); } @@ -3282,12 +3374,7 @@ void SelectMachineDialog::update_flow_cali_check(MachineObject* obj) if (obj && obj->get_printer_arch() == PrinterArch::ARCH_I3) { show_cali_tips = false; } - if (bed_type == BedType::btPTE) { - set_flow_calibration_state(false, show_cali_tips); - } - else { - set_flow_calibration_state(true, show_cali_tips); - } + set_flow_calibration_state(true, show_cali_tips); } void SelectMachineDialog::update_ams_check(MachineObject* obj) @@ -3416,7 +3503,7 @@ void SelectMachineDialog::update_show_status() } } - if (m_print_type == PrintFromType::FROM_NORMAL && is_blocking_printing(obj_)) { + if (is_blocking_printing(obj_)) { show_status(PrintDialogStatus::PrintStatusUnsupportedPrinter); return; } @@ -3774,7 +3861,23 @@ void SelectMachineDialog::set_default() } fs::path filename_path(filename.c_str()); - m_current_project_name = wxString::FromUTF8(filename_path.filename().string()); + std::string file_name = filename_path.filename().string(); + if (from_u8(file_name).find(_L("Untitled")) != wxString::npos) { + PartPlate *part_plate = m_plater->get_partplate_list().get_plate(m_print_plate_idx); + if (part_plate) { + if (std::vector objects = part_plate->get_objects_on_this_plate(); objects.size() > 0) { + file_name = objects[0]->name; + for (int i = 1; i < objects.size(); i++) { + file_name += (" + " + objects[i]->name); + } + } + if (file_name.size() > 100) { + file_name = file_name.substr(0, 97) + "..."; + } + } + } + m_current_project_name = wxString::FromUTF8(file_name); + //unsupported character filter m_current_project_name = from_u8(filter_characters(m_current_project_name.ToUTF8().data(), "<>[]:/\\|?*\"")); @@ -3835,20 +3938,399 @@ void SelectMachineDialog::set_default() m_checkbox_list["use_ams"]->SetValue(true); if (m_print_type == PrintFromType::FROM_NORMAL) { - set_default_normal(); + reset_and_sync_ams_list(); + set_default_normal(m_plater->get_partplate_list().get_curr_plate()->thumbnail_data); } else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { + //todo:unify_deal_thumbnail_data(input_data, no_light_data);this include m_print_type = PrintFromType::FROM_SDCARD_VIEW + //and notice update_page_turn_state(true) set_default_from_sdcard(); } - + Layout(); Fit(); } -void SelectMachineDialog::set_default_normal() +void SelectMachineDialog::reset_and_sync_ams_list() +{ + // for black list + std::vector materials; + std::vector brands; + std::vector display_materials; + std::vector m_filaments_id; + auto preset_bundle = wxGetApp().preset_bundle; + + for (auto filament_name : preset_bundle->filament_presets) { + for (int f_index = 0; f_index < preset_bundle->filaments.size(); f_index++) { + PresetCollection *filament_presets = &wxGetApp().preset_bundle->filaments; + Preset * preset = &filament_presets->preset(f_index); + + if (preset && filament_name.compare(preset->name) == 0) { + std::string display_filament_type; + std::string filament_type = preset->config.get_filament_type(display_filament_type); + std::string m_filament_id = preset->filament_id; + display_materials.push_back(display_filament_type); + materials.push_back(filament_type); + m_filaments_id.push_back(m_filament_id); + + std::string m_vendor_name = ""; + auto vendor = dynamic_cast(preset->config.option("filament_vendor")); + if (vendor && (vendor->values.size() > 0)) { + std::string vendor_name = vendor->values[0]; + m_vendor_name = vendor_name; + } + brands.push_back(m_vendor_name); + } + } + } + + auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); + BitmapCache bmcache; + MaterialHash::iterator iter = m_materialList.begin(); + while (iter != m_materialList.end()) { + int id = iter->first; + Material *item = iter->second; + item->item->Destroy(); + delete item; + iter++; + } + + m_sizer_material->Clear(); + m_materialList.clear(); + m_filaments.clear(); + + for (auto i = 0; i < extruders.size(); i++) { + auto extruder = extruders[i] - 1; + auto colour = wxGetApp().preset_bundle->project_config.opt_string("filament_colour", (unsigned int) extruder); + unsigned char rgb[4]; + bmcache.parse_color4(colour, rgb); + + auto colour_rgb = wxColour((int) rgb[0], (int) rgb[1], (int) rgb[2], (int) rgb[3]); + if (extruder >= materials.size() || extruder < 0 || extruder >= display_materials.size()) continue; + + MaterialItem *item = new MaterialItem(m_scrollable_region, colour_rgb, _L(display_materials[extruder])); + m_sizer_material->Add(item, 0, wxALL, FromDIP(4)); + + item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) {}); + item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent &e) { + MaterialHash::iterator iter = m_materialList.begin(); + while (iter != m_materialList.end()) { + int id = iter->first; + Material * item = iter->second; + MaterialItem *m = item->item; + m->on_normal(); + iter++; + } + + m_current_filament_id = extruder; + item->on_selected(); + + auto mouse_pos = ClientToScreen(e.GetPosition()); + wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); + + // update ams data + DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev_manager) return; + MachineObject *obj_ = dev_manager->get_selected_machine(); + + if (obj_ && obj_->is_support_ams_mapping()) { + if (m_mapping_popup.IsShown()) return; + wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); + pos.y += item->GetRect().height; + m_mapping_popup.Move(pos); + + if (obj_ && obj_->has_ams() && m_checkbox_list["use_ams"]->GetValue() && obj_->dev_id == m_printer_last_select) { + m_mapping_popup.set_parent_item(item); + m_mapping_popup.set_current_filament_id(extruder); + m_mapping_popup.set_tag_texture(materials[extruder]); + m_mapping_popup.update_ams_data(obj_->amsList); + m_mapping_popup.Popup(); + } + } + }); + + Material *material_item = new Material(); + material_item->id = extruder; + material_item->item = item; + m_materialList[i] = material_item; + + // build for ams mapping + if (extruder < materials.size() && extruder >= 0) { + FilamentInfo info; + info.id = extruder; + info.type = materials[extruder]; + info.brand = brands[extruder]; + info.filament_id = m_filaments_id[extruder]; + info.color = wxString::Format("#%02X%02X%02X%02X", colour_rgb.Red(), colour_rgb.Green(), colour_rgb.Blue(), colour_rgb.Alpha()).ToStdString(); + m_filaments.push_back(info); + } + } + + if (extruders.size() <= 4) { + m_sizer_material->SetCols(extruders.size()); + } else { + m_sizer_material->SetCols(4); + } + + // reset_ams_material();//show "-" +} + +void SelectMachineDialog::clone_thumbnail_data() { + //record preview_colors + MaterialHash::iterator iter = m_materialList.begin(); + if (m_preview_colors_in_thumbnail.size() != m_materialList.size()) { + m_preview_colors_in_thumbnail.resize(m_materialList.size()); + } + while (iter != m_materialList.end()) { + int id = iter->first; + Material * item = iter->second; + MaterialItem *m = item->item; + m_preview_colors_in_thumbnail[id] = m->m_material_coloul; + if (item->id < m_cur_colors_in_thumbnail.size()) { + m_cur_colors_in_thumbnail[item->id] = m->m_ams_coloul; + } + else {//exist empty or unrecognized type ams in machine + m_cur_colors_in_thumbnail.resize(item->id + 1); + m_cur_colors_in_thumbnail[item->id] = m->m_ams_coloul; + } + iter++; + } + //copy data + auto &data = m_cur_input_thumbnail_data; + m_preview_thumbnail_data.reset(); + m_preview_thumbnail_data.set(data.width, data.height); + if (data.width > 0 && data.height > 0) { + for (unsigned int r = 0; r < data.height; ++r) { + unsigned int rr = (data.height - 1 - r) * data.width; + for (unsigned int c = 0; c < data.width; ++c) { + unsigned char *origin_px = (unsigned char *) data.pixels.data() + 4 * (rr + c); + unsigned char *new_px = (unsigned char *) m_preview_thumbnail_data.pixels.data() + 4 * (rr + c); + for (size_t i = 0; i < 4; i++) { + new_px[i] = origin_px[i]; + } + } + } + } + //record_edge_pixels_data + record_edge_pixels_data(); +} + +void SelectMachineDialog::record_edge_pixels_data() +{ + auto is_not_in_preview_colors = [this](unsigned char r, unsigned char g , unsigned char b , unsigned char a) { + for (size_t i = 0; i < m_preview_colors_in_thumbnail.size(); i++) { + wxColour render_color = adjust_color_for_render(m_preview_colors_in_thumbnail[i]); + if (render_color.Red() == r && render_color.Green() == g && render_color.Blue() == b /*&& render_color.Alpha() == a*/) { + return false; + } + } + return true; + }; + ThumbnailData &data = m_cur_no_light_thumbnail_data; + ThumbnailData &origin_data = m_cur_input_thumbnail_data; + if (data.width > 0 && data.height > 0) { + m_edge_pixels.resize(data.width * data.height); + for (unsigned int r = 0; r < data.height; ++r) { + unsigned int rr = (data.height - 1 - r) * data.width; + for (unsigned int c = 0; c < data.width; ++c) { + unsigned char *no_light_px = (unsigned char *) data.pixels.data() + 4 * (rr + c); + unsigned char *origin_px = (unsigned char *) origin_data.pixels.data() + 4 * (rr + c); + m_edge_pixels[r * data.width + c] = false; + if (origin_px[3] > 0) { + if (is_not_in_preview_colors(no_light_px[0], no_light_px[1], no_light_px[2], origin_px[3])) { + m_edge_pixels[r * data.width + c] = true; + } + } + } + } + } +} + +wxColour SelectMachineDialog::adjust_color_for_render(const wxColour &color) +{ + ColorRGBA _temp_color_color(color.Red() / 255.0f, color.Green() / 255.0f, color.Blue() / 255.0f, color.Alpha() / 255.0f); + auto _temp_color_color_ = adjust_color_for_rendering(_temp_color_color); + wxColour render_color((int) (_temp_color_color_[0] * 255.0f), (int) (_temp_color_color_[1] * 255.0f), (int) (_temp_color_color_[2] * 255.0f), + (int) (_temp_color_color_[3] * 255.0f)); + return render_color; +} + +void SelectMachineDialog::final_deal_edge_pixels_data(ThumbnailData &data) +{ + if (data.width > 0 && data.height > 0 && m_edge_pixels.size() >0 ) { + for (unsigned int r = 0; r < data.height; ++r) { + unsigned int rr = (data.height - 1 - r) * data.width; + bool exist_rr_up = r >= 1 ? true : false; + bool exist_rr_down = r <= data.height - 2 ? true : false; + unsigned int rr_up = exist_rr_up ? (data.height - 1 - (r - 1)) * data.width : 0; + unsigned int rr_down = exist_rr_down ? (data.height - 1 - (r + 1)) * data.width : 0; + for (unsigned int c = 0; c < data.width; ++c) { + bool exist_c_left = c >= 1 ? true : false; + bool exist_c_right = c <= data.width - 2 ? true : false; + unsigned int c_left = exist_c_left ? c - 1 : 0; + unsigned int c_right = exist_c_right ? c + 1 : 0; + unsigned char *cur_px = (unsigned char *) data.pixels.data() + 4 * (rr + c); + unsigned char *relational_pxs[8] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}; + if (exist_rr_up && exist_c_left) { relational_pxs[0] = (unsigned char *) data.pixels.data() + 4 * (rr_up + c_left); } + if (exist_rr_up) { relational_pxs[1] = (unsigned char *) data.pixels.data() + 4 * (rr_up + c); } + if (exist_rr_up && exist_c_right) { relational_pxs[2] = (unsigned char *) data.pixels.data() + 4 * (rr_up + c_right); } + if (exist_c_left) { relational_pxs[3] = (unsigned char *) data.pixels.data() + 4 * (rr + c_left); } + if (exist_c_right) { relational_pxs[4] = (unsigned char *) data.pixels.data() + 4 * (rr + c_right); } + if (exist_rr_down && exist_c_left) { relational_pxs[5] = (unsigned char *) data.pixels.data() + 4 * (rr_down + c_left); } + if (exist_rr_down) { relational_pxs[6] = (unsigned char *) data.pixels.data() + 4 * (rr_down + c); } + if (exist_rr_down && exist_c_right) { relational_pxs[7] = (unsigned char *) data.pixels.data() + 4 * (rr_down + c_right); } + if (cur_px[3] > 0 && m_edge_pixels[r * data.width + c]) { + int rgba_sum[4] = {0, 0, 0, 0}; + int valid_count = 0; + for (size_t k = 0; k < 8; k++) { + if (relational_pxs[k]) { + if (k == 0 && m_edge_pixels[(r - 1) * data.width + c_left]) { + continue; + } + if (k == 1 && m_edge_pixels[(r - 1) * data.width + c]) { + continue; + } + if (k == 2 && m_edge_pixels[(r - 1) * data.width + c_right]) { + continue; + } + if (k == 3 && m_edge_pixels[r * data.width + c_left]) { + continue; + } + if (k == 4 && m_edge_pixels[r * data.width + c_right]) { + continue; + } + if (k == 5 && m_edge_pixels[(r + 1) * data.width + c_left]) { + continue; + } + if (k == 6 && m_edge_pixels[(r + 1) * data.width + c]) { + continue; + } + if (k == 7 && m_edge_pixels[(r + 1) * data.width + c_right]) { + continue; + } + for (size_t m = 0; m < 4; m++) { + rgba_sum[m] += relational_pxs[k][m]; + } + valid_count++; + } + } + if (valid_count > 0) { + for (size_t m = 0; m < 4; m++) { + cur_px[m] = std::clamp(int(rgba_sum[m] / (float)valid_count), 0, 255); + } + } + } + } + } + } +} + +void SelectMachineDialog::updata_thumbnail_data_after_connected_printer() +{ + // change thumbnail_data + ThumbnailData &input_data = m_plater->get_partplate_list().get_curr_plate()->thumbnail_data; + ThumbnailData &no_light_data = m_plater->get_partplate_list().get_curr_plate()->no_light_thumbnail_data; + if (input_data.width == 0 || input_data.height == 0 || no_light_data.width == 0 || no_light_data.height == 0) { + wxGetApp().plater()->update_all_plate_thumbnails(false); + } + unify_deal_thumbnail_data(input_data, no_light_data); +} + +void SelectMachineDialog::unify_deal_thumbnail_data(ThumbnailData &input_data, ThumbnailData &no_light_data) { + if (input_data.width == 0 || input_data.height == 0 || no_light_data.width == 0 || no_light_data.height == 0) { + BOOST_LOG_TRIVIAL(error) << "SelectMachineDialog::no_light_data is empty,error"; + return; + } + m_cur_input_thumbnail_data = input_data; + m_cur_no_light_thumbnail_data = no_light_data; + clone_thumbnail_data(); + MaterialHash::iterator iter = m_materialList.begin(); + bool is_connect_printer = true; + while (iter != m_materialList.end()) { + int id = iter->first; + Material * item = iter->second; + MaterialItem *m = item->item; + if (m->m_ams_name == "-") { + is_connect_printer = false; + break; + } + iter++; + } + if (is_connect_printer) { + change_default_normal(-1, wxColour()); + final_deal_edge_pixels_data(m_preview_thumbnail_data); + set_default_normal(m_preview_thumbnail_data); + } +} + +void SelectMachineDialog::change_default_normal(int old_filament_id, wxColour temp_ams_color) +{ + if (m_cur_colors_in_thumbnail.size() == 0) { + BOOST_LOG_TRIVIAL(error) << "SelectMachineDialog::change_default_normal:error:m_cur_colors_in_thumbnail.size() == 0"; + return; + } + if (old_filament_id >= 0) { + if (old_filament_id < m_cur_colors_in_thumbnail.size()) { + m_cur_colors_in_thumbnail[old_filament_id] = temp_ams_color; + } + else { + BOOST_LOG_TRIVIAL(error) << "SelectMachineDialog::change_default_normal:error:old_filament_id > m_cur_colors_in_thumbnail.size()"; + return; + } + } + ThumbnailData& data = m_cur_input_thumbnail_data; + ThumbnailData& no_light_data = m_cur_no_light_thumbnail_data; + if (data.width > 0 && data.height > 0 && data.width == no_light_data.width && data.height == no_light_data.height) { + for (unsigned int r = 0; r < data.height; ++r) { + unsigned int rr = (data.height - 1 - r) * data.width; + for (unsigned int c = 0; c < data.width; ++c) { + unsigned char *no_light_px = (unsigned char *) no_light_data.pixels.data() + 4 * (rr + c); + unsigned char *origin_px = (unsigned char *) data.pixels.data() + 4 * (rr + c); + unsigned char *new_px = (unsigned char *) m_preview_thumbnail_data.pixels.data() + 4 * (rr + c); + if (origin_px[3] > 0 && m_edge_pixels[r * data.width + c] == false) { + auto filament_id = 255 - no_light_px[3]; + if (filament_id >= m_cur_colors_in_thumbnail.size()) { + continue; + } + wxColour temp_ams_color_in_loop = m_cur_colors_in_thumbnail[filament_id]; + wxColour ams_color = adjust_color_for_render(temp_ams_color_in_loop); + //change color + new_px[3] = origin_px[3]; // alpha + int origin_rgb = origin_px[0] + origin_px[1] + origin_px[2]; + int no_light_px_rgb = no_light_px[0] + no_light_px[1] + no_light_px[2]; + unsigned char i = 0; + if (origin_rgb >= no_light_px_rgb) {//Brighten up + unsigned char cur_single_color = ams_color.Red(); + new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]), 0, 255); + i++; + cur_single_color = ams_color.Green(); + new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]), 0, 255); + i++; + cur_single_color = ams_color.Blue(); + new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]), 0, 255); + } else {//Dimming + float ratio = origin_rgb / (float) no_light_px_rgb; + unsigned char cur_single_color = ams_color.Red(); + new_px[i] = std::clamp((int)(cur_single_color * ratio), 0, 255); + i++; + cur_single_color = ams_color.Green(); + new_px[i] = std::clamp((int) (cur_single_color * ratio), 0, 255); + i++; + cur_single_color = ams_color.Blue(); + new_px[i] = std::clamp((int) (cur_single_color * ratio), 0, 255); + } + } + } + } + } + else { + BOOST_LOG_TRIVIAL(error) << "SelectMachineDialog::change_defa:no_light_data is empty,error"; + } +} + +void SelectMachineDialog::set_default_normal(const ThumbnailData &data) { update_page_turn_state(false); - ThumbnailData& data = m_plater->get_partplate_list().get_curr_plate()->thumbnail_data; if (data.is_valid()) { wxImage image(data.width, data.height); image.InitAlpha(); @@ -3864,135 +4346,6 @@ void SelectMachineDialog::set_default_normal() m_thumbnailPanel->set_thumbnail(image); } - //for black list - std::vector materials; - std::vector brands; - std::vector display_materials; - std::vector m_filaments_id; - - - auto preset_bundle = wxGetApp().preset_bundle; - - for (auto filament_name : preset_bundle->filament_presets) { - for (int f_index = 0; f_index < preset_bundle->filaments.size(); f_index++) { - PresetCollection* filament_presets = &wxGetApp().preset_bundle->filaments; - Preset* preset = &filament_presets->preset(f_index); - - if (preset && filament_name.compare(preset->name) == 0) { - std::string display_filament_type; - std::string filament_type = preset->config.get_filament_type(display_filament_type); - std::string m_filament_id=preset->filament_id; - display_materials.push_back(display_filament_type); - materials.push_back(filament_type); - m_filaments_id.push_back(m_filament_id); - - std::string m_vendor_name = ""; - auto vendor = dynamic_cast (preset->config.option("filament_vendor")); - if (vendor && (vendor->values.size() > 0)) { - std::string vendor_name = vendor->values[0]; - m_vendor_name = vendor_name; - } - brands.push_back(m_vendor_name); - } - } - } - - //init MaterialItem - auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); - - MaterialHash::iterator iter = m_materialList.begin(); - while (iter != m_materialList.end()) { - int id = iter->first; - Material* item = iter->second; - item->item->Destroy(); - delete item; - iter++; - } - - m_sizer_material->Clear(); - m_materialList.clear(); - m_filaments.clear(); - - for (auto i = 0; i < extruders.size(); i++) { - auto extruder = extruders[i] - 1; - auto colour = wxGetApp().preset_bundle->project_config.opt_string("filament_colour", (unsigned int) extruder); - ColorRGBA rgb; - decode_color(colour, rgb); - - auto colour_rgb = wxColour((int) rgb.r_uchar(), (int) rgb.g_uchar(), (int) rgb.b_uchar(), (int) rgb.a_uchar()); - if (extruder >= materials.size() || extruder < 0 || extruder >= display_materials.size()) - continue; - - MaterialItem* item = new MaterialItem(m_scrollable_region, colour_rgb, _L(display_materials[extruder])); - m_sizer_material->Add(item, 0, wxALL, FromDIP(4)); - - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent& e) {}); - item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { - MaterialHash::iterator iter = m_materialList.begin(); - while (iter != m_materialList.end()) { - int id = iter->first; - Material* item = iter->second; - MaterialItem* m = item->item; - m->on_normal(); - iter++; - } - - m_current_filament_id = extruder; - item->on_selected(); - - - auto mouse_pos = ClientToScreen(e.GetPosition()); - wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); - - // update ams data - DeviceManager* dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev_manager) return; - MachineObject* obj_ = dev_manager->get_selected_machine(); - - if (obj_ && obj_->is_support_ams_mapping()) { - if (m_mapping_popup.IsShown()) return; - wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); - pos.y += item->GetRect().height; - m_mapping_popup.Move(pos); - - if (obj_ && - obj_->has_ams() && - m_checkbox_list["use_ams"]->GetValue() && - obj_->dev_id == m_printer_last_select) - { - m_mapping_popup.set_parent_item(item); - m_mapping_popup.set_current_filament_id(extruder); - m_mapping_popup.set_tag_texture(materials[extruder]); - m_mapping_popup.update_ams_data(obj_->amsList); - m_mapping_popup.Popup(); - } - } - }); - - Material* material_item = new Material(); - material_item->id = extruder; - material_item->item = item; - m_materialList[i] = material_item; - - // build for ams mapping - if (extruder < materials.size() && extruder >= 0) { - FilamentInfo info; - info.id = extruder; - info.type = materials[extruder]; - info.brand = brands[extruder]; - info.filament_id=m_filaments_id[extruder]; - info.color = wxString::Format("#%02X%02X%02X%02X", colour_rgb.Red(), colour_rgb.Green(), colour_rgb.Blue(), colour_rgb.Alpha()).ToStdString(); - m_filaments.push_back(info); - } - } - - if (extruders.size() <= 4) { - m_sizer_material->SetCols(extruders.size()); - } - else { - m_sizer_material->SetCols(4); - } - m_scrollable_region->Layout(); m_scrollable_region->Fit(); @@ -4021,10 +4374,6 @@ void SelectMachineDialog::set_default_normal() m_scrollable_view->SetScrollRate(0, 0); } #endif // __WXOSX_MAC__ - - - reset_ams_material(); - // basic info auto aprint_stats = m_plater->get_partplate_list().get_current_fff_print().print_statistics(); wxString time; @@ -4051,11 +4400,14 @@ void SelectMachineDialog::set_default_from_sdcard() update_page_turn_state(true); ThumbnailData& data = m_required_data_plate_data_list[m_print_plate_idx]->plate_thumbnail; - wxMemoryInputStream mis((unsigned char*)data.pixels.data(), data.pixels.size()); - wxImage image = wxImage(mis); - image = image.Rescale(FromDIP(256), FromDIP(256)); - m_thumbnailPanel->set_thumbnail(image); + if (data.pixels.size() > 0) { + wxMemoryInputStream mis((unsigned char*)data.pixels.data(), data.pixels.size()); + wxImage image = wxImage(mis); + image = image.Rescale(FromDIP(256), FromDIP(256)); + m_thumbnailPanel->set_thumbnail(image); + } + //for black list std::vector materials; std::vector brands; @@ -4158,14 +4510,7 @@ void SelectMachineDialog::set_default_from_sdcard() m_scrollable_view->SetMinSize(m_scrollable_region->GetSize()); m_scrollable_view->SetMaxSize(m_scrollable_region->GetSize()); - //disable pei bed - auto bed_type = m_plater->get_partplate_list().get_curr_plate()->get_bed_type(true); - if (bed_type == BedType::btPTE) { - set_flow_calibration_state(false); - } - else { - set_flow_calibration_state(true); - } + set_flow_calibration_state(true); wxSize screenSize = wxGetDisplaySize(); auto dialogSize = this->GetSize(); @@ -4247,7 +4592,7 @@ bool SelectMachineDialog::Show(bool show) DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (dev) { MachineObject* obj_ = dev->get_selected_machine(); - if (obj_ && obj_->connection_type() == "cloud" && m_print_type == FROM_SDCARD_VIEW) { + if (obj_ && obj_->connection_type() == "cloud" /*&& m_print_type == FROM_SDCARD_VIEW*/) { if (obj_->is_connected()) { obj_->disconnect(); } @@ -4469,9 +4814,10 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) Fit(); } - void ThumbnailPanel::set_thumbnail(wxImage img) + void ThumbnailPanel::set_thumbnail(wxImage &img) { - m_bitmap = img; + m_brightness_value = get_brightness_value(img); + m_bitmap = img; //Paint the background bitmap to the thumbnail bitmap with wxMemoryDC wxMemoryDC dc; bitmap_with_background.Create(wxSize(m_bitmap.GetWidth(), m_bitmap.GetHeight())); @@ -4479,7 +4825,7 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) dc.DrawBitmap(m_background_bitmap.bmp(), 0, 0); dc.DrawBitmap(m_bitmap, 0, 0); dc.SelectObject(wxNullBitmap); - + Refresh(); } void ThumbnailPanel::OnPaint(wxPaintEvent& event) { @@ -4490,7 +4836,7 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) void ThumbnailPanel::render(wxDC& dc) { - if (wxGetApp().dark_mode()) { + if (wxGetApp().dark_mode() && m_brightness_value < SHOW_BACKGROUND_BITMAP_PIXEL_THRESHOLD) { #ifdef __WXMSW__ wxMemoryDC memdc; wxBitmap bmp(GetSize()); @@ -4508,4 +4854,80 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) ThumbnailPanel::~ThumbnailPanel() {} + PinCodePanel::PinCodePanel(wxWindow* parent, wxWindowID winid /*= wxID_ANY*/, const wxPoint& pos /*= wxDefaultPosition*/, const wxSize& size /*= wxDefaultSize*/) + { + wxPanel::Create(parent, winid, pos, SELECT_MACHINE_ITEM_SIZE); + Bind(wxEVT_PAINT, &PinCodePanel::OnPaint, this); + SetSize(SELECT_MACHINE_ITEM_SIZE); + SetMaxSize(SELECT_MACHINE_ITEM_SIZE); + SetMinSize(SELECT_MACHINE_ITEM_SIZE); + + m_bitmap = ScalableBitmap(this, "bind_device_ping_code",10); + + this->Bind(wxEVT_ENTER_WINDOW, &PinCodePanel::on_mouse_enter, this); + this->Bind(wxEVT_LEAVE_WINDOW, &PinCodePanel::on_mouse_leave, this); + this->Bind(wxEVT_LEFT_UP, &PinCodePanel::on_mouse_left_up, this); + } + + void PinCodePanel::OnPaint(wxPaintEvent& event) + { + wxPaintDC dc(this); + render(dc); + } + + void PinCodePanel::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 PinCodePanel::doRender(wxDC& dc) + { + auto size = GetSize(); + dc.DrawBitmap(m_bitmap.bmp(), wxPoint(FromDIP(20), (size.y - m_bitmap.GetBmpSize().y) / 2)); + dc.SetFont(::Label::Head_13); + dc.SetTextForeground(wxColour(38, 46, 48)); + wxString txt = _L("Bind with Pin Code"); + auto txt_size = dc.GetTextExtent(txt); + dc.DrawText(txt, wxPoint(FromDIP(40), (size.y - txt_size.y) / 2)); + + if (m_hover) { + dc.SetPen(SELECT_MACHINE_BRAND); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRectangle(0, 0, size.x, size.y); + } + } + + void PinCodePanel::on_mouse_enter(wxMouseEvent& evt) + { + m_hover = true; + Refresh(); + } + + void PinCodePanel::on_mouse_leave(wxMouseEvent& evt) + { + m_hover = false; + Refresh(); + } + + void PinCodePanel::on_mouse_left_up(wxMouseEvent& evt) + { + wxGetApp().popup_ping_bind_dialog(); + } + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 160c21592a..16da5e05d5 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -64,6 +64,34 @@ enum PrintFromType { FROM_SDCARD_VIEW, }; +static int get_brightness_value(wxImage image) { + + wxImage grayImage = image.ConvertToGreyscale(); + + int width = grayImage.GetWidth(); + int height = grayImage.GetHeight(); + + int totalLuminance = 0; + unsigned char alpha; + int num_none_transparent = 0; + for (int y = 0; y < height; y += 2) { + + for (int x = 0; x < width; x += 2) { + + alpha = image.GetAlpha(x, y); + if (alpha != 0) { + wxColour pixelColor = grayImage.GetRed(x, y); + totalLuminance += pixelColor.Red(); + num_none_transparent = num_none_transparent + 1; + } + } + } + if (totalLuminance <= 0 || num_none_transparent <= 0) { + return 0; + } + return totalLuminance / num_none_transparent; +} + class Material { public: @@ -182,6 +210,27 @@ public: MachineObjectPanel *mPanel; }; +class PinCodePanel : public wxPanel +{ +public: + PinCodePanel(wxWindow* parent, + wxWindowID winid = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + ~PinCodePanel() {}; + + ScalableBitmap m_bitmap; + bool m_hover{false}; + + 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 ThumbnailPanel; @@ -204,8 +253,11 @@ public: private: int m_my_devices_count{0}; int m_other_devices_count{0}; + PinCodePanel* m_panel_ping_code{nullptr}; wxWindow* m_placeholder_panel{nullptr}; wxHyperlinkCtrl* m_hyperlink{nullptr}; + Label* m_ping_code_text{nullptr}; + wxStaticBitmap* m_img_ping_code{nullptr}; wxBoxSizer * m_sizer_body{nullptr}; wxBoxSizer * m_sizer_my_devices{nullptr}; wxBoxSizer * m_sizer_other_devices{nullptr}; @@ -288,7 +340,7 @@ private: int m_print_plate_idx{0}; int m_print_plate_total{0}; int m_timeout_count{0}; - int m_print_error_code; + int m_print_error_code{0}; bool m_is_in_sending_mode{ false }; bool m_ams_mapping_res{ false }; bool m_ams_mapping_valid{ false }; @@ -393,6 +445,12 @@ protected: wxStaticBitmap * img_use_ams_tip{nullptr}; wxStaticBitmap * img_ams_backup{nullptr}; ScalableBitmap * enable_ams{nullptr}; + ThumbnailData m_cur_input_thumbnail_data; + ThumbnailData m_cur_no_light_thumbnail_data; + ThumbnailData m_preview_thumbnail_data;//when ams map change + std::vector m_preview_colors_in_thumbnail; + std::vector m_cur_colors_in_thumbnail; + std::vector m_edge_pixels; public: SelectMachineDialog(Plater *plater = nullptr); @@ -431,7 +489,15 @@ public: void on_set_finish_mapping(wxCommandEvent& evt); void on_print_job_cancel(wxCommandEvent& evt); void set_default(); - void set_default_normal(); + void reset_and_sync_ams_list(); + void clone_thumbnail_data(); + void record_edge_pixels_data(); + wxColour adjust_color_for_render(const wxColour& color); + void final_deal_edge_pixels_data(ThumbnailData& data); + void updata_thumbnail_data_after_connected_printer(); + void unify_deal_thumbnail_data(ThumbnailData &input_data, ThumbnailData &no_light_data); + void change_default_normal(int old_filament_id, wxColour temp_ams_color); + void set_default_normal(const ThumbnailData&); void set_default_from_sdcard(); void update_page_turn_state(bool show); void on_timer(wxTimerEvent& event); @@ -515,12 +581,12 @@ public: void OnPaint(wxPaintEvent &event); void PaintBackground(wxDC &dc); void OnEraseBackground(wxEraseEvent &event); - void set_thumbnail(wxImage img); + void set_thumbnail(wxImage &img); void render(wxDC &dc); private: ScalableBitmap m_background_bitmap; wxBitmap bitmap_with_background; - + int m_brightness_value{ -1 }; }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 01f1c06502..b952420b0d 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv, Tomáš Mészáros @tamasmeszaros, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "libslic3r/libslic3r.h" #include "Selection.hpp" @@ -147,6 +143,17 @@ void Selection::set_model(Model* model) update_valid(); } +int Selection::query_real_volume_idx_from_other_view(unsigned int object_idx, unsigned int instance_idx, unsigned int model_volume_idx) +{ + for (int i = 0; i < m_volumes->size(); i++) { + auto v = (*m_volumes)[i]; + if (v->object_idx() == object_idx && instance_idx == v->instance_idx() && model_volume_idx == v->volume_idx()) { + return i; + } + } + return -1; +} + void Selection::add(unsigned int volume_idx, bool as_single_selection, bool check_for_already_contained) { if (!m_valid || (unsigned int)m_volumes->size() <= volume_idx) @@ -1988,6 +1995,13 @@ void Selection::copy_to_clipboard() m_clipboard.reset(); + // sort as the object list order + std::vector selected_list; + selected_list.assign(m_list.begin(), m_list.end()); + std::sort(selected_list.begin(), selected_list.end(), [this](unsigned int left, unsigned int right) { + return (*m_volumes)[left]->volume_idx() < (*m_volumes)[right]->volume_idx(); + }); + for (const ObjectIdxsToInstanceIdxsMap::value_type& object : m_cache.content) { ModelObject* src_object = m_model->objects[object.first]; ModelObject* dst_object = m_clipboard.add_object(); @@ -2005,7 +2019,7 @@ void Selection::copy_to_clipboard() dst_object->add_instance(*src_object->instances[i]); } - for (unsigned int i : m_list) { + for (unsigned int i : selected_list) { // Copy the ModelVolumes only for the selected GLVolumes of the 1st selected instance. const GLVolume* volume = (*m_volumes)[i]; if (volume->object_idx() == object.first && volume->instance_idx() == *object.second.begin()) { @@ -3078,7 +3092,7 @@ void Selection::paste_objects_from_clipboard() if (src_objects.size() > 1) { BoundingBoxf3 bbox_all; for (const ModelObject *src_object : src_objects) { - BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(0); + BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(size_t(0)); bbox_all.merge(bbox); } auto bsize = bbox_all.size(); @@ -3094,7 +3108,7 @@ void Selection::paste_objects_from_clipboard() ModelObject* dst_object = m_model->add_object(*src_object); // BBS: find an empty cell to put the copied object - BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(0); + BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(size_t(0)); Vec3d displacement; bool in_current = plate->intersects(bbox); diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index c506a1a6fa..52b1a81851 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2019 - 2023 Enrico Turri @enricoturri1966, Oleksandra Iushchenko @YuSanka, Filip Sykala @Jony01, Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_GUI_Selection_hpp_ #define slic3r_GUI_Selection_hpp_ @@ -212,6 +208,7 @@ public: EMode get_mode() const { return m_mode; } void set_mode(EMode mode) { m_mode = mode; } + int query_real_volume_idx_from_other_view(unsigned int object_idx, unsigned int instance_idx, unsigned int model_volume_idx); void add(unsigned int volume_idx, bool as_single_selection = true, bool check_for_already_contained = false); void remove(unsigned int volume_idx); diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp new file mode 100644 index 0000000000..bf766d78d0 --- /dev/null +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -0,0 +1,1668 @@ +#include "SendMultiMachinePage.hpp" +#include "TaskManager.hpp" +#include "I18N.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "Widgets/RadioBox.hpp" +#include + +namespace Slic3r { +namespace GUI { + + + +WX_DEFINE_LIST(AmsRadioSelectorList); + +class ScrolledWindow : public wxScrolledWindow { +public: + ScrolledWindow(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxVSCROLL) : wxScrolledWindow(parent, id, pos, size, style) {} + + bool ShouldScrollToChildOnFocus(wxWindow* child) override { return false; } +}; + +SendDeviceItem::SendDeviceItem(wxWindow* parent, MachineObject* obj) + : DeviceItem(parent, obj) +{ + SetBackgroundColour(*wxWHITE); + m_bitmap_check_disable = ScalableBitmap(this, "check_off_disabled", 18); + m_bitmap_check_off = ScalableBitmap(this, "check_off_focused", 18); + m_bitmap_check_on = ScalableBitmap(this, "check_on", 18); + + + SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(SEND_ITEM_MAX_HEIGHT))); + SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(SEND_ITEM_MAX_HEIGHT))); + + Bind(wxEVT_PAINT, &SendDeviceItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &SendDeviceItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &SendDeviceItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &SendDeviceItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &SendDeviceItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_SELECTED, &SendDeviceItem::OnSelectedDevice, this); + wxGetApp().UpdateDarkUIWin(this); +} + +void SendDeviceItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top /*= 0*/) +{ + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void SendDeviceItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(false); +} + +void SendDeviceItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(false); +} + +void SendDeviceItem::OnSelectedDevice(wxCommandEvent& evt) +{ + auto dev_id = evt.GetString(); + auto state = evt.GetInt(); + if (state == 0) { + state_selected = 1; + } + else if (state == 1) { + state_selected = 0; + } + Refresh(false); +} + +void SendDeviceItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + + if (state_printable <= 2 && state_local_task > 1) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } + } +} + +void SendDeviceItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void SendDeviceItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void SendDeviceItem::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 SendDeviceItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(SEND_LEFT_PADDING_LEFT); + + + //checkbox + if (state_printable > 2) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + else { + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + else if(state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + } + + //task status + if (state_local_task <= 1) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + + left += FromDIP(SEND_LEFT_PRINTABLE); + + //dev names + DrawTextWithEllipsis(dc, wxString::FromUTF8(get_obj()->dev_name), FromDIP(SEND_LEFT_DEV_NAME), left); + left += FromDIP(SEND_LEFT_DEV_NAME); + + //device state + if (state_printable <= 2) { + dc.SetTextForeground(wxColour(0, 150, 136)); + } + else { + dc.SetTextForeground(wxColour(208, 27, 27)); + } + + DrawTextWithEllipsis(dc, get_state_printable(), FromDIP(SEND_LEFT_DEV_NAME), left); + left += FromDIP(SEND_LEFT_DEV_STATUS); + + dc.SetTextForeground(*wxBLACK); + + //task state + //DrawTextWithEllipsis(dc, get_local_state_task(), FromDIP(SEND_LEFT_DEV_NAME), left); + //left += FromDIP(SEND_LEFT_DEV_STATUS); + + + //AMS + if (!obj_->has_ams()) { + DrawTextWithEllipsis(dc, _L("No AMS"), FromDIP(SEND_LEFT_DEV_NAME), left); + } + else { + DrawTextWithEllipsis(dc, _L("AMS"), FromDIP(SEND_LEFT_DEV_NAME), left); + } + + if (m_hover) { + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + } +} +void SendDeviceItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(obj_->dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void SendDeviceItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +SendMultiMachinePage::SendMultiMachinePage(Plater* plater) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, + _L("Send to Multi-device"), + wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) + ,m_plater(plater) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + app_config = get_app_config(); + + SetBackgroundColour(*wxWHITE); + // icon + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + auto line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + line_top->SetBackgroundColour(wxColour(166, 169, 170)); + main_sizer->Add(line_top, 0, wxEXPAND, 0); + main_sizer->AddSpacer(FromDIP(10)); + + m_main_scroll = new ScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_main_scroll->SetBackgroundColour(*wxWHITE); + m_main_scroll->SetScrollRate(5, 5); + + m_sizer_body = new wxBoxSizer(wxVERTICAL); + m_main_page = create_page(); + m_sizer_body->Add(m_main_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); + m_main_scroll->SetSizerAndFit(m_sizer_body); + m_main_scroll->Layout(); + m_main_scroll->Fit(); + m_main_scroll->Centre(wxBOTH); + + main_sizer->Add(m_main_scroll, 1, wxEXPAND); + + SetSizer(main_sizer); + Layout(); + Fit(); + Centre(wxBOTH); + + m_mapping_popup = new AmsMapingPopup(m_main_page); + Bind(EVT_SET_FINISH_MAPPING, &SendMultiMachinePage::on_set_finish_mapping, this); + Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); + m_main_page->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); + m_main_scroll->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); + + init_timer(); + Bind(wxEVT_TIMER, &SendMultiMachinePage::on_timer, this); + wxGetApp().UpdateDlgDarkUI(this); +} + +SendMultiMachinePage::~SendMultiMachinePage() +{ + // TODO + m_radio_group.DeleteContents(true); + + if (m_refresh_timer) + m_refresh_timer->Stop(); + delete m_refresh_timer; +} + +void SendMultiMachinePage::prepare(int plate_idx) +{ + // TODO + m_print_plate_idx = plate_idx; +} + +void SendMultiMachinePage::on_dpi_changed(const wxRect& suggested_rect) +{ + m_select_checkbox->Rescale(); + m_printer_name->Rescale(); + m_printer_name->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_NAME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_NAME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_device_status->Rescale(); + m_device_status->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_device_status->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_ams->Rescale(); + m_ams->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_ams->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_refresh_button->Rescale(); + m_refresh_button->SetMinSize(wxSize(FromDIP(50), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_refresh_button->SetMaxSize(wxSize(FromDIP(50), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_rename_button->msw_rescale(); + print_time->msw_rescale(); + print_weight->msw_rescale(); + timeimg->SetBitmap(print_time->bmp()); + weightimg->SetBitmap(print_weight->bmp()); + m_button_add->Rescale(); + m_button_add->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_add->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_send->Rescale(); + m_button_send->SetMinSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetMinSize(wxSize(FromDIP(120), FromDIP(40))); + + for (auto it = m_device_items.begin(); it != m_device_items.end(); ++it) { + it->second->Refresh(); + } + + Fit(); + Layout(); + Refresh(); +} + +void SendMultiMachinePage::on_sys_color_changed() +{ + +} + +void SendMultiMachinePage::refresh_user_device() +{ + sizer_machine_list->Clear(false); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + return; + } + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + + auto task_manager = wxGetApp().getTaskManager(); + + std::vector subscribe_list; + std::vector dev_temp; + + for (auto it = user_machine.begin(); it != user_machine.end(); ++it) { + SendDeviceItem* di = new SendDeviceItem(scroll_macine_list, it->second); + if (m_device_items.find(it->first) != m_device_items.end()) { + auto item = m_device_items[it->first]; + if (item->state_selected == 1 && di->state_printable <= 2) + di->state_selected = item->state_selected; + item->Destroy(); + } + m_device_items[it->first] = di; + + //update state + if (task_manager) { + m_device_items[it->first]->state_local_task = task_manager->query_task_state(it->first); + } + + dev_temp.push_back(m_device_items[it->first]); + subscribe_list.push_back(it->first); + } + + dev->subscribe_device_list(subscribe_list); + + if (m_sort.rule == SortItem::SortRule::SR_None) { + this->device_printable_big = false; + m_sort.set_role(SortItem::SR_DEV_STATE, device_printable_big); + } + std::sort(dev_temp.begin(), dev_temp.end(), m_sort.get_call_back()); + + for (auto i = 0; i < dev_temp.size(); ++i) { + sizer_machine_list->Add(dev_temp[i], 0, wxALL | wxEXPAND, 0); + } + + // maintenance dev_items + auto it = m_device_items.begin(); + while (it != m_device_items.end()) { + if (user_machine.find(it->first) != user_machine.end()) { + ++it; + } + else { + it->second->Destroy(); + it = m_device_items.erase(it); + } + } + m_tip_text->Show(m_device_items.empty()); + m_button_add->Show(m_device_items.empty()); + sizer_machine_list->Layout(); + Layout(); + Fit(); +} + +BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) +{ + BBL::PrintParams params; + + //get all setting + bool bed_leveling = app_config->get("print", "bed_leveling") == "1" ? true : false; + bool flow_cali = app_config->get("print", "flow_cali") == "1" ? true : false; + bool timelapse = app_config->get("print", "timelapse") == "1" ? true : false; + auto use_ams = false; + + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + + + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_param_name == "use_ams" && rs->m_radiobox->GetValue()) { + use_ams = true; + } + + if (rs->m_param_name == "use_extra" && rs->m_radiobox->GetValue()) { + use_ams = false; + } + + node = node->GetNext(); + } + + //use ams + + + PrintPrepareData job_data; + m_plater->get_print_job_data(&job_data); + + if (&job_data) { + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); + } + + int curr_plate_idx; + 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; + + params.dev_ip = obj->dev_ip; + params.dev_id = obj->dev_id; + params.dev_name = obj->dev_name; + params.ftp_folder = obj->get_ftp_folder(); + params.connection_type = obj->connection_type(); + params.print_type = "from_normal"; + 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 = bed_leveling; + params.task_flow_cali = flow_cali; + params.task_vibration_cali = false; + params.task_layer_inspect = true; + params.task_record_timelapse = timelapse; + + if (use_ams) { + std::string ams_array; + std::string mapping_info; + get_ams_mapping_result(ams_array, mapping_info); + params.ams_mapping = ams_array; + params.ams_mapping_info = mapping_info; + } + else { + params.ams_mapping = ""; + params.ams_mapping_info = ""; + } + + params.connection_type = obj->connection_type(); + params.task_use_ams = use_ams; + + PartPlate* curr_plate = m_plater->get_partplate_list().get_curr_plate(); + if (curr_plate) { + params.task_bed_type = bed_type_to_gcode_string( curr_plate->get_bed_type(true)); + } + + wxString filename; + if (m_current_project_name.IsEmpty()) { + filename = m_plater->get_export_gcode_filename("", true, m_print_plate_idx == PLATE_ALL_IDX ? true : false); + } + else { + filename = m_current_project_name; + } + + if (m_print_plate_idx == PLATE_ALL_IDX && filename.empty()) { + filename = _L("Untitled"); + } + + if (filename.empty()) { + filename = m_plater->get_export_gcode_filename("", true); + if (filename.empty()) filename = _L("Untitled"); + } + + if (params.preset_name.empty()) { params.preset_name = wxString::Format("%s_plate_%d", filename, m_print_plate_idx).ToStdString(); } + if (params.project_name.empty()) { params.project_name = filename.ToUTF8(); } + + + + // check access code and ip address + if (obj->connection_type() == "lan") { + /*params.dev_id = m_dev_id; + params.project_name = "verify_job"; + params.filename = job_data._temp_path.string(); + params.connection_type = this->connection_type; + + result = m_agent->start_send_gcode_to_sdcard(params, nullptr, nullptr, nullptr); + if (result != 0) { + BOOST_LOG_TRIVIAL(error) << "access code is invalid"; + m_enter_ip_address_fun_fail(); + m_job_finished = true; + return; + } + + params.project_name = ""; + params.filename = "";*/ + } + else { + if (params.dev_ip.empty()) + params.comments = "no_ip"; + else if (obj->is_support_cloud_print_only) + params.comments = "low_version"; + else if (!obj->has_sdcard()) + params.comments = "no_sdcard"; + else if (params.password.empty()) + params.comments = "no_password"; + } + + return params; +} + +bool SendMultiMachinePage::get_ams_mapping_result(std::string& mapping_array_str, std::string& ams_mapping_info) +{ + if (m_ams_mapping_result.empty()) + return false; + + bool valid_mapping_result = true; + int invalid_count = 0; + for (int i = 0; i < m_ams_mapping_result.size(); i++) { + if (m_ams_mapping_result[i].tray_id == -1) { + valid_mapping_result = false; + invalid_count++; + } + } + + if (invalid_count == m_ams_mapping_result.size()) { + return false; + } + else { + json j = json::array(); + json mapping_info_json = json::array(); + + for (int i = 0; i < wxGetApp().preset_bundle->filament_presets.size(); i++) { + int tray_id = -1; + json mapping_item; + mapping_item["ams"] = tray_id; + mapping_item["targetColor"] = ""; + mapping_item["filamentId"] = ""; + mapping_item["filamentType"] = ""; + + for (int k = 0; k < m_ams_mapping_result.size(); k++) { + if (m_ams_mapping_result[k].id == i) { + tray_id = m_ams_mapping_result[k].tray_id; + mapping_item["ams"] = tray_id; + mapping_item["filamentType"] = m_filaments[k].type; + auto it = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[i]); + if (it != nullptr) { + mapping_item["filamentId"] = it->filament_id; + } + //convert #RRGGBB to RRGGBBAA + mapping_item["sourceColor"] = m_filaments[k].color; + mapping_item["targetColor"] = m_ams_mapping_result[k].color; + } + } + j.push_back(tray_id); + mapping_info_json.push_back(mapping_item); + } + mapping_array_str = j.dump(); + ams_mapping_info = mapping_info_json.dump(); + return valid_mapping_result; + } + return true; +} + +void SendMultiMachinePage::on_send(wxCommandEvent& event) +{ + event.Skip(); + BOOST_LOG_TRIVIAL(info) << "SendMultiMachinePage: on_send"; + + int result = m_plater->send_gcode(m_print_plate_idx, [this](int export_stage, int current, int total, bool& cancel) { + if (m_is_canceled) return; + bool cancelled = false; + wxString msg = _L("Preparing print job"); + //m_status_bar->update_status(msg, cancelled, 10, true); + //m_export_3mf_cancel = cancel = cancelled; + }); + + if (m_is_canceled || m_export_3mf_cancel) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_export_3mf_cancel or m_is_canceled"; + //m_status_bar->set_status_text(task_canceled_text); + return; + } + + if (result < 0) { + wxString msg = _L("Abnormal print file data. Please slice again"); + //m_status_bar->set_status_text(msg); + return; + } + + // export config 3mf if needed + result = m_plater->export_config_3mf(m_print_plate_idx); + if (result < 0) { + BOOST_LOG_TRIVIAL(trace) << "export_config_3mf failed, result = " << result; + return; + } + + if (m_is_canceled || m_export_3mf_cancel) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_export_3mf_cancel or m_is_canceled"; + //m_status_bar->set_status_text(task_canceled_text); + return; + } + + + std::vector print_params; + + for (auto it = m_device_items.begin(); it != m_device_items.end(); ++it) { + auto obj = it->second->get_obj(); + + if (obj && obj->is_online() && !obj->can_abort() && !obj->is_in_upgrading() && it->second->get_state_selected() == 1 && it->second->state_printable <= 2) { + + if (!it->second->is_blocking_printing(obj)) { + BBL::PrintParams params = request_params(obj); + print_params.push_back(params); + } + } + } + + + if (print_params.size() <= 0) { + MessageDialog msg_wingow(nullptr, _L("There is no device available to send printing."), "", wxICON_WARNING | wxOK); + msg_wingow.ShowModal(); + return; + } + + if (wxGetApp().getTaskManager()) { + TaskSettings settings; + + try + { + if (app_config->get("sending_interval").empty()) { + app_config->set("sending_interval", "1"); + app_config->save(); + } + + if ( app_config->get("max_send").empty()) { + app_config->set("max_send", "10"); + app_config->save(); + } + + + settings.sending_interval = std::stoi(app_config->get("sending_interval")) * 60; + settings.max_sending_at_same_time = std::stoi(app_config->get("max_send")); + + if (settings.max_sending_at_same_time <= 0) { + MessageDialog msg_wingow(nullptr, _L("The number of printers in use simultaneously cannot be equal to 0."), "", wxICON_WARNING | wxOK); + msg_wingow.ShowModal(); + return; + } + + + + wxGetApp().getTaskManager()->start_print(print_params, &settings); + } + catch (...) + {} + } + //jump to info + EndModal(wxCLOSE); + wxGetApp().mainframe->jump_to_multipage(); +} + +bool SendMultiMachinePage::Show(bool show) +{ + if (show) { + refresh_user_device(); + set_default(); + + m_refresh_timer->Stop(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(4000); + wxPostEvent(this, wxTimerEvent()); + } + else { + m_refresh_timer->Stop(); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxDialog::Show(show); +} + +wxBoxSizer* SendMultiMachinePage::create_item_title(wxString title, wxWindow* parent, wxString tooltip) +{ + wxBoxSizer* m_sizer_title = new wxBoxSizer(wxHORIZONTAL); + + auto m_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + m_title->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_title->SetFont(::Label::Head_13); + m_title->Wrap(-1); + m_title->SetToolTip(tooltip); + + auto m_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); + + m_sizer_title->Add(m_title, 0, wxALIGN_CENTER | wxALL, 3); + m_sizer_title->Add(0, 0, 0, wxLEFT, 9); + wxBoxSizer* sizer_line = new wxBoxSizer(wxVERTICAL); + sizer_line->Add(m_line, 0, wxEXPAND, 0); + m_sizer_title->Add(sizer_line, 1, wxALIGN_CENTER, 0); + + return m_sizer_title; +} + +wxBoxSizer* SendMultiMachinePage::create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param) +{ + wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + auto checkbox = new ::CheckBox(parent); + + checkbox->SetValue((app_config->get("print", param) == "1") ? true : false); + + m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); + m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); + + auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetFont(::Label::Body_13); + + auto size = checkbox_title->GetTextExtent(title); + checkbox_title->SetMinSize(wxSize(size.x + FromDIP(5), -1)); + checkbox_title->Wrap(-1); + m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + + // save + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent& e) { + app_config->set_str("print", param, checkbox->GetValue() ? std::string("1") : std::string("0")); + app_config->save(); + e.Skip(); + }); + + checkbox->SetToolTip(tooltip); + m_checkbox_map.emplace(param, checkbox); + return m_sizer_checkbox; +} + +wxBoxSizer* SendMultiMachinePage::create_item_input(wxString str_before, wxString str_after, wxWindow* parent, wxString tooltip, std::string param) +{ + wxBoxSizer* sizer_input = new wxBoxSizer(wxHORIZONTAL); + auto input_title = new wxStaticText(parent, wxID_ANY, str_before); + input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + input_title->SetFont(::Label::Body_13); + input_title->SetToolTip(tooltip); + input_title->Wrap(-1); + + auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + input->SetBackgroundColor(input_bg); + input->GetTextCtrl()->SetValue(app_config->get(param)); + wxTextValidator validator(wxFILTER_DIGITS); + input->GetTextCtrl()->SetValidator(validator); + + auto second_title = new wxStaticText(parent, wxID_ANY, str_after, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + second_title->SetFont(::Label::Body_13); + second_title->SetToolTip(tooltip); + second_title->Wrap(-1); + + sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); + sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); + sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + + input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, param, input](wxCommandEvent& e) { + auto value = input->GetTextCtrl()->GetValue(); + app_config->set(param, std::string(value.mb_str())); + app_config->save(); + e.Skip(); + }); + + input->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this, param, input](wxFocusEvent& e) { + auto value = input->GetTextCtrl()->GetValue(); + app_config->set(param, std::string(value.mb_str())); + app_config->save(); + e.Skip(); + }); + + m_input_map.emplace(param, input); + return sizer_input; +} + +wxBoxSizer* SendMultiMachinePage::create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int groupid, std::string param) +{ + wxBoxSizer* radiobox_sizer = new wxBoxSizer(wxHORIZONTAL); + + RadioBox* radiobox = new RadioBox(parent); + radiobox->SetBackgroundColour(wxColour(248, 248, 248)); + radiobox->Bind(wxEVT_LEFT_DOWN, &SendMultiMachinePage::OnSelectRadio, this); + + AmsRadioSelector* rs = new AmsRadioSelector; + rs->m_groupid = groupid; + rs->m_param_name = param; + rs->m_radiobox = radiobox; + rs->m_selected = false; + m_radio_group.Append(rs); + + wxStaticText* text = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize); + radiobox_sizer->Add(radiobox, 0, wxLEFT, FromDIP(23)); + radiobox_sizer->Add(text, 0, wxLEFT, FromDIP(10)); + radiobox->SetToolTip(tooltip); + text->SetToolTip(tooltip); + return radiobox_sizer; +} + +void SendMultiMachinePage::OnSelectRadio(wxMouseEvent& event) +{ + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_radiobox->GetId() == event.GetId()) groupid = rs->m_groupid; + node = node->GetNext(); + } + + node = m_radio_group.GetFirst(); + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_groupid == groupid && rs->m_radiobox->GetId() == event.GetId()) rs->m_radiobox->SetValue(true); + if (rs->m_groupid == groupid && rs->m_radiobox->GetId() != event.GetId()) rs->m_radiobox->SetValue(false); + node = node->GetNext(); + } +} + +void SendMultiMachinePage::on_select_radio(std::string param) +{ + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_param_name == param) groupid = rs->m_groupid; + node = node->GetNext(); + } + + node = m_radio_group.GetFirst(); + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_groupid == groupid && rs->m_param_name == param) rs->m_radiobox->SetValue(true); + if (rs->m_groupid == groupid && rs->m_param_name != param) rs->m_radiobox->SetValue(false); + node = node->GetNext(); + } +} + +bool SendMultiMachinePage::get_value_radio(std::string param) +{ + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_groupid == groupid && rs->m_param_name == param) + return rs->m_radiobox->GetValue(); + node = node->GetNext(); + } + return false; +} + +void SendMultiMachinePage::on_set_finish_mapping(wxCommandEvent& evt) +{ + auto selection_data = evt.GetString(); + auto selection_data_arr = wxSplit(selection_data.ToStdString(), '|'); + + BOOST_LOG_TRIVIAL(info) << "The ams mapping selection result: data is " << selection_data; + + if (selection_data_arr.size() == 6) { + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + int old_filament_id = (int)wxAtoi(selection_data_arr[5]); + + int ctype = 0; + std::vector material_cols; + std::vector tray_cols; + for (auto mapping_item : m_mapping_popup->m_mapping_item_list) { + if (mapping_item->m_tray_data.id == evt.GetInt()) { + ctype = mapping_item->m_tray_data.ctype; + material_cols = mapping_item->m_tray_data.material_cols; + for (auto col : mapping_item->m_tray_data.material_cols) { + wxString color = wxString::Format("#%02X%02X%02X%02X", col.Red(), col.Green(), col.Blue(), col.Alpha()); + tray_cols.push_back(color.ToStdString()); + } + break; + } + } + + for (auto i = 0; i < m_ams_mapping_result.size(); i++) { + if (m_ams_mapping_result[i].id == wxAtoi(selection_data_arr[5])) { + m_ams_mapping_result[i].tray_id = evt.GetInt(); + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + wxString color = wxString::Format("#%02X%02X%02X%02X", ams_colour.Red(), ams_colour.Green(), ams_colour.Blue(), ams_colour.Alpha()); + m_ams_mapping_result[i].color = color.ToStdString(); + m_ams_mapping_result[i].ctype = ctype; + m_ams_mapping_result[i].colors = tray_cols; + } + BOOST_LOG_TRIVIAL(trace) << "The ams mapping result: id is " << m_ams_mapping_result[i].id << "tray_id is " << m_ams_mapping_result[i].tray_id; + } + + MaterialHash::iterator iter = m_material_list.begin(); + while (iter != m_material_list.end()) { + Material* item = iter->second; + MaterialItem* m = item->item; + if (item->id == m_current_filament_id) { + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + m->set_ams_info(ams_colour, selection_data_arr[4], ctype, material_cols); + } + iter++; + } + + } +} + +wxPanel* SendMultiMachinePage::create_page() +{ + auto main_page = new wxPanel(m_main_scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize); + main_page->SetBackgroundColour(*wxWHITE); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + + // add title + m_title_panel = new wxPanel(main_page, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_title_panel->SetBackgroundColour(*wxWHITE); + m_title_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_rename_switch_panel = new wxSimplebook(m_title_panel); + m_rename_switch_panel->SetMinSize(wxSize(FromDIP(240), FromDIP(25))); + m_rename_switch_panel->SetMaxSize(wxSize(FromDIP(240), FromDIP(25))); + + m_rename_normal_panel = new wxPanel(m_rename_switch_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_rename_normal_panel->SetBackgroundColour(*wxWHITE); + rename_sizer_v = new wxBoxSizer(wxVERTICAL); + rename_sizer_h = new wxBoxSizer(wxHORIZONTAL); + + m_task_name = new wxStaticText(m_rename_normal_panel, wxID_ANY, wxT("MyLabel"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END | wxALIGN_CENTRE); + m_task_name->SetFont(::Label::Body_13); + m_task_name->SetMinSize(wxSize(FromDIP(200), -1)); + m_task_name->SetMaxSize(wxSize(FromDIP(200), -1)); + m_rename_button = new ScalableButton(m_rename_normal_panel, wxID_ANY, "ams_editable"); + m_rename_button->SetBackgroundColour(*wxWHITE); + rename_sizer_h->Add(m_task_name, 0, wxALIGN_CENTER, 0); + rename_sizer_h->Add(m_rename_button, 0, wxALIGN_CENTER, 0); + rename_sizer_v->Add(rename_sizer_h, 1, wxALIGN_CENTER, 0); + m_rename_normal_panel->SetSizer(rename_sizer_v); + m_rename_normal_panel->Layout(); + rename_sizer_v->Fit(m_rename_normal_panel); + + //rename edit + m_rename_edit_panel = new wxPanel(m_rename_switch_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_rename_edit_panel->SetBackgroundColour(*wxWHITE); + auto rename_edit_sizer_v = new wxBoxSizer(wxVERTICAL); + + m_rename_input = new ::TextInput(m_rename_edit_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); + m_rename_input->GetTextCtrl()->SetFont(::Label::Body_13); + m_rename_input->SetSize(wxSize(FromDIP(220), FromDIP(24))); + m_rename_input->SetMinSize(wxSize(FromDIP(220), FromDIP(24))); + m_rename_input->SetMaxSize(wxSize(FromDIP(220), FromDIP(24))); + m_rename_input->Bind(wxEVT_TEXT_ENTER, [this](auto& e) {on_rename_enter(); }); + m_rename_input->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { + if (!m_rename_input->HasFocus() && !m_task_name->HasFocus()) + on_rename_enter(); + else + e.Skip(); }); + rename_edit_sizer_v->Add(m_rename_input, 1, wxALIGN_CENTER, 0); + + m_rename_edit_panel->SetSizer(rename_edit_sizer_v); + m_rename_edit_panel->Layout(); + rename_edit_sizer_v->Fit(m_rename_edit_panel); + + m_rename_button->Bind(wxEVT_BUTTON, &SendMultiMachinePage::on_rename_click, this); + m_rename_switch_panel->AddPage(m_rename_normal_panel, wxEmptyString, true); + m_rename_switch_panel->AddPage(m_rename_edit_panel, wxEmptyString, false); + Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) { + if (e.GetKeyCode() == WXK_ESCAPE) { + if (m_rename_switch_panel->GetSelection() == 0) { + e.Skip(); + } + else { + m_rename_switch_panel->SetSelection(0); + m_task_name->SetLabel(m_current_project_name); + m_rename_normal_panel->Layout(); + } + } + else { + e.Skip(); + } + }); + + m_text_sizer = new wxBoxSizer(wxVERTICAL); + m_text_sizer->Add(m_rename_switch_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + m_panel_image = new wxPanel(m_title_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_image_sizer = new wxBoxSizer(wxHORIZONTAL); + m_thumbnail_panel = new ThumbnailPanel(m_panel_image); + m_thumbnail_panel->SetSize(wxSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); + m_thumbnail_panel->SetMinSize(wxSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); + m_thumbnail_panel->SetMaxSize(wxSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); + m_thumbnail_panel->SetBackgroundColour(*wxRED); + m_image_sizer->Add(m_thumbnail_panel, 0, wxALIGN_CENTER, 0); + m_panel_image->SetSizer(m_image_sizer); + m_panel_image->Layout(); + m_title_sizer->Add(m_panel_image, 0, wxLEFT, 0); + + wxBoxSizer* m_sizer_basic = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* m_sizer_basic_time = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* m_sizer_basic_weight = new wxBoxSizer(wxHORIZONTAL); + + print_time = new ScalableBitmap(m_title_panel, "print-time", 18); + timeimg = new wxStaticBitmap(m_title_panel, wxID_ANY, print_time->bmp(), wxDefaultPosition, wxSize(FromDIP(18), FromDIP(18)), 0); + m_sizer_basic_time->Add(timeimg, 1, wxEXPAND | wxALL, FromDIP(5)); + m_stext_time = new wxStaticText(m_title_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + m_sizer_basic_time->Add(m_stext_time, 0, wxALL, FromDIP(5)); + m_sizer_basic->Add(m_sizer_basic_time, 0, wxALIGN_CENTER, 0); + m_sizer_basic->Add(0, 0, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30)); + + print_weight = new ScalableBitmap(m_title_panel, "print-weight", 18); + weightimg = new wxStaticBitmap(m_title_panel, wxID_ANY, print_weight->bmp(), wxDefaultPosition, wxSize(FromDIP(18), FromDIP(18)), 0); + m_sizer_basic_weight->Add(weightimg, 1, wxEXPAND | wxALL, FromDIP(5)); + m_stext_weight = new wxStaticText(m_title_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + m_sizer_basic_weight->Add(m_stext_weight, 0, wxALL, FromDIP(5)); + m_sizer_basic->Add(m_sizer_basic_weight, 0, wxALIGN_CENTER, 0); + + m_text_sizer->Add(m_sizer_basic, wxALIGN_CENTER, 0); + m_title_sizer->Add(m_text_sizer, 0, wxALIGN_CENTER_VERTICAL, 0); + m_title_panel->SetSizer(m_title_sizer); + m_title_panel->Layout(); + sizer->Add(m_title_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + // add filament + wxBoxSizer* title_filament = create_item_title(_L("Filament"), main_page, ""); + wxBoxSizer* radio_sizer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* use_external_sizer = create_item_radiobox(_L("Use External Spool"), main_page, "", 0, "use_external"); + wxBoxSizer* use_ams_sizer = create_item_radiobox(_L("Use AMS"), main_page, "", 0, "use_ams"); + radio_sizer->Add(use_external_sizer, 0, wxLeft, FromDIP(20)); + radio_sizer->Add(use_ams_sizer, 0, wxLeft, FromDIP(5)); + sizer->Add(title_filament, 0, wxEXPAND, 0); + sizer->Add(radio_sizer, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(5)); + on_select_radio("use_external"); + + // add ams item + m_ams_list_sizer = new wxGridSizer(0, 4, 0, FromDIP(5)); + //sync_ams_list(); + sizer->Add(m_ams_list_sizer, 0, wxLEFT, FromDIP(25)); + sizer->AddSpacer(FromDIP(10)); + + // select printer + wxBoxSizer* title_select_printer = create_item_title(_L("Select Printers"), main_page, ""); + + // add table head + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + m_table_head_panel = new wxPanel(main_page, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_select_checkbox = new CheckBox(m_table_head_panel, wxID_ANY); + m_table_head_sizer->AddSpacer(FromDIP(SEND_LEFT_PADDING_LEFT)); + m_table_head_sizer->Add(m_select_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_select_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_select_checkbox->GetValue()) { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + + if (it->second->state_printable <= 2) { + it->second->selected(); + } + } + } + else { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + it->second->unselected(); + } + } + Refresh(false); + e.Skip(); + }); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_NAME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_NAME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_name_big = !device_name_big; + this->m_sort.set_role(SortItem::SortRule::SR_DEV_NAME, device_name_big); + this->refresh_user_device(); + }); + + m_table_head_sizer->Add( 0, 0, 0, wxLEFT, FromDIP(10) ); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_device_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_device_status->SetBackgroundColor(head_bg); + m_device_status->SetFont(TABLE_HEAD_FONT); + m_device_status->SetCornerRadius(0); + m_device_status->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_device_status->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_device_status->SetCenter(false); + m_device_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_device_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_device_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_printable_big = !device_printable_big; + this->m_sort.set_role(SortItem::SortRule::SR_PRINTABLE, device_printable_big); + this->refresh_user_device(); + evt.Skip(); + }); + m_table_head_sizer->Add(m_device_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + /*m_task_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_task_status->SetBackgroundColor(head_bg); + m_task_status->SetFont(TABLE_HEAD_FONT); + m_task_status->SetCornerRadius(0); + m_task_status->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_status->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_status->SetCenter(false); + m_task_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_task_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_task_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_printable_big = !device_printable_big; + this->m_sort.set_role(SortItem::SortRule::SR_PRINTABLE, device_printable_big); + this->refresh_user_device(); + evt.Skip(); + });*/ + + //m_table_head_sizer->Add(m_task_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_ams = new Button(m_table_head_panel, _L("Ams Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_ams->SetBackgroundColor(head_bg); + m_ams->SetCornerRadius(0); + m_ams->SetFont(TABLE_HEAD_FONT); + m_ams->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_ams->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_ams->SetCenter(false); + m_ams->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_ams->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_ams->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_en_ams_big = !device_en_ams_big; + this->m_sort.set_role(SortItem::SortRule::SR_EN_AMS, device_en_ams_big); + this->refresh_user_device(); + evt.Skip(); + }); + m_table_head_sizer->Add(m_ams, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_refresh_button = new Button(m_table_head_panel, "", "mall_control_refresh", wxNO_BORDER, ICON_SIZE, false); + m_refresh_button->SetBackgroundColor(head_bg); + m_refresh_button->SetCornerRadius(0); + m_refresh_button->SetFont(TABLE_HEAD_FONT); + m_refresh_button->SetMinSize(wxSize(FromDIP(50), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_refresh_button->SetMaxSize(wxSize(FromDIP(50), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_refresh_button->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_refresh_button->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_refresh_button->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + this->refresh_user_device(); + evt.Skip(); + }); + m_table_head_sizer->Add(m_refresh_button, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(main_page, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("Please select the devices you would like to manage here (up to 6 devices)")); + m_tip_text->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_tip_text->SetFont(::Label::Head_20); + m_tip_text->Wrap(-1); + + auto m_btn_bg_enable = 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_button_add = new Button(main_page, _L("Add")); + m_button_add->SetBackgroundColor(m_btn_bg_enable); + m_button_add->SetBorderColor(m_btn_bg_enable); + m_button_add->SetTextColor(*wxWHITE); + m_button_add->SetFont(Label::Body_12); + m_button_add->SetCornerRadius(6); + m_button_add->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_add->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + m_button_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { + MultiMachinePickPage dlg; + dlg.ShowModal(); + refresh_user_device(); + evt.Skip(); + }); + + scroll_macine_list = new wxScrolledWindow(main_page, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(800), FromDIP(300)), wxHSCROLL | wxVSCROLL); + scroll_macine_list->SetBackgroundColour(*wxWHITE); + scroll_macine_list->SetScrollRate(5, 5); + scroll_macine_list->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(SEND_ITEM_MAX_HEIGHT))); + scroll_macine_list->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(SEND_ITEM_MAX_HEIGHT))); + + sizer_machine_list = new wxBoxSizer(wxVERTICAL); + scroll_macine_list->SetSizer(sizer_machine_list); + scroll_macine_list->Layout(); + + sizer->Add(title_select_printer, 0, wxEXPAND, 0); + sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(40)); + sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(100)); + sizer->Add(m_button_add, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(20)); + sizer->Add(scroll_macine_list, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(40)); + sizer->AddSpacer(FromDIP(10)); + + // add printing options + wxBoxSizer* title_print_option = create_item_title(_L("Printing Options"), main_page, ""); + wxBoxSizer* item_bed_level = create_item_checkbox(_L("Bed Leveling"), main_page, "", 50, "bed_leveling"); + wxBoxSizer* item_timelapse = create_item_checkbox(_L("Timelapse"), main_page, "", 50, "timelapse"); + wxBoxSizer* item_flow_dy_ca = create_item_checkbox(_L("Flow Dynamic Calibration"), main_page, "", 50, "flow_cali"); + sizer->Add(title_print_option, 0, wxEXPAND, 0); + wxBoxSizer* options_sizer_v = new wxBoxSizer(wxHORIZONTAL); + options_sizer_v->Add(item_bed_level, 0, wxLEFT, 0); + options_sizer_v->Add(item_timelapse, 0, wxLEFT, FromDIP(100)); + sizer->Add(options_sizer_v, 0, wxLEFT, FromDIP(20)); + sizer->Add(item_flow_dy_ca, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(10)); + + // add send option + wxBoxSizer* title_send_option = create_item_title(_L("Send Options"), main_page, ""); + wxBoxSizer* max_printer_send = create_item_input(_L("Send to"), _L("printers at the same time.(It depends on how many devices can undergo heating at the same time.)"), main_page, "", "max_send"); + wxBoxSizer* delay_time = create_item_input(_L("Wait"), _L("minute each batch.(It depends on how long it takes to complete the heating.)"), main_page, "", "sending_interval"); + sizer->Add(title_send_option, 0, wxEXPAND, 0); + sizer->Add(max_printer_send, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(3)); + sizer->Add(delay_time, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(10)); + + // add send button + btn_bg_enable = 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_button_send = new Button(main_page, _L("Send")); + m_button_send->SetBackgroundColor(btn_bg_enable); + m_button_send->SetBorderColor(btn_bg_enable); + m_button_send->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); + m_button_send->SetSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetMinSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetMinSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetCornerRadius(FromDIP(5)); + m_button_send->Bind(wxEVT_BUTTON, &SendMultiMachinePage::on_send, this); + //m_button_send->Disable(); + //m_button_send->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); + //m_button_send->SetBorderColor(wxColour(0x90, 0x90, 0x90)); + sizer->Add(m_button_send, 0, wxALIGN_CENTER, 0); + + main_page->SetSizer(sizer); + main_page->Layout(); + main_page->Fit(); + return main_page; +} + +void SendMultiMachinePage::sync_ams_list() +{ + // for black list + std::vector materials; + std::vector brands; + std::vector display_materials; + std::vector m_filaments_id; + auto preset_bundle = wxGetApp().preset_bundle; + + for (auto filament_name : preset_bundle->filament_presets) { + for (int f_index = 0; f_index < preset_bundle->filaments.size(); f_index++) { + PresetCollection* filament_presets = &wxGetApp().preset_bundle->filaments; + Preset* preset = &filament_presets->preset(f_index); + + if (preset && filament_name.compare(preset->name) == 0) { + std::string display_filament_type; + std::string filament_type = preset->config.get_filament_type(display_filament_type); + std::string m_filament_id = preset->filament_id; + display_materials.push_back(display_filament_type); + materials.push_back(filament_type); + m_filaments_id.push_back(m_filament_id); + + std::string m_vendor_name = ""; + auto vendor = dynamic_cast(preset->config.option("filament_vendor")); + if (vendor && (vendor->values.size() > 0)) { + std::string vendor_name = vendor->values[0]; + m_vendor_name = vendor_name; + } + brands.push_back(m_vendor_name); + } + } + } + + auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); + BitmapCache bmcache; + MaterialHash::iterator iter = m_material_list.begin(); + while (iter != m_material_list.end()) { + int id = iter->first; + Material* item = iter->second; + item->item->Destroy(); + delete item; + iter++; + } + + m_ams_list_sizer->Clear(); + m_material_list.clear(); + m_filaments.clear(); + m_ams_mapping_result.clear(); + + for (auto i = 0; i < extruders.size(); i++) { + auto extruder = extruders[i] - 1; + auto colour = wxGetApp().preset_bundle->project_config.opt_string("filament_colour", (unsigned int)extruder); + unsigned char rgb[4]; + bmcache.parse_color4(colour, rgb); + + auto colour_rgb = wxColour((int)rgb[0], (int)rgb[1], (int)rgb[2], (int)rgb[3]); + if (extruder >= materials.size() || extruder < 0 || extruder >= display_materials.size()) continue; + + MaterialItem* item = new MaterialItem(m_main_page, colour_rgb, _L(display_materials[extruder])); + item->set_ams_info(wxColour("#CECECE"), "A1", 0, std::vector()); + m_ams_list_sizer->Add(item, 0, wxALL, FromDIP(4)); + + item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent& e) {}); + item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { + MaterialHash::iterator iter = m_material_list.begin(); + while (iter != m_material_list.end()) { + int id = iter->first; + Material* item = iter->second; + MaterialItem* m = item->item; + m->on_normal(); + iter++; + } + + m_current_filament_id = extruder; + item->on_selected(); + + auto mouse_pos = ClientToScreen(e.GetPosition()); + wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); + + // update ams data + if (get_value_radio("use_ams")) { + if (m_mapping_popup->IsShown()) return; + wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); + pos.y += item->GetRect().height; + m_mapping_popup->Move(pos); + m_mapping_popup->set_parent_item(item); + m_mapping_popup->set_current_filament_id(extruder); + m_mapping_popup->set_tag_texture(materials[extruder]); + m_mapping_popup->update_ams_data_multi_machines(); + m_mapping_popup->Popup(); + } + }); + + Material* material_item = new Material(); + material_item->id = extruder; + material_item->item = item; + m_material_list[i] = material_item; + + // build for ams mapping + if (extruder < materials.size() && extruder >= 0) { + FilamentInfo info; + info.id = extruder; + info.tray_id = 0; + info.type = materials[extruder]; + info.brand = brands[extruder]; + info.filament_id = m_filaments_id[extruder]; + //info.color = wxString::Format("#%02X%02X%02X%02X", colour_rgb.Red(), colour_rgb.Green(), colour_rgb.Blue(), colour_rgb.Alpha()).ToStdString(); + info.color = "#CECECEFF"; + m_filaments.push_back(info); + m_ams_mapping_result.push_back(info); + } + } + + if (extruders.size() <= 8) { + m_ams_list_sizer->SetCols(extruders.size()); + } + else { + m_ams_list_sizer->SetCols(8); + } +} + +void SendMultiMachinePage::set_default_normal(const ThumbnailData& data) +{ + if (data.is_valid()) { + wxImage image(data.width, data.height); + image.InitAlpha(); + for (unsigned int r = 0; r < data.height; ++r) { + unsigned int rr = (data.height - 1 - r) * data.width; + for (unsigned int c = 0; c < data.width; ++c) { + unsigned char* px = (unsigned char*)data.pixels.data() + 4 * (rr + c); + image.SetRGB((int)c, (int)r, px[0], px[1], px[2]); + image.SetAlpha((int)c, (int)r, px[3]); + } + } + image = image.Rescale(THUMBNAIL_SIZE, THUMBNAIL_SIZE); + m_thumbnail_panel->set_thumbnail(image); + } + + m_main_scroll->Layout(); + m_main_scroll->Fit(); + + // basic info + auto aprint_stats = m_plater->get_partplate_list().get_current_fff_print().print_statistics(); + wxString time; + PartPlate* plate = m_plater->get_partplate_list().get_curr_plate(); + if (plate) { + if (plate->get_slice_result()) { time = wxString::Format("%s", short_time(get_time_dhms(plate->get_slice_result()->print_statistics.modes[0].time))); } + } + + char weight[64]; + if (wxGetApp().app_config->get("use_inches") == "1") { + ::sprintf(weight, " %.2f oz", aprint_stats.total_weight * 0.035274); + } + else { + ::sprintf(weight, " %.2f g", aprint_stats.total_weight); + } + + m_stext_time->SetLabel(time); + m_stext_weight->SetLabel(weight); +} + +void SendMultiMachinePage::set_default() +{ + wxString filename = m_plater->get_export_gcode_filename("", true, m_print_plate_idx == PLATE_ALL_IDX ? true : false); + if (m_print_plate_idx == PLATE_ALL_IDX && filename.empty()) { + filename = _L("Untitled"); + } + + if (filename.empty()) { + filename = m_plater->get_export_gcode_filename("", true); + if (filename.empty()) filename = _L("Untitled"); + } + + fs::path filename_path(filename.c_str()); + std::string file_name = filename_path.filename().string(); + if (from_u8(file_name).find(_L("Untitled")) != wxString::npos) { + PartPlate* part_plate = m_plater->get_partplate_list().get_plate(m_print_plate_idx); + if (part_plate) { + if (std::vector objects = part_plate->get_objects_on_this_plate(); objects.size() > 0) { + file_name = objects[0]->name; + for (int i = 1; i < objects.size(); i++) { + file_name += (" + " + objects[i]->name); + } + } + if (file_name.size() > 100) { + file_name = file_name.substr(0, 97) + "..."; + } + } + } + + m_current_project_name = wxString::FromUTF8(file_name); + //unsupported character filter + m_current_project_name = from_u8(filter_characters(m_current_project_name.ToUTF8().data(), "<>[]:/\\|?*\"")); + + m_task_name->SetLabel(m_current_project_name); + + sync_ams_list(); + set_default_normal(m_plater->get_partplate_list().get_curr_plate()->thumbnail_data); +} + +void SendMultiMachinePage::on_rename_enter() +{ + if (m_is_rename_mode == false) { + return; + } + else { + m_is_rename_mode = false; + } + + auto new_file_name = m_rename_input->GetTextCtrl()->GetValue(); + wxString temp; + int num = 0; + for (auto t : new_file_name) { + if (t == wxString::FromUTF8("\x20")) { + num++; + if (num == 1) temp += t; + } + else { + num = 0; + temp += t; + } + } + new_file_name = temp; + auto m_valid_type = Valid; + wxString info_line; + + const char* unusable_symbols = "<>[]:/\\|?*\""; + + const std::string unusable_suffix = PresetCollection::get_suffix_modified(); //"(modified)"; + for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { + if (new_file_name.find_first_of(unusable_symbols[i]) != std::string::npos) { + info_line = _L("Name is invalid;") + "\n" + _L("illegal characters:") + " " + unusable_symbols; + m_valid_type = NoValid; + break; + } + } + + if (m_valid_type == Valid && new_file_name.find(unusable_suffix) != std::string::npos) { + info_line = _L("Name is invalid;") + "\n" + _L("illegal suffix:") + "\n\t" + from_u8(PresetCollection::get_suffix_modified()); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.empty()) { + info_line = _L("The name is not allowed to be empty."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.find_first_of(' ') == 0) { + info_line = _L("The name is not allowed to start with space character."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.find_last_of(' ') == new_file_name.length() - 1) { + info_line = _L("The name is not allowed to end with space character."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.size() >= 100) { + info_line = _L("The name length exceeds the limit."); + m_valid_type = NoValid; + } + + if (m_valid_type != Valid) { + MessageDialog msg_wingow(nullptr, info_line, "", wxICON_WARNING | wxOK); + if (msg_wingow.ShowModal() == wxID_OK) { + m_rename_switch_panel->SetSelection(0); + m_task_name->SetLabel(m_current_project_name); + m_rename_normal_panel->Layout(); + return; + } + } + + m_current_project_name = new_file_name; + m_rename_switch_panel->SetSelection(0); + m_task_name->SetLabelText(m_current_project_name); + m_rename_normal_panel->Layout(); +} + +void SendMultiMachinePage::check_fcous_state(wxWindow* window) +{ + check_focus(window); + auto children = window->GetChildren(); + for (auto child : children) { + check_fcous_state(child); + } +} + +void SendMultiMachinePage::check_focus(wxWindow* window) +{ + if (window == m_rename_input || window == m_rename_input->GetTextCtrl()) { + on_rename_enter(); + } +} + +void SendMultiMachinePage::on_rename_click(wxCommandEvent& event) +{ + m_is_rename_mode = true; + m_rename_input->GetTextCtrl()->SetValue(m_current_project_name); + m_rename_switch_panel->SetSelection(1); + m_rename_input->GetTextCtrl()->SetFocus(); + m_rename_input->GetTextCtrl()->SetInsertionPointEnd(); +} + +void SendMultiMachinePage::init_timer() +{ + m_refresh_timer = new wxTimer(); +} + +void SendMultiMachinePage::on_timer(wxTimerEvent& event) +{ + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + it->second->sync_state(); + it->second->Refresh(); + } +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp new file mode 100644 index 0000000000..58014f065c --- /dev/null +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -0,0 +1,208 @@ +#ifndef slic3r_SendMultiMachinePage_hpp_ +#define slic3r_SendMultiMachinePage_hpp_ + +#include "GUI_Utils.hpp" +#include "MultiMachine.hpp" +#include "DeviceManager.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/CheckBox.hpp" +#include "Widgets/ComboBox.hpp" +#include "Widgets/ScrolledWindow.hpp" +#include "Widgets/PopupWindow.hpp" +#include "Widgets/TextInput.hpp" +#include "AmsMappingPopup.hpp" +#include "SelectMachine.hpp" + +namespace Slic3r { +namespace GUI { +#define SEND_LEFT_PADDING_LEFT 15 +#define SEND_LEFT_PRINTABLE 40 +#define SEND_LEFT_DEV_NAME 250 +#define SEND_LEFT_DEV_STATUS 250 +#define SEND_LEFT_TAKS_STATUS 180 + +#define DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) +#define DESIGN_GRAY900_COLOR wxColour(38, 46, 48) +#define DESIGN_GRAY800_COLOR wxColour(50, 58, 61) +#define DESIGN_GRAY600_COLOR wxColour(144, 144, 144) +#define DESIGN_GRAY400_COLOR wxColour(166, 169, 170) +#define DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) +#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) +#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) +#define DESIGN_INPUT_SIZE wxSize(FromDIP(50), -1) + +#define MATERIAL_ITEM_SIZE wxSize(FromDIP(64), FromDIP(34)) +#define MATERIAL_ITEM_REAL_SIZE wxSize(FromDIP(62), FromDIP(32)) +#define MAPPING_ITEM_REAL_SIZE wxSize(FromDIP(48), FromDIP(45)) + +#define THUMBNAIL_SIZE FromDIP(128) + +class RadioBox; +class AmsRadioSelector +{ +public: + wxString m_param_name; + int m_groupid; + RadioBox* m_radiobox; + bool m_selected = false; +}; + +WX_DECLARE_LIST(AmsRadioSelector, AmsRadioSelectorList); + +class SendDeviceItem : public DeviceItem +{ + +public: + SendDeviceItem(wxWindow* parent, MachineObject* obj); + ~SendDeviceItem() {}; + + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnSelectedDevice(wxCommandEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + +public: + bool m_hover{false}; + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; +}; + +class Plater; +class SendMultiMachinePage : public DPIDialog +{ +private: + /* dev_id -> device_item */ + std::map m_device_items; + + wxTimer* m_refresh_timer = nullptr; + + // sort + SortItem m_sort; + bool device_name_big{ true }; + bool device_printable_big{ true }; + bool device_en_ams_big{ true }; + + Button* m_button_send{ nullptr }; + wxScrolledWindow* scroll_macine_list{ nullptr }; + wxBoxSizer* sizer_machine_list{ nullptr }; + Plater* m_plater{ nullptr }; + + int m_print_plate_idx; + bool m_is_canceled{ false }; + bool m_export_3mf_cancel{ false }; + AppConfig* app_config; + + wxPanel* m_main_page{ nullptr }; + wxScrolledWindow* m_main_scroll{ nullptr }; + wxBoxSizer* m_sizer_body{ nullptr }; + wxGridSizer* m_ams_list_sizer{ nullptr }; + AmsMapingPopup* m_mapping_popup{ nullptr }; + + AmsRadioSelectorList m_radio_group; + MaterialHash m_material_list; + std::map m_checkbox_map; + std::map m_input_map; + std::vector m_filaments; + std::vector m_ams_mapping_result; + int m_current_filament_id{ 0 }; + + StateColor btn_bg_enable; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + CheckBox* m_select_checkbox{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_device_status{ nullptr }; + //Button* m_task_status{ nullptr }; + Button* m_ams{ nullptr }; + Button* m_refresh_button{ nullptr }; + + // rename + wxSimplebook* m_rename_switch_panel{ nullptr }; + wxPanel* m_rename_normal_panel{ nullptr }; + wxPanel* m_rename_edit_panel{ nullptr }; + TextInput* m_rename_input{ nullptr }; + ScalableButton* m_rename_button{ nullptr }; + wxBoxSizer* rename_sizer_v{ nullptr }; + wxBoxSizer* rename_sizer_h{ nullptr }; + wxStaticText* m_task_name{ nullptr }; + wxString m_current_project_name; + bool m_is_rename_mode{ false }; + + // title and thumbnail + wxPanel* m_title_panel{ nullptr }; + wxBoxSizer* m_title_sizer{ nullptr }; + wxBoxSizer* m_text_sizer{ nullptr }; + wxStaticText* m_stext_time{ nullptr }; + wxStaticText* m_stext_weight{ nullptr }; + wxStaticBitmap* timeimg{ nullptr }; + ScalableBitmap* print_time{ nullptr }; + wxStaticBitmap* weightimg{ nullptr }; + ScalableBitmap* print_weight{ nullptr }; + wxBoxSizer* m_thumbnail_sizer{ nullptr }; + ThumbnailPanel* m_thumbnail_panel{nullptr}; + wxPanel* m_panel_image{ nullptr }; + wxBoxSizer* m_image_sizer{ nullptr }; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; + Button* m_button_add{ nullptr }; + +public: + SendMultiMachinePage(Plater* plater = nullptr); + ~SendMultiMachinePage(); + + void prepare(int plate_idx); + + void on_dpi_changed(const wxRect& suggested_rect); + void on_sys_color_changed(); + void refresh_user_device(); + void on_send(wxCommandEvent& event); + bool Show(bool show); + + BBL::PrintParams request_params(MachineObject* obj); + + bool get_ams_mapping_result(std::string& mapping_array_str, std::string& ams_mapping_info); + wxBoxSizer* create_item_title(wxString title, wxWindow* parent, wxString tooltip); + wxBoxSizer* create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param); + wxBoxSizer* create_item_input(wxString str_before, wxString str_after, wxWindow* parent, wxString tooltip, std::string param); + wxBoxSizer* create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int groupid, std::string param); + + wxPanel* create_page(); + void sync_ams_list(); + void set_default_normal(const ThumbnailData& data); + void set_default(); + void on_rename_enter(); + void check_fcous_state(wxWindow* window); + void check_focus(wxWindow* window); + +protected: + void OnSelectRadio(wxMouseEvent& event); + void on_select_radio(std::string param); + bool get_value_radio(std::string param); + void on_set_finish_mapping(wxCommandEvent& evt); + void on_rename_click(wxCommandEvent& event); + + void on_timer(wxTimerEvent& event); + void init_timer(); + +private: + +}; + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp index b084a382f3..9f477be993 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -50,7 +50,7 @@ private: int m_print_plate_idx; int m_current_filament_id; - int m_print_error_code; + int m_print_error_code = 0; int timeout_count = 0; bool m_is_in_sending_mode{ false }; bool m_is_rename_mode{ false }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 53394895f6..2a7ff21b76 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -84,8 +84,8 @@ static std::vector message_containing_retry{ "07FF 8011", "07FF 8012", "07FF 8013", - "12FF 8007" - + "12FF 8007", + "1200 8006" }; static std::vector message_containing_done{ @@ -93,6 +93,10 @@ static std::vector message_containing_done{ "12FF 8007" }; +static std::vector message_containing_resume{ + "0300 8013" +}; + static wxImage fail_image; @@ -492,7 +496,7 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) static_score_sizer->Add(static_score_text, 1, wxEXPAND | wxALL, FromDIP(10)); m_has_rated_prompt = new wxStaticText(m_score_subtask_info, wxID_ANY, _L("(The model has already been rated. Your rating will overwrite the previous rating.)"), wxDefaultPosition, wxDefaultSize, 0); m_has_rated_prompt->Wrap(-1); - m_has_rated_prompt->SetForegroundColour(*wxRED); + m_has_rated_prompt->SetForegroundColour(*wxBLACK); m_has_rated_prompt->SetFont(::Label::Body_10); m_has_rated_prompt->Hide(); @@ -557,11 +561,19 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) void PrintingTaskPanel::paint(wxPaintEvent&) { wxPaintDC dc(m_bitmap_thumbnail); - if (wxGetApp().dark_mode()) - dc.DrawBitmap(m_bitmap_background.bmp(), 0, 0); + if (wxGetApp().dark_mode()) { + if (m_brightness_value > 0 && m_brightness_value < SHOW_BACKGROUND_BITMAP_PIXEL_THRESHOLD) { + dc.DrawBitmap(m_bitmap_background.bmp(), 0, 0); + dc.SetTextForeground(*wxBLACK); + } + else + dc.SetTextForeground(*wxWHITE); + } + else + dc.SetTextForeground(*wxBLACK); dc.DrawBitmap(m_thumbnail_bmp_display, wxPoint(0, 0)); - dc.SetTextForeground(*wxBLACK); dc.SetFont(Label::Body_12); + if (m_plate_index >= 0) { wxString plate_id_str = wxString::Format("%d", m_plate_index); dc.DrawText(plate_id_str, wxPoint(4, 4)); @@ -1093,6 +1105,13 @@ wxBoxSizer *StatusBasePanel::create_machine_control_page(wxWindow *parent) std::pair(wxColour(38, 166, 154), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); StateColor btn_bd_green(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); + m_parts_btn = new Button(m_panel_control_title, _L("Printer Parts")); + m_parts_btn->SetBackgroundColor(btn_bg_green); + m_parts_btn->SetBorderColor(btn_bd_green); + m_parts_btn->SetTextColor(wxColour("#FFFFFE")); + m_parts_btn->SetSize(wxSize(FromDIP(128), FromDIP(26))); + m_parts_btn->SetMinSize(wxSize(-1, FromDIP(26))); + m_options_btn = new Button(m_panel_control_title, _L("Print Options")); m_options_btn->SetBackgroundColor(btn_bg_green); m_options_btn->SetBorderColor(btn_bd_green); @@ -1110,6 +1129,7 @@ wxBoxSizer *StatusBasePanel::create_machine_control_page(wxWindow *parent) bSizer_control_title->Add(m_staticText_control, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, PAGE_TITLE_LEFT_MARGIN); bSizer_control_title->Add(0, 0, 1, wxEXPAND, 0); + bSizer_control_title->Add(m_parts_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(10)); bSizer_control_title->Add(m_options_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(10)); bSizer_control_title->Add(m_calibration_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(10)); @@ -1767,10 +1787,20 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_AMS_RETRY, &StatusPanel::on_ams_retry, this); Bind(EVT_FAN_CHANGED, &StatusPanel::on_fan_changed, this); Bind(EVT_SECONDARY_CHECK_DONE, &StatusPanel::on_print_error_done, this); + Bind(EVT_SECONDARY_CHECK_RESUME, &StatusPanel::on_subtask_pause_resume, this); + Bind(EVT_PRINT_ERROR_STOP, &StatusPanel::on_subtask_abort, this); + Bind(EVT_LOAD_VAMS_TRAY, &StatusPanel::on_ams_load_vams, this); + Bind(EVT_JUMP_TO_LIVEVIEW, [this](wxCommandEvent& e) { + m_media_play_ctrl->jump_to_play(); + if (m_print_error_dlg) + m_print_error_dlg->on_hide(); + }); + m_switch_speed->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); m_options_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_show_print_options), NULL, this); + m_parts_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_show_parts_options), NULL, this); } StatusPanel::~StatusPanel() @@ -1803,6 +1833,7 @@ StatusPanel::~StatusPanel() m_switch_speed->Disconnect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); m_options_btn->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_show_print_options), NULL, this); + m_parts_btn->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_show_parts_options), NULL, this); m_button_unload->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_unload), NULL, this); // remove warning dialogs @@ -1917,6 +1948,12 @@ void StatusPanel::on_subtask_pause_resume(wxCommandEvent &event) BOOST_LOG_TRIVIAL(info) << "monitor: pause current print task dev_id =" << obj->dev_id; obj->command_task_pause(); } + if (m_print_error_dlg) { + m_print_error_dlg->on_hide(); + }if (m_print_error_dlg_no_action) { + m_print_error_dlg_no_action->on_hide(); + } + } } @@ -1925,7 +1962,7 @@ void StatusPanel::on_subtask_abort(wxCommandEvent &event) if (abort_dlg == nullptr) { abort_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Cancel print")); abort_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent &e) { - if (obj) { + if (obj) { BOOST_LOG_TRIVIAL(info) << "monitor: stop current print task dev_id =" << obj->dev_id; obj->command_task_abort(); } @@ -1956,10 +1993,13 @@ void StatusPanel::on_webrequest_state(wxWebRequestEvent &evt) BOOST_LOG_TRIVIAL(trace) << "monitor: monitor_panel web request state = " << evt.GetState(); switch (evt.GetState()) { case wxWebRequest::State_Completed: { - wxImage img(*evt.GetResponse().GetStream()); - img_list.insert(std::make_pair(m_request_url, img)); - wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y, wxIMAGE_QUALITY_HIGH); - m_project_task_panel->set_thumbnail_img(resize_img); + if (m_current_print_mode != PrintingTaskType::CALIBRATION ||(m_calib_mode == CalibMode::Calib_Flow_Rate && m_calib_method == CalibrationMethod::CALI_METHOD_MANUAL)) { + wxImage img(*evt.GetResponse().GetStream()); + img_list.insert(std::make_pair(m_request_url, img)); + wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y, wxIMAGE_QUALITY_HIGH); + m_project_task_panel->set_thumbnail_img(resize_img); + m_project_task_panel->set_brightness_value(get_brightness_value(resize_img)); + } if (obj) { m_project_task_panel->set_plate_index(obj->m_plate_index); } else { @@ -2022,7 +2062,6 @@ bool StatusPanel::is_task_changed(MachineObject* obj) void StatusPanel::update(MachineObject *obj) { if (!obj) return; - m_project_task_panel->Freeze(); update_subtask(obj); m_project_task_panel->Thaw(); @@ -2080,6 +2119,8 @@ void StatusPanel::update(MachineObject *obj) m_options_btn->Hide(); } + m_parts_btn->Show(); + //support edit chamber temp if (obj->is_support_chamber_edit) { m_tempCtrl_chamber->SetReadOnly(false); @@ -2135,46 +2176,76 @@ void StatusPanel::show_recenter_dialog() { obj->command_go_home(); } -void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::string print_error_str) +void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::string print_error_str, wxString image_url, std::vector used_button) { if (msg.IsEmpty()) { error_info_reset(); } else { m_project_task_panel->show_error_msg(msg); - auto it_retry = std::find(message_containing_retry.begin(), message_containing_retry.end(), print_error_str); - auto it_done = std::find(message_containing_done.begin(), message_containing_done.end(), print_error_str); - - BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; - if (m_print_error_dlg == nullptr) { - m_print_error_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); - } - - if (it_done != message_containing_done.end() && it_retry != message_containing_retry.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::DONE_AND_RETRY, this); - } - else if (it_done != message_containing_done.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_DONE, this); - } - else if (it_retry != message_containing_retry.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RETRY, this); - }else { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); - } - m_print_error_dlg->update_text(msg); - m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { - if (obj) { - obj->command_clean_print_error(obj->subtask_id_, obj->print_error); + if (!used_button.empty()) { + BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; + if (m_print_error_dlg == nullptr) { + m_print_error_dlg = new PrintErrorDialog(this->GetParent(), wxID_ANY, _L("Error")); } - }); - m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { - if (m_ams_control) { - m_ams_control->on_retry(); + m_print_error_dlg->update_title_style(_L("Error"), used_button, this); + m_print_error_dlg->update_text_image(msg, image_url); + m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + if (obj) { + obj->command_clean_print_error(obj->subtask_id_, obj->print_error); + } + }); + + m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { + if (m_ams_control) { + m_ams_control->on_retry(); + } + }); + + m_print_error_dlg->on_show(); + } + else { + //old error code dialog + auto it_retry = std::find(message_containing_retry.begin(), message_containing_retry.end(), print_error_str); + auto it_done = std::find(message_containing_done.begin(), message_containing_done.end(), print_error_str); + auto it_resume = std::find(message_containing_resume.begin(), message_containing_resume.end(), print_error_str); + + BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; + if (m_print_error_dlg_no_action == nullptr) { + m_print_error_dlg_no_action = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); } - }); - m_print_error_dlg->on_show(); + if (it_done != message_containing_done.end() && it_retry != message_containing_retry.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::DONE_AND_RETRY, this); + } + else if (it_done != message_containing_done.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_DONE, this); + } + else if (it_retry != message_containing_retry.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RETRY, this); + } + else if (it_resume != message_containing_resume.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RESUME, this); + } + else { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); + } + m_print_error_dlg_no_action->update_text(msg); + m_print_error_dlg_no_action->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + if (obj) { + obj->command_clean_print_error(obj->subtask_id_, obj->print_error); + } + }); + + m_print_error_dlg_no_action->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { + if (m_ams_control) { + m_ams_control->on_retry(); + } + }); + + m_print_error_dlg_no_action->on_show(); + } wxGetApp().mainframe->RequestUserAttention(wxUSER_ATTENTION_ERROR); } } @@ -2197,13 +2268,19 @@ void StatusPanel::update_error_message() } wxString error_msg = wxGetApp().get_hms_query()->query_print_error_msg(obj->print_error); + std::vector used_button; + wxString error_image_url = wxGetApp().get_hms_query()->query_print_error_url_action(obj->print_error,obj->dev_id, used_button); + // special case + if (print_error_str == "0300 8003" || print_error_str == "0300 8002" || print_error_str == "0300 800A") + used_button.emplace_back(PrintErrorDialog::PrintErrorButton::JUMP_TO_LIVEVIEW); if (!error_msg.IsEmpty()) { wxDateTime now = wxDateTime::Now(); - wxString show_time = now.Format("%H:%M:%S"); - error_msg = wxString::Format("%s[%s %s]", + wxString show_time = now.Format("%Y-%m-%d %H:%M:%S"); + + error_msg = wxString::Format("%s\n[%s %s]", error_msg, print_error_str, show_time); - show_error_message(obj, error_msg, print_error_str); + show_error_message(obj, error_msg, print_error_str,error_image_url,used_button); } else { BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error; } @@ -2500,15 +2577,16 @@ void StatusPanel::update_ams(MachineObject *obj) m_ams_setting_dlg->obj = obj; if (obj && m_ams_setting_dlg->IsShown()) { - m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag); + update_ams_insert_material(obj); m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); m_ams_setting_dlg->update_remain_mode(obj->ams_calibrate_remain_flag); m_ams_setting_dlg->update_switch_filament(obj->ams_auto_switch_filament_flag); + m_ams_setting_dlg->update_air_printing_detection(obj->ams_air_print_status); } } if (m_filament_setting_dlg) { m_filament_setting_dlg->obj = obj; } - if ( (obj->get_printer_series() == PrinterSeries::SERIES_X1) && last_cali_version != obj->cali_version) { + if (obj->cali_version != -1 && last_cali_version != obj->cali_version) { last_cali_version = obj->cali_version; CalibUtils::emit_get_PA_calib_info(obj->nozzle_diameter, ""); } @@ -2754,6 +2832,18 @@ void StatusPanel::update_ams(MachineObject *obj) update_ams_control_state(is_curr_tray_selected); } +void StatusPanel::update_ams_insert_material(MachineObject* obj) { + std::string extra_ams_str = (boost::format("ams_f1/%1%") % 0).str(); + auto extra_ams_it = obj->module_vers.find(extra_ams_str); + if (extra_ams_it != obj->module_vers.end()) { + m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag, extra_ams_it->second.sw_ver); + } + else { + m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag, ""); + } +} + + void StatusPanel::update_ams_control_state(bool is_curr_tray_selected) { // set default value to true @@ -2796,13 +2886,58 @@ void StatusPanel::update_ams_control_state(bool is_curr_tray_selected) } if (obj->ams_exist_bits == 0) { - if (obj->is_in_printing() && !obj->can_resume()) { - enable[ACTION_BTN_LOAD] = false; - enable[ACTION_BTN_UNLOAD] = false; + if (obj->is_in_printing()) { + if (!obj->can_resume()) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + } + else{ + if (obj->m_tray_now == "255") { + enable[ACTION_BTN_LOAD] = true; + enable[ACTION_BTN_UNLOAD] = false; + } + else if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = true; + } + } } - else { - enable[ACTION_BTN_LOAD] = true; - enable[ACTION_BTN_UNLOAD] = true; + + } + else { + if (obj->is_in_printing() /*&& obj->can_resume() && obj->m_tray_now != std::to_string(VIRTUAL_TRAY_ID) */) { + + if (!obj->can_resume()) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + } + else { + if (obj->m_tray_now == "255") { + + if ( m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID) ) { + enable[ACTION_BTN_LOAD] = true; + enable[ACTION_BTN_UNLOAD] = false; + } + else if (!m_ams_control->GetCurrentCan(m_ams_control->GetCurentAms()).empty()) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + } + } + else if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) { + if (m_ams_control->GetCurentAms() == std::to_string(VIRTUAL_TRAY_ID)) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = true; + } + else if (!m_ams_control->GetCurrentCan(m_ams_control->GetCurentAms()).empty()) { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + } + } + else { + enable[ACTION_BTN_LOAD] = false; + enable[ACTION_BTN_UNLOAD] = false; + } + } } } @@ -2836,6 +2971,14 @@ void StatusPanel::update_cali(MachineObject *obj) } } +void StatusPanel::update_calib_bitmap() { + m_current_print_mode = PrintingTaskType::NOT_CLEAR; //printing task might be changed when updating. + if (calib_bitmap != nullptr) { + delete calib_bitmap; + calib_bitmap = nullptr; + } +} + void StatusPanel::update_basic_print_data(bool def) { if (def) { @@ -2881,7 +3024,52 @@ void StatusPanel::update_model_info() void StatusPanel::update_subtask(MachineObject *obj) { if (!obj) return; + if (m_current_print_mode != PRINGINT) { + if (calib_bitmap == nullptr) { + m_calib_mode = get_obj_calibration_mode(obj, m_calib_method, cali_stage); + if (m_calib_mode == CalibMode::Calib_None) + m_current_print_mode = PRINGINT; + // the printing task is calibrattion, not normal printing. + else if (m_calib_mode != CalibMode::Calib_None) { + m_current_print_mode = CALIBRATION; + auto get_bitmap = [](wxString& png_path, int width, int height) { + wxImage image(width, height); + image.LoadFile(png_path, wxBITMAP_TYPE_PNG); + image = image.Scale(width, height, wxIMAGE_QUALITY_NORMAL); + return wxBitmap(image); + }; + wxString png_path = ""; + int width = m_project_task_panel->get_bitmap_thumbnail()->GetSize().x; + int height = m_project_task_panel->get_bitmap_thumbnail()->GetSize().y; + if (m_calib_method == CALI_METHOD_AUTO) { + if (m_calib_mode == CalibMode::Calib_PA_Line) { + png_path = (boost::format("%1%/images/fd_calibration_auto.png") % resources_dir()).str(); + } + else if (m_calib_mode == CalibMode::Calib_Flow_Rate) { + png_path = (boost::format("%1%/images/flow_rate_calibration_auto.png") % resources_dir()).str(); + } + } + else if (m_calib_method == CALI_METHOD_MANUAL) { + if (m_calib_mode== CalibMode::Calib_PA_Line) { + if (cali_stage == 0) { // Line mode + png_path = (boost::format("%1%/images/fd_calibration_manual.png") % resources_dir()).str(); + } + else if (cali_stage == 1) { // Pattern mode + png_path = (boost::format("%1%/images/fd_pattern_manual_device.png") % resources_dir()).str(); + } + } + } + if (png_path != "") { + calib_bitmap = new wxBitmap; + *calib_bitmap = get_bitmap(png_path, width, height); + } + } + } + if (calib_bitmap != nullptr) + m_project_task_panel->set_thumbnail_img(*calib_bitmap); + } + if (obj->is_support_layer_num) { m_project_task_panel->update_layers_num(true); } @@ -3039,15 +3227,19 @@ void StatusPanel::update_cloud_subtask(MachineObject *obj) } if (m_start_loading_thumbnail) { + update_calib_bitmap(); if (obj->slice_info) { m_request_url = wxString(obj->slice_info->thumbnail_url); if (!m_request_url.IsEmpty()) { wxImage img; std::map::iterator it = img_list.find(m_request_url); if (it != img_list.end()) { - img = it->second; - wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y); - m_project_task_panel->set_thumbnail_img(resize_img); + if (m_current_print_mode != PrintingTaskType::CALIBRATION ||(m_calib_mode == CalibMode::Calib_Flow_Rate && m_calib_method == CalibrationMethod::CALI_METHOD_MANUAL)) { + img = it->second; + wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y); + m_project_task_panel->set_thumbnail_img(resize_img); + m_project_task_panel->set_brightness_value(get_brightness_value(resize_img)); + } if (this->obj) { m_project_task_panel->set_plate_index(obj->m_plate_index); } else { @@ -3071,7 +3263,10 @@ void StatusPanel::update_sdcard_subtask(MachineObject *obj) if (!obj) return; if (!m_load_sdcard_thumbnail) { - m_project_task_panel->get_bitmap_thumbnail()->SetBitmap(m_thumbnail_sdcard.bmp()); + update_calib_bitmap(); + if (m_current_print_mode != PrintingTaskType::CALIBRATION) { + m_project_task_panel->get_bitmap_thumbnail()->SetBitmap(m_thumbnail_sdcard.bmp()); + } task_thumbnail_state = ThumbnailState::SDCARD_THUMBNAIL; m_load_sdcard_thumbnail = true; } @@ -3092,7 +3287,7 @@ void StatusPanel::reset_printing_values() update_basic_print_data(false); m_project_task_panel->update_left_time(NA_STR); m_project_task_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); - + update_calib_bitmap(); task_thumbnail_state = ThumbnailState::PLACE_HOLDER; m_start_loading_thumbnail = false; @@ -3245,6 +3440,7 @@ void StatusPanel::on_set_bed_temp() BOOST_LOG_TRIVIAL(info) << "can not set over limit = " << limit << ", set temp = " << bed_temp; bed_temp = limit; m_tempCtrl_bed->SetTagTemp(wxString::Format("%d", bed_temp)); + m_tempCtrl_bed->Warning(false); } obj->command_set_bed(bed_temp); } @@ -3260,6 +3456,11 @@ void StatusPanel::on_set_nozzle_temp() long nozzle_temp; if (str.ToLong(&nozzle_temp) && obj) { set_hold_count(m_temp_nozzle_timeout); + if (nozzle_temp > m_tempCtrl_nozzle->get_max_temp()) { + nozzle_temp = m_tempCtrl_nozzle->get_max_temp(); + m_tempCtrl_nozzle->SetTagTemp(wxString::Format("%d", nozzle_temp)); + m_tempCtrl_nozzle->Warning(false); + } obj->command_set_nozzle(nozzle_temp); } } catch (...) { @@ -3274,6 +3475,11 @@ void StatusPanel::on_set_chamber_temp() long chamber_temp; if (str.ToLong(&chamber_temp) && obj) { set_hold_count(m_temp_chamber_timeout); + if (chamber_temp > m_tempCtrl_chamber->get_max_temp()) { + chamber_temp = m_tempCtrl_chamber->get_max_temp(); + m_tempCtrl_chamber->SetTagTemp(wxString::Format("%d", chamber_temp)); + m_tempCtrl_chamber->Warning(false); + } obj->command_set_chamber(chamber_temp); } } @@ -3361,6 +3567,16 @@ void StatusPanel::on_ams_load_curr() } } +void StatusPanel::on_ams_load_vams(wxCommandEvent& event) { + BOOST_LOG_TRIVIAL(info) << "on_ams_load_vams_tray"; + + m_ams_control->SwitchAms(std::to_string(VIRTUAL_TRAY_ID)); + on_ams_load_curr(); + if (m_print_error_dlg) { + m_print_error_dlg->on_hide(); + } +} + void StatusPanel::on_ams_unload(SimpleEvent &event) { if (obj) { obj->command_ams_switch(255); } @@ -3379,7 +3595,7 @@ void StatusPanel::on_ams_setting_click(SimpleEvent &event) { if (!m_ams_setting_dlg) m_ams_setting_dlg = new AMSSetting((wxWindow *) this, wxID_ANY); if (obj) { - m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag); + update_ams_insert_material(obj); m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); m_ams_setting_dlg->update_ams_img(DeviceManager::get_printer_ams_img(obj->printer_type)); std::string ams_id = m_ams_control->GetCurentShowAms(); @@ -3685,6 +3901,8 @@ void StatusPanel::on_print_error_done(wxCommandEvent& event) obj->command_ams_control("done"); if (m_print_error_dlg) { m_print_error_dlg->on_hide(); + }if (m_print_error_dlg_no_action) { + m_print_error_dlg_no_action->on_hide(); } } } @@ -4016,7 +4234,8 @@ void StatusPanel::on_xyz_abs(wxCommandEvent &event) if (obj) obj->command_xyz_abs(); } -void StatusPanel::on_show_print_options(wxCommandEvent &event) + +void StatusPanel::on_show_print_options(wxCommandEvent& event) { if (obj) { if (print_options_dlg == nullptr) { @@ -4031,6 +4250,22 @@ void StatusPanel::on_show_print_options(wxCommandEvent &event) } } + +void StatusPanel::on_show_parts_options(wxCommandEvent &event) +{ + if (obj) { + if (print_parts_dlg == nullptr) { + print_parts_dlg = new PrinterPartsDialog(this); + print_parts_dlg->update_machine_obj(obj); + print_parts_dlg->ShowModal(); + } + else { + print_parts_dlg->update_machine_obj(obj); + print_parts_dlg->ShowModal(); + } + } +} + void StatusPanel::on_start_calibration(wxCommandEvent &event) { if (obj) { @@ -4084,12 +4319,14 @@ void StatusPanel::set_default() m_setting_button->Show(); m_tempCtrl_chamber->Show(); m_options_btn->Show(); + m_parts_btn->Show(); reset_temp_misc_control(); m_ams_control->Hide(); m_ams_control_box->Hide(); m_ams_control->Reset(); error_info_reset(); + SetFocus(); } void StatusPanel::show_status(int status) @@ -4105,14 +4342,14 @@ void StatusPanel::show_status(int status) show_printing_status(false, false); m_calibration_btn->Disable(); m_options_btn->Disable(); + m_parts_btn->Disable(); m_panel_monitoring_title->Disable(); - m_media_play_ctrl->Disable(); } else if ((status & (int) MonitorStatus::MONITOR_NORMAL) != 0) { show_printing_status(true, true); m_calibration_btn->Disable(); m_options_btn->Enable(); + m_parts_btn->Enable(); m_panel_monitoring_title->Enable(); - m_media_play_ctrl->Enable(); } } @@ -4236,7 +4473,10 @@ void StatusPanel::msw_rescale() m_calibration_btn->Rescale(); m_options_btn->SetMinSize(wxSize(-1, FromDIP(26))); - m_options_btn->Rescale(); + m_options_btn->Rescale(); + + m_parts_btn->SetMinSize(wxSize(-1, FromDIP(26))); + m_parts_btn->Rescale(); rescale_camera_icons(); diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 399566373b..517367d7f3 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -17,6 +17,7 @@ #include "MediaPlayCtrl.h" #include "AMSSetting.hpp" #include "Calibration.hpp" +#include "CalibrationWizardPage.hpp" #include "PrintOptionsDialog.hpp" #include "AMSMaterialsSetting.hpp" #include "ExtrusionCalibration.hpp" @@ -58,6 +59,7 @@ enum CameraTimelapseStatus { enum PrintingTaskType { PRINGINT, CALIBRATION, + NOT_CLEAR }; struct ScoreData @@ -204,6 +206,7 @@ private: ProgressBar* m_gauge_progress; Label* m_error_text; PrintingTaskType m_type; + int m_brightness_value{ -1 }; public: void init_bitmaps(); @@ -212,7 +215,7 @@ public: void show_error_msg(wxString msg); void reset_printing_value(); void msw_rescale(); - + public: void enable_pause_resume_button(bool enable, std::string type); void enable_abort_button(bool enable); @@ -225,6 +228,7 @@ public: void show_priting_use_info(bool show, wxString time = wxEmptyString, wxString weight = wxEmptyString); void show_profile_info(bool show, wxString profile = wxEmptyString); void set_thumbnail_img(const wxBitmap& bmp); + void set_brightness_value(int value) { m_brightness_value = value; } void set_plate_index(int plate_idx = -1); void market_scoring_show(); void market_scoring_hide(); @@ -244,7 +248,6 @@ public: void set_star_count_dirty(bool dirty) { m_star_count_dirty = dirty; } void set_has_reted_text(bool has_rated); void paint(wxPaintEvent&); - }; class StatusBasePanel : public wxScrolledWindow @@ -390,6 +393,7 @@ protected: wxStaticText* m_staticText_calibration_caption; wxStaticText* m_staticText_calibration_caption_top; wxStaticText* m_calibration_text; + Button* m_parts_btn; Button* m_options_btn; Button* m_calibration_btn; StepIndicator* m_calibration_flow; @@ -449,6 +453,7 @@ public: wxBoxSizer *create_settings_group(wxWindow *parent); void show_ams_group(bool show = true); + MediaPlayCtrl* get_media_play_ctrl() {return m_media_play_ctrl;}; }; @@ -463,11 +468,13 @@ protected: std::shared_ptr m_camera_popup; std::set rated_model_id; AMSSetting *m_ams_setting_dlg{nullptr}; + PrinterPartsDialog* print_parts_dlg { nullptr }; PrintOptionsDialog* print_options_dlg { nullptr }; CalibrationDialog* calibration_dlg {nullptr}; AMSMaterialsSetting *m_filament_setting_dlg{nullptr}; - SecondaryCheckDialog* m_print_error_dlg = nullptr; + PrintErrorDialog* m_print_error_dlg = nullptr; + SecondaryCheckDialog* m_print_error_dlg_no_action = nullptr; SecondaryCheckDialog* abort_dlg = nullptr; SecondaryCheckDialog* con_load_dlg = nullptr; SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr; @@ -504,6 +511,11 @@ protected: std::vector /// Maximal width and height of one style texture /// Text to render by style - void init_style_images(const Vec2i& max_size, const std::string &text); + void init_style_images(const Vec2i32& max_size, const std::string &text); void free_style_images(); // access to all managed font styles @@ -295,7 +291,7 @@ private: // Keep styles to render Items styles; // Maximal width and height in pixels of image - Vec2i max_size; + Vec2i32 max_size; // Text to render std::string text; diff --git a/src/slic3r/Utils/FixModelByWin10.cpp b/src/slic3r/Utils/FixModelByWin10.cpp index 70823e23d6..ea76a59ce6 100644 --- a/src/slic3r/Utils/FixModelByWin10.cpp +++ b/src/slic3r/Utils/FixModelByWin10.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka, Lukáš Matěna @lukasmatena, Pavel Mikuš @Godrak, Enrico Turri @enricoturri1966, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifdef HAS_WIN10SDK #ifndef NOMINMAX diff --git a/src/slic3r/Utils/FontConfigHelp.cpp b/src/slic3r/Utils/FontConfigHelp.cpp index 2746b0c000..15beca07ba 100644 --- a/src/slic3r/Utils/FontConfigHelp.cpp +++ b/src/slic3r/Utils/FontConfigHelp.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "FontConfigHelp.hpp" #ifdef EXIST_FONT_CONFIG_INCLUDE diff --git a/src/slic3r/Utils/FontConfigHelp.hpp b/src/slic3r/Utils/FontConfigHelp.hpp index d60c7e7f07..d2d7738767 100644 --- a/src/slic3r/Utils/FontConfigHelp.hpp +++ b/src/slic3r/Utils/FontConfigHelp.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_FontConfigHelp_hpp_ #define slic3r_FontConfigHelp_hpp_ diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index 099fd61686..995bf19374 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -84,6 +84,14 @@ struct CurlGlobalInit std::unique_ptr CurlGlobalInit::instance; std::map extra_headers; +std::mutex g_mutex; + +struct form_file +{ + fs::ifstream ifs; + boost::filesystem::ifstream::off_type init_offset; + size_t content_length; +}; struct Http::priv { @@ -102,7 +110,7 @@ struct Http::priv std::string buffer; // Used for storing file streams added as multipart form parts // Using a deque here because unlike vector it doesn't ivalidate pointers on insertion - std::deque form_files; + std::deque form_files; std::string postfields; std::string error_buffer; // Used for CURLOPT_ERRORBUFFER std::string headers; @@ -129,7 +137,7 @@ struct Http::priv void set_timeout_connect(long timeout); void set_timeout_max(long timeout); - void form_add_file(const char *name, const fs::path &path, const char* filename); + void form_add_file(const char *name, const fs::path &path, const char* filename, boost::filesystem::ifstream::off_type offset, size_t length); /* mime */ void mime_form_add_text(const char* name, const char* value); void mime_form_add_file(const char* name, const char* path); @@ -137,6 +145,7 @@ struct Http::priv void set_post_body(const std::string &body); void set_put_body(const fs::path &path); void set_del_body(const std::string& body); + void set_range(const std::string &range); std::string curl_error(CURLcode curlcode); std::string body_size_error(); @@ -236,7 +245,7 @@ int Http::priv::xfercb(void *userp, curl_off_t dltotal, curl_off_t dlnow, curl_o curl_easy_getinfo(self->curl, CURLINFO_SPEED_UPLOAD, &speed); if (speed > 0.01) speed = speed; - Progress progress(dltotal, dlnow, ultotal, ulnow, speed); + Progress progress(dltotal, dlnow, ultotal, ulnow, self->buffer, speed); self->progressfn(progress, cb_cancel); } @@ -252,15 +261,27 @@ int Http::priv::xfercb_legacy(void *userp, double dltotal, double dlnow, double size_t Http::priv::form_file_read_cb(char *buffer, size_t size, size_t nitems, void *userp) { - auto stream = reinterpret_cast(userp); + auto f = reinterpret_cast(userp); try { - stream->read(buffer, size * nitems); + size_t max_read_size = size * nitems; + if (f->content_length == 0) { + // Unlimited + f->ifs.read(buffer, max_read_size); + } else { + unsigned long long read_size = f->ifs.tellg() - f->init_offset; + if (read_size >= f->content_length) { + return 0; + } + + max_read_size = std::min(max_read_size, size_t(f->content_length - read_size)); + f->ifs.read(buffer, max_read_size); + } } catch (const std::exception &) { return CURL_READFUNC_ABORT; } - return stream->gcount(); + return f->ifs.gcount(); } size_t Http::priv::headers_cb(char *buffer, size_t size, size_t nitems, void *userp) @@ -284,7 +305,7 @@ void Http::priv::set_timeout_max(long timeout) ::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout); } -void Http::priv::form_add_file(const char *name, const fs::path &path, const char* filename) +void Http::priv::form_add_file(const char *name, const fs::path &path, const char* filename, boost::filesystem::ifstream::off_type offset, size_t length) { // We can't use CURLFORM_FILECONTENT, because curl doesn't support Unicode filenames on Windows // and so we use CURLFORM_STREAM with boost ifstream to read the file. @@ -293,18 +314,21 @@ void Http::priv::form_add_file(const char *name, const fs::path &path, const cha filename = path.string().c_str(); } - form_files.emplace_back(path, std::ios::in | std::ios::binary); - auto &stream = form_files.back(); - stream.seekg(0, std::ios::end); - size_t size = stream.tellg(); - stream.seekg(0); + form_files.emplace_back(form_file{{path, std::ios::in | std::ios::binary}, offset, length}); + auto &f = form_files.back(); + size_t size = length; + if (length == 0) { + f.ifs.seekg(0, std::ios::end); + size = f.ifs.tellg() - offset; + } + f.ifs.seekg(offset); if (filename != nullptr) { ::curl_formadd(&form, &form_end, CURLFORM_COPYNAME, name, CURLFORM_FILENAME, filename, CURLFORM_CONTENTTYPE, "application/octet-stream", - CURLFORM_STREAM, static_cast(&stream), + CURLFORM_STREAM, static_cast(&f), CURLFORM_CONTENTSLENGTH, static_cast(size), CURLFORM_END ); @@ -369,6 +393,11 @@ void Http::priv::set_del_body(const std::string& body) postfields = body; } +void Http::priv::set_range(const std::string& range) +{ + ::curl_easy_setopt(curl, CURLOPT_RANGE, range.c_str()); +} + std::string Http::priv::curl_error(CURLcode curlcode) { return (boost::format("curl:%1%:\n%2%\n[Error %3%]") @@ -433,7 +462,7 @@ void Http::priv::http_perform() if (res == CURLE_ABORTED_BY_CALLBACK) { if (cancel) { // The abort comes from the request being cancelled programatically - Progress dummyprogress(0, 0, 0, 0); + Progress dummyprogress(0, 0, 0, 0, std::string()); bool cancel = true; if (progressfn) { progressfn(dummyprogress, cancel); } } else { @@ -470,6 +499,7 @@ void Http::priv::http_perform() Http::Http(const std::string &url) : p(new priv(url)) { + std::lock_guard l(g_mutex); for (auto it = extra_headers.begin(); it != extra_headers.end(); it++) this->header(it->first, it->second); } @@ -508,6 +538,12 @@ Http& Http::size_limit(size_t sizeLimit) return *this; } +Http& Http::set_range(const std::string& range) +{ + if (p) { p->set_range(range); } + return *this; +} + Http& Http::header(std::string name, const std::string &value) { if (!p) { return * this; } @@ -573,9 +609,9 @@ Http& Http::form_add(const std::string &name, const std::string &contents) return *this; } -Http& Http::form_add_file(const std::string &name, const fs::path &path) +Http& Http::form_add_file(const std::string &name, const fs::path &path, boost::filesystem::ifstream::off_type offset, size_t length) { - if (p) { p->form_add_file(name.c_str(), path.c_str(), nullptr); } + if (p) { p->form_add_file(name.c_str(), path.c_str(), nullptr, offset, length); } return *this; } @@ -593,15 +629,15 @@ Http& Http::mime_form_add_file(std::string &name, const char* path) } -Http& Http::form_add_file(const std::wstring& name, const fs::path& path) +Http& Http::form_add_file(const std::wstring& name, const fs::path& path, boost::filesystem::ifstream::off_type offset, size_t length) { - if (p) { p->form_add_file((char*)name.c_str(), path.c_str(), nullptr); } + if (p) { p->form_add_file((char*)name.c_str(), path.c_str(), nullptr, offset, length); } return *this; } -Http& Http::form_add_file(const std::string &name, const fs::path &path, const std::string &filename) +Http& Http::form_add_file(const std::string &name, const fs::path &path, const std::string &filename, boost::filesystem::ifstream::off_type offset, size_t length) { - if (p) { p->form_add_file(name.c_str(), path.c_str(), filename.c_str()); } + if (p) { p->form_add_file(name.c_str(), path.c_str(), filename.c_str(), offset, length); } return *this; } @@ -740,6 +776,7 @@ Http Http::del(std::string url) void Http::set_extra_headers(std::map headers) { + std::lock_guard l(g_mutex); extra_headers.swap(headers); } diff --git a/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp index c7f7ac2cd9..51a49d44e0 100644 --- a/src/slic3r/Utils/Http.hpp +++ b/src/slic3r/Utils/Http.hpp @@ -42,14 +42,15 @@ public: size_t dlnow; // Bytes downloaded so far size_t ultotal; // Total bytes to upload size_t ulnow; // Bytes uploaded so far + const std::string& buffer; // reference to buffer containing all data double upload_spd{0.0f}; - Progress(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) : - dltotal(dltotal), dlnow(dlnow), ultotal(ultotal), ulnow(ulnow) + Progress(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow, const std::string& buffer) : + dltotal(dltotal), dlnow(dlnow), ultotal(ultotal), ulnow(ulnow), buffer(buffer) {} - Progress(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow, double ulspd) : - dltotal(dltotal), dlnow(dlnow), ultotal(ultotal), ulnow(ulnow), upload_spd(ulspd) + Progress(size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow, const std::string& buffer, double ulspd) : + dltotal(dltotal), dlnow(dlnow), ultotal(ultotal), ulnow(ulnow), buffer(buffer), upload_spd(ulspd) {} }; @@ -102,6 +103,8 @@ public: // Sets a maximum size of the data that can be received. // A value of zero sets the default limit, which is is 5MB. Http& size_limit(size_t sizeLimit); + // range of donloaded bytes. example: curl_easy_setopt(curl, CURLOPT_RANGE, "0-199"); + Http& set_range(const std::string& range); // Sets a HTTP header field. Http& header(std::string name, const std::string &value); // Removes a header field. @@ -118,15 +121,15 @@ public: // Add a HTTP multipart form field Http& form_add(const std::string &name, const std::string &contents); // Add a HTTP multipart form file data contents, `name` is the name of the part - Http& form_add_file(const std::string &name, const boost::filesystem::path &path); + Http& form_add_file(const std::string &name, const boost::filesystem::path &path, boost::filesystem::ifstream::off_type offset = 0, size_t length = 0); // Add a HTTP mime form field Http& mime_form_add_text(std::string& name, std::string& value); // Add a HTTP mime form file Http& mime_form_add_file(std::string& name, const char* path); // Same as above except also override the file's filename with a wstring type - Http& form_add_file(const std::wstring& name, const boost::filesystem::path& path); + Http& form_add_file(const std::wstring& name, const boost::filesystem::path& path, boost::filesystem::ifstream::off_type offset = 0, size_t length = 0); // Same as above except also override the file's filename with a custom one - Http& form_add_file(const std::string &name, const boost::filesystem::path &path, const std::string &filename); + Http& form_add_file(const std::string &name, const boost::filesystem::path &path, const std::string &filename, boost::filesystem::ifstream::off_type offset = 0, size_t length = 0); #ifdef WIN32 // Tells libcurl to ignore certificate revocation checks in case of missing or offline distribution points for those SSL backends where such behavior is present. diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 5f1933567e..1ffdf0464e 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -9,7 +9,6 @@ #include #include "libslic3r/Utils.hpp" #include "NetworkAgent.hpp" -#include @@ -45,6 +44,7 @@ func_set_on_http_error_fn NetworkAgent::set_on_http_error_fn_ptr = nul func_set_get_country_code_fn NetworkAgent::set_get_country_code_fn_ptr = nullptr; func_set_on_subscribe_failure_fn NetworkAgent::set_on_subscribe_failure_fn_ptr = nullptr; func_set_on_message_fn NetworkAgent::set_on_message_fn_ptr = nullptr; +func_set_on_user_message_fn NetworkAgent::set_on_user_message_fn_ptr = nullptr; func_set_on_local_connect_fn NetworkAgent::set_on_local_connect_fn_ptr = nullptr; func_set_on_local_message_fn NetworkAgent::set_on_local_message_fn_ptr = nullptr; func_set_queue_on_main_fn NetworkAgent::set_queue_on_main_fn_ptr = nullptr; @@ -53,6 +53,11 @@ func_is_server_connected NetworkAgent::is_server_connected_ptr = null func_refresh_connection NetworkAgent::refresh_connection_ptr = nullptr; func_start_subscribe NetworkAgent::start_subscribe_ptr = nullptr; func_stop_subscribe NetworkAgent::stop_subscribe_ptr = nullptr; +func_add_subscribe NetworkAgent::add_subscribe_ptr = nullptr; +func_del_subscribe NetworkAgent::del_subscribe_ptr = nullptr; +func_enable_multi_machine NetworkAgent::enable_multi_machine_ptr = nullptr; +func_start_device_subscribe NetworkAgent::start_device_subscribe_ptr = nullptr; +func_stop_device_subscribe NetworkAgent::stop_device_subscribe_ptr = nullptr; func_send_message NetworkAgent::send_message_ptr = nullptr; func_connect_printer NetworkAgent::connect_printer_ptr = nullptr; func_disconnect_printer NetworkAgent::disconnect_printer_ptr = nullptr; @@ -68,6 +73,8 @@ func_get_user_nickanme NetworkAgent::get_user_nickanme_ptr = nullpt func_build_login_cmd NetworkAgent::build_login_cmd_ptr = nullptr; func_build_logout_cmd NetworkAgent::build_logout_cmd_ptr = nullptr; func_build_login_info NetworkAgent::build_login_info_ptr = nullptr; +func_get_model_id_from_desgin_id NetworkAgent::get_model_id_from_desgin_id_ptr = nullptr; +func_ping_bind NetworkAgent::ping_bind_ptr = nullptr; func_bind NetworkAgent::bind_ptr = nullptr; func_unbind NetworkAgent::unbind_ptr = nullptr; func_get_bambulab_host NetworkAgent::get_bambulab_host_ptr = nullptr; @@ -77,6 +84,7 @@ func_start_print NetworkAgent::start_print_ptr = nullptr; func_start_local_print_with_record NetworkAgent::start_local_print_with_record_ptr = nullptr; func_start_send_gcode_to_sdcard NetworkAgent::start_send_gcode_to_sdcard_ptr = nullptr; func_start_local_print NetworkAgent::start_local_print_ptr = nullptr; +func_start_sdcard_print NetworkAgent::start_sdcard_print_ptr = nullptr; func_get_user_presets NetworkAgent::get_user_presets_ptr = nullptr; func_request_setting_id NetworkAgent::request_setting_id_ptr = nullptr; func_put_setting NetworkAgent::put_setting_ptr = nullptr; @@ -88,6 +96,7 @@ func_set_extra_http_header NetworkAgent::set_extra_http_header_ptr = nu func_get_my_message NetworkAgent::get_my_message_ptr = nullptr; func_check_user_task_report NetworkAgent::check_user_task_report_ptr = nullptr; func_get_user_print_info NetworkAgent::get_user_print_info_ptr = nullptr; +func_get_user_tasks NetworkAgent::get_user_tasks_ptr = nullptr; func_get_printer_firmware NetworkAgent::get_printer_firmware_ptr = nullptr; func_get_task_plate_index NetworkAgent::get_task_plate_index_ptr = nullptr; func_get_user_info NetworkAgent::get_user_info_ptr = nullptr; @@ -106,6 +115,7 @@ func_get_model_mall_detail_url NetworkAgent::get_model_mall_detail_url_ptr func_get_subtask NetworkAgent::get_subtask_ptr = nullptr; func_get_my_profile NetworkAgent::get_my_profile_ptr = nullptr; func_track_enable NetworkAgent::track_enable_ptr = nullptr; +func_track_remove_files NetworkAgent::track_remove_files_ptr = nullptr; func_track_event NetworkAgent::track_event_ptr = nullptr; func_track_header NetworkAgent::track_header_ptr = nullptr; func_track_update_property NetworkAgent::track_update_property_ptr = nullptr; @@ -115,6 +125,8 @@ func_get_oss_config NetworkAgent::get_oss_config_ptr = nullptr; func_put_rating_picture_oss NetworkAgent::put_rating_picture_oss_ptr = nullptr; func_get_model_mall_rating_result NetworkAgent::get_model_mall_rating_result_ptr = nullptr; +func_get_mw_user_preference NetworkAgent::get_mw_user_preference_ptr = nullptr; +func_get_mw_user_4ulist NetworkAgent::get_mw_user_4ulist_ptr = nullptr; NetworkAgent::NetworkAgent(std::string log_dir) { @@ -204,6 +216,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) set_get_country_code_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_get_country_code_fn")); set_on_subscribe_failure_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_subscribe_failure_fn")); set_on_message_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_message_fn")); + set_on_user_message_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_user_message_fn")); set_on_local_connect_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_local_connect_fn")); set_on_local_message_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_local_message_fn")); set_queue_on_main_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_queue_on_main_fn")); @@ -212,6 +225,11 @@ int NetworkAgent::initialize_network_module(bool using_backup) refresh_connection_ptr = reinterpret_cast(get_network_function("bambu_network_refresh_connection")); start_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_start_subscribe")); stop_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_stop_subscribe")); + add_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_add_subscribe")); + del_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_del_subscribe")); + enable_multi_machine_ptr = reinterpret_cast(get_network_function("bambu_network_enable_multi_machine")); + start_device_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_start_device_subscribe")); + stop_device_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_stop_device_subscribe")); send_message_ptr = reinterpret_cast(get_network_function("bambu_network_send_message")); connect_printer_ptr = reinterpret_cast(get_network_function("bambu_network_connect_printer")); disconnect_printer_ptr = reinterpret_cast(get_network_function("bambu_network_disconnect_printer")); @@ -227,6 +245,8 @@ int NetworkAgent::initialize_network_module(bool using_backup) build_login_cmd_ptr = reinterpret_cast(get_network_function("bambu_network_build_login_cmd")); build_logout_cmd_ptr = reinterpret_cast(get_network_function("bambu_network_build_logout_cmd")); build_login_info_ptr = reinterpret_cast(get_network_function("bambu_network_build_login_info")); + ping_bind_ptr = reinterpret_cast(get_network_function("bambu_network_ping_bind")); + get_model_id_from_desgin_id_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_id_from_desgin_id")); bind_ptr = reinterpret_cast(get_network_function("bambu_network_bind")); unbind_ptr = reinterpret_cast(get_network_function("bambu_network_unbind")); get_bambulab_host_ptr = reinterpret_cast(get_network_function("bambu_network_get_bambulab_host")); @@ -236,6 +256,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) start_local_print_with_record_ptr = reinterpret_cast(get_network_function("bambu_network_start_local_print_with_record")); start_send_gcode_to_sdcard_ptr = reinterpret_cast(get_network_function("bambu_network_start_send_gcode_to_sdcard")); start_local_print_ptr = reinterpret_cast(get_network_function("bambu_network_start_local_print")); + start_sdcard_print_ptr = reinterpret_cast(get_network_function("bambu_network_start_sdcard_print")); get_user_presets_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_presets")); request_setting_id_ptr = reinterpret_cast(get_network_function("bambu_network_request_setting_id")); put_setting_ptr = reinterpret_cast(get_network_function("bambu_network_put_setting")); @@ -247,6 +268,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_my_message_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_message")); check_user_task_report_ptr = reinterpret_cast(get_network_function("bambu_network_check_user_task_report")); get_user_print_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_print_info")); + get_user_tasks_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_tasks")); get_printer_firmware_ptr = reinterpret_cast(get_network_function("bambu_network_get_printer_firmware")); get_task_plate_index_ptr = reinterpret_cast(get_network_function("bambu_network_get_task_plate_index")); get_user_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_info")); @@ -255,8 +277,8 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_slice_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_slice_info")); query_bind_status_ptr = reinterpret_cast(get_network_function("bambu_network_query_bind_status")); modify_printer_name_ptr = reinterpret_cast(get_network_function("bambu_network_modify_printer_name")); - get_camera_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_camera_url")); - get_design_staffpick_ptr = reinterpret_cast(get_network_function("bambu_network_get_design_staffpick")); + get_camera_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_camera_url")); + get_design_staffpick_ptr = reinterpret_cast(get_network_function("bambu_network_get_design_staffpick")); start_publish_ptr = reinterpret_cast(get_network_function("bambu_network_start_publish")); get_profile_3mf_ptr = reinterpret_cast(get_network_function("bambu_network_get_profile_3mf")); get_model_publish_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_publish_url")); @@ -265,6 +287,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_model_mall_detail_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_detail_url")); get_my_profile_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_profile")); track_enable_ptr = reinterpret_cast(get_network_function("bambu_network_track_enable")); + track_remove_files_ptr = reinterpret_cast(get_network_function("bambu_network_track_remove_files")); track_event_ptr = reinterpret_cast(get_network_function("bambu_network_track_event")); track_header_ptr = reinterpret_cast(get_network_function("bambu_network_track_header")); track_update_property_ptr = reinterpret_cast(get_network_function("bambu_network_track_update_property")); @@ -274,6 +297,9 @@ int NetworkAgent::initialize_network_module(bool using_backup) put_rating_picture_oss_ptr = reinterpret_cast(get_network_function("bambu_network_put_rating_picture_oss")); get_model_mall_rating_result_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_rating")); + get_mw_user_preference_ptr = reinterpret_cast(get_network_function("bambu_network_get_mw_user_preference")); + get_mw_user_4ulist_ptr = reinterpret_cast(get_network_function("bambu_network_get_mw_user_4ulist")); + return 0; } @@ -317,6 +343,7 @@ int NetworkAgent::unload_network_module() set_get_country_code_fn_ptr = nullptr; set_on_subscribe_failure_fn_ptr = nullptr; set_on_message_fn_ptr = nullptr; + set_on_user_message_fn_ptr = nullptr; set_on_local_connect_fn_ptr = nullptr; set_on_local_message_fn_ptr = nullptr; set_queue_on_main_fn_ptr = nullptr; @@ -340,6 +367,8 @@ int NetworkAgent::unload_network_module() build_login_cmd_ptr = nullptr; build_logout_cmd_ptr = nullptr; build_login_info_ptr = nullptr; + get_model_id_from_desgin_id_ptr = nullptr; + ping_bind_ptr = nullptr; bind_ptr = nullptr; unbind_ptr = nullptr; get_bambulab_host_ptr = nullptr; @@ -349,6 +378,7 @@ int NetworkAgent::unload_network_module() start_local_print_with_record_ptr = nullptr; start_send_gcode_to_sdcard_ptr = nullptr; start_local_print_ptr = nullptr; + start_sdcard_print_ptr = nullptr; get_user_presets_ptr = nullptr; request_setting_id_ptr = nullptr; put_setting_ptr = nullptr; @@ -360,6 +390,7 @@ int NetworkAgent::unload_network_module() get_my_message_ptr = nullptr; check_user_task_report_ptr = nullptr; get_user_print_info_ptr = nullptr; + get_user_tasks_ptr = nullptr; get_printer_firmware_ptr = nullptr; get_task_plate_index_ptr = nullptr; get_user_info_ptr = nullptr; @@ -377,6 +408,7 @@ int NetworkAgent::unload_network_module() get_model_mall_detail_url_ptr = nullptr; get_my_profile_ptr = nullptr; track_enable_ptr = nullptr; + track_remove_files_ptr = nullptr; track_event_ptr = nullptr; track_header_ptr = nullptr; track_update_property_ptr = nullptr; @@ -385,6 +417,9 @@ int NetworkAgent::unload_network_module() put_rating_picture_oss_ptr = nullptr; put_model_mall_rating_url_ptr = nullptr; get_model_mall_rating_result_ptr = nullptr; + + get_mw_user_preference_ptr = nullptr; + get_mw_user_4ulist_ptr = nullptr; return 0; } @@ -621,6 +656,17 @@ int NetworkAgent::set_on_message_fn(OnMessageFn fn) return ret; } +int NetworkAgent::set_on_user_message_fn(OnMessageFn fn) +{ + int ret = 0; + if (network_agent && set_on_user_message_fn_ptr) { + ret = set_on_user_message_fn_ptr(network_agent, fn); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::set_on_local_connect_fn(OnLocalConnectedFn fn) { int ret = 0; @@ -708,6 +754,57 @@ int NetworkAgent::stop_subscribe(std::string module) return ret; } +int NetworkAgent::add_subscribe(std::vector dev_list) +{ + int ret = 0; + if (network_agent && add_subscribe_ptr) { + ret = add_subscribe_ptr(network_agent, dev_list); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::del_subscribe(std::vector dev_list) +{ + int ret = 0; + if (network_agent && del_subscribe_ptr) { + ret = del_subscribe_ptr(network_agent, dev_list); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + +void NetworkAgent::enable_multi_machine(bool enable) +{ + if (network_agent && enable_multi_machine_ptr) { + enable_multi_machine_ptr(network_agent, enable); + } +} + +int NetworkAgent::start_device_subscribe() +{ + int ret = 0; + if (network_agent && start_device_subscribe_ptr) { + ret = start_device_subscribe_ptr(network_agent); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::stop_device_subscribe() +{ + int ret = 0; + if (network_agent && stop_device_subscribe_ptr) { + ret = stop_device_subscribe_ptr(network_agent); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::send_message(std::string dev_id, std::string json_str, int qos) { int ret = 0; @@ -858,6 +955,30 @@ std::string NetworkAgent::build_login_info() return ret; } +int NetworkAgent::get_model_id_from_desgin_id(std::string& desgin_id, std::string& model_id) +{ + int ret = 0; + if (network_agent && get_model_id_from_desgin_id_ptr) { + ret = get_model_id_from_desgin_id_ptr(network_agent, desgin_id, model_id); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, pin code=%3%") + % network_agent % ret % desgin_id; + } + return ret; +} + +int NetworkAgent::ping_bind(std::string ping_code) +{ + int ret = 0; + if (network_agent && ping_bind_ptr) { + ret = ping_bind_ptr(network_agent, ping_code); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, pin code=%3%") + % network_agent % ret % ping_code; + } + return ret; +} + int NetworkAgent::bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn) { int ret = 0; @@ -934,13 +1055,13 @@ int NetworkAgent::start_local_print_with_record(PrintParams params, OnUpdateStat int NetworkAgent::start_send_gcode_to_sdcard(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn) { - int ret = 0; - if (network_agent && start_send_gcode_to_sdcard_ptr) { - ret = start_send_gcode_to_sdcard_ptr(network_agent, params, update_fn, cancel_fn, wait_fn); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" : network_agent=%1%, ret=%2%, dev_id=%3%, task_name=%4%, project_name=%5%") - % network_agent % ret % params.dev_id % params.task_name % params.project_name; - } - return ret; + int ret = 0; + if (network_agent && start_send_gcode_to_sdcard_ptr) { + ret = start_send_gcode_to_sdcard_ptr(network_agent, params, update_fn, cancel_fn, wait_fn); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" : network_agent=%1%, ret=%2%, dev_id=%3%, task_name=%4%, project_name=%5%") + % network_agent % ret % params.dev_id % params.task_name % params.project_name; + } + return ret; } int NetworkAgent::start_local_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn) @@ -954,6 +1075,17 @@ int NetworkAgent::start_local_print(PrintParams params, OnUpdateStatusFn update_ return ret; } +int NetworkAgent::start_sdcard_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn) +{ + int ret = 0; + if (network_agent && start_sdcard_print_ptr) { + ret = start_sdcard_print_ptr(network_agent, params, update_fn, cancel_fn); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" : network_agent=%1%, ret=%2%, dev_id=%3%, task_name=%4%, project_name=%5%") + % network_agent % ret % params.dev_id % params.task_name % params.project_name; + } + return ret; +} + int NetworkAgent::get_user_presets(std::map>* user_presets) { int ret = 0; @@ -1070,6 +1202,16 @@ int NetworkAgent::get_user_print_info(unsigned int* http_code, std::string* http return ret; } +int NetworkAgent::get_user_tasks(TaskQueryParams params, std::string* http_body) +{ + int ret = 0; + if (network_agent && get_user_tasks_ptr) { + ret = get_user_tasks_ptr(network_agent, params, http_body); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, http_body=%3%") % network_agent % ret % (*http_body); + } + return ret; +} + int NetworkAgent::get_printer_firmware(std::string dev_id, unsigned* http_code, std::string* http_body) { int ret = 0; @@ -1180,6 +1322,27 @@ int NetworkAgent::get_design_staffpick(int offset, int limit, std::function callback) +{ + int ret = 0; + if (network_agent && get_mw_user_preference_ptr) { + ret = get_mw_user_preference_ptr(network_agent,callback); + if (ret) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + + +int NetworkAgent::get_mw_user_4ulist(int seed, int limit, std::function callback) +{ + int ret = 0; + if (network_agent && get_mw_user_4ulist_ptr) { + ret = get_mw_user_4ulist_ptr(network_agent,seed, limit, callback); + if (ret) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string *out) { int ret = 0; @@ -1269,9 +1432,18 @@ int NetworkAgent::track_enable(bool enable) return ret; } +int NetworkAgent::track_remove_files() +{ + int ret = 0; + if (network_agent && track_remove_files_ptr) { + ret = track_remove_files_ptr(network_agent); + if (ret) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("error network_agnet=%1%, ret = %2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::track_event(std::string evt_key, std::string content) { - // Orca: disable track return 0; if (!this->enable_track) return 0; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 60998c7737..59663fcb0b 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -24,6 +24,7 @@ typedef int (*func_set_on_http_error_fn)(void *agent, OnHttpErrorFn fn); typedef int (*func_set_get_country_code_fn)(void *agent, GetCountryCodeFn fn); typedef int (*func_set_on_subscribe_failure_fn)(void *agent, GetSubscribeFailureFn fn); typedef int (*func_set_on_message_fn)(void *agent, OnMessageFn fn); +typedef int (*func_set_on_user_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_on_local_connect_fn)(void *agent, OnLocalConnectedFn fn); typedef int (*func_set_on_local_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_queue_on_main_fn)(void *agent, QueueOnMainFn fn); @@ -32,6 +33,11 @@ typedef bool (*func_is_server_connected)(void *agent); typedef int (*func_refresh_connection)(void *agent); typedef int (*func_start_subscribe)(void *agent, std::string module); typedef int (*func_stop_subscribe)(void *agent, std::string module); +typedef int (*func_add_subscribe)(void *agent, std::vector dev_list); +typedef int (*func_del_subscribe)(void *agent, std::vector dev_list); +typedef void (*func_enable_multi_machine)(void *agent, bool enable); +typedef int (*func_start_device_subscribe)(void* agent); +typedef int (*func_stop_device_subscribe)(void* agent); typedef int (*func_send_message)(void *agent, std::string dev_id, std::string json_str, int qos); typedef int (*func_connect_printer)(void *agent, std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl); typedef int (*func_disconnect_printer)(void *agent); @@ -47,6 +53,8 @@ typedef std::string (*func_get_user_nickanme)(void *agent); typedef std::string (*func_build_login_cmd)(void *agent); typedef std::string (*func_build_logout_cmd)(void *agent); typedef std::string (*func_build_login_info)(void *agent); +typedef int (*func_get_model_id_from_desgin_id)(void *agent, std::string& desgin_id, std::string& model_id); +typedef int (*func_ping_bind)(void *agent, std::string ping_code); typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); typedef int (*func_unbind)(void *agent, std::string dev_id); typedef std::string (*func_get_bambulab_host)(void *agent); @@ -56,6 +64,7 @@ typedef int (*func_start_print)(void *agent, PrintParams params, OnUpdateStatusF typedef int (*func_start_local_print_with_record)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_send_gcode_to_sdcard)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); typedef int (*func_start_local_print)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); +typedef int (*func_start_sdcard_print)(void *agent, PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); typedef int (*func_get_user_presets)(void *agent, std::map>* user_presets); typedef std::string (*func_request_setting_id)(void *agent, std::string name, std::map* values_map, unsigned int* http_code); typedef int (*func_put_setting)(void *agent, std::string setting_id, std::string name, std::map* values_map, unsigned int* http_code); @@ -67,6 +76,7 @@ typedef int (*func_set_extra_http_header)(void *agent, std::map callback); +typedef int (*func_get_mw_user_4ulist)(void *agent, int seed, int limit, std::function callback); //the NetworkAgent class class NetworkAgent @@ -127,6 +140,7 @@ public: int set_get_country_code_fn(GetCountryCodeFn fn); int set_on_subscribe_failure_fn(GetSubscribeFailureFn fn); int set_on_message_fn(OnMessageFn fn); + int set_on_user_message_fn(OnMessageFn fn); int set_on_local_connect_fn(OnLocalConnectedFn fn); int set_on_local_message_fn(OnMessageFn fn); int set_queue_on_main_fn(QueueOnMainFn fn); @@ -135,6 +149,11 @@ public: int refresh_connection(); int start_subscribe(std::string module); int stop_subscribe(std::string module); + int add_subscribe(std::vector dev_list); + int del_subscribe(std::vector dev_list); + void enable_multi_machine(bool enable); + int start_device_subscribe(); + int stop_device_subscribe(); int send_message(std::string dev_id, std::string json_str, int qos); int connect_printer(std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl); int disconnect_printer(); @@ -150,7 +169,9 @@ public: std::string build_login_cmd(); std::string build_logout_cmd(); std::string build_login_info(); - int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); + int get_model_id_from_desgin_id(std::string& desgin_id, std::string& model_id); + int ping_bind(std::string ping_code); + int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); int unbind(std::string dev_id); std::string get_bambulab_host(); std::string get_user_selected_machine(); @@ -159,6 +180,7 @@ public: int start_local_print_with_record(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); int start_send_gcode_to_sdcard(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn); int start_local_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); + int start_sdcard_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); int get_user_presets(std::map>* user_presets); std::string request_setting_id(std::string name, std::map* values_map, unsigned int* http_code); int put_setting(std::string setting_id, std::string name, std::map* values_map, unsigned int* http_code); @@ -170,6 +192,7 @@ public: int get_my_message(int type, int after, int limit, unsigned int* http_code, std::string* http_body); int check_user_task_report(int* task_id, bool* printable); int get_user_print_info(unsigned int* http_code, std::string* http_body); + int get_user_tasks(TaskQueryParams params, std::string* http_body); int get_printer_firmware(std::string dev_id, unsigned* http_code, std::string* http_body); int get_task_plate_index(std::string task_id, int* plate_index); int get_user_info(int* identifier); @@ -188,6 +211,7 @@ public: int get_model_mall_detail_url(std::string* url, std::string id); int get_my_profile(std::string token, unsigned int* http_code, std::string* http_body); int track_enable(bool enable); + int track_remove_files(); int track_event(std::string evt_key, std::string content); int track_header(std::string header); int track_update_property(std::string name, std::string value, std::string type = "string"); @@ -197,6 +221,10 @@ public: int put_rating_picture_oss(std::string &config, std::string &pic_oss_path, std::string model_id, int profile_id, unsigned int &http_code, std::string &http_error); int get_model_mall_rating_result(int job_id, std::string &rating_result, unsigned int &http_code, std::string &http_error); bool get_track_enable() { return enable_track; } + + int get_mw_user_preference(std::function callback); + int get_mw_user_4ulist(int seed, int limit, std::function callback); + private: bool enable_track = false; void* network_agent { nullptr }; @@ -218,6 +246,7 @@ private: static func_set_get_country_code_fn set_get_country_code_fn_ptr; static func_set_on_subscribe_failure_fn set_on_subscribe_failure_fn_ptr; static func_set_on_message_fn set_on_message_fn_ptr; + static func_set_on_user_message_fn set_on_user_message_fn_ptr; static func_set_on_local_connect_fn set_on_local_connect_fn_ptr; static func_set_on_local_message_fn set_on_local_message_fn_ptr; static func_set_queue_on_main_fn set_queue_on_main_fn_ptr; @@ -226,6 +255,11 @@ private: static func_refresh_connection refresh_connection_ptr; static func_start_subscribe start_subscribe_ptr; static func_stop_subscribe stop_subscribe_ptr; + static func_add_subscribe add_subscribe_ptr; + static func_del_subscribe del_subscribe_ptr; + static func_enable_multi_machine enable_multi_machine_ptr; + static func_start_device_subscribe start_device_subscribe_ptr; + static func_stop_device_subscribe stop_device_subscribe_ptr; static func_send_message send_message_ptr; static func_connect_printer connect_printer_ptr; static func_disconnect_printer disconnect_printer_ptr; @@ -241,6 +275,8 @@ private: static func_build_login_cmd build_login_cmd_ptr; static func_build_logout_cmd build_logout_cmd_ptr; static func_build_login_info build_login_info_ptr; + static func_get_model_id_from_desgin_id get_model_id_from_desgin_id_ptr; + static func_ping_bind ping_bind_ptr; static func_bind bind_ptr; static func_unbind unbind_ptr; static func_get_bambulab_host get_bambulab_host_ptr; @@ -250,6 +286,7 @@ private: static func_start_local_print_with_record start_local_print_with_record_ptr; static func_start_send_gcode_to_sdcard start_send_gcode_to_sdcard_ptr; static func_start_local_print start_local_print_ptr; + static func_start_sdcard_print start_sdcard_print_ptr; static func_get_user_presets get_user_presets_ptr; static func_request_setting_id request_setting_id_ptr; static func_put_setting put_setting_ptr; @@ -261,6 +298,7 @@ private: static func_get_my_message get_my_message_ptr; static func_check_user_task_report check_user_task_report_ptr; static func_get_user_print_info get_user_print_info_ptr; + static func_get_user_tasks get_user_tasks_ptr; static func_get_printer_firmware get_printer_firmware_ptr; static func_get_task_plate_index get_task_plate_index_ptr; static func_get_user_info get_user_info_ptr; @@ -279,6 +317,7 @@ private: static func_get_model_mall_detail_url get_model_mall_detail_url_ptr; static func_get_my_profile get_my_profile_ptr; static func_track_enable track_enable_ptr; + static func_track_remove_files track_remove_files_ptr; static func_track_event track_event_ptr; static func_track_header track_header_ptr; static func_track_update_property track_update_property_ptr; @@ -287,6 +326,9 @@ private: static func_get_oss_config get_oss_config_ptr; static func_put_rating_picture_oss put_rating_picture_oss_ptr; static func_get_model_mall_rating_result get_model_mall_rating_result_ptr; + + static func_get_mw_user_preference get_mw_user_preference_ptr; + static func_get_mw_user_4ulist get_mw_user_4ulist_ptr; }; } diff --git a/src/slic3r/Utils/OctoPrint.cpp b/src/slic3r/Utils/OctoPrint.cpp index edf903e55d..707bcb01c3 100644 --- a/src/slic3r/Utils/OctoPrint.cpp +++ b/src/slic3r/Utils/OctoPrint.cpp @@ -50,8 +50,15 @@ std::string get_host_from_url(const std::string& url_in) char* host; rc = curl_url_get(hurl, CURLUPART_HOST, &host, 0); if (rc == CURLUE_OK) { - out = host; - curl_free(host); + char* port; + rc = curl_url_get(hurl, CURLUPART_PORT, &port, 0); + if (rc == CURLUE_OK && port != nullptr) { + out = std::string(host) + ":" + port; + curl_free(port); + } else { + out = host; + curl_free(host); + } } else BOOST_LOG_TRIVIAL(error) << "OctoPrint get_host_from_url: failed to get host form URL " << url; diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 2a7ba5231d..cdd91eb22e 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -204,6 +204,7 @@ struct PresetUpdater::priv std::string version; std::string description; std::string url; + bool force{false}; std::string cache_root; std::vector sub_caches; }; @@ -222,7 +223,7 @@ struct PresetUpdater::priv void sync_tooltip(std::string http_url, std::string language); void sync_plugins(std::string http_url, std::string plugin_version); void sync_printer_config(std::string http_url); - bool get_cached_plugins_version(std::string &cached_version); + bool get_cached_plugins_version(std::string &cached_version, bool& force); //BBS: refine preset update logic bool install_bundles_rsrc(std::vector bundles, bool snapshot) const; @@ -516,6 +517,7 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::mapsecond.version; j["description"] = resource_update->second.description; + j["force"] = resource_update->second.force; boost::nowide::ofstream c; c.open(changelog_file, std::ios::out | std::ios::trunc); @@ -770,8 +776,8 @@ void PresetUpdater::priv::sync_tooltip(std::string http_url, std::string languag } catch (...) {} std::map resources { - {"slicer/tooltip/common", { common_version, "", "", (cache_root / "common").string() }}, - {"slicer/tooltip/" + language, { language_version, "", "", (cache_root / language).string() }} + {"slicer/tooltip/common", { common_version, "", "", false, (cache_root / "common").string() }}, + {"slicer/tooltip/" + language, { language_version, "", "", false, (cache_root / language).string() }} }; sync_resources(http_url, resources); for (auto &r : resources) { @@ -787,36 +793,46 @@ void PresetUpdater::priv::sync_tooltip(std::string http_url, std::string languag } // return true means there are plugins files -bool PresetUpdater::priv::get_cached_plugins_version(std::string& cached_version) +bool PresetUpdater::priv::get_cached_plugins_version(std::string& cached_version, bool &force) { std::string data_dir_str = data_dir(); boost::filesystem::path data_dir_path(data_dir_str); auto cache_folder = data_dir_path / "ota"; - std::string network_library, player_library; + std::string network_library, player_library, live555_library; bool has_plugins = false; #if defined(_MSC_VER) || defined(_WIN32) network_library = cache_folder.string() + "/bambu_networking.dll"; - player_library = cache_folder.string() + "/BambuSource.dll"; + player_library = cache_folder.string() + "/BambuSource.dll"; + live555_library = cache_folder.string() + "/live555.dll"; #elif defined(__WXMAC__) network_library = cache_folder.string() + "/libbambu_networking.dylib"; - player_library = cache_folder.string() + "/libBambuSource.dylib"; + player_library = cache_folder.string() + "/libBambuSource.dylib"; + live555_library = cache_folder.string() + "/liblive555.dylib"; #else network_library = cache_folder.string() + "/libbambu_networking.so"; - player_library = cache_folder.string() + "/libBambuSource.so"; + player_library = cache_folder.string() + "/libBambuSource.so"; + live555_library = cache_folder.string() + "/liblive555.so"; #endif + std::string changelog_file = cache_folder.string() + "/network_plugins.json"; if (boost::filesystem::exists(network_library) - && boost::filesystem::exists(player_library)) + && boost::filesystem::exists(player_library) + && boost::filesystem::exists(live555_library) + && boost::filesystem::exists(changelog_file)) { - std::string changelog_file = cache_folder.string() + "/network_plugins.json"; has_plugins = true; try { boost::nowide::ifstream ifs(changelog_file); json j; ifs >> j; - cached_version = j["version"]; + if (j.contains("version")) + cached_version = j["version"]; + if (j.contains("force")) + force = j["force"]; + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": cached_version = "< resources { - {"slicer/plugins/cloud", { using_version, "", "", cache_path.string(), {"plugins"}}} + {"slicer/plugins/cloud", { using_version, "", "", false, cache_path.string(), {"plugins"}}} }; sync_resources(http_url, resources, true, plugin_version, "network_plugins.json"); } @@ -923,10 +954,18 @@ void PresetUpdater::priv::sync_plugins(std::string http_url, std::string plugin_ BOOST_LOG_TRIVIAL(warning) << format("[Orca Updater] sync_plugins: %1%", e.what()); } - bool result = get_cached_plugins_version(cached_version); + bool result = get_cached_plugins_version(cached_version, force_upgrade); if (result) { - BOOST_LOG_TRIVIAL(info) << format("[Orca Updater] found new plugins: %1%, prompt to update", cached_version); - GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::BBLPluginUpdateAvailable); + BOOST_LOG_TRIVIAL(info) << format("[Orca Updater] found new plugins: %1%, prompt to update, force_upgrade %2%", cached_version, force_upgrade); + if (force_upgrade) { + auto app_config = GUI::wxGetApp().app_config; + if (!app_config) + GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::BBLPluginUpdateAvailable); + else + app_config->set("update_network_plugin", "true"); + } + else + GUI::wxGetApp().plater()->get_notification_manager()->push_notification(GUI::NotificationType::BBLPluginUpdateAvailable); } } @@ -978,7 +1017,7 @@ void PresetUpdater::priv::sync_printer_config(std::string http_url) } try { - std::map resources{{"slicer/printer/bbl", {using_version, "", "", cache_folder.string()}}}; + std::map resources{{"slicer/printer/bbl", {using_version, "", "", false, cache_folder.string()}}}; sync_resources(http_url, resources, false, cached_version, "printer.json"); } catch (std::exception &e) { BOOST_LOG_TRIVIAL(warning) << format("[Orca Updater] sync_printer_config: %1%", e.what()); @@ -1197,10 +1236,10 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version version.config_version = cache_ver; version.comment = description; - updates.updates.emplace_back(std::move(file_path), std::move(path_in_vendor.string()), std::move(version), vendor_name, - changelog, "", force_update, false); - updates.updates.emplace_back(cache_profile_path / vendor_name, vendor_path / vendor_name, Version(), vendor_name, "", - "", force_update, true); + updates.updates.emplace_back(std::move(file_path), std::move(path_in_vendor.string()), std::move(version), vendor_name, changelog, "", force_update, false); + + //BBS: add directory support + updates.updates.emplace_back(cache_path / vendor_name, vendor_path / vendor_name, Version(), vendor_name, "", "", force_update, true); } } } diff --git a/src/slic3r/Utils/PrintHost.cpp b/src/slic3r/Utils/PrintHost.cpp index cf77d4ff5c..f88dceb14a 100644 --- a/src/slic3r/Utils/PrintHost.cpp +++ b/src/slic3r/Utils/PrintHost.cpp @@ -19,7 +19,9 @@ #include "AstroBox.hpp" #include "Repetier.hpp" #include "MKS.hpp" +#include "ESP3D.hpp" #include "../GUI/PrintHostDialogs.hpp" +#include "../GUI/MainFrame.hpp" #include "Obico.hpp" #include "Flashforge.hpp" #include "SimplyPrint.hpp" @@ -57,6 +59,7 @@ PrintHost* PrintHost::get_print_host(DynamicPrintConfig *config) case htPrusaLink: return new PrusaLink(config); case htPrusaConnect: return new PrusaConnect(config); case htMKS: return new MKS(config); + case htESP3D: return new ESP3D(config); case htObico: return new Obico(config); case htFlashforge: return new Flashforge(config); case htSimplyPrint: return new SimplyPrint(config); @@ -312,6 +315,10 @@ void PrintHostJobQueue::priv::perform_job(PrintHostJob the_job) if (success) { emit_progress(100); + if (the_job.switch_to_device_tab) { + const auto mainframe = GUI::wxGetApp().mainframe; + mainframe->request_select_tab(MainFrame::TabPosition::tpMonitor); + } } } diff --git a/src/slic3r/Utils/PrintHost.hpp b/src/slic3r/Utils/PrintHost.hpp index 50699cb4d8..83bd730e42 100644 --- a/src/slic3r/Utils/PrintHost.hpp +++ b/src/slic3r/Utils/PrintHost.hpp @@ -29,6 +29,7 @@ ENABLE_ENUM_BITMASK_OPERATORS(PrintHostPostUploadAction); struct PrintHostUpload { + bool use_3mf; boost::filesystem::path source_path; boost::filesystem::path upload_path; @@ -85,6 +86,7 @@ struct PrintHostJob { PrintHostUpload upload_data; std::unique_ptr printhost; + bool switch_to_device_tab{false}; bool cancelled = false; PrintHostJob() {} @@ -92,6 +94,7 @@ struct PrintHostJob PrintHostJob(PrintHostJob &&other) : upload_data(std::move(other.upload_data)) , printhost(std::move(other.printhost)) + , switch_to_device_tab(other.switch_to_device_tab) , cancelled(other.cancelled) {} @@ -103,7 +106,8 @@ struct PrintHostJob PrintHostJob& operator=(PrintHostJob &&other) { upload_data = std::move(other.upload_data); - printhost = std::move(other.printhost); + printhost = std::move(other.printhost); + switch_to_device_tab = other.switch_to_device_tab; cancelled = other.cancelled; return *this; } diff --git a/src/slic3r/Utils/ProfileDescription.hpp b/src/slic3r/Utils/ProfileDescription.hpp new file mode 100644 index 0000000000..db14c27c58 --- /dev/null +++ b/src/slic3r/Utils/ProfileDescription.hpp @@ -0,0 +1,36 @@ +#include +#include +#ifndef _L +#define _L(s) Slic3r::I18N::translate(s) +#endif + +namespace ProfileDescrption { + const std::string PROFILE_DESCRIPTION_0 = _L("It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases."); + const std::string PROFILE_DESCRIPTION_1 = _L("Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time."); + const std::string PROFILE_DESCRIPTION_2 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time."); + const std::string PROFILE_DESCRIPTION_3 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_4 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_5 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_6 = _L("Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_7 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_8 = _L("It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases."); + const std::string PROFILE_DESCRIPTION_9 = _L("Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time."); + const std::string PROFILE_DESCRIPTION_10 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time."); + const std::string PROFILE_DESCRIPTION_11 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_12 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_13 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_14 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_15 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_16 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time."); + const std::string PROFILE_DESCRIPTION_17 = _L("It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time."); + const std::string PROFILE_DESCRIPTION_18 = _L("Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time."); + const std::string PROFILE_DESCRIPTION_19 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_20 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_21 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_22 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_23 = _L("It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time."); + const std::string PROFILE_DESCRIPTION_24 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_25 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_26 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_27 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases."); +} \ No newline at end of file diff --git a/src/slic3r/Utils/RaycastManager.cpp b/src/slic3r/Utils/RaycastManager.cpp index a113624c8b..e3200a1317 100644 --- a/src/slic3r/Utils/RaycastManager.cpp +++ b/src/slic3r/Utils/RaycastManager.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Enrico Turri @enricoturri1966, Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "RaycastManager.hpp" #include @@ -151,7 +147,7 @@ std::optional RaycastManager::first_hit(const Vec3d& point, // Calculate normal from transformed triangle // NOTE: Anisotropic transformation of normal is not perpendiculat to triangle - const Vec3i tri = hit_mesh->indices(hit_face); + const Vec3i32 tri = hit_mesh->indices(hit_face); std::array pts; auto tr = hit_tramsformation->linear(); for (int i = 0; i < 3; ++i) diff --git a/src/slic3r/Utils/RaycastManager.hpp b/src/slic3r/Utils/RaycastManager.hpp index 16563e61a8..4e143ba5dd 100644 --- a/src/slic3r/Utils/RaycastManager.hpp +++ b/src/slic3r/Utils/RaycastManager.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_RaycastManager_hpp_ #define slic3r_RaycastManager_hpp_ diff --git a/src/slic3r/Utils/SimplyPrint.cpp b/src/slic3r/Utils/SimplyPrint.cpp index 9c5603c7d7..d3f9ddc083 100644 --- a/src/slic3r/Utils/SimplyPrint.cpp +++ b/src/slic3r/Utils/SimplyPrint.cpp @@ -2,22 +2,43 @@ #include #include +#include +#include #include "nlohmann/json.hpp" #include "libslic3r/Utils.hpp" #include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/format.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/MainFrame.hpp" namespace Slic3r { +// to make testing easier +//#define SIMPLYPRINT_TEST + +#ifdef SIMPLYPRINT_TEST +#define URL_BASE_HOME "https://test.simplyprint.io" +#define URL_BASE_API "https://testapi.simplyprint.io" +#else +#define URL_BASE_HOME "https://simplyprint.io" +#define URL_BASE_API "https://api.simplyprint.io" +#endif + static constexpr boost::asio::ip::port_type CALLBACK_PORT = 21328; static const std::string CALLBACK_URL = "http://localhost:21328/callback"; static const std::string RESPONSE_TYPE = "code"; static const std::string CLIENT_ID = "simplyprintorcaslicer"; static const std::string CLIENT_SCOPES = "user.read files.temp_upload"; static const std::string OAUTH_CREDENTIAL_PATH = "simplyprint_oauth.json"; -static const std::string TOKEN_URL = "https://simplyprint.io/api/oauth2/Token"; +static const std::string TOKEN_URL = URL_BASE_API"/oauth2/Token"; +#ifdef SIMPLYPRINT_TEST +static constexpr uint64_t MAX_SINGLE_UPLOAD_FILE_SIZE = 100000ull; // Max file size that can be uploaded in a single http request +#else +static constexpr uint64_t MAX_SINGLE_UPLOAD_FILE_SIZE = 100000000ull; // Max file size that can be uploaded in a single http request +#endif +static const std::string CHUNCK_RECEIVE_URL = URL_BASE_API"/0/files/ChunkReceive"; static std::string generate_verification_code(int code_length = 32) { @@ -55,6 +76,9 @@ static std::string url_encode(const std::vectoruse_bbl_device_tab()) { + // When using bbl device tab, we always need to open external browser + return true; + } + + // Otherwise, if user choose to switch to device tab, then don't bother opening external browser + return !app.app_config->get_bool("open_device_tab_post_upload"); +} + SimplyPrint::SimplyPrint(DynamicPrintConfig* config) { cred_file = (boost::filesystem::path(data_dir()) / OAUTH_CREDENTIAL_PATH).make_preferred().string(); @@ -85,7 +122,7 @@ GUI::OAuthParams SimplyPrint::get_oauth_params() const {"code_challenge", code_challenge}, {"code_challenge_method", "S256"}, }; - const auto login_url = (boost::format("https://simplyprint.io/panel/oauth2/authorize?%s") % url_encode(query_parameters)).str(); + const auto login_url = (boost::format(URL_BASE_HOME"/panel/oauth2/authorize?%s") % url_encode(query_parameters)).str(); return GUI::OAuthParams{ login_url, @@ -94,8 +131,8 @@ GUI::OAuthParams SimplyPrint::get_oauth_params() const CALLBACK_URL, CLIENT_SCOPES, RESPONSE_TYPE, - "https://simplyprint.io/login-success", - "https://simplyprint.io/login-success", + URL_BASE_HOME"/login-success", + URL_BASE_HOME"/login-success", TOKEN_URL, verification_code, state, @@ -224,7 +261,7 @@ bool SimplyPrint::test(wxString& curl_msg) const return do_api_call( [](bool is_retry) { - auto http = Http::get("https://api.simplyprint.io/oauth2/TokenInfo"); + auto http = Http::get(URL_BASE_API"/oauth2/TokenInfo"); http.header("Accept", "application/json"); return http; }, @@ -239,30 +276,31 @@ bool SimplyPrint::test(wxString& curl_msg) const }); } -bool SimplyPrint::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const +bool SimplyPrint::do_temp_upload(const boost::filesystem::path& file_path, + const std::string& chunk_id, + const std::string& filename, + ProgressFn prorgess_fn, + ErrorFn error_fn) const { - if (cred.find("access_token") == cred.end()) { - error_fn(_L("SimplyPrint account not linked. Go to Connect options to set it up.")); + if (file_path.empty() == chunk_id.empty()) { + BOOST_LOG_TRIVIAL(error) << "SimplyPrint: Invalid arguments: both file_path and chunk_id are set or not provided"; + error_fn(_L("Internel error")); return false; } - // If file is over 100 MB, fail - if (boost::filesystem::file_size(upload_data.source_path) > 104857600ull) { - error_fn(_L("File size exceeds the 100MB upload limit. Please upload your file through the panel.")); - return false; - } - - const auto filename = upload_data.upload_path.filename().string(); - return do_api_call( - [&upload_data, &prorgess_fn, &filename](bool is_retry) { - auto http = Http::post("https://simplyprint.io/api/files/TempUpload"); - http.form_add_file("file", upload_data.source_path.string(), filename) - .on_progress([&prorgess_fn](Http::Progress progress, bool& cancel) { prorgess_fn(std::move(progress), cancel); }); + [&file_path, &chunk_id, &prorgess_fn, &filename](bool is_retry) { + auto http = Http::post(URL_BASE_HOME"/api/files/TempUpload"); + if (!file_path.empty()) { + http.form_add_file("file", file_path, filename); + } else { + http.form_add("chunkId", chunk_id); + } + http.on_progress([&prorgess_fn](Http::Progress progress, bool& cancel) { prorgess_fn(std::move(progress), cancel); }); return http; }, - [&error_fn, &filename](std::string body, unsigned status) { + [&error_fn, &filename, this](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File uploaded: HTTP %1%: %2%") % status % body; // Get file UUID @@ -281,8 +319,15 @@ bool SimplyPrint::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, Er const std::string uuid = j["uuid"]; // Launch external browser for file importing after uploading - const auto url = "https://simplyprint.io/panel?" + url_encode({{"import", "tmp:" + uuid}, {"filename", filename}}); - wxLaunchDefaultBrowser(url); + const auto url = URL_BASE_HOME"/panel?" + url_encode({{"import", "tmp:" + uuid}, {"filename", filename}}); + + if (should_open_in_external_browser()) { + wxLaunchDefaultBrowser(url); + } else { + const auto mainframe = GUI::wxGetApp().mainframe; + mainframe->request_select_tab(MainFrame::TabPosition::tpMonitor); + mainframe->load_printer_url(url); + } return true; }, @@ -293,4 +338,155 @@ bool SimplyPrint::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, Er }); } +bool SimplyPrint::do_chunk_upload(const boost::filesystem::path& file_path, const std::string& filename, ProgressFn prorgess_fn, ErrorFn error_fn) const +{ + const auto file_size = boost::filesystem::file_size(file_path); +#ifdef SIMPLYPRINT_TEST + constexpr auto buffer_size = MAX_SINGLE_UPLOAD_FILE_SIZE; +#else + constexpr auto buffer_size = MAX_SINGLE_UPLOAD_FILE_SIZE - 1000000; +#endif + + const auto chunk_amount = (size_t)ceil((double) file_size / buffer_size); + + std::string chunk_id; + std::string delete_token; + + // Tell SimplyPrint that the upload has failed and the chunks should be deleted + // Note: any error happens here won't be notified to the user + const auto clean_up = [this, &chunk_id, &delete_token]() { + if (chunk_id.empty()) { + // The initial upload failed, do nothing + BOOST_LOG_TRIVIAL(warning) << "SimplyPrint: Initial chunk upload failed, skip delete"; + return; + } + + assert(!delete_token.empty()); + + BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: Deleting file chunk %s...") % chunk_id; + const std::vector> query_parameters{ + {"id", chunk_id}, + {"temp", "true"}, + {"delete", delete_token}, + }; + const auto url = (boost::format("%s?%s") % CHUNCK_RECEIVE_URL % url_encode(query_parameters)).str(); + do_api_call( + [&url](bool is_retry) { + auto http = Http::get(url); + return http; + }, + [&chunk_id](std::string body, unsigned status) { + BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File chunk %1% deleted: HTTP %2%: %3%") % chunk_id % status % body; + return true; + }, + [&chunk_id](std::string body, std::string error, unsigned status) { + BOOST_LOG_TRIVIAL(warning) << boost::format("SimplyPrint: Error deleting file chunk %1%: %2%, HTTP %3%, body: `%4%`") % + chunk_id % error % status % body; + return false; + }); + }; + + // Do chunk upload + for (size_t i = 0; i < chunk_amount; i++) { + std::string url; + { + std::vector> query_parameters{ + {"i", std::to_string(i)}, + {"temp", "true"}, + }; + if (i == 0) { + query_parameters.emplace_back("filename", filename); + query_parameters.emplace_back("chunks", std::to_string(chunk_amount)); + query_parameters.emplace_back("totalsize", std::to_string(file_size)); + } else { + query_parameters.emplace_back("id", chunk_id); + } + url = (boost::format("%s?%s") % CHUNCK_RECEIVE_URL % url_encode(query_parameters)).str(); + } + + // Calculate the offset and length of current chunk + const boost::filesystem::ifstream::off_type offset = i * buffer_size; + const size_t length = i == (chunk_amount - 1) ? file_size - offset : buffer_size; + + const bool succ = do_api_call( + [&url, &file_path, &filename, i, chunk_amount, file_size, offset, length, prorgess_fn](bool is_retry) { + BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: Start uploading file chunk [%1%/%2%]...") % (i + 1) % chunk_amount; + auto http = Http::post(url); + http.form_add_file("file", file_path, filename, offset, length); + + http.on_progress([&prorgess_fn, file_size, offset](Http::Progress progress, bool& cancel) { + progress.ultotal = file_size; + progress.ulnow += offset; + + prorgess_fn(std::move(progress), cancel); + }); + + return http; + }, + [&error_fn, i, chunk_amount, this, &chunk_id, &delete_token](std::string body, unsigned status) { + BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File chunk [%1%/%2%] uploaded: HTTP %3%: %4%") % (i + 1) % chunk_amount % status % body; + if (i == 0) { + // First chunk, parse chunk id + const auto j = nlohmann::json::parse(body, nullptr, false, true); + if (j.is_discarded()) { + BOOST_LOG_TRIVIAL(error) << "SimplyPrint: Invalid or no JSON data on ChunkReceive: " << body; + error_fn(_L("Unknown error")); + return false; + } + + if (j.find("id") == j.end() || j.find("delete_token") == j.end()) { + BOOST_LOG_TRIVIAL(error) << "SimplyPrint: Invalid or no JSON data on ChunkReceive: " << body; + error_fn(_L("Unknown error")); + return false; + } + + const unsigned long id = j["id"]; + + chunk_id = std::to_string(id); + delete_token = j["delete_token"]; + } + return true; + }, + [this, &error_fn, i, chunk_amount](std::string body, std::string error, unsigned status) { + BOOST_LOG_TRIVIAL(error) << boost::format("SimplyPrint: Error uploading file chunk [%1%/%2%]: %3%, HTTP %4%, body: `%5%`") % + (i + 1) % chunk_amount % error % status % body; + error_fn(format_error(body, error, status)); + return false; + }); + + if (!succ) { + clean_up(); + return false; + } + } + + assert(!chunk_id.empty()); + + // Finally, complete the upload using the chunk id + const bool succ = do_temp_upload({}, chunk_id, filename, prorgess_fn, error_fn); + if (!succ) { + clean_up(); + } + + return succ; +} + + +bool SimplyPrint::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const +{ + if (cred.find("access_token") == cred.end()) { + error_fn(_L("SimplyPrint account not linked. Go to Connect options to set it up.")); + return false; + } + const auto filename = upload_data.upload_path.filename().string(); + + if (boost::filesystem::file_size(upload_data.source_path) > MAX_SINGLE_UPLOAD_FILE_SIZE) { + // If file is over 100 MB, do chunk upload + return do_chunk_upload(upload_data.source_path, filename, prorgess_fn, error_fn); + } else { + // Normal upload + return do_temp_upload(upload_data.source_path, {}, filename, prorgess_fn, error_fn); + } +} + } // namespace Slic3r diff --git a/src/slic3r/Utils/SimplyPrint.hpp b/src/slic3r/Utils/SimplyPrint.hpp index b2c06a04e6..3804324724 100644 --- a/src/slic3r/Utils/SimplyPrint.hpp +++ b/src/slic3r/Utils/SimplyPrint.hpp @@ -15,10 +15,37 @@ class SimplyPrint : public PrintHost void load_oauth_credential(); + /** + * \brief Call the given SimplyPrint API, and if the token expired do a token refresh then retry + * \param build_request the http request builder + * \param on_complete + * \param on_error + * \return whether the API call succeeded + */ bool do_api_call(std::function build_request, std::function on_complete, std::function on_error) const; + /** + * \brief Upload a temp file and open SimplyPrint panel for file importing + * \param file_path for file smaller than 100MB, this is the file path, otherwise must left empty + * \param chunk_id for file greater than 100MB, this is the chunk id returned by the ChunkReceive API, otherwise must left empty + * \param filename the target file name + * \param prorgess_fn + * \param error_fn + * \return whether upload succeeded + */ + bool do_temp_upload(const boost::filesystem::path& file_path, + const std::string& chunk_id, + const std::string& filename, + ProgressFn prorgess_fn, + ErrorFn error_fn) const; + + bool do_chunk_upload(const boost::filesystem::path& file_path, + const std::string& filename, + ProgressFn prorgess_fn, + ErrorFn error_fn) const; + public: SimplyPrint(DynamicPrintConfig* config); ~SimplyPrint() override = default; @@ -42,4 +69,4 @@ public: }; } // namespace Slic3r -#endif \ No newline at end of file +#endif diff --git a/src/slic3r/Utils/WxFontUtils.cpp b/src/slic3r/Utils/WxFontUtils.cpp index 9dcf163fe6..deb95de942 100644 --- a/src/slic3r/Utils/WxFontUtils.cpp +++ b/src/slic3r/Utils/WxFontUtils.cpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01, Vojtěch Bubník @bubnikv -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #include "WxFontUtils.hpp" #include #include diff --git a/src/slic3r/Utils/WxFontUtils.hpp b/src/slic3r/Utils/WxFontUtils.hpp index 1ccd320b96..3845a1085c 100644 --- a/src/slic3r/Utils/WxFontUtils.hpp +++ b/src/slic3r/Utils/WxFontUtils.hpp @@ -1,7 +1,3 @@ -///|/ Copyright (c) Prusa Research 2021 - 2022 Filip Sykala @Jony01 -///|/ -///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher -///|/ #ifndef slic3r_WxFontUtils_hpp_ #define slic3r_WxFontUtils_hpp_ diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index b6aa30298f..c4d992bcf1 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -95,7 +95,7 @@ namespace BBL { #define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" -#define BAMBU_NETWORK_AGENT_VERSION "01.08.04.01" +#define BAMBU_NETWORK_AGENT_VERSION "01.09.02.05" //iot preset type strings #define IOT_PRINTER_TYPE_STRING "printer" @@ -147,6 +147,7 @@ enum SendingPrintJobStage { PrintingStageWaitPrinter = 5, PrintingStageFinished = 6, PrintingStageERROR = 7, + PrintingStageLimit = 8, }; enum PublishingStage { @@ -193,6 +194,7 @@ struct PrintParams { std::string origin_model_id; std::string print_type; std::string dst_file; + std::string dev_name; /* access options */ std::string dev_ip; @@ -212,6 +214,14 @@ struct PrintParams { std::string extra_options; }; +struct TaskQueryParams +{ + std::string dev_id; + int status = 0; + int offset = 0; + int limit = 20; +}; + struct PublishParams { std::string project_name; std::string project_3mf_file; diff --git a/tests/fff_print/test_trianglemesh.cpp b/tests/fff_print/test_trianglemesh.cpp index 6faaf1584c..b77e8f4fb7 100644 --- a/tests/fff_print/test_trianglemesh.cpp +++ b/tests/fff_print/test_trianglemesh.cpp @@ -22,7 +22,7 @@ static inline TriangleMesh make_cube() { return make_cube(20., 20, 20); } SCENARIO( "TriangleMesh: Basic mesh statistics") { GIVEN( "A 20mm cube, built from constexpr std::array" ) { std::vector vertices { {20,20,0}, {20,0,0}, {0,0,0}, {0,20,0}, {20,20,20}, {0,20,20}, {0,0,20}, {20,0,20} }; - std::vector facets { {0,1,2}, {0,2,3}, {4,5,6}, {4,6,7}, {0,4,7}, {0,7,1}, {1,7,6}, {1,6,2}, {2,6,5}, {2,5,3}, {4,0,3}, {4,3,5} }; + std::vector facets { {0,1,2}, {0,2,3}, {4,5,6}, {4,6,7}, {0,4,7}, {0,7,1}, {1,7,6}, {1,6,2}, {2,6,5}, {2,5,3}, {4,0,3}, {4,3,5} }; TriangleMesh cube(vertices, facets); THEN( "Volume is appropriate for 20mm square cube.") { @@ -155,7 +155,7 @@ SCENARIO( "TriangleMesh: slice behavior.") { } GIVEN( "A STL with an irregular shape.") { const std::vector vertices {{0,0,0},{0,0,20},{0,5,0},{0,5,20},{50,0,0},{50,0,20},{15,5,0},{35,5,0},{15,20,0},{50,5,0},{35,20,0},{15,5,10},{50,5,20},{35,5,10},{35,20,10},{15,20,10}}; - const std::vector facets {{0,1,2},{2,1,3},{1,0,4},{5,1,4},{0,2,4},{4,2,6},{7,6,8},{4,6,7},{9,4,7},{7,8,10},{2,3,6},{11,3,12},{7,12,9},{13,12,7},{6,3,11},{11,12,13},{3,1,5},{12,3,5},{5,4,9},{12,5,9},{13,7,10},{14,13,10},{8,15,10},{10,15,14},{6,11,8},{8,11,15},{15,11,13},{14,15,13}}; + const std::vector facets {{0,1,2},{2,1,3},{1,0,4},{5,1,4},{0,2,4},{4,2,6},{7,6,8},{4,6,7},{9,4,7},{7,8,10},{2,3,6},{11,3,12},{7,12,9},{13,12,7},{6,3,11},{11,12,13},{3,1,5},{12,3,5},{5,4,9},{12,5,9},{13,7,10},{14,13,10},{8,15,10},{10,15,14},{6,11,8},{8,11,15},{15,11,13},{14,15,13}}; auto cube = make_cube(); WHEN(" a top tangent plane is sliced") { diff --git a/tests/libslic3r/test_indexed_triangle_set.cpp b/tests/libslic3r/test_indexed_triangle_set.cpp index 0bb85b7ed0..1e6e5a8cac 100644 --- a/tests/libslic3r/test_indexed_triangle_set.cpp +++ b/tests/libslic3r/test_indexed_triangle_set.cpp @@ -199,7 +199,7 @@ bool is_similar(const indexed_triangle_set &from, collect_distances(vertex); } - for (const Vec3i &t : to.indices) { + for (const Vec3i32 &t : to.indices) { Vec3f center(0,0,0); for (size_t i = 0; i < 3; ++i) { center += to.vertices[t[i]] / 3; @@ -222,8 +222,8 @@ TEST_CASE("Reduce one edge by Quadric Edge Collapse", "[its]") Vec3f(1.f, 0.f, 0.f), Vec3f(0.f, 0.f, 1.f), // vertex to be removed Vec3f(0.9f, .1f, -.1f)}; - its.indices = {Vec3i(1, 0, 3), Vec3i(2, 1, 3), Vec3i(0, 2, 3), - Vec3i(0, 1, 4), Vec3i(1, 2, 4), Vec3i(2, 0, 4)}; + its.indices = {Vec3i32(1, 0, 3), Vec3i32(2, 1, 3), Vec3i32(0, 2, 3), + Vec3i32(0, 1, 4), Vec3i32(1, 2, 4), Vec3i32(2, 0, 4)}; // edge to remove is between vertices 2 and 4 on trinagles 4 and 5 indexed_triangle_set its_ = its; // copy diff --git a/tests/libslic3r/test_marchingsquares.cpp b/tests/libslic3r/test_marchingsquares.cpp index 3553697acd..fed5cc2d4d 100644 --- a/tests/libslic3r/test_marchingsquares.cpp +++ b/tests/libslic3r/test_marchingsquares.cpp @@ -84,13 +84,13 @@ static ExPolygons circle_with_hole(double r, Point center = {0, 0}) { return {poly}; } -static const Vec2i W4x4 = {4, 4}; -static const Vec2i W2x2 = {2, 2}; +static const Vec2i32 W4x4 = {4, 4}; +static const Vec2i32 W2x2 = {2, 2}; template static void test_expolys(Rst && rst, const ExPolygons & ref, - Vec2i window, + Vec2i32 window, const std::string &name = "test") { for (const ExPolygon &expoly : ref) rst.draw(expoly); diff --git a/version.inc b/version.inc index b219ff3a15..8b40194f4d 100644 --- a/version.inc +++ b/version.inc @@ -10,11 +10,11 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "0") endif() -set(SoftFever_VERSION "2.1.0-dev") +set(SoftFever_VERSION "2.1.0") string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" SoftFever_VERSION_MATCH ${SoftFever_VERSION}) set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1}) set(ORCA_VERSION_MINOR ${CMAKE_MATCH_2}) set(ORCA_VERSION_PATCH ${CMAKE_MATCH_3}) -set(SLIC3R_VERSION "01.08.04.51") +set(SLIC3R_VERSION "01.09.03.50") diff --git a/xs/xsp/TriangleMesh.xsp b/xs/xsp/TriangleMesh.xsp index a9dbe654d3..f99499c04e 100644 --- a/xs/xsp/TriangleMesh.xsp +++ b/xs/xsp/TriangleMesh.xsp @@ -50,14 +50,14 @@ TriangleMesh::ReadFromPerl(vertices, facets) out_vertices.push_back(Slic3r::Vec3f(SvNV(*av_fetch(vertex_av, 0, 0)), SvNV(*av_fetch(vertex_av, 1, 0)), SvNV(*av_fetch(vertex_av, 2, 0)))); } } - std::vector out_indices; + std::vector out_indices; { AV* facets_av = (AV*)SvRV(facets); int number_of_facets = av_len(facets_av) + 1; out_indices.reserve(number_of_facets); for (int i = 0; i < number_of_facets; ++ i) { AV* facet_av = (AV*)SvRV(*av_fetch(facets_av, i, 0)); - out_indices.push_back(Slic3r::Vec3i(SvIV(*av_fetch(facet_av, 0, 0)), SvIV(*av_fetch(facet_av, 1, 0)), SvIV(*av_fetch(facet_av, 2, 0)))); + out_indices.push_back(Slic3r::Vec3i32(SvIV(*av_fetch(facet_av, 0, 0)), SvIV(*av_fetch(facet_av, 1, 0)), SvIV(*av_fetch(facet_av, 2, 0)))); } } *THIS = TriangleMesh(std::move(out_vertices), std::move(out_indices));